@things-factory/figure-ui 10.1.271 → 10.1.273
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/modeller/canvas.ts +4 -2
- package/client/modeller/clips.ts +74 -4
- package/client/modeller/data-interface.ts +30 -18
- package/client/modeller/editor-styles.ts +17 -6
- package/client/modeller/editor.ts +2 -0
- package/client/modeller/fasten-form.ts +81 -6
- package/client/modeller/fasten-geometry.ts +5 -3
- package/client/modeller/figure-cavity-drawing.ts +1 -3
- package/client/modeller/figure-clips.ts +101 -8
- package/client/modeller/figure-data-panel.ts +384 -200
- package/client/modeller/figure-fasten-dialog.ts +41 -30
- package/client/modeller/figure-fasten-drawing.ts +24 -14
- package/client/modeller/figure-first-save.ts +4 -3
- package/client/modeller/figure-links.ts +109 -37
- package/client/modeller/figure-parts.ts +7 -11
- package/client/modeller/figure-preview.ts +299 -79
- package/client/modeller/figure-size-editor.ts +7 -2
- package/client/modeller/first-save.ts +8 -0
- package/client/modeller/focus-on-render.ts +4 -0
- package/client/modeller/pivot.ts +76 -0
- package/client/modeller/size-response.ts +14 -0
- package/client/modeller/stage-model.ts +50 -6
- package/dist-client/modeller/canvas.d.ts +1 -0
- package/dist-client/modeller/canvas.js +3 -2
- package/dist-client/modeller/canvas.js.map +1 -1
- package/dist-client/modeller/clips.d.ts +17 -3
- package/dist-client/modeller/clips.js +69 -4
- package/dist-client/modeller/clips.js.map +1 -1
- package/dist-client/modeller/data-interface.d.ts +11 -8
- package/dist-client/modeller/data-interface.js +27 -17
- package/dist-client/modeller/data-interface.js.map +1 -1
- package/dist-client/modeller/editor-styles.js +17 -6
- package/dist-client/modeller/editor-styles.js.map +1 -1
- package/dist-client/modeller/editor.js +2 -0
- package/dist-client/modeller/editor.js.map +1 -1
- package/dist-client/modeller/fasten-form.d.ts +13 -0
- package/dist-client/modeller/fasten-form.js +72 -7
- package/dist-client/modeller/fasten-form.js.map +1 -1
- package/dist-client/modeller/fasten-geometry.d.ts +3 -2
- package/dist-client/modeller/fasten-geometry.js +5 -3
- package/dist-client/modeller/fasten-geometry.js.map +1 -1
- package/dist-client/modeller/figure-cavity-drawing.js +1 -3
- package/dist-client/modeller/figure-cavity-drawing.js.map +1 -1
- package/dist-client/modeller/figure-clips.d.ts +9 -0
- package/dist-client/modeller/figure-clips.js +104 -8
- package/dist-client/modeller/figure-clips.js.map +1 -1
- package/dist-client/modeller/figure-data-panel.d.ts +10 -19
- package/dist-client/modeller/figure-data-panel.js +382 -190
- package/dist-client/modeller/figure-data-panel.js.map +1 -1
- package/dist-client/modeller/figure-fasten-dialog.js +39 -24
- package/dist-client/modeller/figure-fasten-dialog.js.map +1 -1
- package/dist-client/modeller/figure-fasten-drawing.js +24 -14
- package/dist-client/modeller/figure-fasten-drawing.js.map +1 -1
- package/dist-client/modeller/figure-first-save.js +4 -3
- package/dist-client/modeller/figure-first-save.js.map +1 -1
- package/dist-client/modeller/figure-links.d.ts +9 -0
- package/dist-client/modeller/figure-links.js +120 -51
- package/dist-client/modeller/figure-links.js.map +1 -1
- package/dist-client/modeller/figure-parts.js +7 -11
- package/dist-client/modeller/figure-parts.js.map +1 -1
- package/dist-client/modeller/figure-preview.d.ts +13 -0
- package/dist-client/modeller/figure-preview.js +296 -80
- package/dist-client/modeller/figure-preview.js.map +1 -1
- package/dist-client/modeller/figure-size-editor.js +7 -3
- package/dist-client/modeller/figure-size-editor.js.map +1 -1
- package/dist-client/modeller/first-save.d.ts +5 -0
- package/dist-client/modeller/first-save.js +7 -0
- package/dist-client/modeller/first-save.js.map +1 -1
- package/dist-client/modeller/focus-on-render.d.ts +2 -0
- package/dist-client/modeller/focus-on-render.js +4 -0
- package/dist-client/modeller/focus-on-render.js.map +1 -0
- package/dist-client/modeller/pivot.d.ts +12 -0
- package/dist-client/modeller/pivot.js +59 -0
- package/dist-client/modeller/pivot.js.map +1 -0
- package/dist-client/modeller/size-response.d.ts +6 -0
- package/dist-client/modeller/size-response.js +14 -0
- package/dist-client/modeller/size-response.js.map +1 -1
- package/dist-client/modeller/stage-model.d.ts +17 -3
- package/dist-client/modeller/stage-model.js +44 -6
- package/dist-client/modeller/stage-model.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/test/browser/editing-page.js +1 -1
- package/test/browser/editing.check.mjs +6 -5
- package/test/browser/links.check.mjs +30 -0
- package/test/browser/modeller.check.mjs +2 -2
- package/test/browser/parts-page.js +4 -0
- package/test/browser/parts.check.mjs +16 -10
- package/test/browser/screen-page.js +12 -1
- package/test/browser/screen.check.mjs +142 -11
- package/test/browser/section.check.mjs +21 -0
- package/test/browser/serve-response.mjs +5 -2
- package/test/browser/side-panel-sweep.check.mjs +171 -10
- package/test/clips.test.ts +49 -4
- package/test/data-motion.test.ts +39 -8
- package/test/fasten-form.test.ts +69 -0
- package/test/fasten-geometry.test.ts +13 -0
- package/test/first-save.test.ts +11 -1
- package/test/pivot.test.ts +57 -0
- package/test/size-response.test.ts +10 -2
- package/test/stage-model.test.ts +23 -1
- package/translations/en.json +31 -11
- package/translations/es.json +30 -10
- package/translations/ja.json +30 -10
- package/translations/ko.json +32 -12
- package/translations/ms.json +30 -10
- package/translations/zh.json +30 -10
- package/tutorial/humanoid/README.md +22 -0
- package/tutorial/humanoid/chapters.mjs +247 -0
- package/tutorial/humanoid/encode.mjs +26 -0
- package/tutorial/humanoid/lib.mjs +197 -0
- package/tutorial/humanoid/record.mjs +65 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-data-panel.js","sourceRoot":"","sources":["../../client/modeller/figure-data-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { unitWord } from './unit-words.js'\nimport { FIGURE_UNITS, figureDataExample, inferFigureDataSchema } from '@hatiolab/figure-model'\nimport type {\n FigureAsset,\n FigureDataBinding,\n FigureDataField,\n FigureDataNode,\n FigureDataRow,\n FigureDataTableBinding,\n FigureDataTableEntry,\n FigureDataValueBinding\n} from '@hatiolab/figure-model'\n\nimport {\n accessorOfRow,\n behaviorsOf,\n bindingDraftOf,\n domainOf,\n endlessJointsOf,\n fieldAt,\n fieldOfKind,\n fitsField,\n freeCodeOf,\n legendRoleOf,\n methodOf,\n methodsOf,\n partsOf,\n rotationStepsOf,\n sampleOf,\n schemaRowsOf,\n type RotationChoice,\n schemaWithField,\n schemaWithFieldReplaced,\n schemaWithoutField,\n schemaFollowingCodes,\n stateInputsOf,\n tableColumnsOf,\n tableDraftOf,\n tableWithKeys,\n tableWithLook,\n tableWithTargets,\n type BehaviorChoice,\n type DataMethod,\n type TableColumn\n} from './data-interface.js'\nimport { SidePanelStyles } from '@things-factory/figure-viewer/dist-client/side-panel-styles.js'\nimport { dataMoveOf } from '@things-factory/figure-viewer/dist-client/data-connection.js'\nimport { kindWords, moveWords } from '@things-factory/figure-viewer/dist-client/data-words.js'\nimport { figureBindingsTakenOver, figureCapabilityDescriptorOf, type FigureRestingBinding } from '@hatiolab/things-scene'\nimport { consumerDescriptors } from './consumer-capabilities.js'\nimport { HelpToggles } from './help.js'\n\nconst KINDS: FigureDataNode['kind'][] = ['number', 'boolean', 'text', 'object', 'list']\n\n/**\n * 데이터 -- the data a site sends this figure, in its own names, and what each value moves (ADR-0051 §8, data binding\n * design decision 4). The schema is free: fields the author names, a tree of objects and lists. A binding reads one place\n * of it and shows it in the figure (ADR-0166): as it is or scaled, it moves one thing -- a control, a colour, a motion\n * group's clip, speed or pause, its position, the items in its places; by a code table or a range table, each value's\n * look goes to several targets at once -- parts' colour and effect, controls' values, a motion group. The field's kind\n * says which methods there are. Every change is one part edit, and whether it holds is the kernel's check.\n *\n * The sample is not saved: data tried here, read the one way a placed figure reads it, and -- in the preview -- the figure\n * running on it (`data-sample`); a sample legend pasted for a table's role shows it as a board's legend would\n * (`legend-sample`).\n */\n@customElement('figure-data-panel')\nexport class FigureDataPanel extends localize(i18next)(LitElement) {\n private readonly help = new HelpToggles(this)\n static styles = [\n SidePanelStyles,\n css`\n :host {\n display: block;\n }\n ul[tree] {\n display: grid;\n gap: 2px;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n ul[tree] > li > button[row] {\n display: flex;\n flex-wrap: wrap;\n gap: 0 6px;\n width: 100%;\n min-height: var(--figure-control-height);\n margin: 0;\n padding: 4px 6px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n align-items: center;\n cursor: pointer;\n }\n ul[tree] > li > button[row][selected] {\n border-color: var(--md-sys-color-primary);\n }\n ul[tree] > li > button[row] small {\n color: var(--md-sys-color-on-surface-variant);\n }\n /* What the field is and what reads it: beside the name when it fits, under it when not. */\n ul[tree] > li > button[row] small[meta] {\n margin-left: auto;\n text-align: right;\n }\n section[item] {\n display: grid;\n gap: 8px;\n padding: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 8px;\n }\n div[head] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 30px;\n gap: 6px;\n align-items: center;\n }\n div[head] button[line] {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n overflow-wrap: anywhere;\n cursor: pointer;\n }\n /* What it reads and where on the first line, its method under it: a method wrapped alone read 「· 배율」 (sweep 2026-10-27 U11). */\n div[head] button[line] small {\n display: block;\n color: var(--md-sys-color-on-surface-variant);\n }\n /* A binding a product capability takes over is marked where the list is read, folded or not (sweep 2026-10-27 U18). */\n div[head] button[line] span[rests] {\n padding: 0 6px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 999px;\n }\n div[head] button[act] {\n width: 30px;\n min-height: var(--figure-control-height);\n margin: 0;\n padding: 0;\n }\n div[cases] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);\n gap: 4px 6px;\n align-items: center;\n }\n div[codes] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr) 30px;\n gap: 4px 6px;\n align-items: center;\n }\n div[codes] button[act] {\n width: 30px;\n margin: 0;\n padding: 0;\n }\n div[ranges] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.4fr) 30px;\n gap: 4px 6px;\n align-items: center;\n }\n div[ranges] button[act] {\n width: 30px;\n margin: 0;\n padding: 0;\n }\n /* A table's rows: the key (a code, or from and to), a cell per column, and a remove button. */\n div[looks] {\n display: grid;\n gap: 4px 6px;\n align-items: center;\n overflow-x: auto;\n }\n div[looks] > small {\n color: var(--md-sys-color-on-surface-variant);\n }\n div[looks] input,\n div[looks] select {\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n }\n div[looks] button[act] {\n width: 30px;\n margin: 0;\n padding: 0;\n }\n /* A colour and the button that clears it, on one line at the height of the cells beside it. */\n div[looks] span[colour] {\n display: flex;\n gap: 2px;\n align-items: center;\n min-width: 0;\n }\n div[looks] span[colour] input[type='color'] {\n flex: 1;\n height: var(--figure-control-height);\n padding: 0 2px;\n }\n div[looks] span[colour] button[act] {\n flex: none;\n width: 24px;\n }\n div[chips] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 10px;\n align-items: center;\n }\n div[chips] label {\n display: inline-flex;\n gap: 4px;\n align-items: center;\n }\n textarea {\n width: 100%;\n min-height: 96px;\n box-sizing: border-box;\n font-family: var(--ui-mono, ui-monospace, monospace);\n font-size: inherit;\n }\n ul[result] {\n margin: 0;\n padding-left: 16px;\n }\n md-icon {\n font-size: 16px;\n width: 16px;\n height: 16px;\n }\n `\n ]\n\n @property({ attribute: false }) asset?: FigureAsset\n @property({ type: Boolean }) locked = false\n /** The part chosen in the modeller, put among a table's parts by one button. */\n @property() selected = ''\n\n /** The schema row chosen, by its path; its field is edited under it. */\n @state() private chosen = ''\n @state() private adding = { name: '', kind: 'number' as FigureDataNode['kind'] }\n /** A site's data pasted to start the schema from; nothing is kept until the author says so. */\n @state() private pasted = ''\n /** A binding as it is being added: the field (or a new field's name), the method, the behavior or the table's targets. */\n @state() private connecting = { path: '', name: '', method: '' as DataMethod | '', behavior: '', parts: [] as string[], inputs: [] as string[], group: '' }\n /** The binding opened to edit its rule, by id. */\n @state() private opened = ''\n /** Sample legends by role, as JSON typed; not saved. */\n @state() private legendSample: Record<string, string> = {}\n /** The rotation card as filled in: the joint, and the fields for on, speed (and its most rpm) and direction. */\n @state() private rotating = { input: '', on: '', speed: '', max: 0, direction: '', forward: '', reverse: '' }\n /** The sample as typed, JSON; empty until edited, the schema's example shown until then. */\n @state() private sample = ''\n @state() private sampling = false\n\n render() {\n const asset = this.asset\n if (!asset) return nothing\n const rows = schemaRowsOf(asset)\n return html`\n ${this.renderCapabilityData(asset)} ${this.renderSchema(asset, rows)} ${this.renderBindings(asset, rows)} ${rows.length ? this.renderSample(asset) : nothing}\n `\n }\n\n /** The data a product's capability the figure wears reads itself (ADR-0167 14): said, read only. */\n private renderCapabilityData(asset: FigureAsset) {\n const names = asset.document.capabilities.names ?? []\n const reading = consumerDescriptors().filter(d => names.includes(d.name) && d.data?.length)\n if (!reading.length) return nothing\n return html`<section>\n ${reading.map(d => html`<p hint>${i18next.t('figure.text.data-capability-fields', { name: d.label, fields: d.data!.map(f => f.name).join(', ') })}</p>`)}\n </section>`\n }\n\n /* ---------------------------------------------------------------- the schema */\n\n private renderSchema(asset: FigureAsset, rows: FigureDataRow[]) {\n const schema = asset.dataInterface?.schema ?? []\n return html`<section>\n <h3>${i18next.t('figure.label.data-schema')}${this.help.button('figure.text.data-schema-explained')}</h3>\n ${this.help.hint('figure.text.data-schema-explained')}\n ${rows.length\n ? html`<ul tree>\n ${rows.map(\n row => html`<li>\n <button row ?selected=${row.path === this.chosen} style=\"padding-left: ${6 + row.depth * 14}px\" @click=${() => (this.chosen = row.path === this.chosen ? '' : row.path)}>\n <span>${row.name}${row.label ? html` <small>${row.label}</small>` : nothing}</span>\n <small meta>${this.kindWord(row.node)}${row.bindings.length ? ` · ${i18next.t('figure.label.data-bound', { count: row.bindings.length })}` : ''}</small>\n </button>\n ${row.path === this.chosen ? this.renderField(asset, schema, row) : nothing}\n </li>`\n )}\n </ul>`\n : html`<p hint>${i18next.t('figure.text.data-no-fields')}</p>`}\n ${this.renderAddField(schema, '')} ${this.renderFromSample(schema)}\n </section>`\n }\n\n /** A field's kind in the words every screen says it in (figure-viewer kindWords). */\n private kindWord(node: FigureDataNode): string {\n return kindWords(node)\n }\n\n /** The chosen field's own settings, and a field added under it when it holds fields. */\n private renderField(asset: FigureAsset, schema: readonly FigureDataField[], row: FigureDataRow) {\n const field = fieldAt(schema, row.path)\n if (!field) return nothing\n const replace = (next: FigureDataField) => this.edit({ kind: 'set-data-schema', schema: schemaWithFieldReplaced(schema, row.path, next) })\n const set = (patch: Record<string, unknown>) => {\n const next = { ...field, ...patch } as Record<string, unknown>\n for (const [k, v] of Object.entries(patch)) if (v === undefined || (typeof v === 'number' && Number.isNaN(v))) delete next[k]\n replace(next as FigureDataField)\n }\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const number = (e: Event) => (e.target as HTMLInputElement).valueAsNumber\n const rename = (to: string) => {\n if (!to || to === field.name) return\n /* A field outside any list is renamed with what reads it; inside a list it is the schema alone. */\n if (!row.path.includes('[]')) this.edit({ kind: 'rename-data-field', accessor: row.path, to })\n else replace({ ...field, name: to })\n }\n let holder: FigureDataNode = field\n while (holder.kind === 'list') holder = holder.item\n return html`<section item>\n <div head>\n <strong>${row.path}</strong>\n <button\n act\n ?disabled=${this.locked}\n title=${i18next.t('figure.button.remove-data-field')}\n @click=${() => {\n this.chosen = ''\n this.edit({ kind: 'set-data-schema', schema: schemaWithoutField(schema, row.path) })\n }}\n >\n <md-icon>delete</md-icon>\n </button>\n </div>\n <div form>\n <span>${i18next.t('figure.label.data-name')}</span>\n <input .value=${field.name} ?disabled=${this.locked} @change=${(e: Event) => rename(value(e).trim())} />\n <span>${i18next.t('figure.label.data-label')}</span>\n <input .value=${field.label ?? ''} ?disabled=${this.locked} @change=${(e: Event) => set({ label: value(e).trim() || undefined })} />\n <span>${i18next.t('figure.label.data-kind')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => replace(fieldOfKind(field, value(e) as FigureDataNode['kind']))}>\n ${KINDS.map(k => html`<option value=${k} ?selected=${k === field.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>\n ${field.kind === 'number'\n ? html`<span>${i18next.t('figure.label.data-unit')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ unit: value(e) || undefined })}>\n <option value=\"\" ?selected=${!field.unit}>${i18next.t('figure.label.unit-none')}</option>\n ${FIGURE_UNITS.map(u => html`<option value=${u} ?selected=${u === field.unit}>${unitWord(u)}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-min')}</span>\n <input type=\"number\" step=\"any\" .value=${field.min === undefined ? '' : String(field.min)} ?disabled=${this.locked} @change=${(e: Event) => set({ min: number(e) })} />\n <span>${i18next.t('figure.label.data-max')}</span>\n <input type=\"number\" step=\"any\" .value=${field.max === undefined ? '' : String(field.max)} ?disabled=${this.locked} @change=${(e: Event) => set({ max: number(e) })} />\n <span>${i18next.t('figure.label.data-default')}</span>\n <input type=\"number\" step=\"any\" .value=${field.default === undefined ? '' : String(field.default)} ?disabled=${this.locked} @change=${(e: Event) => set({ default: number(e) })} />`\n : field.kind === 'boolean'\n ? html`<span>${i18next.t('figure.label.data-default')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) === '' ? undefined : value(e) === 'true' })}>\n <option value=\"\" ?selected=${field.default === undefined}>-</option>\n ${[false, true].map(b => html`<option value=${String(b)} ?selected=${b === field.default}>${i18next.t(b ? 'figure.label.data-true' : 'figure.label.data-false')}</option>`)}\n </select>`\n : field.kind === 'text'\n ? html`<span>${i18next.t('figure.label.data-values')}</span>\n <input\n .value=${(field.values ?? []).join(', ')}\n ?disabled=${this.locked}\n @change=${(e: Event) => {\n const values = value(e).split(',').map(v => v.trim()).filter(Boolean)\n set({ values: values.length ? values : undefined, default: field.default !== undefined && (!values.length || values.includes(field.default)) ? field.default : undefined })\n }}\n />\n <span>${i18next.t('figure.label.data-default')}</span>\n ${field.values\n ? html`<select ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) || undefined })}>\n <option value=\"\" ?selected=${field.default === undefined}>-</option>\n ${field.values.map(v => html`<option value=${v} ?selected=${v === field.default}>${v}</option>`)}\n </select>`\n : html`<input .value=${field.default ?? ''} ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) || undefined })} />`}`\n : html`<span></span>\n <label toggle>\n <input type=\"checkbox\" .checked=${!!field.json} ?disabled=${this.locked} @change=${(e: Event) => set({ json: (e.target as HTMLInputElement).checked ? true : undefined })} />\n ${i18next.t('figure.label.data-json')}\n </label>`}\n ${field.kind === 'list'\n ? html`<span>${i18next.t('figure.label.data-item-kind')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => replace({ ...field, item: nodeOfKind(value(e) as FigureDataNode['kind']) })}>\n ${KINDS.filter(k => k !== 'list').map(k => html`<option value=${k} ?selected=${k === field.item.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>`\n : nothing}\n </div>\n ${holder.kind === 'object' ? this.renderAddField(schema, row.path) : nothing}\n </section>`\n }\n\n private renderAddField(schema: readonly FigureDataField[], under: string) {\n const a = this.adding\n const named = a.name.trim()\n const add = () => {\n if (this.locked || !named) return\n this.edit({ kind: 'set-data-schema', schema: schemaWithField(schema, under, { name: named, ...nodeOfKind(a.kind) } as FigureDataField) })\n this.adding = { ...a, name: '' }\n }\n return html`<div form>\n <span>${i18next.t('figure.label.data-name')}</span>\n <input\n aria-label=${i18next.t('figure.label.data-name')}\n .value=${a.name}\n @input=${(e: Event) => (this.adding = { ...a, name: (e.target as HTMLInputElement).value })}\n @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && !e.isComposing && add()}\n />\n <span>${i18next.t('figure.label.data-kind')}</span>\n <select @change=${(e: Event) => (this.adding = { ...a, kind: (e.target as HTMLSelectElement).value as FigureDataNode['kind'] })}>\n ${KINDS.map(k => html`<option value=${k} ?selected=${k === a.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>\n </div>\n <button act ?disabled=${this.locked || !named} @click=${add}>\n <md-icon>add</md-icon>${i18next.t(under ? 'figure.button.add-data-child' : 'figure.button.add-data-field', { parent: under })}\n </button>`\n }\n\n /** A site's data pasted: the schema guessed from it, kept only when the author says so -- units, ranges and closed values are theirs to set. */\n private renderFromSample(schema: readonly FigureDataField[]) {\n let guessed: FigureDataField[] | null = null\n let unreadable = false\n if (this.pasted.trim()) {\n try {\n guessed = inferFigureDataSchema(JSON.parse(this.pasted))\n } catch {\n unreadable = true\n }\n }\n return html`<details>\n <summary>${i18next.t('figure.label.data-from-sample')}</summary>\n <p hint>${i18next.t('figure.text.data-from-sample-explained')}</p>\n <textarea .value=${this.pasted} ?disabled=${this.locked} @input=${(e: Event) => (this.pasted = (e.target as HTMLTextAreaElement).value)}></textarea>\n ${unreadable ? html`<p hint>${i18next.t('figure.text.data-not-json')}</p>` : nothing}\n ${guessed ? html`<p hint>${i18next.t(schema.length ? 'figure.text.data-guessed-replaces' : 'figure.text.data-guessed', { count: guessed.length })}</p>` : nothing}\n <button\n act\n ?disabled=${this.locked || !guessed?.length}\n @click=${() => {\n this.edit({ kind: 'set-data-schema', schema: guessed! })\n this.pasted = ''\n }}\n >\n ${i18next.t('figure.button.data-use-guessed')}\n </button>\n </details>`\n }\n\n /* ---------------------------------------------------------------- the bindings */\n\n /** What a behavior moves, in the words every screen says it in (figure-viewer dataMoveOf · moveWords). */\n private behaviorName(asset: FigureAsset, b: FigureDataValueBinding['behavior']): string {\n return moveWords(dataMoveOf(asset, b))\n }\n\n private renderBindings(asset: FigureAsset, rows: FigureDataRow[]) {\n const bindings = asset.dataInterface?.bindings ?? []\n const choices = behaviorsOf(asset)\n const resting = figureBindingsTakenOver(asset)\n return html`<section>\n <h3>${i18next.t('figure.label.data-bindings')}${this.help.button('figure.text.data-bindings-explained')}</h3>\n ${this.help.hint('figure.text.data-bindings-explained')}\n ${bindings.map(b => this.renderBinding(asset, choices, b, resting))}\n ${this.renderAddBinding(asset, rows, choices)}\n ${this.renderRotation(asset, rows)}\n </section>`\n }\n\n private renderBinding(asset: FigureAsset, choices: BehaviorChoice[], b: FigureDataBinding, resting: FigureRestingBinding[]) {\n const open = this.opened === b.id\n const set = (next: FigureDataBinding) => this.edit({ kind: 'set-data-binding', binding: next })\n const what = moveWords(dataMoveOf(asset, b.rule === 'table' ? { kind: 'table', targets: b.targets } : b.behavior))\n const rests = resting.some(r => r.id === b.id)\n return html`<section item>\n <div head>\n <button line aria-expanded=${open ? 'true' : 'false'} @click=${() => (this.opened = open ? '' : b.id)}>\n <strong>${b.label ?? b.accessor}</strong> → ${what}\n <small>${i18next.t('figure.label.data-method-' + methodOf(b))}${rests ? html` <span rests>${i18next.t('figure.label.data-binding-resting')}</span>` : nothing}</small>\n </button>\n <button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-binding')} @click=${() => this.edit({ kind: 'remove-data-binding', id: b.id })}>\n <md-icon>delete</md-icon>\n </button>\n </div>\n ${resting.filter(r => r.id === b.id).map(r => this.renderResting(r))}\n ${open ? (b.rule === 'table' ? this.renderTable(asset, b, set) : this.renderValueDetail(asset, b, set)) : nothing}\n </section>`\n }\n\n /**\n * A binding a product's capability takes over where the product registers it (ADR-0167 17): there it rests, whole or for\n * the targets named; elsewhere (a board without the product) it works.\n */\n private renderResting(r: FigureRestingBinding) {\n const where = r.capability.split('.')[0]\n const name = figureCapabilityDescriptorOf(r.capability)?.label ?? r.capability\n const targets = [...r.parts, ...r.inputs].join(', ')\n return html`<p hint>${r.whole ? i18next.t('figure.text.data-binding-rests', { where, name }) : i18next.t('figure.text.data-binding-rests-targets', { where, name, targets })}</p>`\n }\n\n private renderValueDetail(asset: FigureAsset, b: FigureDataValueBinding, set: (next: FigureDataBinding) => void) {\n const node = fieldAt(asset.dataInterface?.schema ?? [], b.accessor.replace(/\\[\\d+\\]/g, '[]'))\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const behavior = b.behavior\n const patch = (p: Partial<FigureDataValueBinding>) => {\n const next = { ...b, ...p }\n if ('param' in p && p.param === undefined) delete next.param\n set(next)\n }\n if (behavior.kind === 'items') return this.renderItemFields(asset, b, node, patch)\n return html`<div form>\n <span>${i18next.t('figure.label.data-method')}</span>\n ${node?.kind === 'number'\n ? html`<select ?disabled=${this.locked} @change=${(e: Event) => patch({ rule: value(e) as 'value' | 'scale', param: value(e) === 'scale' ? { scale: 1, offset: 0 } : undefined })}>\n ${(['value', 'scale'] as const).map(r => html`<option value=${r} ?selected=${r === b.rule}>${i18next.t('figure.label.data-method-' + r)}</option>`)}\n </select>`\n : html`<span>${i18next.t('figure.label.data-method-value')}</span>`}\n ${behavior.kind === 'state'\n ? html`<span>${i18next.t('figure.label.data-source-mode')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => patch({ behavior: { ...behavior, sourceMode: value(e) as 'observed' | 'commanded' } })}>\n ${(['observed', 'commanded'] as const).map(m => html`<option value=${m} ?selected=${behavior.sourceMode === m}>${i18next.t('figure.label.data-' + m)}</option>`)}\n </select>`\n : nothing}\n ${behavior.kind === 'pose'\n ? html`<span>${i18next.t('figure.label.data-seconds')}</span>\n <input type=\"number\" min=\"0\" step=\"any\" .value=${String(behavior.seconds ?? 0)} ?disabled=${this.locked} @change=${(e: Event) => patch({ behavior: { ...behavior, seconds: (e.target as HTMLInputElement).valueAsNumber || 0 } })} />`\n : nothing}\n ${b.rule === 'scale'\n ? html`<span>${i18next.t('figure.label.data-scale')}</span>\n <input type=\"number\" step=\"any\" .value=${String(b.param?.scale ?? 1)} ?disabled=${this.locked} @change=${(e: Event) => patch({ param: { ...b.param, scale: (e.target as HTMLInputElement).valueAsNumber } })} />\n <span>${i18next.t('figure.label.data-offset')}</span>\n <input type=\"number\" step=\"any\" .value=${String(b.param?.offset ?? 0)} ?disabled=${this.locked} @change=${(e: Event) => patch({ param: { ...b.param, offset: (e.target as HTMLInputElement).valueAsNumber } })} />`\n : nothing}\n </div>`\n }\n\n /**\n * A table (ADR-0166 10): what it shows on -- parts, controls, a motion group -- its rows, a code or an interval each\n * with a cell per column, the look of every other value, and whether a board may swap it for a legend.\n */\n private renderTable(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const parts = partsOf(asset)\n const inputs = stateInputsOf(asset)\n const groups = asset.motionGroups ?? []\n const targets = b.targets\n const toggle = (list: string[] | undefined, id: string, on: boolean) => (on ? [...(list ?? []), id] : (list ?? []).filter(x => x !== id))\n const retarget = (t: typeof targets) => set(tableWithTargets(b, t))\n return html`<div form>\n <span>${i18next.t('figure.label.data-label')}</span>\n <input .value=${b.label ?? ''} placeholder=${b.accessor} ?disabled=${this.locked} @change=${(e: Event) => {\n const label = value(e).trim()\n const next = { ...b, label }\n if (!label) delete (next as { label?: string }).label\n set(next)\n }} />\n </div>\n ${this.renderTargets(parts, inputs, groups, targets, {\n part: (id, on) => retarget({ ...targets, parts: toggle(targets.parts, id, on) }),\n input: (id, on) => retarget({ ...targets, inputs: toggle(targets.inputs, id, on) }),\n group: id => retarget({ ...targets, group: id || undefined })\n })}\n ${b.lookup === 'code' ? this.renderCodeRows(asset, b, set) : this.renderRangeRows(asset, b, set)}\n <label toggle>\n <input type=\"checkbox\" .checked=${!!b.legend} ?disabled=${this.locked} @change=${(e: Event) => {\n const next = { ...b }\n if ((e.target as HTMLInputElement).checked) next.legend = { role: legendRoleOf(b.id) }\n else delete next.legend\n set(next)\n }} />\n ${i18next.t('figure.label.data-legend-swappable')}\n </label>\n ${b.legend\n ? html`<div form>\n <span>${i18next.t('figure.label.data-legend-role')}</span>\n <input .value=${b.legend.role} ?disabled=${this.locked} @change=${(e: Event) => set({ ...b, legend: { role: value(e).trim() } })} />\n </div>\n <p hint>${i18next.t('figure.text.data-legend-explained')}</p>`\n : nothing}`\n }\n\n /** Which parts, controls and motion group a table shows on: chips to tick, and the part chosen in the modeller by one button. */\n private renderTargets(\n parts: string[],\n inputs: Array<{ id: string; label: string }>,\n groups: NonNullable<FigureAsset['motionGroups']>,\n t: { parts?: string[]; inputs?: string[]; group?: string },\n on: { part: (id: string, on: boolean) => void; input: (id: string, on: boolean) => void; group: (id: string) => void }\n ) {\n const chosen = (e: Event) => (e.target as HTMLInputElement).checked\n return html`<div form>\n <span>${i18next.t('figure.label.data-target-parts')}</span>\n <div chips>\n ${parts.map(p => html`<label><input type=\"checkbox\" .checked=${!!t.parts?.includes(p)} ?disabled=${this.locked} @change=${(e: Event) => on.part(p, chosen(e))} />${p}</label>`)}\n ${this.selected && parts.includes(this.selected) && !t.parts?.includes(this.selected)\n ? html`<button act ?disabled=${this.locked} @click=${() => on.part(this.selected, true)}><md-icon>add</md-icon>${i18next.t('figure.button.data-add-selected-part', { part: this.selected })}</button>`\n : nothing}\n </div>\n ${inputs.length\n ? html`<span>${i18next.t('figure.label.data-target-inputs')}</span>\n <div chips>\n ${inputs.map(i => html`<label><input type=\"checkbox\" .checked=${!!t.inputs?.includes(i.id)} ?disabled=${this.locked} @change=${(e: Event) => on.input(i.id, chosen(e))} />${i.label}</label>`)}\n </div>`\n : nothing}\n ${groups.length\n ? html`<span>${i18next.t('figure.label.data-target-group')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => on.group((e.target as HTMLSelectElement).value)}>\n <option value=\"\" ?selected=${!t.group}>${i18next.t('figure.label.data-none')}</option>\n ${groups.map(g => html`<option value=${g.id} ?selected=${g.id === t.group}>${g.label}</option>`)}\n </select>`\n : nothing}\n </div>`\n }\n\n /** The column heads of a table's rows, after the key's own one or two. */\n private columnHeads(columns: TableColumn[]) {\n return columns.map(c =>\n c.kind === 'value'\n ? html`<small>${c.label}${c.unit ? ` (${c.unit}${c.min !== undefined && c.max !== undefined ? ` ${c.min}~${c.max}` : ''})` : ''}</small>`\n : html`<small>${i18next.t('figure.label.data-column-' + c.kind)}</small>`\n )\n }\n\n /** One look's cells, a column each: a colour, an effect, a control's value, a clip, a speed, a pause -- empty leaves the target as it is. */\n private lookCells(asset: FigureAsset, columns: TableColumn[], look: FigureDataTableEntry, write: (look: FigureDataTableEntry) => void) {\n const without = (key: keyof FigureDataTableEntry) => {\n const next = { ...look }\n delete next[key]\n return next\n }\n const typed = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n return columns.map(c => {\n if (c.kind === 'color')\n return look.color === undefined\n ? html`<button act ?disabled=${this.locked} @click=${() => write({ ...look, color: '#888888' })}>${i18next.t('figure.button.data-set-result')}</button>`\n : html`<span colour><input type=\"color\" .value=${look.color} ?disabled=${this.locked} @change=${(e: Event) => write({ ...look, color: typed(e) })} /><button act ?disabled=${this.locked} title=${i18next.t('figure.button.data-clear-result')} @click=${() => write(without('color'))}><md-icon>close</md-icon></button></span>`\n if (c.kind === 'effect')\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, effect: { kind: typed(e) as 'blink' | 'glow' } }) : write(without('effect')))}>\n ${(['', 'blink', 'glow'] as const).map(k => html`<option value=${k} ?selected=${(look.effect?.kind ?? '') === k}>${i18next.t('figure.label.data-effect-' + (k || 'none'))}</option>`)}\n </select>`\n if (c.kind === 'value') {\n const v = look.values?.[c.id]\n return html`<input type=\"number\" step=\"any\" min=${c.min ?? ''} max=${c.max ?? ''} .value=${v === undefined ? '' : String(v)} ?disabled=${this.locked} @change=${(e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n const values = { ...look.values }\n if (Number.isNaN(n)) delete values[c.id]\n else values[c.id] = n\n write(Object.keys(values).length ? { ...look, values } : without('values'))\n }} />`\n }\n if (c.kind === 'clip')\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, clip: typed(e) }) : write(without('clip')))}>\n <option value=\"\" ?selected=${look.clip === undefined}>-</option>\n ${c.clips.map(clip => html`<option value=${clip} ?selected=${clip === look.clip}>${clip}</option>`)}\n </select>`\n if (c.kind === 'speed')\n return html`<input type=\"number\" min=\"0\" max=\"3\" step=\"any\" .value=${look.speed === undefined ? '' : String(look.speed)} ?disabled=${this.locked} @change=${(e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n write(Number.isNaN(n) ? without('speed') : { ...look, speed: n })\n }} />`\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, paused: typed(e) === 'true' }) : write(without('paused')))}>\n <option value=\"\" ?selected=${look.paused === undefined}>-</option>\n ${[false, true].map(v => html`<option value=${String(v)} ?selected=${v === look.paused}>${i18next.t(v ? 'figure.label.data-paused' : 'figure.label.data-playing')}</option>`)}\n </select>`\n })\n }\n\n /** The look of every other value: a row like the others, added or taken away; kept when a closed field's values are not all rows. */\n private renderOtherwise(asset: FigureAsset, b: FigureDataTableBinding, columns: TableColumn[], needed: boolean, set: (next: FigureDataBinding) => void, keyCells: number) {\n const look = b.table.default\n if (look === undefined)\n return html`<button act ?disabled=${this.locked} @click=${() => set(tableWithLook(b, 'default', {}))}><md-icon>add</md-icon>${i18next.t('figure.button.add-data-default')}</button>`\n const { default: _, ...rest } = b.table\n return html`<div looks style=\"grid-template-columns: ${gridOf(keyCells, columns.length)}\">\n <span style=\"grid-column: span ${keyCells}\">${i18next.t('figure.label.data-otherwise')}</span>\n ${this.lookCells(asset, columns, look, l => set(tableWithLook(b, 'default', l)))}\n ${needed ? html`<span></span>` : html`<button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-case')} @click=${() => set({ ...b, table: rest })}><md-icon>delete</md-icon></button>`}\n </div>`\n }\n\n /**\n * A code table's rows: a code each, typed, with its look. A closed text's values follow the codes (ADR-0166 risk 3):\n * a code added, renamed or taken away is the field's value too; true and false are both rows.\n */\n private renderCodeRows(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const columns = tableColumnsOf(asset, b)\n const node = fieldAt(asset.dataInterface?.schema ?? [], b.accessor.replace(/\\[\\d+\\]/g, '[]'))\n const boolean = node?.kind === 'boolean'\n const rows = Object.entries(b.table).filter(([k]) => k !== 'default')\n const domain = node ? domainOf(node).map(String) : []\n const covered = domain.length > 0 && domain.every(v => b.table[v] !== undefined)\n /* The binding and the field it reads, in one undo step. */\n const rekeyed = (list: Array<[string, FigureDataTableEntry]>) => {\n const next = tableWithKeys(b, list)\n const schema = boolean ? undefined : schemaFollowingCodes(asset, next, list.map(([k]) => k))\n this.edit({ kind: 'set-data-binding', binding: next, ...(schema ? { schema } : {}) })\n }\n const rekey = (i: number, typed: string) => {\n const key = typed.trim()\n if (!key || key === 'default' || rows.some(([k], j) => j !== i && k === key)) return this.requestUpdate()\n rekeyed(rows.map(([k, v], j) => (j === i ? [key, v] : [k, v])))\n }\n const word = (k: string) => (boolean ? i18next.t(k === 'true' ? 'figure.label.data-true' : 'figure.label.data-false') : k)\n return html`<div looks style=\"grid-template-columns: ${gridOf(1, columns.length)}\">\n <small>${i18next.t('figure.label.data-case-value')}</small>${this.columnHeads(columns)}<span></span>\n ${rows.map(\n ([k, look], i) => html`${boolean\n ? html`<span>${word(k)}</span>`\n : html`<input .value=${k} aria-label=${i18next.t('figure.label.data-case-value')} ?disabled=${this.locked} @change=${(e: Event) => rekey(i, (e.target as HTMLInputElement).value)} />`}\n ${this.lookCells(asset, columns, look, l => set(tableWithLook(b, k, l)))}\n ${boolean || rows.length < 2 && domain.length > 0\n ? html`<span></span>`\n : html`<button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-case')} @click=${() => rekeyed(rows.filter((_, j) => j !== i))}><md-icon>delete</md-icon></button>`}`\n )}\n </div>\n ${this.renderOtherwise(asset, b, columns, domain.length > 0 && !covered, set, 1)}\n ${boolean\n ? nothing\n : html`<button act ?disabled=${this.locked} @click=${() => rekeyed([...rows, [freeCodeOf(rows.map(([k]) => k)), {}]])}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add-data-case')}\n </button>`}`\n }\n\n /**\n * A range table's rows: from (inclusive) and to (exclusive), either end open, with a look each. Giving the last row,\n * open above, an end starts the next row there; a row open above is the last there can be.\n */\n private renderRangeRows(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const columns = tableColumnsOf(asset, b)\n const rows = Object.entries(b.table).filter(([k]) => k !== 'default')\n const ends = (key: string) => {\n const [from = '', to = ''] = key.split('~')\n return { from, to }\n }\n const rekey = (i: number, end: 'from' | 'to', typed: string) => {\n const was = ends(rows[i]![0])\n const next = { ...was, [end]: typed.trim() }\n const key = `${next.from}~${next.to}`\n /* A key another row has would take that row's place: not taken. */\n if (rows.some(([k], j) => j !== i && k === key)) return this.requestUpdate()\n const list: Array<[string, FigureDataTableEntry]> = rows.map(([k, v], j) => (j === i ? [key, v] : [k, v]))\n /* The last row, open above, given an end: the next row starts there, open above, so every value still has a row. */\n if (i === rows.length - 1 && end === 'to' && was.to === '' && next.to !== '') list.push([`${next.to}~`, {}])\n set(tableWithKeys(b, list))\n }\n const last = rows.at(-1)\n const lastEnd = last ? ends(last[0]).to : ''\n const open = !!last && lastEnd === ''\n return html`<div looks style=\"grid-template-columns: ${gridOf(2, columns.length)}\">\n <small>${i18next.t('figure.label.data-range-from')}</small><small>${i18next.t('figure.label.data-range-to')}</small>${this.columnHeads(columns)}<span></span>\n ${rows.map(([k, look], i) => {\n const e = ends(k)\n return html`<input type=\"number\" step=\"any\" .value=${e.from} ?disabled=${this.locked} @change=${(ev: Event) => rekey(i, 'from', (ev.target as HTMLInputElement).value)} />\n <input type=\"number\" step=\"any\" .value=${e.to} ?disabled=${this.locked} @change=${(ev: Event) => rekey(i, 'to', (ev.target as HTMLInputElement).value)} />\n ${this.lookCells(asset, columns, look, l => set(tableWithLook(b, k, l)))}\n <button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-range')} @click=${() => set(tableWithKeys(b, rows.filter((_, j) => j !== i)))}><md-icon>delete</md-icon></button>`\n })}\n </div>\n ${this.renderOtherwise(asset, b, columns, false, set, 2)}\n ${open ? html`<p hint>${i18next.t('figure.text.data-range-close-last')}</p>` : nothing}\n <button act ?disabled=${this.locked || open} @click=${() => set(tableWithKeys(b, [...rows, [`${lastEnd}~`, {}]]))}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add-data-range')}\n </button>`\n }\n\n /** Which field of each element is its id, its type, its place, its height in the stack, its status. */\n private renderItemFields(asset: FigureAsset, b: FigureDataValueBinding, node: FigureDataNode | undefined, set: (patch: Partial<FigureDataValueBinding>) => void) {\n const behavior = b.behavior\n if (behavior.kind !== 'items') return nothing\n let element: FigureDataNode | undefined = node\n while (element?.kind === 'list') element = element.item\n const fields = element?.kind === 'object' ? element.fields.filter(f => f.kind === 'number' || f.kind === 'text' || f.kind === 'boolean').map(f => f.name) : []\n const pick = (role: 'id' | 'type' | 'place' | 'stack' | 'status', typed: string) => {\n const next: Record<string, unknown> = { ...behavior, [role]: typed }\n if (!typed) delete next[role]\n set({ behavior: next as FigureDataValueBinding['behavior'] })\n }\n return html`<div form>\n ${node?.kind === 'list'\n ? (['id', 'type', 'place', 'stack', 'status'] as const).map(\n role => html`<span>${i18next.t('figure.label.data-item-' + role)}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => pick(role, (e.target as HTMLSelectElement).value)}>\n <option value=\"\" ?selected=${!behavior[role]}>-</option>\n ${fields.map(f => html`<option value=${f} ?selected=${f === behavior[role]}>${f}</option>`)}\n </select>`\n )\n : nothing}\n <span>${i18next.t('figure.label.data-item-slot')}</span>\n <input .value=${behavior.slot ?? ''} ?disabled=${this.locked} @change=${(e: Event) => {\n const slot = (e.target as HTMLInputElement).value.trim()\n const next: Record<string, unknown> = { ...behavior, slot }\n if (!slot) delete next.slot\n set({ behavior: next as FigureDataValueBinding['behavior'] })\n }} />\n </div>`\n }\n\n /**\n * 「연결 추가」 (ADR-0166 10): a field there or a new name, then a method the field's kind allows. As it is or scaled,\n * the one thing it moves; a table, the parts, controls and motion group it shows on -- a new name makes the field.\n */\n private renderAddBinding(asset: FigureAsset, rows: FigureDataRow[], choices: BehaviorChoice[]) {\n const bindable = rows.filter(r => r.node.kind !== 'object')\n const a = this.connecting\n /* 「새 필드」: a value no field path can have (a path is names and `[]`). */\n const NEW = '+'\n const row = a.path === NEW || !bindable.length ? null : (bindable.find(r => r.path === a.path) ?? bindable[0]!)\n const methods = methodsOf(row?.node ?? null, choices)\n const method = methods.includes(a.method as DataMethod) ? (a.method as DataMethod) : methods[0]\n const table = method === 'code' || method === 'ranges'\n const fitting = row && !table ? choices.filter(c => fitsField(row.node, c)) : []\n const choice = fitting.find(c => c.key === a.behavior) ?? fitting[0]\n const set = (patch: Partial<typeof a>) => (this.connecting = { ...a, ...patch })\n const typed = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const name = a.name.trim()\n const targets = { parts: a.parts, inputs: a.inputs, ...(a.group ? { group: a.group } : {}) }\n const aimed = a.parts.length > 0 || a.inputs.length > 0 || !!a.group\n const ready = table ? aimed && (row !== null || /^[A-Za-z_][\\w-]*$/.test(name)) : !!choice && !!row\n const add = () => {\n if (table) {\n const { binding, schema } = tableDraftOf(asset, row ? { path: row.path, node: row.node } : { name }, method as 'code' | 'ranges', targets)\n this.edit({ kind: 'set-data-binding', binding, ...(schema ? { schema } : {}) })\n this.opened = binding.id\n } else {\n /* A list is read whole by items; one value of it, through its first element. */\n const accessor = row!.node.kind === 'list' && choice!.kind === 'items' ? row!.path.replace(/\\[\\]$/, '') : accessorOfRow(row!.path)\n const binding = bindingDraftOf(asset, accessor, row!.node, choice!, method as 'value' | 'scale')\n this.edit({ kind: 'set-data-binding', binding })\n this.opened = binding.id\n }\n this.connecting = { path: '', name: '', method: '', behavior: '', parts: [], inputs: [], group: '' }\n }\n const toggle = (list: string[], id: string, on: boolean) => (on ? [...list, id] : list.filter(x => x !== id))\n return html`<div form>\n <span>${i18next.t('figure.label.data-field')}</span>\n <select @change=${(e: Event) => set({ path: typed(e), name: '' })}>\n ${bindable.map(r => html`<option value=${r.path} ?selected=${r === row}>${r.path}</option>`)}\n <option value=${NEW} ?selected=${row === null}>${i18next.t('figure.label.data-new-field')}</option>\n </select>\n ${row === null\n ? html`<span>${i18next.t('figure.label.data-name')}</span>\n <input .value=${a.name} @input=${(e: Event) => set({ name: typed(e) })} />`\n : nothing}\n <span>${i18next.t('figure.label.data-method')}</span>\n ${methods.length === 1\n ? /* One way only (a text is read by a code table): said, not offered as a choice of one (sweep 2026-10-27 U10). */\n html`<span method>${i18next.t('figure.label.data-method-' + methods[0])}</span>`\n : html`<select ?disabled=${!methods.length} @change=${(e: Event) => set({ method: typed(e) as DataMethod })}>\n ${methods.map(m => html`<option value=${m} ?selected=${m === method}>${i18next.t('figure.label.data-method-' + m)}</option>`)}\n </select>`}\n ${!table && fitting.length\n ? html`<span>${i18next.t('figure.label.data-behavior')}</span>\n <select @change=${(e: Event) => set({ behavior: typed(e) })}>\n ${fitting.map(c => html`<option value=${c.key} ?selected=${c === choice}>${this.behaviorName(asset, c.behavior)}</option>`)}\n </select>`\n : nothing}\n </div>\n ${table\n ? this.renderTargets(partsOf(asset), stateInputsOf(asset), asset.motionGroups ?? [], targets, {\n part: (id, on) => set({ parts: toggle(a.parts, id, on) }),\n input: (id, on) => set({ inputs: toggle(a.inputs, id, on) }),\n group: id => set({ group: id })\n })\n : nothing}\n ${table && !aimed ? html`<p hint>${i18next.t('figure.text.data-table-needs-target')}</p>` : nothing}\n ${methods.length ? nothing : html`<p hint>${i18next.t('figure.text.data-no-behavior')}</p>`}\n <button act ?disabled=${this.locked || !ready} @click=${add}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add-data-binding')}\n </button>`\n }\n\n /**\n * 「+ 회전」: a joint that turns without end, turned by the data -- on, speed in rpm, direction -- in one step. The\n * clips, the group and the bindings it writes are ordinary ones, edited one by one afterwards.\n */\n private renderRotation(asset: FigureAsset, rows: FigureDataRow[]) {\n const joints = endlessJointsOf(asset)\n if (!joints.length) return nothing\n const r = this.rotating\n const joint = joints.find(j => j.input === r.input) ?? joints[0]!\n const values = rows.filter(row => !row.path.includes('[]'))\n const of = (kind: FigureDataNode['kind'], closed = false) => values.filter(row => row.node.kind === kind && (!closed || domainOf(row.node).length > 0))\n const speedRow = values.find(row => row.path === r.speed)\n const speedMax = r.max || (speedRow?.node.kind === 'number' ? (speedRow.node.max ?? 0) : 0)\n const directionRow = values.find(row => row.path === r.direction)\n const directions = directionRow ? domainOf(directionRow.node).map(String) : []\n const forward = directions.includes(r.forward) ? r.forward : (directions[0] ?? '')\n const reverse = directions.includes(r.reverse) ? r.reverse : (directions.find(v => v !== forward) ?? '')\n const set = (patch: Partial<typeof r>) => (this.rotating = { ...r, ...patch })\n const typed = (e: Event) => (e.target as HTMLSelectElement | HTMLInputElement).value\n const pick = (rows: FigureDataRow[], value: string, change: (v: string) => void) =>\n html`<select ?disabled=${this.locked} @change=${(e: Event) => change(typed(e))}>\n <option value=\"\" ?selected=${!value}>${i18next.t('figure.label.data-none')}</option>\n ${rows.map(row => html`<option value=${row.path} ?selected=${row.path === value}>${row.path}</option>`)}\n </select>`\n const choice: RotationChoice = {\n input: joint.input,\n label: i18next.t('figure.label.data-rotation-of', { name: joint.label }),\n ...(r.on ? { on: r.on } : {}),\n ...(r.speed ? { speed: { path: r.speed, max: speedMax } } : {}),\n ...(r.direction && forward && reverse ? { direction: { path: r.direction, forward, reverse } } : {})\n }\n const ready = !r.speed || speedMax > 0\n return html`<details>\n <summary>${i18next.t('figure.label.data-rotation')}</summary>\n <p hint>${i18next.t('figure.text.data-rotation-explained')}</p>\n <div form>\n <span>${i18next.t('figure.label.data-rotation-joint')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ input: typed(e) })}>\n ${joints.map(j => html`<option value=${j.input} ?selected=${j === joint}>${j.label}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-rotation-on')}</span>\n ${pick(of('boolean'), r.on, v => set({ on: v }))}\n <span>${i18next.t('figure.label.data-rotation-speed')}</span>\n ${pick(of('number'), r.speed, v => set({ speed: v, max: 0 }))}\n ${r.speed\n ? html`<span>${i18next.t('figure.label.data-rotation-max')}</span>\n <input type=\"number\" min=\"0\" step=\"any\" .value=${speedMax ? String(speedMax) : ''} ?disabled=${this.locked} @change=${(e: Event) => set({ max: (e.target as HTMLInputElement).valueAsNumber || 0 })} />`\n : nothing}\n <span>${i18next.t('figure.label.data-rotation-direction')}</span>\n ${pick(of('text', true), r.direction, v => set({ direction: v, forward: '', reverse: '' }))}\n ${directions.length\n ? html`<span>${i18next.t('figure.label.data-rotation-forward')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ forward: typed(e) })}>\n ${directions.map(v => html`<option value=${v} ?selected=${v === forward}>${v}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-rotation-reverse')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ reverse: typed(e) })}>\n ${directions.map(v => html`<option value=${v} ?selected=${v === reverse}>${v}</option>`)}\n </select>`\n : nothing}\n </div>\n ${ready ? nothing : html`<p hint>${i18next.t('figure.text.data-rotation-needs-max')}</p>`}\n <button\n act\n ?disabled=${this.locked || !ready}\n @click=${() => {\n this.dispatchEvent(new CustomEvent('part-edits', { detail: { edits: rotationStepsOf(asset, choice) }, bubbles: true, composed: true }))\n this.rotating = { input: '', on: '', speed: '', max: 0, direction: '', forward: '', reverse: '' }\n }}\n >\n <md-icon>add</md-icon>${i18next.t('figure.button.data-add-rotation')}\n </button>\n </details>`\n }\n\n /* ---------------------------------------------------------------- the sample */\n\n /** Data to try, read the way a placed figure reads it: what it moves, or why it is refused; in the preview, the figure running on it. */\n private renderSample(asset: FigureAsset) {\n const text = this.sample || JSON.stringify(figureDataExample(asset.dataInterface!), null, 2)\n let data: unknown\n let unreadable = false\n try {\n data = JSON.parse(text)\n } catch {\n unreadable = true\n }\n const legends = this.sampleLegends()\n const read = unreadable ? null : sampleOf(asset, data, legends)\n const r = read?.result\n const tables = (asset.dataInterface?.bindings ?? []).filter((b): b is FigureDataTableBinding => b.rule === 'table')\n return html`<section>\n <h3>${i18next.t('figure.label.data-sample')}${this.help.button('figure.text.data-sample-explained')}</h3>\n ${this.help.hint('figure.text.data-sample-explained')}\n <textarea .value=${text} @input=${(e: Event) => this.try((e.target as HTMLTextAreaElement).value)}></textarea>\n ${unreadable\n ? html`<p hint>${i18next.t('figure.text.data-not-json')}</p>`\n : read!.issues.length\n ? html`<p hint>${read!.issues.map(i => i18next.t('figure.text.data-value-' + i.reason, { path: i.path || '-' })).join(' · ')}</p>`\n : html`<ul result>\n ${Object.entries(r!.states).map(([input, s]) => html`<li>${asset.stateInputs?.[input]?.label ?? input} = ${s.value}</li>`)}\n ${Object.entries(r!.palette).map(([token, colour]) => html`<li>${token} = ${colour}</li>`)}\n ${Object.entries(r!.motion).map(\n ([group, m]) =>\n html`<li>\n ${(asset.motionGroups ?? []).find(g => g.id === group)?.label ?? group}:\n ${[m.clip, m.speed === undefined ? '' : `× ${m.speed}`, m.paused ? i18next.t('figure.label.data-paused') : ''].filter(Boolean).join(' ')}\n </li>`\n )}\n ${tables.map(b => this.renderTableUse(asset, b, read!.uses[b.id]))}\n ${Object.entries(r!.parts).map(([part, look]) => html`<li>${part}: ${[look.color, look.effect ? i18next.t('figure.label.data-effect-' + look.effect.kind) : ''].filter(Boolean).join(' ')}</li>`)}\n ${Object.entries(r!.pose).map(([axis, p]) => html`<li>${i18next.t('figure.label.data-axis-' + axis)} = ${p!.value}</li>`)}\n ${r!.items.map(i => html`<li>${i18next.t('figure.label.data-items-count', { count: i.records.length })}${i.records.length ? `: ${i.records.map(x => x.id).join(', ')}` : ''}</li>`)}\n </ul>`}\n ${read?.notes.length ? html`<p hint>${read.notes.map(n => i18next.t('figure.text.data-note-' + n.reason, { binding: n.binding ?? '', key: n.key ?? '', column: n.column ? i18next.t('figure.label.data-column-' + n.column) : '', value: shownValue(n.value) })).join(' · ')}</p>` : nothing}\n ${r && Object.keys(r.pose).length ? html`<p hint>${i18next.t('figure.text.data-sample-moves-all')}</p>` : nothing}\n ${this.renderSampleLegends(tables)}\n <label toggle>\n <input\n type=\"checkbox\"\n .checked=${this.sampling}\n @change=${(e: Event) => {\n this.sampling = (e.target as HTMLInputElement).checked\n this.tell(unreadable ? null : data)\n }}\n />\n ${i18next.t('figure.label.data-sample-in-preview')}\n </label>\n </section>`\n }\n\n /** Which row of a table the sample's value matched, and from which table: the figure's own or the sample legend of its role. */\n private renderTableUse(asset: FigureAsset, b: FigureDataTableBinding, use: { value: unknown; key: string | null; source: string; legend?: string } | undefined) {\n if (!use || use.value === undefined) return nothing\n const word = (v: unknown) => (typeof v === 'boolean' || v === 'true' || v === 'false' ? i18next.t(String(v) === 'true' ? 'figure.label.data-true' : 'figure.label.data-false') : String(v))\n const row = use.key === null ? i18next.t('figure.label.data-none') : use.key === 'default' ? i18next.t('figure.label.data-otherwise') : word(use.key)\n const from = use.source === 'figure' ? i18next.t('figure.label.data-table-own') : i18next.t('figure.label.data-table-legend', { name: use.legend ?? '' })\n return html`<li>${b.label ?? b.accessor} = ${word(use.value)} → ${row} <small>(${from})</small></li>`\n }\n\n /** The sample legends as read: by role, those that are JSON. */\n private sampleLegends(): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const [role, text] of Object.entries(this.legendSample)) {\n if (!text.trim()) continue\n try {\n out[role] = JSON.parse(text)\n } catch {\n /* Not JSON yet: the figure's own table shows. */\n }\n }\n return out\n }\n\n /**\n * A legend pasted for each table role, to see the figure as a board's legend of that role would show it -- not saved.\n * The preview shows it too, as a scene's legend named as the role.\n */\n private renderSampleLegends(tables: FigureDataTableBinding[]) {\n const roles = [...new Set(tables.flatMap(b => (b.legend ? [b.legend.role] : [])))]\n if (!roles.length) return nothing\n return html`<details>\n <summary>${i18next.t('figure.label.data-sample-legend')}</summary>\n <p hint>${i18next.t('figure.text.data-sample-legend-explained')}</p>\n ${roles.map(\n role => html`<label>${role}</label>\n <textarea\n .value=${this.legendSample[role] ?? ''}\n placeholder='{ \"CODE\": { \"color\": \"#22c55e\" }, \"default\": {} }'\n @input=${(e: Event) => {\n this.legendSample = { ...this.legendSample, [role]: (e.target as HTMLTextAreaElement).value }\n this.dispatchEvent(new CustomEvent('legend-sample', { detail: { legends: this.sampleLegends() }, bubbles: true, composed: true }))\n }}\n ></textarea>`\n )}\n </details>`\n }\n\n private try(typed: string) {\n this.sample = typed\n try {\n this.tell(JSON.parse(typed))\n } catch {\n /* Not JSON yet: the preview keeps what it ran on. */\n }\n }\n\n /** The sample to the preview while it is asked for; null lets the preview's figure go back to its own values. */\n private tell(data: unknown) {\n this.dispatchEvent(new CustomEvent('data-sample', { detail: { data: this.sampling ? data : null }, bubbles: true, composed: true }))\n }\n\n private edit(edit: unknown) {\n this.dispatchEvent(new CustomEvent('part-edit', { detail: { edit }, bubbles: true, composed: true }))\n }\n}\n\n/** A node of a kind, started empty. */\nfunction nodeOfKind(kind: FigureDataNode['kind']): FigureDataNode {\n if (kind === 'object') return { kind, fields: [] }\n if (kind === 'list') return { kind, item: { kind: 'object', fields: [] } }\n return { kind } as FigureDataNode\n}\n\n/** A value in a sentence: a text as it is, anything else as JSON. */\nconst shownValue = (v: unknown): string => (typeof v === 'string' ? v : JSON.stringify(v ?? ''))\n\n/** A table row's columns: the key's one or two, a cell per column, and the remove button. */\nfunction gridOf(keyCells: number, columns: number): string {\n return `${'minmax(64px, 1fr) '.repeat(keyCells)}${'minmax(72px, 1fr) '.repeat(columns)}30px`\n}\n"]}
|
|
1
|
+
{"version":3,"file":"figure-data-panel.js","sourceRoot":"","sources":["../../client/modeller/figure-data-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport JSON5 from 'json5'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { unitWord } from './unit-words.js'\nimport { FIGURE_UNITS, figureDataExample, inferFigureDataSchema } from '@hatiolab/figure-model'\nimport type {\n FigureAsset,\n FigureDataBinding,\n FigureDataField,\n FigureDataNode,\n FigureDataRow,\n FigureDataTableBinding,\n FigureDataTableEntry,\n FigureDataValueBinding\n} from '@hatiolab/figure-model'\n\nimport {\n accessorOfRow,\n behaviorsOf,\n bindingDraftOf,\n domainOf,\n endlessJointsOf,\n fieldAt,\n fieldOfKind,\n fitsField,\n freeCodeOf,\n legendRoleOf,\n methodOf,\n methodsOf,\n freeNumberCodeOf,\n tableWithKeep,\n partsOf,\n rotationStepsOf,\n sampleOf,\n schemaRowsOf,\n type RotationChoice,\n schemaWithField,\n schemaWithFieldReplaced,\n schemaWithoutField,\n schemaFollowingCodes,\n stateInputsOf,\n tableColumnsOf,\n tableDraftOf,\n tableWithKeys,\n tableWithLook,\n tableWithTargets,\n type BehaviorChoice,\n type DataMethod,\n type TableColumn\n} from './data-interface.js'\nimport { SidePanelStyles } from '@things-factory/figure-viewer/dist-client/side-panel-styles.js'\nimport { dataMoveOf } from '@things-factory/figure-viewer/dist-client/data-connection.js'\nimport { kindName, kindWords, moveWords } from '@things-factory/figure-viewer/dist-client/data-words.js'\nimport { figureBindingsTakenOver, figureCapabilityDescriptorOf, type FigureRestingBinding } from '@hatiolab/things-scene'\nimport { consumerDescriptors } from './consumer-capabilities.js'\nimport { HelpToggles } from './help.js'\n\nconst KINDS: FigureDataNode['kind'][] = ['number', 'boolean', 'text', 'object', 'list']\n\n/**\n * 데이터 -- the data a site sends this figure, in its own names, and what each value moves (ADR-0051 §8, data binding\n * design decision 4). The schema is free: fields the author names, a tree of objects and lists. A binding reads one place\n * of it and shows it in the figure (ADR-0166): as it is or scaled, it moves one thing -- a control, a colour, a motion\n * group's clip, speed or pause, its position, the items in its places; by a code table or a range table, each value's\n * look goes to several targets at once -- parts' colour and effect, controls' values, a motion group. The field's kind\n * says which methods there are. Every change is one part edit, and whether it holds is the kernel's check.\n *\n * The sample is not saved: data tried here, read the one way a placed figure reads it, and -- in the preview -- the figure\n * running on it (`data-sample`); a sample legend pasted for a table's role shows it as a board's legend would\n * (`legend-sample`).\n */\n/** A binding being added to the open field: nothing chosen yet. */\nconst NO_CONNECTING = { method: '' as DataMethod | '', behavior: '', parts: [] as string[], inputs: [] as string[], group: '' }\n\n@customElement('figure-data-panel')\nexport class FigureDataPanel extends localize(i18next)(LitElement) {\n private readonly help = new HelpToggles(this)\n static styles = [\n /* The panel's scrollbars -- the sample's box among them -- in the shell's look, not the browser's. */\n ScrollbarStyles,\n SidePanelStyles,\n css`\n :host {\n display: block;\n }\n /* Where the sample shows, said while editing, with the press that goes there. */\n p[sample-where] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px 8px;\n margin: 4px 0 0;\n font-size: var(--ui-t-small, 11.5px);\n color: var(--md-sys-color-on-surface-variant);\n }\n /*\n The fields as a table -- field, kind, what it moves -- a line between rows: a list of two-line names with their\n kinds pushed right ran together, one field not told from the next (user 2026-11-12).\n */\n div[fields] {\n display: grid;\n grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1fr);\n border-top: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n div[fields] > div[head],\n div[fields] > button[row] {\n grid-column: 1 / -1;\n display: grid;\n grid-template-columns: subgrid;\n column-gap: 8px;\n align-items: center;\n padding: 5px 6px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n div[fields] > div[head] {\n font-size: var(--ui-t-micro, 11px);\n color: var(--md-sys-color-on-surface-variant);\n }\n div[fields] > button[row] {\n min-height: var(--figure-control-height);\n margin: 0;\n border-top: none;\n border-left: none;\n border-right: none;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n div[fields] > button[row]:hover {\n background: var(--md-sys-color-surface-container-low, rgba(0, 0, 0, 0.03));\n }\n div[fields] > button[row][selected] {\n background: var(--md-sys-color-secondary-container, rgba(0, 0, 0, 0.06));\n }\n div[fields] span[role='cell'] {\n min-width: 0;\n overflow-wrap: anywhere;\n }\n div[fields] span[name] {\n display: grid;\n }\n div[fields] span[name] small,\n div[fields] span[none] {\n color: var(--md-sys-color-on-surface-variant);\n }\n div[fields] div[bindings] > h4 {\n display: flex;\n align-items: center;\n gap: 4px;\n margin: 12px 0 6px;\n font-size: var(--ui-t-body, 13px);\n font-weight: 600;\n }\n div[fields] > div[detail] {\n grid-column: 1 / -1;\n padding: 8px 6px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n section[item] {\n display: grid;\n gap: 8px;\n padding: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 8px;\n }\n div[head] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 30px;\n gap: 6px;\n align-items: center;\n }\n div[head] button[line] {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n overflow-wrap: anywhere;\n cursor: pointer;\n }\n /* What it reads and where on the first line, its method under it: a method wrapped alone read 「· 배율」 (sweep 2026-10-27 U11). */\n div[head] button[line] small {\n display: block;\n color: var(--md-sys-color-on-surface-variant);\n }\n /* A binding a product capability takes over is marked where the list is read, folded or not (sweep 2026-10-27 U18). */\n div[head] button[line] span[rests] {\n padding: 0 6px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 999px;\n }\n div[head] button[act] {\n width: 30px;\n min-height: var(--figure-control-height);\n margin: 0;\n padding: 0;\n }\n div[codes] button[act] {\n width: 30px;\n margin: 0;\n padding: 0;\n }\n div[ranges] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.4fr) 30px;\n gap: 4px 6px;\n align-items: center;\n }\n div[ranges] button[act] {\n width: 30px;\n margin: 0;\n padding: 0;\n }\n /* A table's rows: the key (a code, or from and to), a cell per column, and a remove button. */\n /* A table's values, a box each: the value on the head line, its settings a property grid under it (user 2026-11-12). */\n div[cases] {\n display: grid;\n gap: 8px;\n }\n div[case] {\n border: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n border-radius: 6px;\n overflow: hidden;\n }\n div[case-head] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: var(--figure-control-height);\n padding: 2px 6px;\n background: var(--md-sys-color-surface-container-low, rgba(0, 0, 0, 0.03));\n }\n div[case-head] small {\n color: var(--md-sys-color-on-surface-variant);\n }\n div[case-head] input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n }\n div[case-head] button[act] {\n margin-left: auto;\n }\n div[case] > p[hint] {\n margin: 0;\n padding: 6px;\n border-top: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n /* The 「그대로 둠」 of the other-values box: a checkbox and its word beside the box's name. */\n div[case-head] label[keep] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: var(--ui-t-small, 11.5px);\n color: var(--md-sys-color-on-surface-variant);\n }\n div[case-head] label[keep] input {\n flex: none;\n width: auto;\n margin: 0;\n }\n /* A property grid: a line a setting, its name left, its field right, a line between and between the two. */\n div[props] {\n display: grid;\n grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);\n }\n div[props] > span {\n display: flex;\n align-items: center;\n min-width: 0;\n min-height: var(--figure-control-height);\n padding: 2px 6px;\n border-top: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n div[props] > span:nth-child(odd) {\n border-right: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n div[props] > span:nth-child(odd) small {\n overflow: hidden;\n color: var(--md-sys-color-on-surface-variant);\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n div[props] input,\n div[props] select {\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n }\n /* A colour and the button that clears it, on one line at the height of the cells beside it. */\n div[props] span[colour] {\n display: flex;\n flex: 1;\n gap: 2px;\n align-items: center;\n min-width: 0;\n }\n div[props] span[colour] input[type='color'] {\n flex: 1;\n height: var(--figure-control-height);\n padding: 0 2px;\n }\n div[props] span[colour] button[act] {\n flex: none;\n width: 24px;\n }\n /* A table's targets as a property list: what each is, its name, its delete. */\n div[targets] {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n border: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n border-radius: 6px;\n overflow: hidden;\n }\n div[targets] > * {\n min-width: 0;\n padding: 2px 6px;\n border-top: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n div[targets] > small[head] {\n grid-column: 1 / -1;\n border-top: none;\n padding: 4px 6px;\n color: var(--md-sys-color-on-surface-variant);\n background: var(--md-sys-color-surface-container-low, rgba(0, 0, 0, 0.03));\n }\n div[targets] > span:not([none]):nth-of-type(odd) {\n color: var(--md-sys-color-on-surface-variant);\n font-size: var(--ui-t-small, 11.5px);\n }\n div[targets] > span[none] {\n grid-column: 1 / -1;\n color: var(--md-sys-color-on-surface-variant);\n }\n div[targets] > button[act] {\n margin: 0;\n padding: 0 4px;\n border: none;\n border-top: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n }\n textarea {\n width: 100%;\n min-height: 96px;\n box-sizing: border-box;\n font-family: var(--ui-mono, ui-monospace, monospace);\n font-size: inherit;\n resize: vertical;\n }\n /* The sample is read whole, a record of a dozen lines: room for it, not six lines of it (user 2026-11-12). */\n textarea[sample] {\n min-height: 240px;\n }\n md-icon {\n font-size: 16px;\n width: 16px;\n height: 16px;\n }\n `\n ]\n\n @property({ attribute: false }) asset?: FigureAsset\n @property({ type: Boolean }) locked = false\n /** The part chosen in the modeller, put among a table's parts by one button. */\n @property() selected = ''\n /** Whether the editor shows the preview: the sample shows there only, the edit canvas keeping the figure as made. */\n @property({ type: Boolean }) previewing = false\n\n /** The schema row chosen, by its path; its field is edited under it. */\n @state() private chosen = ''\n @state() private adding = { name: '', kind: 'number' as FigureDataNode['kind'] }\n /** A site's data pasted to start the schema from; nothing is kept until the author says so. */\n @state() private pasted = ''\n /** A binding as it is being added: the field (or a new field's name), the method, the behavior or the table's targets. */\n @state() private connecting = { ...NO_CONNECTING }\n /** The binding opened to edit its rule, by id. */\n @state() private opened = ''\n /** Sample legends by role, as JSON typed; not saved. */\n @state() private legendSample: Record<string, string> = {}\n /** The rotation card as filled in: the joint, and the fields for on, speed (and its most rpm) and direction. */\n @state() private rotating = { input: '', on: '', speed: '', max: 0, direction: '', forward: '', reverse: '' }\n /** The sample as typed, JSON; empty until edited, the schema's example shown until then. */\n @state() private sample = ''\n @state() private sampling = false\n\n render() {\n const asset = this.asset\n if (!asset) return nothing\n const rows = schemaRowsOf(asset)\n return html`\n ${this.renderCapabilityData(asset)} ${this.renderSchema(asset, rows)} ${rows.length ? this.renderSample(asset) : nothing}\n `\n }\n\n /** The data a product's capability the figure wears reads itself (ADR-0167 14): said, read only. */\n private renderCapabilityData(asset: FigureAsset) {\n const names = asset.document.capabilities.names ?? []\n const reading = consumerDescriptors().filter(d => names.includes(d.name) && d.data?.length)\n if (!reading.length) return nothing\n return html`<section>\n ${reading.map(d => html`<p hint>${i18next.t('figure.text.data-capability-fields', { name: d.label, fields: d.data!.map(f => f.name).join(', ') })}</p>`)}\n </section>`\n }\n\n /* ---------------------------------------------------------------- the schema */\n\n private renderSchema(asset: FigureAsset, rows: FigureDataRow[]) {\n const schema = asset.dataInterface?.schema ?? []\n const bindings = asset.dataInterface?.bindings ?? []\n const choices = behaviorsOf(asset)\n const resting = figureBindingsTakenOver(asset)\n return html`<section>\n <h3>${i18next.t('figure.label.data-schema')}${this.help.button('figure.text.data-schema-explained')}</h3>\n ${this.help.hint('figure.text.data-schema-explained')}\n ${rows.length\n ? html`<div fields role=\"table\">\n <div head role=\"row\">\n <span role=\"columnheader\">${i18next.t('figure.label.data-column-field')}</span>\n <span role=\"columnheader\">${i18next.t('figure.label.data-column-kind')}</span>\n <span role=\"columnheader\">${i18next.t('figure.label.data-column-moves')}</span>\n </div>\n ${rows.map(row => {\n /* What the field moves, named, in place of a count of bindings (「작동 1개」 said nothing, user 2026-11-12). */\n const moves = row.bindings.map(id => bindings.find(b => b.id === id)).filter((b): b is FigureDataBinding => !!b).map(b => this.bindingWhat(asset, b))\n return html`<button\n row\n role=\"row\"\n ?selected=${row.path === this.chosen}\n @click=${() => {\n this.chosen = row.path === this.chosen ? '' : row.path\n this.connecting = { ...NO_CONNECTING }\n }}\n >\n <span name role=\"cell\" style=\"padding-left: ${row.depth * 14}px\"><span>${row.name}</span>${row.label ? html`<small>${row.label}</small>` : nothing}</span>\n <span role=\"cell\" title=${kindWords(row.node)}>${kindName(row.node)}</span>\n <span role=\"cell\" ?none=${!moves.length}>${moves.length ? moves.join(', ') : '—'}</span>\n </button>\n ${row.path === this.chosen ? html`<div detail>${this.renderField(asset, schema, row)} ${this.renderFieldBindings(asset, row, choices, resting)}</div>` : nothing}`\n })}\n </div>`\n : html`<p hint>${i18next.t('figure.text.data-no-fields')}</p>`}\n ${this.renderStrayBindings(asset, rows, choices, resting)} ${this.renderRotation(asset, rows)}\n ${this.renderAddField(schema, '')} ${this.renderFromSample(schema)}\n </section>`\n }\n\n /** The chosen field's own settings, and a field added under it when it holds fields. */\n private renderField(asset: FigureAsset, schema: readonly FigureDataField[], row: FigureDataRow) {\n const field = fieldAt(schema, row.path)\n if (!field) return nothing\n const replace = (next: FigureDataField) => this.edit({ kind: 'set-data-schema', schema: schemaWithFieldReplaced(schema, row.path, next) })\n const set = (patch: Record<string, unknown>) => {\n const next = { ...field, ...patch } as Record<string, unknown>\n for (const [k, v] of Object.entries(patch)) if (v === undefined || (typeof v === 'number' && Number.isNaN(v))) delete next[k]\n replace(next as FigureDataField)\n }\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const number = (e: Event) => (e.target as HTMLInputElement).valueAsNumber\n const rename = (to: string) => {\n if (!to || to === field.name) return\n /* A field outside any list is renamed with what reads it; inside a list it is the schema alone. */\n if (!row.path.includes('[]')) this.edit({ kind: 'rename-data-field', accessor: row.path, to })\n else replace({ ...field, name: to })\n }\n let holder: FigureDataNode = field\n while (holder.kind === 'list') holder = holder.item\n return html`<section item>\n <div head>\n <strong>${row.path}</strong>\n <button\n act\n ?disabled=${this.locked}\n title=${i18next.t('figure.button.remove-data-field')}\n @click=${() => {\n this.chosen = ''\n this.edit({ kind: 'set-data-schema', schema: schemaWithoutField(schema, row.path) })\n }}\n >\n <md-icon>delete</md-icon>\n </button>\n </div>\n <div form>\n <span>${i18next.t('figure.label.data-name')}</span>\n <input .value=${field.name} ?disabled=${this.locked} @change=${(e: Event) => rename(value(e).trim())} />\n <span>${i18next.t('figure.label.data-label')}</span>\n <input .value=${field.label ?? ''} ?disabled=${this.locked} @change=${(e: Event) => set({ label: value(e).trim() || undefined })} />\n <span>${i18next.t('figure.label.data-kind')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => replace(fieldOfKind(field, value(e) as FigureDataNode['kind']))}>\n ${KINDS.map(k => html`<option value=${k} ?selected=${k === field.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>\n ${field.kind === 'number'\n ? html`<span>${i18next.t('figure.label.data-unit')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ unit: value(e) || undefined })}>\n <option value=\"\" ?selected=${!field.unit}>${i18next.t('figure.label.unit-none')}</option>\n ${FIGURE_UNITS.map(u => html`<option value=${u} ?selected=${u === field.unit}>${unitWord(u)}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-min')}</span>\n <input type=\"number\" step=\"any\" .value=${field.min === undefined ? '' : String(field.min)} ?disabled=${this.locked} @change=${(e: Event) => set({ min: number(e) })} />\n <span>${i18next.t('figure.label.data-max')}</span>\n <input type=\"number\" step=\"any\" .value=${field.max === undefined ? '' : String(field.max)} ?disabled=${this.locked} @change=${(e: Event) => set({ max: number(e) })} />\n <span>${i18next.t('figure.label.data-default')}</span>\n <input type=\"number\" step=\"any\" .value=${field.default === undefined ? '' : String(field.default)} ?disabled=${this.locked} @change=${(e: Event) => set({ default: number(e) })} />`\n : field.kind === 'boolean'\n ? html`<span>${i18next.t('figure.label.data-default')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) === '' ? undefined : value(e) === 'true' })}>\n <option value=\"\" ?selected=${field.default === undefined}>-</option>\n ${[false, true].map(b => html`<option value=${String(b)} ?selected=${b === field.default}>${i18next.t(b ? 'figure.label.data-true' : 'figure.label.data-false')}</option>`)}\n </select>`\n : field.kind === 'text'\n ? html`<span>${i18next.t('figure.label.data-values')}</span>\n <input\n .value=${(field.values ?? []).join(', ')}\n ?disabled=${this.locked}\n @change=${(e: Event) => {\n const values = value(e).split(',').map(v => v.trim()).filter(Boolean)\n set({ values: values.length ? values : undefined, default: field.default !== undefined && (!values.length || values.includes(field.default)) ? field.default : undefined })\n }}\n />\n <span>${i18next.t('figure.label.data-default')}</span>\n ${field.values\n ? html`<select ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) || undefined })}>\n <option value=\"\" ?selected=${field.default === undefined}>-</option>\n ${field.values.map(v => html`<option value=${v} ?selected=${v === field.default}>${v}</option>`)}\n </select>`\n : html`<input .value=${field.default ?? ''} ?disabled=${this.locked} @change=${(e: Event) => set({ default: value(e) || undefined })} />`}`\n : html`<span></span>\n <label toggle>\n <input type=\"checkbox\" .checked=${!!field.json} ?disabled=${this.locked} @change=${(e: Event) => set({ json: (e.target as HTMLInputElement).checked ? true : undefined })} />\n ${i18next.t('figure.label.data-json')}\n </label>`}\n ${field.kind === 'list'\n ? html`<span>${i18next.t('figure.label.data-item-kind')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => replace({ ...field, item: nodeOfKind(value(e) as FigureDataNode['kind']) })}>\n ${KINDS.filter(k => k !== 'list').map(k => html`<option value=${k} ?selected=${k === field.item.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>`\n : nothing}\n </div>\n ${holder.kind === 'object' ? this.renderAddField(schema, row.path) : nothing}\n </section>`\n }\n\n private renderAddField(schema: readonly FigureDataField[], under: string) {\n const a = this.adding\n const named = a.name.trim()\n const add = () => {\n if (this.locked || !named) return\n this.edit({ kind: 'set-data-schema', schema: schemaWithField(schema, under, { name: named, ...nodeOfKind(a.kind) } as FigureDataField) })\n this.adding = { ...a, name: '' }\n }\n const words = i18next.t(under ? 'figure.button.add-data-child' : 'figure.button.add-data-field', { parent: under })\n /*\n Folded under its summary, as a binding's form is: two fields always open under the table read as one more row of\n it (user 2026-11-12). Open while the figure has no field yet: adding one is the only thing to do.\n */\n return html`<details add-field ?open=${!schema.length}>\n <summary>${words}</summary>\n <div form>\n <span>${i18next.t('figure.label.data-name')}</span>\n <input\n aria-label=${i18next.t('figure.label.data-name')}\n .value=${a.name}\n @input=${(e: Event) => (this.adding = { ...a, name: (e.target as HTMLInputElement).value })}\n @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && !e.isComposing && add()}\n />\n <span>${i18next.t('figure.label.data-kind')}</span>\n <select @change=${(e: Event) => (this.adding = { ...a, kind: (e.target as HTMLSelectElement).value as FigureDataNode['kind'] })}>\n ${KINDS.map(k => html`<option value=${k} ?selected=${k === a.kind}>${i18next.t('figure.label.data-kind-' + k)}</option>`)}\n </select>\n </div>\n <button act ?disabled=${this.locked || !named} @click=${add}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add')}\n </button>\n </details>`\n }\n\n /** A site's data pasted: the schema guessed from it, kept only when the author says so -- units, ranges and closed values are theirs to set. */\n private renderFromSample(schema: readonly FigureDataField[]) {\n let guessed: FigureDataField[] | null = null\n let unreadable = false\n if (this.pasted.trim()) {\n try {\n guessed = inferFigureDataSchema(JSON5.parse(this.pasted))\n } catch {\n unreadable = true\n }\n }\n return html`<details>\n <summary>${i18next.t('figure.label.data-from-sample')}</summary>\n <p hint>${i18next.t('figure.text.data-from-sample-explained')}</p>\n <textarea .value=${this.pasted} ?disabled=${this.locked} @input=${(e: Event) => (this.pasted = (e.target as HTMLTextAreaElement).value)}></textarea>\n ${unreadable ? html`<p hint>${i18next.t('figure.text.data-not-json')}</p>` : nothing}\n ${guessed ? html`<p hint>${i18next.t(schema.length ? 'figure.text.data-guessed-replaces' : 'figure.text.data-guessed', { count: guessed.length })}</p>` : nothing}\n <button\n act\n ?disabled=${this.locked || !guessed?.length}\n @click=${() => {\n this.edit({ kind: 'set-data-schema', schema: guessed! })\n this.pasted = ''\n }}\n >\n ${i18next.t('figure.button.data-use-guessed')}\n </button>\n </details>`\n }\n\n /* ---------------------------------------------------------------- the bindings */\n\n /** What a binding moves: a table's parts, a value's behavior -- one wording for the binding's line and the field's row. */\n private bindingWhat(asset: FigureAsset, b: FigureDataBinding): string {\n return moveWords(dataMoveOf(asset, b.rule === 'table' ? { kind: 'table', targets: b.targets } : b.behavior))\n }\n\n /** What a behavior moves, in the words every screen says it in (figure-viewer dataMoveOf · moveWords). */\n private behaviorName(asset: FigureAsset, b: FigureDataValueBinding['behavior']): string {\n return moveWords(dataMoveOf(asset, b))\n }\n\n /*\n A field's bindings under the field, in its opened row: what the field moves and how, edited where the field is. A\n list of bindings of its own below the fields said every field's name and move again (user 2026-11-12).\n */\n private renderFieldBindings(asset: FigureAsset, row: FigureDataRow, choices: BehaviorChoice[], resting: FigureRestingBinding[]) {\n const bindings = (asset.dataInterface?.bindings ?? []).filter(b => row.bindings.includes(b.id))\n const bindable = row.node.kind !== 'object'\n if (!bindable && !bindings.length) return nothing\n return html`<div bindings>\n <h4>${i18next.t('figure.label.data-bindings-title')}${this.help.button('figure.text.data-bindings-explained')}</h4>\n ${this.help.hint('figure.text.data-bindings-explained')}\n ${bindings.map(b => this.renderBinding(asset, choices, b, resting))}\n ${bindable ? this.renderAddBinding(asset, row, choices) : nothing}\n </div>`\n }\n\n /** A binding no field reads -- its field renamed or taken out -- kept in sight below the fields, to delete or fix. */\n private renderStrayBindings(asset: FigureAsset, rows: FigureDataRow[], choices: BehaviorChoice[], resting: FigureRestingBinding[]) {\n const read = new Set(rows.flatMap(r => r.bindings))\n const stray = (asset.dataInterface?.bindings ?? []).filter(b => !read.has(b.id))\n if (!stray.length) return nothing\n return html`<div bindings>\n <h4>${i18next.t('figure.label.data-bindings-without-field')}</h4>\n ${stray.map(b => this.renderBinding(asset, choices, b, resting))}\n </div>`\n }\n\n private renderBinding(asset: FigureAsset, choices: BehaviorChoice[], b: FigureDataBinding, resting: FigureRestingBinding[]) {\n const open = this.opened === b.id\n const set = (next: FigureDataBinding) => this.edit({ kind: 'set-data-binding', binding: next })\n const what = this.bindingWhat(asset, b)\n const rests = resting.some(r => r.id === b.id)\n return html`<section item>\n <div head>\n <button line aria-expanded=${open ? 'true' : 'false'} @click=${() => (this.opened = open ? '' : b.id)}>\n <strong>${b.label ?? b.accessor}</strong> → ${what}\n <small>${i18next.t('figure.text.data-method-does-' + methodOf(b))}${rests ? html` <span rests>${i18next.t('figure.label.data-binding-resting')}</span>` : nothing}</small>\n </button>\n <button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-binding')} @click=${() => this.edit({ kind: 'remove-data-binding', id: b.id })}>\n <md-icon>delete</md-icon>\n </button>\n </div>\n ${resting.filter(r => r.id === b.id).map(r => this.renderResting(r))}\n ${open ? (b.rule === 'table' ? this.renderTable(asset, b, set) : this.renderValueDetail(asset, b, set)) : nothing}\n </section>`\n }\n\n /**\n * A binding a product's capability takes over where the product registers it (ADR-0167 17): there it rests, whole or for\n * the targets named; elsewhere (a board without the product) it works.\n */\n private renderResting(r: FigureRestingBinding) {\n const where = r.capability.split('.')[0]\n const name = figureCapabilityDescriptorOf(r.capability)?.label ?? r.capability\n const targets = [...r.parts, ...r.inputs].join(', ')\n return html`<p hint>${r.whole ? i18next.t('figure.text.data-binding-rests', { where, name }) : i18next.t('figure.text.data-binding-rests-targets', { where, name, targets })}</p>`\n }\n\n private renderValueDetail(asset: FigureAsset, b: FigureDataValueBinding, set: (next: FigureDataBinding) => void) {\n const node = fieldAt(asset.dataInterface?.schema ?? [], b.accessor.replace(/\\[\\d+\\]/g, '[]'))\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const behavior = b.behavior\n const patch = (p: Partial<FigureDataValueBinding>) => {\n const next = { ...b, ...p }\n if ('param' in p && p.param === undefined) delete next.param\n set(next)\n }\n if (behavior.kind === 'items') return this.renderItemFields(asset, b, node, patch)\n return html`<div form>\n <span>${i18next.t('figure.label.data-method')}</span>\n ${node?.kind === 'number'\n ? html`<select ?disabled=${this.locked} @change=${(e: Event) => patch({ rule: value(e) as 'value' | 'scale', param: value(e) === 'scale' ? { scale: 1, offset: 0 } : undefined })}>\n ${(['value', 'scale'] as const).map(r => html`<option value=${r} ?selected=${r === b.rule}>${i18next.t('figure.label.data-method-' + r)}</option>`)}\n </select>`\n : html`<span>${i18next.t('figure.label.data-method-value')}</span>`}\n ${behavior.kind === 'state'\n ? html`<span>${i18next.t('figure.label.data-source-mode')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => patch({ behavior: { ...behavior, sourceMode: value(e) as 'observed' | 'commanded' } })}>\n ${(['observed', 'commanded'] as const).map(m => html`<option value=${m} ?selected=${behavior.sourceMode === m}>${i18next.t('figure.label.data-' + m)}</option>`)}\n </select>`\n : nothing}\n ${behavior.kind === 'pose'\n ? html`<span>${i18next.t('figure.label.data-seconds')}</span>\n <input type=\"number\" min=\"0\" step=\"any\" .value=${String(behavior.seconds ?? 0)} ?disabled=${this.locked} @change=${(e: Event) => patch({ behavior: { ...behavior, seconds: (e.target as HTMLInputElement).valueAsNumber || 0 } })} />`\n : nothing}\n ${b.rule === 'scale'\n ? html`<span>${i18next.t('figure.label.data-scale')}</span>\n <input type=\"number\" step=\"any\" .value=${String(b.param?.scale ?? 1)} ?disabled=${this.locked} @change=${(e: Event) => patch({ param: { ...b.param, scale: (e.target as HTMLInputElement).valueAsNumber } })} />\n <span>${i18next.t('figure.label.data-offset')}</span>\n <input type=\"number\" step=\"any\" .value=${String(b.param?.offset ?? 0)} ?disabled=${this.locked} @change=${(e: Event) => patch({ param: { ...b.param, offset: (e.target as HTMLInputElement).valueAsNumber } })} />`\n : nothing}\n </div>`\n }\n\n /**\n * A table (ADR-0166 10): what it shows on -- parts, controls, a motion group -- its rows, a code or an interval each\n * with a cell per column, the look of every other value, and whether a board may swap it for a legend.\n */\n private renderTable(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const value = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const parts = partsOf(asset)\n const inputs = stateInputsOf(asset)\n const groups = asset.motionGroups ?? []\n const targets = b.targets\n const toggle = (list: string[] | undefined, id: string, on: boolean) => (on ? [...(list ?? []), id] : (list ?? []).filter(x => x !== id))\n const retarget = (t: typeof targets) => set(tableWithTargets(b, t))\n return html`<div form>\n <span>${i18next.t('figure.label.data-label')}</span>\n <input .value=${b.label ?? ''} placeholder=${b.accessor} ?disabled=${this.locked} @change=${(e: Event) => {\n const label = value(e).trim()\n const next = { ...b, label }\n if (!label) delete (next as { label?: string }).label\n set(next)\n }} />\n </div>\n ${this.renderTargets(parts, inputs, groups, targets, {\n part: (id, on) => retarget({ ...targets, parts: toggle(targets.parts, id, on) }),\n input: (id, on) => retarget({ ...targets, inputs: toggle(targets.inputs, id, on) }),\n group: id => retarget({ ...targets, group: id || undefined })\n })}\n ${b.lookup === 'code' ? this.renderCodeRows(asset, b, set) : this.renderRangeRows(asset, b, set)}\n <label toggle>\n <input type=\"checkbox\" .checked=${!!b.legend} ?disabled=${this.locked} @change=${(e: Event) => {\n const next = { ...b }\n if ((e.target as HTMLInputElement).checked) next.legend = { role: legendRoleOf(b.id) }\n else delete next.legend\n set(next)\n }} />\n ${i18next.t('figure.label.data-legend-swappable')}\n </label>\n ${b.legend\n ? html`<div form>\n <span>${i18next.t('figure.label.data-legend-role')}</span>\n <input .value=${b.legend.role} ?disabled=${this.locked} @change=${(e: Event) => set({ ...b, legend: { role: value(e).trim() } })} />\n </div>\n <p hint>${i18next.t('figure.text.data-legend-explained')}</p>`\n : nothing}`\n }\n\n /*\n Which parts, controls and motion group a table shows on, as a property list: a row a target chosen -- what it is,\n its name, its delete -- and one choice to add the next. Every part and control as a tick box in one heap took two\n screens and hid which were chosen (user 2026-11-12).\n */\n private renderTargets(\n parts: string[],\n inputs: Array<{ id: string; label: string }>,\n groups: NonNullable<FigureAsset['motionGroups']>,\n t: { parts?: string[]; inputs?: string[]; group?: string },\n on: { part: (id: string, on: boolean) => void; input: (id: string, on: boolean) => void; group: (id: string) => void }\n ) {\n const chosenParts = t.parts ?? []\n const chosenInputs = t.inputs ?? []\n const freeParts = parts.filter(p => !chosenParts.includes(p))\n const freeInputs = inputs.filter(i => !chosenInputs.includes(i.id))\n const labelOf = (id: string) => inputs.find(i => i.id === id)?.label ?? id\n const row = (kind: string, name: string, remove: () => void) =>\n html`<span>${i18next.t(kind)}</span><span>${name}</span>\n <button act ?disabled=${this.locked} title=${i18next.t('figure.button.data-remove-target')} @click=${remove}><md-icon>delete</md-icon></button>`\n const add = (e: Event) => {\n const select = e.target as HTMLSelectElement\n const [kind, id] = [select.value.slice(0, select.value.indexOf(':')), select.value.slice(select.value.indexOf(':') + 1)]\n select.value = ''\n if (kind === 'part') on.part(id, true)\n else if (kind === 'input') on.input(id, true)\n }\n return html`<div targets>\n <small head>${i18next.t('figure.label.data-targets')}</small>\n ${chosenParts.map(p => row('figure.label.data-target-parts', p, () => on.part(p, false)))}\n ${chosenInputs.map(id => row('figure.label.data-target-inputs', labelOf(id), () => on.input(id, false)))}\n ${chosenParts.length || chosenInputs.length ? nothing : html`<span none>${i18next.t('figure.text.data-no-targets')}</span>`}\n </div>\n <div form>\n <span>${i18next.t('figure.label.data-target-add')}</span>\n <select ?disabled=${this.locked || !(freeParts.length + freeInputs.length)} .value=${''} @change=${add}>\n <option value=\"\">${i18next.t('figure.label.data-target-choose')}</option>\n ${freeParts.length\n ? html`<optgroup label=${i18next.t('figure.label.data-target-parts')}>${freeParts.map(p => html`<option value=${'part:' + p}>${p}</option>`)}</optgroup>`\n : nothing}\n ${freeInputs.length\n ? html`<optgroup label=${i18next.t('figure.label.data-target-inputs')}>${freeInputs.map(i => html`<option value=${'input:' + i.id}>${i.label}</option>`)}</optgroup>`\n : nothing}\n </select>\n ${this.selected && freeParts.includes(this.selected)\n ? html`<span></span><button act ?disabled=${this.locked} @click=${() => on.part(this.selected, true)}><md-icon>add</md-icon>${i18next.t('figure.button.data-add-selected-part', { part: this.selected })}</button>`\n : nothing}\n ${groups.length\n ? html`<span>${i18next.t('figure.label.data-target-group')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => on.group((e.target as HTMLSelectElement).value)}>\n <option value=\"\" ?selected=${!t.group}>${i18next.t('figure.label.data-none')}</option>\n ${groups.map(g => html`<option value=${g.id} ?selected=${g.id === t.group}>${g.label}</option>`)}\n </select>`\n : nothing}\n </div>`\n }\n\n /** The column heads of a table's rows, after the key's own one or two. */\n private columnHeads(columns: TableColumn[]) {\n return columns.map(c =>\n c.kind === 'value'\n ? html`<small>${c.label}</small>`\n : html`<small>${i18next.t('figure.label.data-column-' + c.kind)}</small>`\n )\n }\n\n /** One look's cells, a column each: a colour, an effect, a control's value, a clip, a speed, a pause -- empty leaves the target as it is. */\n private lookCells(asset: FigureAsset, columns: TableColumn[], look: FigureDataTableEntry, write: (look: FigureDataTableEntry) => void) {\n const without = (key: keyof FigureDataTableEntry) => {\n const next = { ...look }\n delete next[key]\n return next\n }\n const typed = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n return columns.map(c => {\n if (c.kind === 'color')\n return look.color === undefined\n ? html`<button act ?disabled=${this.locked} @click=${() => write({ ...look, color: '#888888' })}>${i18next.t('figure.button.data-set-result')}</button>`\n : html`<span colour><input type=\"color\" .value=${look.color} ?disabled=${this.locked} @change=${(e: Event) => write({ ...look, color: typed(e) })} /><button act ?disabled=${this.locked} title=${i18next.t('figure.button.data-clear-result')} @click=${() => write(without('color'))}><md-icon>close</md-icon></button></span>`\n if (c.kind === 'effect')\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, effect: { kind: typed(e) as 'blink' | 'glow' } }) : write(without('effect')))}>\n ${(['', 'blink', 'glow'] as const).map(k => html`<option value=${k} ?selected=${(look.effect?.kind ?? '') === k}>${i18next.t('figure.label.data-effect-' + (k || 'none'))}</option>`)}\n </select>`\n if (c.kind === 'value') {\n const v = look.values?.[c.id]\n /* Its unit and range in the field, not beside the name: 「fl-hip (deg -30~30)」 took two lines (user 2026-11-12). */\n const range = [c.min !== undefined && c.max !== undefined ? `${c.min}~${c.max}` : '', c.unit ?? ''].filter(Boolean).join(' ')\n return html`<input type=\"number\" step=\"any\" min=${c.min ?? ''} max=${c.max ?? ''} placeholder=${range} title=${range} aria-label=${c.label} .value=${v === undefined ? '' : String(v)} ?disabled=${this.locked} @change=${(e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n const values = { ...look.values }\n if (Number.isNaN(n)) delete values[c.id]\n else values[c.id] = n\n write(Object.keys(values).length ? { ...look, values } : without('values'))\n }} />`\n }\n if (c.kind === 'clip')\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, clip: typed(e) }) : write(without('clip')))}>\n <option value=\"\" ?selected=${look.clip === undefined}>-</option>\n ${c.clips.map(clip => html`<option value=${clip} ?selected=${clip === look.clip}>${clip}</option>`)}\n </select>`\n if (c.kind === 'speed')\n return html`<input type=\"number\" min=\"0\" max=\"3\" step=\"any\" .value=${look.speed === undefined ? '' : String(look.speed)} ?disabled=${this.locked} @change=${(e: Event) => {\n const n = (e.target as HTMLInputElement).valueAsNumber\n write(Number.isNaN(n) ? without('speed') : { ...look, speed: n })\n }} />`\n return html`<select ?disabled=${this.locked} @change=${(e: Event) => (typed(e) ? write({ ...look, paused: typed(e) === 'true' }) : write(without('paused')))}>\n <option value=\"\" ?selected=${look.paused === undefined}>-</option>\n ${[false, true].map(v => html`<option value=${String(v)} ?selected=${v === look.paused}>${i18next.t(v ? 'figure.label.data-paused' : 'figure.label.data-playing')}</option>`)}\n </select>`\n })\n }\n\n /*\n One value's settings as a property grid, a line a setting -- colour, effect, a control's value, clip, speed, pause --\n its name left, its field right. A column a setting ran wider than the panel as controls were added (user 2026-11-12).\n */\n private renderLook(asset: FigureAsset, columns: TableColumn[], look: FigureDataTableEntry, write: (look: FigureDataTableEntry) => void) {\n if (!columns.length) return html`<p hint>${i18next.t('figure.text.data-table-needs-target')}</p>`\n const heads = this.columnHeads(columns)\n const cells = this.lookCells(asset, columns, look, write)\n return html`<div props>${columns.map((_, i) => html`<span>${heads[i]}</span><span>${cells[i]}</span>`)}</div>`\n }\n\n /** The look of every other value: a row like the others, added or taken away; kept when a closed field's values are not all rows. */\n private renderOtherwise(asset: FigureAsset, b: FigureDataTableBinding, columns: TableColumn[], needed: boolean, set: (next: FigureDataBinding) => void) {\n const look = b.table.default\n if (look === undefined)\n return html`<button act ?disabled=${this.locked} @click=${() => set(tableWithLook(b, 'default', {}))}><md-icon>add</md-icon>${i18next.t('figure.button.add-data-default')}</button>`\n const { default: _, ...rest } = b.table\n /* 「그대로 둠」 (ADR-0166 amendment 1): a value the table has no row for leaves the targets as it last showed them. */\n const keep = look.keep === true\n return html`<div case>\n <div case-head>\n <strong>${i18next.t('figure.label.data-otherwise')}</strong>\n <label keep><input type=\"checkbox\" .checked=${keep} ?disabled=${this.locked} @change=${(e: Event) => set(tableWithKeep(b, (e.target as HTMLInputElement).checked))} />${i18next.t('figure.label.data-keep')}</label>\n ${needed ? nothing : html`<button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-case')} @click=${() => set({ ...b, table: rest })}><md-icon>delete</md-icon></button>`}\n </div>\n ${keep ? html`<p hint>${i18next.t('figure.text.data-keep')}</p>` : this.renderLook(asset, columns, look, l => set(tableWithLook(b, 'default', l)))}\n </div>`\n }\n\n /**\n * A code table's rows: a code each, typed, with its look. A closed text's values follow the codes (ADR-0166 risk 3):\n * a code added, renamed or taken away is the field's value too; true and false are both rows.\n */\n private renderCodeRows(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const columns = tableColumnsOf(asset, b)\n const node = fieldAt(asset.dataInterface?.schema ?? [], b.accessor.replace(/\\[\\d+\\]/g, '[]'))\n const boolean = node?.kind === 'boolean'\n /* A number's codes are numbers, as its data gives them (ADR-0166 amendment 1). */\n const numeric = node?.kind === 'number'\n const rows = Object.entries(b.table).filter(([k]) => k !== 'default')\n const domain = node ? domainOf(node).map(String) : []\n const covered = domain.length > 0 && domain.every(v => b.table[v] !== undefined)\n /* The binding and the field it reads, in one undo step. */\n const rekeyed = (list: Array<[string, FigureDataTableEntry]>) => {\n const next = tableWithKeys(b, list)\n const schema = boolean ? undefined : schemaFollowingCodes(asset, next, list.map(([k]) => k))\n this.edit({ kind: 'set-data-binding', binding: next, ...(schema ? { schema } : {}) })\n }\n const rekey = (i: number, typed: string) => {\n const key = typed.trim()\n if (!key || key === 'default' || rows.some(([k], j) => j !== i && k === key) || (numeric && !Number.isFinite(Number(key)))) return this.requestUpdate()\n rekeyed(rows.map(([k, v], j) => (j === i ? [key, v] : [k, v])))\n }\n const word = (k: string) => (boolean ? i18next.t(k === 'true' ? 'figure.label.data-true' : 'figure.label.data-false') : k)\n /* A value a box: its code on the box's head line, its settings a property grid under it. */\n return html`<div cases>\n ${rows.map(\n ([k, look], i) => html`<div case>\n <div case-head>\n <small>${i18next.t('figure.label.data-case-value')}</small>\n ${boolean\n ? html`<strong>${word(k)}</strong>`\n : html`<input .value=${k} inputmode=${numeric ? 'decimal' : 'text'} aria-label=${i18next.t('figure.label.data-case-value')} ?disabled=${this.locked} @change=${(e: Event) => rekey(i, (e.target as HTMLInputElement).value)} />`}\n ${boolean || (rows.length < 2 && domain.length > 0)\n ? nothing\n : html`<button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-case')} @click=${() => rekeyed(rows.filter((_, j) => j !== i))}><md-icon>delete</md-icon></button>`}\n </div>\n ${this.renderLook(asset, columns, look, l => set(tableWithLook(b, k, l)))}\n </div>`\n )}\n ${this.renderOtherwise(asset, b, columns, domain.length > 0 && !covered, set)}\n </div>\n ${boolean\n ? nothing\n : html`<button act ?disabled=${this.locked} @click=${() => rekeyed([...rows, [(numeric ? freeNumberCodeOf : freeCodeOf)(rows.map(([k]) => k)), {}]])}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add-data-case')}\n </button>`}`\n }\n\n /**\n * A range table's rows: from (inclusive) and to (exclusive), either end open, with a look each. Giving the last row,\n * open above, an end starts the next row there; a row open above is the last there can be.\n */\n private renderRangeRows(asset: FigureAsset, b: FigureDataTableBinding, set: (next: FigureDataBinding) => void) {\n const columns = tableColumnsOf(asset, b)\n const rows = Object.entries(b.table).filter(([k]) => k !== 'default')\n const ends = (key: string) => {\n const [from = '', to = ''] = key.split('~')\n return { from, to }\n }\n const rekey = (i: number, end: 'from' | 'to', typed: string) => {\n const was = ends(rows[i]![0])\n const next = { ...was, [end]: typed.trim() }\n const key = `${next.from}~${next.to}`\n /* A key another row has would take that row's place: not taken. */\n if (rows.some(([k], j) => j !== i && k === key)) return this.requestUpdate()\n const list: Array<[string, FigureDataTableEntry]> = rows.map(([k, v], j) => (j === i ? [key, v] : [k, v]))\n /* The last row, open above, given an end: the next row starts there, open above, so every value still has a row. */\n if (i === rows.length - 1 && end === 'to' && was.to === '' && next.to !== '') list.push([`${next.to}~`, {}])\n set(tableWithKeys(b, list))\n }\n const last = rows.at(-1)\n const lastEnd = last ? ends(last[0]).to : ''\n const open = !!last && lastEnd === ''\n return html`<div cases>\n ${rows.map(([k, look], i) => {\n const e = ends(k)\n return html`<div case>\n <div case-head>\n <input type=\"number\" step=\"any\" aria-label=${i18next.t('figure.label.data-range-from')} placeholder=${i18next.t('figure.label.data-range-from')} .value=${e.from} ?disabled=${this.locked} @change=${(ev: Event) => rekey(i, 'from', (ev.target as HTMLInputElement).value)} />\n <span>~</span>\n <input type=\"number\" step=\"any\" aria-label=${i18next.t('figure.label.data-range-to')} placeholder=${i18next.t('figure.label.data-range-to')} .value=${e.to} ?disabled=${this.locked} @change=${(ev: Event) => rekey(i, 'to', (ev.target as HTMLInputElement).value)} />\n <button act ?disabled=${this.locked} title=${i18next.t('figure.button.remove-data-range')} @click=${() => set(tableWithKeys(b, rows.filter((_, j) => j !== i)))}><md-icon>delete</md-icon></button>\n </div>\n ${this.renderLook(asset, columns, look, l => set(tableWithLook(b, k, l)))}\n </div>`\n })}\n ${this.renderOtherwise(asset, b, columns, false, set)}\n </div>\n ${open ? html`<p hint>${i18next.t('figure.text.data-range-close-last')}</p>` : nothing}\n <button act ?disabled=${this.locked || open} @click=${() => set(tableWithKeys(b, [...rows, [`${lastEnd}~`, {}]]))}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add-data-range')}\n </button>`\n }\n\n /** Which field of each element is its id, its type, its place, its height in the stack, its status. */\n private renderItemFields(asset: FigureAsset, b: FigureDataValueBinding, node: FigureDataNode | undefined, set: (patch: Partial<FigureDataValueBinding>) => void) {\n const behavior = b.behavior\n if (behavior.kind !== 'items') return nothing\n let element: FigureDataNode | undefined = node\n while (element?.kind === 'list') element = element.item\n const fields = element?.kind === 'object' ? element.fields.filter(f => f.kind === 'number' || f.kind === 'text' || f.kind === 'boolean').map(f => f.name) : []\n const pick = (role: 'id' | 'type' | 'place' | 'stack' | 'status', typed: string) => {\n const next: Record<string, unknown> = { ...behavior, [role]: typed }\n if (!typed) delete next[role]\n set({ behavior: next as FigureDataValueBinding['behavior'] })\n }\n return html`<div form>\n ${node?.kind === 'list'\n ? (['id', 'type', 'place', 'stack', 'status'] as const).map(\n role => html`<span>${i18next.t('figure.label.data-item-' + role)}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => pick(role, (e.target as HTMLSelectElement).value)}>\n <option value=\"\" ?selected=${!behavior[role]}>-</option>\n ${fields.map(f => html`<option value=${f} ?selected=${f === behavior[role]}>${f}</option>`)}\n </select>`\n )\n : nothing}\n <span>${i18next.t('figure.label.data-item-slot')}</span>\n <input .value=${behavior.slot ?? ''} ?disabled=${this.locked} @change=${(e: Event) => {\n const slot = (e.target as HTMLInputElement).value.trim()\n const next: Record<string, unknown> = { ...behavior, slot }\n if (!slot) delete next.slot\n set({ behavior: next as FigureDataValueBinding['behavior'] })\n }} />\n </div>`\n }\n\n /**\n * 「연결 추가」 (ADR-0166 10): a field there or a new name, then a method the field's kind allows. As it is or scaled,\n * the one thing it moves; a table, the parts, controls and motion group it shows on -- a new name makes the field.\n */\n /** A binding added to the field whose row is open: how it is read, and what it moves. */\n private renderAddBinding(asset: FigureAsset, row: FigureDataRow, choices: BehaviorChoice[]) {\n const a = this.connecting\n const methods = methodsOf(row.node, choices)\n const method = methods.includes(a.method as DataMethod) ? (a.method as DataMethod) : methods[0]\n const table = method === 'code' || method === 'ranges'\n const fitting = !table ? choices.filter(c => fitsField(row.node, c)) : []\n const choice = fitting.find(c => c.key === a.behavior) ?? fitting[0]\n const set = (patch: Partial<typeof a>) => (this.connecting = { ...a, ...patch })\n const typed = (e: Event) => (e.target as HTMLInputElement | HTMLSelectElement).value\n const targets = { parts: a.parts, inputs: a.inputs, ...(a.group ? { group: a.group } : {}) }\n const aimed = a.parts.length > 0 || a.inputs.length > 0 || !!a.group\n const ready = table ? aimed : !!choice\n const add = () => {\n if (table) {\n const { binding } = tableDraftOf(asset, { path: row.path, node: row.node }, method as 'code' | 'ranges', targets)\n this.edit({ kind: 'set-data-binding', binding })\n this.opened = binding.id\n } else {\n /* A list is read whole by items; one value of it, through its first element. */\n const accessor = row.node.kind === 'list' && choice!.kind === 'items' ? row.path.replace(/\\[\\]$/, '') : accessorOfRow(row.path)\n const binding = bindingDraftOf(asset, accessor, row.node, choice!, method as 'value' | 'scale')\n this.edit({ kind: 'set-data-binding', binding })\n this.opened = binding.id\n }\n this.connecting = { ...NO_CONNECTING }\n }\n const toggle = (list: string[], id: string, on: boolean) => (on ? [...list, id] : list.filter(x => x !== id))\n /* Folded until asked for: open under a field's binding, its fields read as that binding's own (user 2026-11-12). */\n return html`<details add-binding>\n <summary>${i18next.t('figure.button.add-data-binding')}</summary>\n <div form>\n <span>${i18next.t('figure.label.data-method')}</span>\n ${methods.length === 1\n ? /* One way only (a text is read by a code table): said, not offered as a choice of one (sweep 2026-10-27 U10). */\n html`<span method>${i18next.t('figure.label.data-method-' + methods[0])}</span>`\n : html`<select ?disabled=${!methods.length} @change=${(e: Event) => set({ method: typed(e) as DataMethod })}>\n ${methods.map(m => html`<option value=${m} ?selected=${m === method}>${i18next.t('figure.label.data-method-' + m)}</option>`)}\n </select>`}\n ${!table && fitting.length\n ? html`<span>${i18next.t('figure.label.data-behavior')}</span>\n <select @change=${(e: Event) => set({ behavior: typed(e) })}>\n ${fitting.map(c => html`<option value=${c.key} ?selected=${c === choice}>${this.behaviorName(asset, c.behavior)}</option>`)}\n </select>`\n : nothing}\n </div>\n ${table\n ? this.renderTargets(partsOf(asset), stateInputsOf(asset), asset.motionGroups ?? [], targets, {\n part: (id, on) => set({ parts: toggle(a.parts, id, on) }),\n input: (id, on) => set({ inputs: toggle(a.inputs, id, on) }),\n group: id => set({ group: id })\n })\n : nothing}\n ${table && !aimed ? html`<p hint>${i18next.t('figure.text.data-table-needs-target')}</p>` : nothing}\n ${methods.length ? nothing : html`<p hint>${i18next.t('figure.text.data-no-behavior')}</p>`}\n <button act ?disabled=${this.locked || !ready} @click=${add}>\n <md-icon>add</md-icon>${i18next.t('figure.button.add')}\n </button>\n </details>`\n }\n\n /**\n * 「+ 회전」: a joint that turns without end, turned by the data -- on, speed in rpm, direction -- in one step. The\n * clips, the group and the bindings it writes are ordinary ones, edited one by one afterwards.\n */\n private renderRotation(asset: FigureAsset, rows: FigureDataRow[]) {\n const joints = endlessJointsOf(asset)\n if (!joints.length) return nothing\n const r = this.rotating\n const joint = joints.find(j => j.input === r.input) ?? joints[0]!\n const values = rows.filter(row => !row.path.includes('[]'))\n const of = (kind: FigureDataNode['kind'], closed = false) => values.filter(row => row.node.kind === kind && (!closed || domainOf(row.node).length > 0))\n const speedRow = values.find(row => row.path === r.speed)\n const speedMax = r.max || (speedRow?.node.kind === 'number' ? (speedRow.node.max ?? 0) : 0)\n const directionRow = values.find(row => row.path === r.direction)\n const directions = directionRow ? domainOf(directionRow.node).map(String) : []\n const forward = directions.includes(r.forward) ? r.forward : (directions[0] ?? '')\n const reverse = directions.includes(r.reverse) ? r.reverse : (directions.find(v => v !== forward) ?? '')\n const set = (patch: Partial<typeof r>) => (this.rotating = { ...r, ...patch })\n const typed = (e: Event) => (e.target as HTMLSelectElement | HTMLInputElement).value\n const pick = (rows: FigureDataRow[], value: string, change: (v: string) => void) =>\n html`<select ?disabled=${this.locked} @change=${(e: Event) => change(typed(e))}>\n <option value=\"\" ?selected=${!value}>${i18next.t('figure.label.data-none')}</option>\n ${rows.map(row => html`<option value=${row.path} ?selected=${row.path === value}>${row.path}</option>`)}\n </select>`\n const choice: RotationChoice = {\n input: joint.input,\n label: i18next.t('figure.label.data-rotation-of', { name: joint.label }),\n ...(r.on ? { on: r.on } : {}),\n ...(r.speed ? { speed: { path: r.speed, max: speedMax } } : {}),\n ...(r.direction && forward && reverse ? { direction: { path: r.direction, forward, reverse } } : {})\n }\n const ready = !r.speed || speedMax > 0\n return html`<details>\n <summary>${i18next.t('figure.label.data-rotation')}</summary>\n <p hint>${i18next.t('figure.text.data-rotation-explained')}</p>\n <div form>\n <span>${i18next.t('figure.label.data-rotation-joint')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ input: typed(e) })}>\n ${joints.map(j => html`<option value=${j.input} ?selected=${j === joint}>${j.label}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-rotation-on')}</span>\n ${pick(of('boolean'), r.on, v => set({ on: v }))}\n <span>${i18next.t('figure.label.data-rotation-speed')}</span>\n ${pick(of('number'), r.speed, v => set({ speed: v, max: 0 }))}\n ${r.speed\n ? html`<span>${i18next.t('figure.label.data-rotation-max')}</span>\n <input type=\"number\" min=\"0\" step=\"any\" .value=${speedMax ? String(speedMax) : ''} ?disabled=${this.locked} @change=${(e: Event) => set({ max: (e.target as HTMLInputElement).valueAsNumber || 0 })} />`\n : nothing}\n <span>${i18next.t('figure.label.data-rotation-direction')}</span>\n ${pick(of('text', true), r.direction, v => set({ direction: v, forward: '', reverse: '' }))}\n ${directions.length\n ? html`<span>${i18next.t('figure.label.data-rotation-forward')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ forward: typed(e) })}>\n ${directions.map(v => html`<option value=${v} ?selected=${v === forward}>${v}</option>`)}\n </select>\n <span>${i18next.t('figure.label.data-rotation-reverse')}</span>\n <select ?disabled=${this.locked} @change=${(e: Event) => set({ reverse: typed(e) })}>\n ${directions.map(v => html`<option value=${v} ?selected=${v === reverse}>${v}</option>`)}\n </select>`\n : nothing}\n </div>\n ${ready ? nothing : html`<p hint>${i18next.t('figure.text.data-rotation-needs-max')}</p>`}\n <button\n act\n ?disabled=${this.locked || !ready}\n @click=${() => {\n this.dispatchEvent(new CustomEvent('part-edits', { detail: { edits: rotationStepsOf(asset, choice) }, bubbles: true, composed: true }))\n this.rotating = { input: '', on: '', speed: '', max: 0, direction: '', forward: '', reverse: '' }\n }}\n >\n <md-icon>add</md-icon>${i18next.t('figure.button.data-add-rotation')}\n </button>\n </details>`\n }\n\n /* ---------------------------------------------------------------- the sample */\n\n /** Data to try, read the way a placed figure reads it: what it moves, or why it is refused; in the preview, the figure running on it. */\n private renderSample(asset: FigureAsset) {\n /* Written and read as JSON5: names without quotes, comments and a last comma are allowed when typed by hand (user 2026-11-12). */\n const text = this.sample || JSON5.stringify(figureDataExample(asset.dataInterface!), null, 2)\n let data: unknown\n let unreadable = false\n try {\n data = JSON5.parse(text)\n } catch {\n unreadable = true\n }\n const legends = this.sampleLegends()\n const read = unreadable ? null : sampleOf(asset, data, legends)\n const tables = (asset.dataInterface?.bindings ?? []).filter((b): b is FigureDataTableBinding => b.rule === 'table')\n return html`<section>\n <h3>${i18next.t('figure.label.data-sample')}${this.help.button('figure.text.data-sample-explained')}</h3>\n ${this.help.hint('figure.text.data-sample-explained')}\n <textarea sample .value=${text} @input=${(e: Event) => this.try((e.target as HTMLTextAreaElement).value)}></textarea>\n ${unreadable\n ? html`<p hint>${i18next.t('figure.text.data-not-json')}</p>`\n : read!.issues.length\n ? html`<p hint>${read!.issues.map(i => i18next.t('figure.text.data-value-' + i.reason, { path: i.path || '-' })).join(' · ')}</p>`\n : nothing}\n ${read?.notes.length ? html`<p hint>${read.notes.map(n => i18next.t('figure.text.data-note-' + n.reason, { binding: n.binding ?? '', key: n.key ?? '', column: n.column ? i18next.t('figure.label.data-column-' + n.column) : '', value: shownValue(n.value) })).join(' · ')}</p>` : nothing}\n ${this.renderSampleLegends(tables)}\n <label toggle>\n <input\n type=\"checkbox\"\n .checked=${this.sampling}\n @change=${(e: Event) => {\n this.sampling = (e.target as HTMLInputElement).checked\n this.tell(unreadable ? null : data)\n }}\n />\n ${i18next.t('figure.label.data-sample-in-preview')}\n </label>\n ${this.sampling && !this.previewing\n ? html`<p hint sample-where>\n ${i18next.t('figure.text.data-sample-shown-in-preview')}\n <button quiet @click=${() => this.dispatchEvent(new CustomEvent('show-preview', { bubbles: true, composed: true }))}>\n ${i18next.t('figure.button.data-sample-show-preview')}\n </button>\n </p>`\n : nothing}\n </section>`\n }\n\n /** The sample legends as read: by role, those that are JSON. */\n private sampleLegends(): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const [role, text] of Object.entries(this.legendSample)) {\n if (!text.trim()) continue\n try {\n out[role] = JSON5.parse(text)\n } catch {\n /* Not JSON yet: the figure's own table shows. */\n }\n }\n return out\n }\n\n /**\n * A legend pasted for each table role, to see the figure as a board's legend of that role would show it -- not saved.\n * The preview shows it too, as a scene's legend named as the role.\n */\n private renderSampleLegends(tables: FigureDataTableBinding[]) {\n const roles = [...new Set(tables.flatMap(b => (b.legend ? [b.legend.role] : [])))]\n if (!roles.length) return nothing\n return html`<details>\n <summary>${i18next.t('figure.label.data-sample-legend')}</summary>\n <p hint>${i18next.t('figure.text.data-sample-legend-explained')}</p>\n ${roles.map(\n role => html`<label>${role}</label>\n <textarea\n .value=${this.legendSample[role] ?? ''}\n placeholder='{ \"CODE\": { \"color\": \"#22c55e\" }, \"default\": {} }'\n @input=${(e: Event) => {\n this.legendSample = { ...this.legendSample, [role]: (e.target as HTMLTextAreaElement).value }\n this.dispatchEvent(new CustomEvent('legend-sample', { detail: { legends: this.sampleLegends() }, bubbles: true, composed: true }))\n }}\n ></textarea>`\n )}\n </details>`\n }\n\n private try(typed: string) {\n this.sample = typed\n try {\n this.tell(JSON5.parse(typed))\n } catch {\n /* Not JSON yet: the preview keeps what it ran on. */\n }\n }\n\n /** The sample to the preview while it is asked for; null lets the preview's figure go back to its own values. */\n private tell(data: unknown) {\n this.dispatchEvent(new CustomEvent('data-sample', { detail: { data: this.sampling ? data : null }, bubbles: true, composed: true }))\n }\n\n private edit(edit: unknown) {\n this.dispatchEvent(new CustomEvent('part-edit', { detail: { edit }, bubbles: true, composed: true }))\n }\n}\n\n/** A node of a kind, started empty. */\nfunction nodeOfKind(kind: FigureDataNode['kind']): FigureDataNode {\n if (kind === 'object') return { kind, fields: [] }\n if (kind === 'list') return { kind, item: { kind: 'object', fields: [] } }\n return { kind } as FigureDataNode\n}\n\n/** A value in a sentence: a text as it is, anything else as JSON. */\nconst shownValue = (v: unknown): string => (typeof v === 'string' ? v : JSON.stringify(v ?? ''))\n\n"]}
|