(this.host._spaceDialog = {
...dialog, title: (event.target as HTMLInputElement).value,
})} />
${dialog.source === 'file' ? html`
${dialog.planFile
? html`
${dialog.planFile.name}`
: dialog.planUrl
? html`
})
`
: html`
${this.host._t('space.no_plan')}`}
this._pickPlanFile(event)} />
${dialog.pickSaved ? this._renderServerPlans(dialog) : nothing}` : nothing}
${this._help('space.cell_cm.help')}
{
const raw = (event.target as HTMLInputElement).value;
const parsed = strictNumber(raw);
const canonical = parsed == null ? null
: gridCellFieldToCm(parsed, this.host._imperial);
this.host._spaceDialog = {
...dialog,
cellCmInput: raw,
cellCmTouched: true,
cellCm: canonical != null && canonical > 0
? Math.max(CELL_CM_MIN, Math.min(CELL_CM_MAX, canonical)) : dialog.cellCm,
};
}} />
${this.host._t(this.host._imperial
? 'space.scale_unit_imperial' : 'space.scale_unit')}
${this._help('space.zero_wall_style.help')}
${this.host._t('space.hide_decor_tip')}
${this.host._t('space.hide_openings_tip')}
${([
['labelTemp', 'space.label_temp'], ['labelHum', 'space.label_hum'],
['labelLqi', 'space.label_lqi'], ['labelLight', 'space.label_light'],
] as const).map(([field, key]) => html`
`)}
${this._rangeInput(50, 300, 5, Math.round(dialog.cardFontScale * 100), (value) => {
this.host._spaceDialog = { ...dialog, cardFontScale: value / 100 };
})}
${Math.round(dialog.cardFontScale * 100)}%
${this.host._renderCardPreview(dialog.cardFontScale, 1, 1)}
) => {
this.host._spaceDialog = {
...dialog, roomColor: event.detail.color, roomOpacity: event.detail.opacity,
};
}}>
${this._help('space.bg_mode.help')}
${(dialog.bgMode ?? bgModeOf(this.host._settings, {})) === 'static' ? html`
) => {
this.host._spaceDialog = { ...dialog, bgColor: event.detail.color };
}}>
${dialog.bgColor ? html``
: html`${this.host._t('space.bg_inherited')}`}
` : nothing}
${this._help('space.north.help')}
{
const raw = (event.target as HTMLInputElement).value.trim();
const value = raw === '' ? null : Math.round(Number(raw));
this.host._spaceDialog = {
...dialog,
northDeg: value !== null && Number.isFinite(value)
? Math.min(359, Math.max(0, value)) : null,
};
}} />
${dialog.northDeg === null
? this.host._t('space.north_inherited', {
v: northDegOf(this.host._settings, {}) === null
? '—' : `${northDegOf(this.host._settings, {})}°`,
}) : '°'}
${this.host._t('space.fill_label')}
${this._help('space.fill_mode.help')}
${SPACE_FILL_UI_MODES.map((value) => [value, `fill.${value}`] as const).map(
([value, key]) => html`
${value === 'custom' && dialog.fillMode === 'custom' ? html`
${this.host._t('space.custom_fill')}
) => {
this.host._spaceDialog = {
...dialog, customFill: { c: event.detail.color, a: event.detail.opacity },
};
}}>
${dialog.customFill ? html`` : nothing}
` : nothing}`,
)}
${dialog.deleteBlockers ? html`
${this.host._t('space.delete_blocked', { n: String(dialog.deleteBlockers) })}
` : nothing}