${a("weibull_reliability_curve",i)}
${Bt(n,i)}
${Kt(n,s,r,o,i)}
${Gt(t,i)}
${t?.confidence_interval_low!=null?Yt(t,e,i):u}
`}function Bt(e,i){let t,n,s;return e<.8?(t="early_failures",n="M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z",s="beta_early_failures"):e<=1.2?(t="random_failures",n="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,17H11V15H13V17M13,13H11V7H13V13Z",s="beta_random_failures"):e<=3.5?(t="wear_out",n="M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4M12,6A6,6 0 0,1 18,12H12V6Z",s="beta_wear_out"):(t="highly_predictable",n="M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z",s="beta_highly_predictable"),l`
${a(s,i)} (\u03B2=${x(e,i,2)})
`}function Kt(e,i,t,n,s){let g=Math.max(t,n,i,1)*1.3,k=50,b=[];for(let A=0;A<=k;A++){let I=A/k*g,Ht=1-Math.exp(-Math.pow(I/i,e)),jt=32+I/g*260,Rt=136-Ht*128;b.push([jt,Rt])}let D=b.map(([A,I])=>`${y(A)},${y(I)}`).join(" "),O="M32,136 "+b.map(([A,I])=>`L${y(A)},${y(I)}`).join(" ")+` L${y(b[k][0])},136 Z`,M=32+t/g*260,F=1-Math.exp(-Math.pow(t/i,e)),W=136-F*128,St=x((1-F)*100,s,0),nt=32+n/g*260,Ct=[0,.25,.5,.75,1];return l`
${Ct.map(A=>{let I=136-A*128;return z`
${x(A*100,s,0)}%
`})}
0
${Math.round(g/2)}
${Math.round(g)}
${t>0?z`
R=${St}%
`:u}
${n>0&&n!==t?z`
`:u}
${a("weibull_failure_probability",s)}
${t>0?l` ${a("current_interval_marker",s)} `:u}
${n>0&&n!==t?l` ${a("recommended_marker",s)} `:u}
`}function Gt(e,i){return l`
${a("characteristic_life",i)}
${Math.round(e.weibull_eta)} ${a("days",i)}
${e.weibull_r_squared!=null?l`
${a("weibull_r_squared",i)}
${x(e.weibull_r_squared,i,3)}
`:u}
`}function Yt(e,i,t){let n=e.confidence_interval_low,s=e.confidence_interval_high,r=i.suggested_interval??i.interval_days??0,o=i.interval_days??0,d=Math.max(0,n-5),p=s+5-d,_=(n-d)/p*100,f=(s-n)/p*100,v=(r-d)/p*100,g=o>0?(o-d)/p*100:-1;return l`
${a("confidence_interval",t)}: ${r} ${a("days",t)} (${n}\u2013${s})
${a("confidence_conservative",t)} (${n}${a("days",t).charAt(0)})
${a("confidence_aggressive",t)} (${s}${a("days",t).charAt(0)})
`}function wt(e,i,t){let n=e.degradation_trend!=null&&e.degradation_trend!=="insufficient_data",s=e.days_until_threshold!=null,r=e.environmental_factor!=null&&e.environmental_factor!==1;if(!n&&!s&&!r)return u;let o=e.degradation_trend==="rising"?"M16,6L18.29,8.29L13.41,13.17L9.41,9.17L2,16.59L3.41,18L9.41,12L13.41,16L19.71,9.71L22,12V6H16Z":e.degradation_trend==="falling"?"M16,18L18.29,15.71L13.41,10.83L9.41,14.83L2,7.41L3.41,6L9.41,12L13.41,8L19.71,14.29L22,12V18H16Z":"M22,12L18,8V11H3V13H18V16L22,12Z";return l`
${e.sensor_prediction_urgency?l`
${a("sensor_prediction_urgency",i).replace("{days}",String(Math.round(e.days_until_threshold||0)))}
`:u}
${a("sensor_prediction",i)}
${n?l`
${a("degradation_trend",i)}
${a("trend_"+e.degradation_trend,i)}
${e.degradation_rate!=null?l`${e.degradation_rate>0?"+":""}${x(e.degradation_rate,i,Math.abs(e.degradation_rate)>=10?0:1)} ${e.trigger_entity_info?.unit_of_measurement||""}/${a("day_short",i)} `:u}
`:u}
${s?l`
${a("days_until_threshold",i)}
${e.days_until_threshold===0?a("threshold_exceeded",i):"~"+Math.round(e.days_until_threshold)+" "+a("days",i)}
${e.threshold_prediction_date?l`${N(e.threshold_prediction_date,i)} `:u}
${e.threshold_prediction_confidence?l` `:u}
${(e.prediction_cycles??0)>0?l`${a("prediction_cycles",i)}: ${e.prediction_cycles} `:u}
`:u}
${r&&t.environmental?l`
${a("environmental_adjustment",i)}
${x(e.environmental_factor,i,2)}x
${e.environmental_entity?l`ct(d,e.environmental_entity)}>${e.environmental_entity} `:u}
`:u}
`}function At(e,i,t,n){let s=Math.max(e||1,i);return l`
${a("current",n)}: ${e??"\u2014"} ${e!=null?a("days",n):""}
${a("recommended",n)}: ${i} ${a("days",n)}
${a(`confidence_${t}`,n)}
`}var It=["month_jan","month_feb","month_mar","month_apr","month_may","month_jun","month_jul","month_aug","month_sep","month_oct","month_nov","month_dec"];function Tt(e,i,t){if(!t.seasonal||!e.seasonal_factor||e.seasonal_factor===1)return u;let n=It.map(d=>a(d,i)),s=new Date().getMonth(),r=e.seasonal_factors||e.interval_analysis?.seasonal_factors||null,o=r&&r.length===12?r:n.map((d,c)=>{let p=e.seasonal_factor||1,_=Math.sin((c-6)*Math.PI/6)*.3;return Math.max(.7,Math.min(1.3,p+_))});return l`
${a("seasonal_awareness",i)}
${o.map((d,c)=>{let p=d*40,_=d<.9?"low":d>1.1?"high":"normal";return l`
`})}
${a("shorter",i)||"K\xFCrzer"}
${a("normal",i)||"Normal"}
${a("longer",i)||"L\xE4nger"}
`}function Lt(e,i){return Zt(e,i)}function Zt(e,i){let t=e.seasonal_factors??e.interval_analysis?.seasonal_factors;if(!t||t.length!==12)return u;let n=e.interval_analysis?.seasonal_reason,s=new Date().getMonth(),r=300,o=100,d=8,p=o-d-4,_=Math.max(...t,1.5),f=r/12,v=f*.65,g=d+p-1/_*p;return l`
${a("seasonal_chart_title",i)}
${n?l`${n==="learned"?a("seasonal_learned",i):a("seasonal_manual",i)} `:u}
${t.map((k,b)=>{let D=k/_*p,O=b*f+(f-v)/2,M=d+p-D,F=b===s,W=k<1?"var(--success-color, #4caf50)":k>1?"var(--warning-color, #ff9800)":"var(--secondary-text-color)";return z`
`})}
${It.map((k,b)=>l`${a(k,i)} `)}
`}var $=class extends H{constructor(){super(...arguments);this._open=!1;this._entryId=null;this._taskId=null;this._task=null;this._objectName="";this._busy=!1;this._error="";this._showSkip=!1;this._showReset=!1;this._showDetails=!1;this._showAdaptive=!1;this._skipReason="";this._resetDate="";this._features={adaptive:!1,predictions:!1,seasonal:!1,environmental:!1,budget:!1,groups:!1,checklists:!1,schedule_time:!1,completion_actions:!1};this._toast="";this._featuresLoaded=!1;this._currencySymbol=""}get _lang(){return j(this.hass)}async openFor(t,n){this._entryId=t,this._taskId=n,this._error="",this._showSkip=!1,this._showReset=!1,this._showAdaptive=!1,this._skipReason="",this._resetDate=q(new Date),this._open=!0,await Promise.all([this._loadTask(),this._loadFeatures()])}async _loadFeatures(){if(!this._featuresLoaded)try{let t=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/settings"});t?.features&&(this._features={...this._features,...t.features}),this._currencySymbol=t?.budget?.currency_symbol||"",this._featuresLoaded=!0}catch{}}close(){this._open=!1,this._task=null,this._error=""}async _loadTask(){if(!(!this._entryId||!this._taskId))try{let t=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/object",entry_id:this._entryId});this._objectName=t.object?.name||"";let n=(t.tasks||[]).find(s=>s.id===this._taskId);this._task=n??null}catch(t){this._error=T(t,this._lang)}}async _runWs(t){this._busy=!0,this._error="";try{return await this.hass.connection.sendMessagePromise(t),this._busy=!1,!0}catch(n){return this._error=T(n,this._lang),this._busy=!1,!1}}_notifyChanged(t){this.dispatchEvent(new CustomEvent("task-action-fired",{detail:{entry_id:this._entryId,task_id:this._taskId,action:t},bubbles:!0,composed:!0}))}_onComplete(){!this._entryId||!this._taskId||!this._task||import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(async({openCompleteDialog:t})=>{let n=this._task,s=[];try{s=(await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/objects",compact:!0})).objects||[]}catch{}t(xt({entryId:this._entryId,taskId:this._taskId,taskName:n.name,task:n,objects:s,lang:this._lang,checklist:n.checklist||[],adaptiveEnabled:!!n.adaptive_config?.enabled,currencySymbol:this._currencySymbol}))&&(this._notifyChanged("complete"),this.close())})}async _onSkipConfirm(){if(!this._entryId||!this._taskId)return;await this._runWs({type:"maintenance_supporter/task/skip",entry_id:this._entryId,task_id:this._taskId,reason:this._skipReason.trim()||null})&&(this._notifyChanged("skip"),this.close())}async _onResetConfirm(){if(!this._entryId||!this._taskId)return;await this._runWs({type:"maintenance_supporter/task/reset",entry_id:this._entryId,task_id:this._taskId,date:this._resetDate||void 0})&&(this._notifyChanged("reset"),this.close())}_onEdit(){!this._entryId||!this._taskId||import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openEditTaskDialog:t})=>{t(this._entryId,this._taskId),this.close()})}_onQr(){!this._entryId||!this._taskId||!this._task||import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openQrDialog:t})=>{t({entry_id:this._entryId,task_id:this._taskId,task_name:this._task.name,object_name:this._objectName}),this.close()})}async _onDelete(){if(!this._entryId||!this._taskId)return;let t=a("delete_task_confirm",this._lang)||`Delete "${this._task?.name}"?`;if(!window.confirm(t))return;await this._runWs({type:"maintenance_supporter/task/delete",entry_id:this._entryId,task_id:this._taskId})&&(this._notifyChanged("delete"),this.close())}async _onArchive(){if(!this._entryId||!this._taskId)return;await this._runWs({type:"maintenance_supporter/task/archive",entry_id:this._entryId,task_id:this._taskId})&&(this._notifyChanged("archive"),this.close())}async _onUnarchive(){if(!this._entryId||!this._taskId)return;await this._runWs({type:"maintenance_supporter/task/unarchive",entry_id:this._entryId,task_id:this._taskId})&&(this._notifyChanged("unarchive"),this.close())}_onOpenInPanel(){if(!this._entryId||!this._taskId)return;let t=`/maintenance-supporter?entry_id=${encodeURIComponent(this._entryId)}&task_id=${encodeURIComponent(this._taskId)}`;history.pushState(null,"",t),window.dispatchEvent(new CustomEvent("location-changed")),this.close()}async _applySuggestion(){if(!this._entryId||!this._taskId||!this._task?.suggested_interval)return;await this._runWs({type:"maintenance_supporter/task/apply_suggestion",entry_id:this._entryId,task_id:this._taskId,interval:this._task.suggested_interval})&&(this._toast=a("suggestion_applied",this._lang)||"Applied",this._notifyChanged("apply_suggestion"),await this._loadTask(),setTimeout(()=>{this._toast=""},2500))}async _reanalyzeInterval(){if(!(!this._entryId||!this._taskId)){this._busy=!0,this._error="";try{let t=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/task/analyze_interval",entry_id:this._entryId,task_id:this._taskId});this._toast=t.recommended_interval?`${a("reanalyze_result",this._lang)||"Recomputed"}: ${lt(t.recommended_interval,"days",this._lang)} (${t.data_points} pts)`:a("reanalyze_insufficient_data",this._lang)||"Not enough data",await this._loadTask(),setTimeout(()=>{this._toast=""},3500)}catch(t){this._error=T(t,this._lang)}finally{this._busy=!1}}}_onEditHistoryEntry(t){!this._entryId||!this._taskId||import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openHistoryEditDialog:n})=>{n({entry_id:this._entryId,task_id:this._taskId,original_timestamp:t.timestamp,type:t.type,timestamp:t.timestamp,notes:t.notes??null,cost:t.cost??null,duration:t.duration??null,completed_by:t.completed_by??null,used_parts:t.used_parts??null,photo_doc_ids:Q(t),reading_value:t.reading_value??null,reading_values:J(t),readings:this._task?.readings??[],task_type:this._task?.type??null,reading_unit:this._task?.reading_unit??null})})}_renderRecommendation(t){if(!this._features.adaptive||!t.suggested_interval||t.suggested_interval===t.interval_days)return u;let n=this._lang;return l`
${a("suggested_interval",n)}
${At(t.interval_days,t.suggested_interval,t.interval_confidence||"medium",n)}
${a("apply_suggestion",n)}
${a("reanalyze",n)}
`}_renderAdaptive(t){let n=this._lang,s=this._features.adaptive&&t.suggested_interval&&t.suggested_interval!==t.interval_days,r=t.degradation_trend!=null&&t.degradation_trend!=="insufficient_data"||t.days_until_threshold!=null||t.environmental_factor!=null&&t.environmental_factor!==1,o=this._features.adaptive&&t.interval_analysis?.weibull_beta!=null&&t.interval_analysis?.weibull_eta!=null,d=this._features.seasonal&&t.seasonal_factor&&t.seasonal_factor!==1;return!s&&!r&&!o&&!d?l`
${a("adaptive_no_data",n)||"Not enough completion history yet for adaptive analysis."}
`:l`
${this._toast?l`
${this._toast}
`:u}
${s?this._renderRecommendation(t):u}
${r?wt(t,n,this._features):u}
${o?kt(t,n):u}
${d?l`
${Tt(t,n,this._features)}
${t.seasonal_factors?.length===12||t.interval_analysis?.seasonal_factors?.length===12?Lt(t,n):u}
`:u}
`}_renderHistoryReadings(t,n,s){let r=J(t),o=d=>x(d,s,{maximumFractionDigits:3});if(r.length>0)return l`
${r.map(d=>{let c=ft(n,t,d.id);return l`${d.name}
${o(d.value)}${d.unit?` ${d.unit}`:""}${c==null?"":` (${c>=0?"+":""}${o(c)})`} `})}
`;if(t.reading_value!=null){let d=this._task?.reading_unit?` ${this._task.reading_unit}`:"";return l`
${a("reading_label",s)}
${o(t.reading_value)}${d}
`}return u}_renderDetails(t){let n=this._lang,s=t.history||[],r=s.filter(c=>c.type==="completed"),o=r.reduce((c,p)=>c+(typeof p.cost=="number"?p.cost:0),0),d=(()=>{let c=r.map(p=>typeof p.duration=="number"?p.duration:null).filter(p=>p!=null);return c.length?Math.round(c.reduce((p,_)=>p+_,0)/c.length):null})();return l`
${a("times_performed",n)||"Performed"}
${r.length}
${a("total_cost",n)||"Total cost"}
${x(o,n,2)}
${a("avg_duration",n)||"Avg duration"}
${d!=null?`${d}m`:"\u2014"}
${s.length===0?l`
${a("history_empty",n)||"No history yet."}
`:l`
${[...s].reverse().slice(0,20).map(c=>{let p=["completed","reset","skipped"].includes(c.type);return l`
${a(c.type,n)}
${ot(c.timestamp,n)}
${p?l`this._onEditHistoryEntry(c)}>
`:u}
${c.notes?l`
${c.notes}
`:u}
${this._renderHistoryReadings(c,s,n)}
${(()=>{let _=Q(c);return _.length?l`
${_.map(f=>l` `)}
`:u})()}
${c.cost!=null||c.duration!=null?l`
${c.cost!=null?l`💰 ${x(c.cost,n,2)} `:u}
${c.duration!=null?l`⏱️ ${c.duration}m `:u}
`:u}
`})}
${s.length>20?l`
… +${s.length-20} ${a("older_entries",n)||"older"}
`:u}
`}
`}render(){if(!this._open)return u;let t=this._lang,n=this._task,s=this.hass?.user?.is_admin??!0;return l`
${n?l`
${this._error?l`
${this._error}
`:u}
${this._showSkip?l`
`:this._showReset?l`
`:l`
${a("complete",t)||"Complete"}
${n.allow_skip!==!1?l`
{this._showSkip=!0}} .disabled=${this._busy}>
${a("skip",t)||"Skip"}
`:u}
{this._showReset=!0}} .disabled=${this._busy}>
${a("reset",t)||"Reset"}
${s?l`
${a("edit",t)||"Edit"}
${a("qr_code",t)||"QR"}
${n.archived?a("unarchive",t)||"Unarchive":a("archive",t)||"Archive"}
${a("delete",t)||"Delete"}
`:u}
{this._showDetails=!this._showDetails}}>
${this._showDetails?a("hide_details",t)||"Hide details":a("show_details",t)||"Show history + stats"}
${this._features.adaptive||this._features.seasonal||this._features.environmental?l`{this._showAdaptive=!this._showAdaptive}}>
${this._showAdaptive?a("hide_stats",t)||"Hide stats":a("show_stats",t)||"Show stats + graphs"}
`:u}
${this._showDetails?this._renderDetails(n):u}
${this._showAdaptive?this._renderAdaptive(n):u}
`}
`:l`
${a("loading",t)||"Loading\u2026"}
`}
`}};$.styles=[pt,C`
:host { display: contents; }
.backdrop {
position: fixed; inset: 0; z-index: 100;
background: rgba(0,0,0,0.5);
}
.dialog {
position: fixed; left: 50%; top: 50%;
transform: translate(-50%, -50%);
width: 95vw; max-width: 460px;
max-height: 92vh; overflow: auto;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
color: var(--primary-text-color);
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
padding: 20px;
display: flex; flex-direction: column; gap: 14px;
z-index: 101;
}
.header { display: flex; flex-direction: column; gap: 6px; }
.title { display: flex; align-items: center; gap: 10px; }
.status-dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; }
.task-name { font-size: 18px; font-weight: 600; }
.object { font-size: 13px; color: var(--secondary-text-color); }
.link-inline {
background: transparent; border: none; padding: 0; cursor: pointer;
color: var(--primary-color); font-size: inherit; font-family: inherit;
}
.link-inline:hover { text-decoration: underline; }
.quick-info {
display: flex; flex-wrap: wrap; gap: 12px;
font-size: 12px; color: var(--secondary-text-color);
padding-top: 4px; border-top: 1px solid var(--divider-color);
}
.quick-info strong { color: var(--primary-text-color); font-weight: 500; }
.actions { display: flex; gap: 8px; }
.actions.primary-row { gap: 6px; }
.actions.primary-row .btn { flex: 1; }
.actions.primary-row ha-button { flex: 1; }
/* Edit + QR are admin-tools — left-align as a group; Delete is destructive
so it gets pushed to the far right with margin-left:auto for visual
separation. Earlier this row was flex-end which left a strange empty
gap on the left (user feedback). */
.actions.secondary-row {
padding-top: 8px; border-top: 1px solid var(--divider-color);
justify-content: flex-start;
}
.actions.secondary-row .btn.danger,
.actions.secondary-row ha-button.danger {
margin-left: auto;
}
.actions.secondary-row ha-button { --ha-button-font-size: 13px; }
.btn {
padding: 8px 12px; font-size: 14px;
border-radius: 6px; cursor: pointer;
border: 1px solid var(--divider-color);
background: var(--secondary-background-color, transparent);
color: var(--primary-text-color);
font-weight: 500;
display: inline-flex; align-items: center; gap: 6px;
transition: background 0.12s;
}
.btn:hover { background: var(--state-icon-color, rgba(255,255,255,0.06)); }
.btn[disabled] { opacity: 0.5; cursor: wait; }
.btn.primary {
background: var(--primary-color);
color: var(--text-primary-color, white);
border-color: var(--primary-color);
}
.btn.cancel { background: transparent; }
.btn.ghost { padding: 6px 10px; font-size: 13px; }
.btn.danger { color: var(--error-color); }
.btn ha-icon { --mdc-icon-size: 18px; }
.inline-form { display: flex; flex-direction: column; gap: 8px; }
.inline-form label { font-size: 13px; color: var(--secondary-text-color); }
.inline-form input {
padding: 8px; font-size: 14px;
background: var(--secondary-background-color, #2c2c2c);
color: var(--primary-text-color);
border: 1px solid var(--divider-color, #444);
border-radius: 6px;
}
.inline-actions { display: flex; gap: 8px; justify-content: flex-end; }
.footer { display: flex; justify-content: center; padding-top: 4px; }
.link {
background: transparent; border: none; cursor: pointer;
color: var(--primary-color); font-size: 13px;
display: inline-flex; align-items: center; gap: 4px;
}
.link:hover { text-decoration: underline; }
.link ha-icon { --mdc-icon-size: 14px; }
.loading { padding: 24px; text-align: center; color: var(--secondary-text-color); }
.error {
padding: 8px; border-radius: 6px;
background: rgba(211,47,47,0.1);
color: var(--error-color, #d32f2f); font-size: 13px;
}
/* Details (expandable Show details section) */
.details-toggle { display: flex; justify-content: center; margin-top: 4px; }
.details {
display: flex; flex-direction: column; gap: 12px;
border-top: 1px solid var(--divider-color);
padding-top: 12px;
}
.stats-grid {
display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px;
}
.stat {
display: flex; flex-direction: column; gap: 2px;
background: var(--secondary-background-color, rgba(255,255,255,0.04));
padding: 8px; border-radius: 6px;
align-items: center;
}
.stat-label { font-size: 11px; color: var(--secondary-text-color); text-transform: uppercase; letter-spacing: 0.5px; }
.stat-value { font-size: 16px; font-weight: 600; }
.history-header {
display: flex; align-items: baseline; gap: 8px;
font-size: 14px;
}
.history-count {
font-size: 12px; color: var(--secondary-text-color);
background: var(--secondary-background-color); padding: 2px 8px; border-radius: 999px;
}
.history-empty { color: var(--secondary-text-color); font-style: italic; font-size: 13px; }
.history-list { display: flex; flex-direction: column; gap: 8px; max-height: 280px; overflow: auto; }
.history-entry {
padding: 6px 8px; border-radius: 6px;
background: var(--secondary-background-color, rgba(255,255,255,0.03));
font-size: 13px;
}
.history-line {
display: flex; align-items: center; gap: 8px;
justify-content: space-between;
}
.history-type {
font-weight: 600; font-size: 11px;
padding: 2px 6px; border-radius: 4px;
text-transform: uppercase; letter-spacing: 0.5px;
}
.type-completed { background: rgba(46,125,50,0.2); color: #66bb6a; }
.type-skipped { background: rgba(158,158,158,0.2); color: var(--secondary-text-color); }
.type-reset { background: rgba(33,150,243,0.2); color: #64b5f6; }
.type-triggered { background: rgba(255,87,34,0.2); color: #ff8a65; }
.history-date { font-size: 11px; color: var(--secondary-text-color); flex: 1; text-align: right; }
.history-edit {
background: transparent; border: none; cursor: pointer;
padding: 4px; border-radius: 4px;
color: var(--secondary-text-color);
}
.history-edit:hover { background: var(--state-icon-color, rgba(255,255,255,0.06)); color: var(--primary-color); }
.history-edit ha-icon { --mdc-icon-size: 14px; }
.history-notes { margin-top: 4px; color: var(--primary-text-color); }
.history-meta { display: flex; gap: 12px; margin-top: 4px; color: var(--secondary-text-color); font-size: 11px; }
/* #161: readings + photos on the entry (panel-timeline parity) */
.history-readings { display: flex; flex-wrap: wrap; gap: 2px 16px; margin-top: 4px; font-size: 12px; }
.history-reading { display: inline-flex; gap: 6px; }
.history-reading-name { color: var(--secondary-text-color); }
.history-reading-value { font-variant-numeric: tabular-nums; }
.history-photos { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.history-more { padding: 8px; text-align: center; font-size: 12px; color: var(--secondary-text-color); font-style: italic; }
/* Adaptive section — wraps the panel renderers (which assume sharedStyles
are present) and adds dialog-specific layout. */
.adaptive-stack {
display: flex; flex-direction: column; gap: 12px;
border-top: 1px solid var(--divider-color);
padding-top: 12px;
}
.adaptive-empty {
padding: 16px; text-align: center;
color: var(--secondary-text-color);
font-style: italic; font-size: 13px;
border-top: 1px solid var(--divider-color);
}
.toast {
padding: 8px 12px; border-radius: 6px;
background: rgba(76, 175, 80, 0.15);
color: #4caf50; font-size: 13px; font-weight: 500;
}
/* The panel's recommendation-card uses ha-button. We use plain
in this dialog's button styles. Re-style the action row to match. */
.recommendation-actions {
display: flex; gap: 8px; margin-top: 8px;
}
/* Constrain SVG charts so they fit the dialog width even on mobile. */
.weibull-section, .seasonal-card-compact { max-width: 100%; }
.weibull-chart svg { max-width: 100%; height: auto; }
.details-toggle { gap: 12px; flex-wrap: wrap; }
`],h([P({attribute:!1})],$.prototype,"hass",2),h([m()],$.prototype,"_open",2),h([m()],$.prototype,"_entryId",2),h([m()],$.prototype,"_taskId",2),h([m()],$.prototype,"_task",2),h([m()],$.prototype,"_objectName",2),h([m()],$.prototype,"_busy",2),h([m()],$.prototype,"_error",2),h([m()],$.prototype,"_showSkip",2),h([m()],$.prototype,"_showReset",2),h([m()],$.prototype,"_showDetails",2),h([m()],$.prototype,"_showAdaptive",2),h([m()],$.prototype,"_skipReason",2),h([m()],$.prototype,"_resetDate",2),h([m()],$.prototype,"_features",2),h([m()],$.prototype,"_toast",2);customElements.get("maintenance-task-quick-actions-dialog")||customElements.define("maintenance-task-quick-actions-dialog",$);function Dt(e){return!!e&&/^https?:\/\//i.test(e)}function Mt(e){return e?customElements.get("ha-markdown")?l` `:l`${e}`:u}var L=class extends H{constructor(){super(...arguments);this._open=!1;this._entryId=null;this._data=null;this._busy=!1;this._error=""}get _lang(){return j(this.hass)}async openFor(t){this._entryId=t,this._error="",this._open=!0,await this._load()}close(){this._open=!1,this._data=null,this._error=""}async _load(){if(this._entryId)try{let t=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/object",entry_id:this._entryId});this._data=t}catch(t){this._error=T(t,this._lang)}}_onEditObject(){!this._entryId||!this._data||import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openEditObjectDialog:t})=>{t(this._entryId,this._data.object),this.close()})}_onAddTask(){this._entryId&&import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openCreateTaskDialog:t})=>{t(this._entryId),this.close()})}async _onDelete(){if(!this._entryId||!this._data)return;let t=a("delete_object_confirm",this._lang)||`Delete "${this._data.object.name}" and all its tasks?`;if(window.confirm(t)){this._busy=!0,this._error="";try{await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/object/delete",entry_id:this._entryId}),this.dispatchEvent(new CustomEvent("object-deleted",{detail:{entry_id:this._entryId},bubbles:!0,composed:!0})),this.close()}catch(n){this._error=T(n,this._lang)}finally{this._busy=!1}}}async _onArchiveObject(){if(!this._entryId||!this._data)return;let t=!!this._data.object.archived;if(!t){let n=a("confirm_archive_object",this._lang)||"Archive this object and its tasks?";if(!window.confirm(n))return}this._busy=!0,this._error="";try{await this.hass.connection.sendMessagePromise({type:t?"maintenance_supporter/object/unarchive":"maintenance_supporter/object/archive",entry_id:this._entryId}),this.dispatchEvent(new CustomEvent("object-changed",{detail:{entry_id:this._entryId},bubbles:!0,composed:!0})),this.close()}catch(n){this._error=T(n,this._lang)}finally{this._busy=!1}}_onTaskClick(t){this._entryId&&import("/maintenance_supporter_panelfiles/panel-chunks/dialog-mount-63ZHQOD5.js").then(({openTaskQuickActions:n})=>{n(this._entryId,t)})}render(){if(!this._open)return u;let t=this._lang,n=this._data,s=n?.object,r=n?.tasks||[],o=this.hass?.user?.is_admin??!0;return l`
${n&&s?l`
${this._error?l`
${this._error}
`:u}
${r.length===0?l`
${a("no_tasks",t)||"No tasks yet."}
`:l`
${r.map(d=>l`
this._onTaskClick(d.id)}>
${d.name}
${a(d.status||"ok",t)}
`)}
`}
${s.notes?l`
${a("object_notes_label",t)}
${Mt(s.notes)}
`:u}
${o?l`
${a("add_task",t)||"Add task"}
${a("edit",t)||"Edit"}
${s.archived?a("unarchive_object",t)||"Unarchive object":a("archive_object",t)||"Archive object"}
${a("delete",t)||"Delete"}
`:u}
`:l`
${a("loading",t)||"Loading\u2026"}
`}
`}_renderMetaRow(t){let n=this._lang,s=[];return t.area_id&&s.push([a("area",n),t.area_id]),t.manufacturer&&s.push([a("manufacturer",n),t.manufacturer]),t.model&&s.push([a("model",n),t.model]),t.serial_number&&s.push([a("serial_number_label",n),t.serial_number]),t.installation_date&&s.push([a("installed",n),t.installation_date]),t.warranty_expiry&&s.push([a("warranty",n),t.warranty_expiry]),t.documentation_url&&s.push([a("documentation_url_label",n),t.documentation_url]),s.length===0?u:l`
`}};L.styles=C`
:host { display: contents; }
.backdrop {
position: fixed; inset: 0; z-index: 100; background: rgba(0,0,0,0.5);
}
.dialog {
position: fixed; left: 50%; top: 50%;
transform: translate(-50%, -50%);
width: 95vw; max-width: 480px;
max-height: 92vh; overflow: auto;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
color: var(--primary-text-color);
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
padding: 20px; z-index: 101;
display: flex; flex-direction: column; gap: 14px;
}
.header { display: flex; flex-direction: column; gap: 6px; }
.title { font-size: 20px; font-weight: 600; }
.meta { display: flex; flex-direction: column; gap: 4px; padding-top: 4px; border-top: 1px solid var(--divider-color); }
.meta-item { display: flex; gap: 8px; font-size: 12px; }
.meta-label { color: var(--secondary-text-color); min-width: 100px; }
.meta-value { color: var(--primary-text-color); flex: 1; word-break: break-word; }
.meta-value a { color: var(--primary-color); }
.tasks-section, .notes-section { display: flex; flex-direction: column; gap: 6px; }
.section-header { display: flex; align-items: baseline; gap: 8px; }
.count {
font-size: 11px; color: var(--secondary-text-color);
background: var(--secondary-background-color); padding: 2px 8px; border-radius: 999px;
}
.empty { color: var(--secondary-text-color); font-style: italic; font-size: 13px; padding: 8px 0; }
.task-list { display: flex; flex-direction: column; gap: 4px; max-height: 200px; overflow: auto; }
.task-row {
display: flex; align-items: center; gap: 10px;
padding: 8px; border-radius: 6px; cursor: pointer;
background: var(--secondary-background-color, rgba(255,255,255,0.03));
transition: background 0.12s;
}
.task-row:hover { background: var(--state-icon-color, rgba(255,255,255,0.06)); }
.status-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.task-name { flex: 1; font-size: 14px; }
.task-status { font-size: 11px; color: var(--secondary-text-color); text-transform: uppercase; }
.notes-body { white-space: pre-wrap; font-size: 13px; padding: 8px; background: var(--secondary-background-color); border-radius: 6px; }
.notes-body ha-markdown { white-space: normal; }
.actions { display: flex; gap: 8px; padding-top: 8px; border-top: 1px solid var(--divider-color); }
.actions .btn { flex: 1; }
.btn {
padding: 8px; font-size: 13px; border-radius: 6px; cursor: pointer;
border: 1px solid var(--divider-color);
background: var(--secondary-background-color, transparent);
color: var(--primary-text-color); font-weight: 500;
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
.btn:hover { background: var(--state-icon-color, rgba(255,255,255,0.06)); }
.btn[disabled] { opacity: 0.5; cursor: wait; }
.btn.primary { background: var(--primary-color); color: var(--text-primary-color, white); border-color: var(--primary-color); }
.btn.danger { color: var(--error-color); }
.btn ha-icon { --mdc-icon-size: 16px; }
.loading { padding: 24px; text-align: center; color: var(--secondary-text-color); }
.error { padding: 8px; border-radius: 6px; background: rgba(211,47,47,0.1); color: var(--error-color); font-size: 13px; }
`,h([P({attribute:!1})],L.prototype,"hass",2),h([m()],L.prototype,"_open",2),h([m()],L.prototype,"_entryId",2),h([m()],L.prototype,"_data",2),h([m()],L.prototype,"_busy",2),h([m()],L.prototype,"_error",2);customElements.get("maintenance-object-quick-actions-dialog")||customElements.define("maintenance-object-quick-actions-dialog",L);var Pt="maintenance-object-dialog",Et="maintenance-task-dialog",Jt="maintenance-history-edit-dialog",Qt="maintenance-complete-dialog",Xt="maintenance-qr-dialog",te="maintenance-task-quick-actions-dialog",ee="maintenance-object-quick-actions-dialog";function Y(){return document.querySelector("home-assistant")?.hass}function ne(){return document.querySelector("home-assistant")?.shadowRoot??document.body}function E(e){let i=ne(),t=i.querySelector(e)??document.body.querySelector(e);return t?t.parentNode!==i&&i.appendChild(t):(t=document.createElement(e),i.appendChild(t)),t}function S(e){let i=Y();if(!i)return!1;e.hass=i;let t=j(i);return it(t)||st(t).then(()=>{e.requestUpdate?.()}),at(i.locale,i.config?.country),!0}function Rn(e){return B(e).then(i=>i.rowActionStyle)}function On(){yt()}function zn(){let e=E(Pt);return S(e)?(e.openCreate(),!0):!1}function Nn(e,i){let t=E(Pt);return S(t)?(t.openEdit(e,i),!0):!1}function qn(e="",i){let t=E(Et);if(!S(t))return!1;let n=Y();return n?((async()=>{let s=await B(n),r=t;r.checklistsEnabled=s.features.checklists,r.scheduleTimeEnabled=s.features.schedule_time,r.completionActionsEnabled=s.features.completion_actions,r.defaultWarningDays=s.defaultWarningDays,r.openCreate(e,i)})(),!0):!1}function Vn(e,i){let t=E(Et);if(!S(t))return!1;let n=Y();return n?((async()=>{try{let[s,r]=await Promise.all([n.connection.sendMessagePromise({type:"maintenance_supporter/object",entry_id:e}),B(n)]),o=(s.tasks||[]).find(c=>c.id===i);if(!o){console.warn(`openEditTaskDialog: task ${i} not found in entry ${e}`);return}let d=t;d.checklistsEnabled=r.features.checklists,d.scheduleTimeEnabled=r.features.schedule_time,d.completionActionsEnabled=r.features.completion_actions,d.defaultWarningDays=r.defaultWarningDays,await d.openEdit(e,o)}catch(s){console.warn("openEditTaskDialog: failed to load task/features",s)}})(),!0):!1}function Fn(e){let i=E(Jt);return S(i)?(i.openEdit(e),!0):!1}function Wn(e){let i=E(Qt);return S(i)?($t(i,e,Y()?.language||"en"),!0):!1}function Un(e){let i=E(Xt);return S(i)?(i.openForTask(e.entry_id,e.task_id,e.object_name,e.task_name),!0):!1}function Bn(e,i){let t=E(te);return S(t)?(t.openFor(e,i),!0):!1}function Kn(e){let i=E(ee);return S(i)?(i.openFor(e),!0):!1}export{Dt as a,ye as b,Mt as c,Wt as d,Ut as e,et as f,xt as g,$t as h,y as i,Me as j,Pe as k,Ee as l,Se as m,Ce as n,He as o,je as p,q,xe as r,$e as s,kt as t,wt as u,At as v,Tt as w,Lt as x,Rn as y,On as z,zn as A,Nn as B,qn as C,Vn as D,Fn as E,Wn as F,Un as G,Bn as H,Kn as I};