@things-factory/figure-ui 10.1.222 → 10.1.224

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.
Files changed (59) hide show
  1. package/client/modeller/canvas.ts +2 -2
  2. package/client/modeller/consumer-capabilities.ts +66 -0
  3. package/client/modeller/data-interface.ts +230 -80
  4. package/client/modeller/editor.ts +14 -7
  5. package/client/modeller/figure-capability-panel.ts +145 -1
  6. package/client/modeller/figure-data-panel.ts +495 -188
  7. package/client/modeller/figure-links.ts +130 -12
  8. package/client/modeller/figure-preview.ts +19 -2
  9. package/client/modeller/figure-slot-layout-panel.ts +7 -3
  10. package/client/modeller/links.ts +58 -0
  11. package/client/modeller/refusals.ts +12 -4
  12. package/client/modeller/slot-layout-host.ts +76 -5
  13. package/dist-client/modeller/canvas.js +2 -2
  14. package/dist-client/modeller/canvas.js.map +1 -1
  15. package/dist-client/modeller/consumer-capabilities.d.ts +29 -0
  16. package/dist-client/modeller/consumer-capabilities.js +60 -0
  17. package/dist-client/modeller/consumer-capabilities.js.map +1 -0
  18. package/dist-client/modeller/data-interface.d.ts +83 -17
  19. package/dist-client/modeller/data-interface.js +194 -82
  20. package/dist-client/modeller/data-interface.js.map +1 -1
  21. package/dist-client/modeller/editor.d.ts +5 -2
  22. package/dist-client/modeller/editor.js +16 -5
  23. package/dist-client/modeller/editor.js.map +1 -1
  24. package/dist-client/modeller/figure-capability-panel.d.ts +12 -0
  25. package/dist-client/modeller/figure-capability-panel.js +123 -1
  26. package/dist-client/modeller/figure-capability-panel.js.map +1 -1
  27. package/dist-client/modeller/figure-data-panel.d.ts +57 -13
  28. package/dist-client/modeller/figure-data-panel.js +461 -180
  29. package/dist-client/modeller/figure-data-panel.js.map +1 -1
  30. package/dist-client/modeller/figure-links.d.ts +11 -0
  31. package/dist-client/modeller/figure-links.js +137 -16
  32. package/dist-client/modeller/figure-links.js.map +1 -1
  33. package/dist-client/modeller/figure-preview.d.ts +4 -0
  34. package/dist-client/modeller/figure-preview.js +19 -1
  35. package/dist-client/modeller/figure-preview.js.map +1 -1
  36. package/dist-client/modeller/figure-slot-layout-panel.js +6 -4
  37. package/dist-client/modeller/figure-slot-layout-panel.js.map +1 -1
  38. package/dist-client/modeller/links.d.ts +22 -0
  39. package/dist-client/modeller/links.js +48 -0
  40. package/dist-client/modeller/links.js.map +1 -1
  41. package/dist-client/modeller/refusals.js +14 -6
  42. package/dist-client/modeller/refusals.js.map +1 -1
  43. package/dist-client/modeller/slot-layout-host.d.ts +28 -3
  44. package/dist-client/modeller/slot-layout-host.js +68 -6
  45. package/dist-client/modeller/slot-layout-host.js.map +1 -1
  46. package/dist-client/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +9 -9
  48. package/test/browser/data-table-page.js +9 -0
  49. package/test/browser/links.check.mjs +25 -3
  50. package/test/consumer-capabilities.test.ts +116 -0
  51. package/test/data-motion.test.ts +94 -27
  52. package/test/links.test.ts +15 -0
  53. package/test/slot-layout-host.test.ts +63 -5
  54. package/translations/en.json +81 -23
  55. package/translations/es.json +81 -23
  56. package/translations/ja.json +81 -23
  57. package/translations/ko.json +81 -23
  58. package/translations/ms.json +81 -23
  59. package/translations/zh.json +81 -23
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../client/modeller/editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { i18next } from '@operato/i18n'\nimport type { OxThreePane } from '@operato/layout'\nimport '@operato/layout'\nimport { openPopup } from '@operato/layout'\nimport { OxPrompt } from '@operato/popup'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { figureFastenAxesOf, figurePartFaceOf, PART_LIMIT, parseFigureRecipe, resolveFigureRecipe, figurePartCountOf, figurePartIdFor, figureRecipeIdFor, figureSizeEditOf, figureSizeEditorOf, figureSectionMeasuresOf, figurePlaneAlignChanges, type FigurePlaneContact, figureRowOf, type FigureRowReading, figureFaceOverhangOf, type FigureFaceOverhang } from '@hatiolab/figure-model'\nimport type { RecipeTemplate } from './recipes.js'\nimport './figure-recipe-catalog.js'\nimport type { FigureAsset, FigureAuthoringAction, FigureEvaluatedShape, FigureInputChange, FigurePartEdit, FigurePrimitiveCreation, FigureProposalStep, FigureRecipe, FigureRecipeValue, FigurePlacement, FigureFaceMappingNeed, FigureFaceRemap } from '@hatiolab/figure-model'\nimport type { FigureProductSession } from './product-session.js'\nimport { captureFigureThumbnail } from './thumbnail.js'\nimport { drawableFigureParts } from './renderer.js'\nimport './canvas.js'\nimport './figure-parts.js'\nimport './figure-material-panel.js'\nimport './figure-section-panel.js'\nimport './figure-section-editor.js'\nimport { faceHighlightOf, rowWordsOf } from './command-preview.js'\nimport { CommandPreview, NO_WORDS } from './command-preview-controller.js'\nimport { motionEndsOf, type MotionEnds } from './motion-ends.js'\nimport './figure-links.js'\nimport './figure-fasten-dialog.js'\nimport './figure-controls.js'\nimport './figure-clips.js'\nimport './figure-data-panel.js'\nimport './figure-preview.js'\nimport './figure-settings.js'\nimport { DEFAULT_VIEW, type ViewSettings } from '@things-factory/figure-viewer/dist-client/figure-view.js'\nimport './figure-capability-panel.js'\nimport { gizmoChanges, gizmoReachOf, sameMeasureAxesOf, sizeKeepOf, type GizmoReach, type GizmoResult } from './gizmo.js'\nimport { keptBySizeOf, partsAtFrame, SIZE_KEEPS_WORDS, startSizeDrag, throughPlaneOf, type SizeDrag, type SizeDragFrame } from './size-drag.js'\nimport type { KeyAction } from './keys.js'\nimport { ModellerKeys } from './modeller-keys.js'\nimport { PaneFold } from './pane-fold.js'\nimport { PanelMemory } from './panel-memory.js'\nimport { RefusalTeller } from './refusal-teller.js'\nimport { groupFields, ownerOf, partLabelOf, repeatOf, type FieldLike, type FieldGroup } from './fields.js'\nimport { SidePanelStyles } from '@things-factory/figure-viewer/dist-client/side-panel-styles.js'\nimport { EditorStyles } from './editor-styles.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { alignChanges, canMirror, mirrorChanges, type AlignTool } from './align.js'\nimport type { FigurePaletteKind, FigurePartRow } from './figure-parts.js'\nimport { paletteRecipe } from './palette.js'\nimport { meshChoicesOf, meshPartOf } from './mesh-import.js'\nimport './figure-mesh-choice.js'\nimport { uploadFigureMesh } from '../graphql/index.js'\nimport { slotMarksOf } from './slot-layout-host.js'\n\nconst NO_MARKS: FigureRenderPart[] = []\nimport { apexOver, drawnOf } from './section-drawing.js'\nimport { END_FACE } from './section-controls.js'\nimport type { FigureCanvas } from './canvas.js'\nimport { nudgeOf, placementOf } from './stage-model.js'\n\n/** The numbers a rule gives a part's position, turn and size, per axis, for the cells that have no field. */\ntype HeldValues = { position?: number[]; rotation?: number[]; size?: (number | undefined)[]; sizeRuled?: boolean }\nimport { gateFindingStyles, renderGateFinding } from './gate-findings.js'\nimport type { FigureGateFinding } from '../types.js'\nimport { editRefusalOf, partNameRefusalOf, sizeRangeFitsOf, partRefusalOf, placedRefusalOf, recipeRefusalOf, removalNoticeOf } from './refusals.js'\nimport type { FigureRenderPart } from './renderer.js'\nimport type { FigureBudgetLine } from './maturity.js'\nimport { HelpToggles } from './help.js'\nimport { sizeInputOf } from './size-response.js'\nimport { canFollow, followableAxes, endPlaceKeyOf, fieldWordsOf, followOf, sizeFollowersOf, measureNow, partSummaryOf, instanceRangeOf, instanceSizeToDeclare, proportionToFollow, rangeWith, turnsAboutAJoint, valueNow } from './links.js'\nimport { jointFanOf } from './joint-fan.js'\nimport { derivedOf, type FigureRevision } from './revision.js'\nimport { jointDragOf } from './joint-drag.js'\nimport type { FirstSave } from './first-save.js'\nimport { isLive, livePartsOf, liveOverSession, NOTHING_LIVE, scrubLabel, type LiveValues } from './live.js'\nimport { startingShapeKindOfBody } from './starting-shape.js'\nimport { groupMenu, GroupMenuStyles } from './group-menu.js'\n\n\n/**\n * The side's six tabs (user 2026-10-17: up to six): properties -- the part's shape, place and look; 「반응형」 -- how it\n * answers a size it is placed at (its size rules, a position that follows the size, its row; the figure's range);\n * motion; what it does (its places); its data (ADR-0051); the verdict. The view is a menu over the canvas and the\n * release history opens from the bar, since neither is about the part chosen. The verdict gives way to properties when\n * a part is chosen; a tab about parts keeps showing the newly chosen part.\n */\ntype SideTab = 'properties' | 'response' | 'motion' | 'capability' | 'data' | 'verdict'\n\n/** What opens over the work from the bar: the view settings or the release history, one at a time. */\ntype BarOverlay = 'view' | 'history'\n\n/** The person's own fold of the properties' 「더 보기」, kept in their browser. */\nconst MORE_OPEN_KEY = 'figure-properties-more-open'\n\n/** Product editor surface. The injected session is shared by page persistence and AI commands. */\nconst NO_OVERHANG = { words: NO_WORDS, note: NO_WORDS }\n\n@customElement('figure-editor')\nexport class FigureEditor extends LitElement {\n /* The operato scrollbar, as every scrolling panel of the app has it -- the side panel scrolled with the browser's own. */\n static styles = [ScrollbarStyles, SidePanelStyles, gateFindingStyles, GroupMenuStyles, EditorStyles]\n @property({ attribute: false }) session?: FigureProductSession\n /** The saved figure's state and version, as the server gave them (the page reads the row). */\n @property({ attribute: false }) releaseState?: { state?: 'draft' | 'released'; version: number }\n /**\n * What blocks release now, as the page's verdict heard it: said beside 「발행」 with the way out at hand, so an author\n * does not find it at the foot of the verdict tab (first 15 minutes, 2026-10-16; chief architect, Q1 B).\n */\n @property({ attribute: false }) releaseBlockers: FigureGateFinding[] = []\n @state() private blockersOpen = false\n /** The recipe templates (ADR-0095), read by the page from the server. */\n @property({ attribute: false }) templates: RecipeTemplate[] = []\n /** Reads a template's guide; given by the page. */\n @property({ attribute: false }) guideOf?: (name: string) => Promise<string>\n @property({ attribute: false }) thumbnailOf?: (name: string) => string\n /** The 「보드에서 바꿀 수 있음」 form being filled for a row, before it is published (ADR-0096). */\n @state() private publishing?: { part: string; label: string; min: number; max: number }\n @state() private catalogOpen = false\n /** Why the last recipe was refused, in the kernel's words. */\n @state() private recipeError = ''\n @property({ type: Number }) revision = 0\n /** The 「?」 beside a group's title and the sentence it opens. */\n private readonly help = new HelpToggles(this)\n /** The cost line the parts list shows, from the maturity report. */\n @property({ attribute: false }) budget?: FigureBudgetLine\n /**\n * Asks the type and name of a figure saved for the first time (the host has the catalogue's names); undefined\n * when the author cancels, and then nothing is saved. Without it a new figure is saved under a temporary type.\n */\n @property({ attribute: false }) firstSave?: (name: string) => Promise<FirstSave | undefined>\n @state() private selected = ''\n @state() private error = ''\n /** How far the GLB being brought in has gone up (0‒1), while it does. */\n @state() private meshProgress?: number\n /*\n * An edit that takes a face away which something stands on (ADR-0100 A8): held, with what the kernel says stands\n * there, until the author chooses where each goes -- then the same edit goes again with the remap. Shown where the\n * edit was made (`from`).\n */\n @state() private faceMapping?: { action: FigureAuthoringAction; need: FigureFaceMappingNeed; from: 'section-editor' | 'panel' }\n @state() private tab: SideTab = 'properties'\n /** The view settings or the release history, open over the work from the bar. */\n @state() private overlay?: BarOverlay\n /**\n * The fastening window open for the selected part (user 2026-10-17), in the standard popup, moved by its head\n * (2026-10-18; put back 2026-10-20 -- the side panel it was moved to could not be moved), with no backdrop, so the\n * canvas can be pressed while it is open: chosen there, applied once. It closes with nothing written when the part,\n * the tab or the middle changes under it.\n */\n @state() private fastening = false\n private fastenPopup?: { close: () => void }\n private fastenWindow?: HTMLElement & {\n revision?: FigureRevision\n partId: string\n locked: boolean\n previewWords: string[]\n error: string\n aimAt?: (at: { id: string; point?: number[]; normal?: number[] }) => void\n }\n /** Why the window's 「적용」 was refused, said in it. */\n @state() private fastenError = ''\n /** The face of the part a row of the window's list is on, lit on the canvas while the pointer or the arrows are there. */\n @state() private fastenHover: FigureRenderPart | null = null\n /** 「더 보기」 open, as this person left it last (chief architect 2026-10-16: kept per person). */\n @state() private moreOpen = FigureEditor.storedMoreOpen()\n private static storedMoreOpen(): boolean {\n try {\n return localStorage.getItem(MORE_OPEN_KEY) === '1'\n } catch {\n return false\n }\n }\n private setMoreOpen(open: boolean) {\n if (open === this.moreOpen) return\n this.moreOpen = open\n try {\n localStorage.setItem(MORE_OPEN_KEY, open ? '1' : '0')\n } catch {\n /* A browser that keeps nothing folds it again next time. */\n }\n }\n /** The frame the bar folds - found after the first render, since the bar is drawn before it. */\n @state() private panes?: OxThreePane\n /** What the middle shows: the parts being edited, or the figure placed on a board at eight sizes. */\n @state() private middle: 'edit' | 'preview' = 'edit'\n /** The gizmo shown on the selected part, as the tools in the bar and W · E · R choose it; none once the part changes. */\n @state() private gizmoMode?: 'translate' | 'rotate' | 'scale'\n /** A line saying what a command did besides what was asked; gone at the next command. */\n @state() private notice = ''\n /**\n * How the workbench shows the figure, in the board's own state names. The viewer's, kept in\n * their browser, never in the figure.\n */\n @state() private view: ViewSettings = FigureEditor.storedView()\n private static storedView(): ViewSettings {\n try {\n const stored = JSON.parse(localStorage.getItem('figure-view') ?? 'null')\n return stored && typeof stored === 'object' ? { ...DEFAULT_VIEW, ...stored } : { ...DEFAULT_VIEW }\n } catch {\n return { ...DEFAULT_VIEW }\n }\n }\n private setView(view: ViewSettings) {\n this.view = { ...DEFAULT_VIEW, ...view }\n try {\n localStorage.setItem('figure-view', JSON.stringify(this.view))\n } catch {\n /* A browser that keeps nothing still shows the change for this visit. */\n }\n }\n /**\n * Parts hidden on the workbench — the author's view while working, not the asset's visibility. Not saved: a part\n * hidden here is still in the figure, still checked, still drawn on a board.\n */\n /** The page offers an AI draft for a new figure (the modeller page, through the app's assistant dock). */\n @property({ type: Boolean }) aiDraft = false\n @state() private hiddenParts = new Set<string>()\n /** A value in hand -- typed, held on a spinner, scrubbed, dragged -- drawn at once and recorded on release. */\n @state() private live: LiveValues = NOTHING_LIVE\n /** A size drag in hand, drawn from figure-model each frame (ADR-0140 4.4); gone with the release. */\n @state() private sizing?: { part: string; drag: SizeDrag; frame?: SizeDragFrame; through?: number }\n /** The part whose drawn section is open in the section editor (ADR-0100 §3.2), or null. */\n @state() private sectionEditing: string | null = null\n private lastContext: string | null = null\n private commandPreview = new CommandPreview(this, {\n session: () => this.session,\n selected: () => this.selected,\n shown: () => this.shown(),\n formsInSight: () => this.middle === 'edit' && (this.tab === 'properties' || this.tab === 'response'),\n said: error => this.said(error)\n })\n /**\n * Move, turn and size on the canvas, in the bar's tools: the gizmo the W · E · R keys give, found without knowing the\n * keys (2026-09-26 -- a person dragging the part turned the camera). Each is offered only where the part's own\n * numbers can take it (`gizmoReachOf`).\n */\n private renderGizmoTools(editing: boolean) {\n const reach = editing && this.selected ? this.reachOf(this.selected) : undefined\n const tools = [\n { mode: 'translate', icon: 'open_with', key: 'W', can: !!reach?.translate },\n { mode: 'rotate', icon: '3d_rotation', key: 'E', can: !!reach?.rotate },\n { mode: 'scale', icon: 'open_in_full', key: 'R', can: !!reach?.scale }\n ] as const\n return html`<span class=\"gizmo-tools\" role=\"group\" aria-label=${i18next.t('figure.label.gizmo-tools')}>\n ${tools.map(\n tool => html`<button\n tool\n aria-pressed=${String(this.gizmoMode === tool.mode)}\n ?disabled=${!tool.can}\n aria-label=${i18next.t('figure.button.gizmo-' + tool.mode)}\n title=${`${i18next.t('figure.button.gizmo-' + tool.mode)} (${tool.key})${tool.can || !this.selected ? '' : ' · ' + i18next.t('figure.text.gizmo-not-own')}`}\n @click=${() => this.useGizmo(tool.mode)}\n >\n <md-icon>${tool.icon}</md-icon>\n </button>`\n )}\n </span>`\n }\n private keys = new ModellerKeys(this, {\n taking: () => {\n const view = this.session?.read()\n /*\n * The section editor open takes the keys for its own: Esc cancels it, Delete deletes a point, Ctrl+Z undoes a point.\n * Heard here first, they deselected the part, deleted the part and undid the figure's last step (2026-09-30).\n */\n return !!view && !view.loading && !view.saving && !!view.context && this.isConnected && !this.sectionEditing\n },\n scene: () => this.renderRoot.querySelector<FigureCanvas>('figure-canvas'),\n selected: () => this.selected,\n act: action => this.keyAction(action)\n })\n /** The part Ctrl+C took: pasted as the kernel's duplicate. Not kept past the editor, nor written anywhere. */\n private copied = ''\n /** A copied part still in the figure is duplicated -- a part of its own, named by figure-model; one gone, nothing. */\n private pasteCopied() {\n const asset = this.session?.revisionNow()?.asset\n if (!this.copied || !asset?.document.model.nodes.some(n => n.op === 'place@1' && n.id === this.copied)) return\n this.duplicatePart(this.copied)\n }\n private keyAction(action: KeyAction) {\n const view = this.session!.read()\n const canvas = this.renderRoot.querySelector<FigureCanvas>('figure-canvas')\n if (action === 'translate' || action === 'rotate' || action === 'scale') canvas && this.useGizmo(action)\n else if (action === 'undo') view.canUndo && this.run(() => this.session!.undo())\n else if (action === 'redo') view.canRedo && this.run(() => this.session!.redo())\n else if (action === 'duplicate') this.duplicatePart(this.selected)\n else if (action === 'copy') this.copied = this.selected\n else if (action === 'paste') this.pasteCopied()\n else if (action === 'hold') return\n else if (action === 'remove') this.removePart(this.selected)\n else this.selected = ''\n }\n private paneFold = new PaneFold(this, () => this.panes)\n private refusals = new RefusalTeller({\n session: () => this.session,\n error: () => this.error,\n notice: () => this.notice,\n refuse: message => (this.error = message)\n })\n private panelMemory = new PanelMemory(() => this.renderRoot)\n /** The preview is made when first asked for, and kept (hidden) after that; it is taken down with the editor. */\n private previewMounted = false\n protected willUpdate(_changed: PropertyValues) {\n if (this.middle === 'preview') this.previewMounted = true\n const view = this.session?.read()\n if (view?.context !== this.lastContext) {\n this.lastContext = view?.context ?? null\n this.selected = ''\n this.error = ''\n this.hiddenParts = new Set()\n this.panelMemory.clear()\n } else if (_changed.has('selected')) {\n this.panelMemory.leave((_changed.get('selected') as string | undefined) ?? '', this.selected)\n }\n if (view && !view.geometry.some(g => ownerOf(g.id) === this.selected)) this.selected = ''\n if (_changed.has('selected')) this.gizmoMode = undefined\n /* The window is about the part chosen on the properties tab, being edited: it does not follow anywhere else. */\n if (this.fastening && (_changed.has('selected') || !this.selected || this.tab !== 'properties' || this.middle !== 'edit')) this.closeFastening()\n /*\n * The section editor is of one part: when the selection moves off it by any way -- another part picked, the scene's\n * own Esc, the part removed, another figure opened -- it closes and lets go of the preview it held.\n */\n if (this.sectionEditing && this.sectionEditing !== this.selected) this.leaveSectionEditor(this.selected)\n }\n /**\n * The selection moved off the part being edited. With nothing changed there the editor closes; with changes, the part\n * stays selected while the editor asks (apply, let go, keep editing), and the move goes on only once it closed. A part\n * gone or another figure opened has nothing to go back to: the editor closes.\n */\n private leaveSectionEditor(next: string) {\n const editing = this.sectionEditing!\n const editor = this.renderRoot.querySelector('figure-section-editor') as (HTMLElement & { dirty: boolean; requestClose(): Promise<boolean> }) | null\n const view = this.session?.read()\n const stillThere = !!view?.geometry.some(g => ownerOf(g.id) === editing)\n if (!editor?.dirty || !stillThere) {\n this.closeSectionEditor()\n return\n }\n this.selected = editing\n editor.requestClose().then(closed => {\n if (closed && this.selected === editing) this.selected = next\n })\n }\n /** While the size tool is on a round part: which of its handles change the one diameter (ADR-0140 4.1). */\n private renderSameMeasure(unavailable: boolean) {\n if (unavailable || this.gizmoMode !== 'scale' || !this.selected) return nothing\n const axes = sameMeasureAxesOf(this.reachOf(this.selected))\n return axes\n ? html`<p same-measure role=\"status\">${i18next.t('figure.text.gizmo-same-measure', { axes: axes.map(a => a.toUpperCase()).join(' · ') })}</p>`\n : nothing\n }\n /** The scene toggles: the mode already shown takes the gizmo away. */\n private useGizmo(mode: 'translate' | 'rotate' | 'scale') {\n /*\n R does what the bar's resize tool does: on a part whose size is not its own to drag the tool is off, so no gizmo is\n put on it to drag in vain (:3300, 10.1.196) -- the tool's own words are said instead.\n */\n if (mode === 'scale' && this.selected && this.gizmoMode !== 'scale' && !this.reachOf(this.selected).scale) {\n this.refusals.say(i18next.t('figure.text.gizmo-not-own'))\n return\n }\n this.renderRoot.querySelector<FigureCanvas>('figure-canvas')?.gizmo(mode)\n this.gizmoMode = this.gizmoMode === mode ? undefined : mode\n }\n /**\n * A refusal no particular sentence knows: figure-model's code said as a refusal, never its English; any other error\n * (the network, the server) as it came. A loop is said as a loop whichever way it was made: a command, or the size\n * editor's steps (a measure made to follow what follows it, 2026-10-24 -- said as a bare refused step before).\n */\n private said(error: unknown): string {\n const code = (error as { code?: string })?.code\n if (code === 'DIMENSION_CYCLE') return i18next.t('figure.text.follow-would-loop')\n if (code === 'FASTEN_CYCLE' || code === 'ATTACH_CYCLE') return i18next.t('figure.text.fasten-would-loop')\n return code ? editRefusalOf(error, (key, params) => i18next.t(key, params)) : error instanceof Error ? error.message : String(error)\n }\n private run(action: () => unknown) {\n try {\n action()\n this.error = ''\n /* The next step stands on its own: what the last removal let go of is no longer the news. */\n this.notice = ''\n this.changed()\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.run(action))) return\n this.error = this.said(error)\n } finally {\n /* Committed or refused, the value in hand is gone: the figure as it stands is drawn again. */\n this.live = NOTHING_LIVE\n this.sizing = undefined\n }\n }\n /** The bodies drawn with the value in hand, or null when nothing is in hand (or the figure cannot take it). */\n private liveParts(shown: FigureRevision | undefined): FigureRenderPart[] | null {\n return shown ? liveOverSession(shown, this.live) : null\n }\n /** What the canvas draws: the figure with the value in hand when there is one, and without the parts hidden on the workbench. */\n private drawnParts(geometry: Parameters<typeof drawableFigureParts>[0] | undefined, live: FigureRenderPart[] | null) {\n const parts = live ?? drawableFigureParts(geometry ?? [])\n const frame = this.sizing?.frame\n return (frame ? partsAtFrame(parts, frame.moved) : parts).filter(body => !this.hiddenParts.has(ownerOf((body as { id: string }).id)))\n }\n /**\n * Where the selected part turns and how far, with the pose as it is drawn now -- a value in hand included, so the\n * fan follows the arm while a control is dragged. Its size comes from what the joint turns (`joint-fan`).\n */\n private fanOf(shown: FigureRevision | undefined, live: FigureRenderPart[] | null) {\n if (!shown || !this.selected || this.hiddenParts.has(this.selected)) return null\n try {\n return jointFanOf(shown, this.selected, live ? { values: this.live.values, geometry: live } : undefined)\n } catch {\n return null\n }\n }\n /**\n * The figure on screen at its version: what every panel and helper reads (`revision.ts`). Every input as the session\n * holds it now is its `inputs` -- the pose set with the controls included: drawing a value in hand over the saved\n * defaults put every other joint back to its saved angle while one slider moved (user, 2026-09-24).\n */\n private shown(): FigureRevision | undefined {\n return this.session?.revisionNow()\n }\n /** A value in hand: an input's value (design or pose) or a part edit. Nothing is recorded. */\n private hold(values: Record<string, number>, edit?: FigurePartEdit) {\n this.live = { values: { ...this.live.values, ...values }, ...(edit ? { edit } : this.live.edit ? { edit: this.live.edit } : {}) }\n }\n private closeSectionEditor() {\n this.sectionEditing = null\n this.holdAction(null)\n }\n /** A command in hand, drawn and not run; `null` lets go of it and the figure as it stands is drawn again. */\n private holdAction(action: FigureAuthoringAction | null) {\n const { action: _, ...rest } = this.live\n this.live = action ? { ...rest, action } : rest\n }\n\n private changed() {\n /* What the step did to the size ends the author typed, said with whatever else it said. */\n const fits = this.session?.takeSizeRangeFits() ?? []\n if (fits.length) this.notice = [this.notice, sizeRangeFitsOf(fits, (key, params) => i18next.t(key, params))].filter(Boolean).join(' ')\n this.requestUpdate()\n this.dispatchEvent(new CustomEvent('changed', { bubbles: true, composed: true }))\n }\n private async save() {\n if (!this.session) return\n try {\n /*\n The card's picture is taken before the save starts, from a canvas of its own at the card's size —\n not from the one on screen, which stands wherever the author left it turned. A picture that cannot\n be taken is not an error: the save goes on without it (see `thumbnail.ts`).\n */\n let type: string | undefined\n let namespace: string | undefined\n if (!this.session.read().id && this.firstSave) {\n const answer = await this.firstSave(this.session.read().name ?? '')\n if (!answer) return\n /* The name is the figure's own, in the asset: one step of the history, like typing it in the properties. */\n if (answer.name !== this.session.read().name) {\n this.session.command({ kind: 'rename', name: answer.name })\n this.changed()\n }\n type = answer.type\n namespace = answer.namespace\n }\n const view = this.session.read()\n const thumbnail = await captureFigureThumbnail(drawableFigureParts(view.geometry ?? []), view.palette ?? {})\n const promise = this.session.save({ thumbnail, type, namespace })\n this.changed()\n await promise\n this.error = ''\n } catch (error) {\n /* Not reached: whether it was written is not known, and the edits are still here -- said so, not \"not saved\". */\n this.error = (error as { code?: string })?.code === 'SAVE_UNREACHABLE' ? i18next.t('figure.text.save-unreachable') : this.said(error)\n } finally {\n this.changed()\n }\n }\n private add(kind: FigurePaletteKind) {\n if (!this.session) return\n this.run(() => {\n /* The id is figure-model's to choose: what is in use is its rule, not a list the screen keeps. */\n const part = paletteRecipe(kind, figurePartIdFor(this.session!.revisionNow()!.asset, kind))\n this.session!.add(part)\n this.selected = part.id\n })\n }\n /**\n * A GLB made into a mesh part (ADR-0129): the server reads and keeps it, the author picks the whole file or one node\n * of it, and the part is added as one step of the history, standing where it stood in the file. A file the server\n * refuses is said in its words; nothing is added.\n */\n private async importMesh(file: File) {\n if (!this.session) return\n let upload: Awaited<ReturnType<typeof uploadFigureMesh>>\n this.meshProgress = 0\n try {\n upload = await uploadFigureMesh(file, fraction => (this.meshProgress = fraction))\n } catch (error) {\n this.error = this.said(error)\n return\n } finally {\n this.meshProgress = undefined\n }\n const choices = meshChoicesOf(upload)\n /* Only the whole file and the one node that is all of it: there is nothing to choose between. */\n const choice =\n choices.length <= 2\n ? {}\n : await openPopup(html`<figure-mesh-choice .choices=${choices}></figure-mesh-choice>`, {\n backdrop: true,\n size: 'small',\n title: i18next.t('figure.title.choose-mesh-part')\n }).result\n if (!choice) return\n const node = upload.summary.nodes.find(n => n.index === (choice as { node?: number }).node)\n this.run(() => {\n const id = figurePartIdFor(this.session!.revisionNow()!.asset, node?.name ?? file.name.replace(/\\.glb$/i, ''))\n this.session!.add(meshPartOf(upload, choice as { node?: number }, id))\n this.selected = id\n })\n }\n /**\n * The list's own operations, as part edits — each one step of the session's history. The copy and the moved\n * part stay selected.\n */\n private duplicatePart(id: string) {\n this.run(() => {\n /* The copy is the part the edit made, as figure-model named it. */\n this.selected = this.session!.edit({ kind: 'duplicate-part', target: id }).made?.[0] ?? id\n })\n }\n private movePart(id: string, to: number) {\n this.run(() => this.session!.edit({ kind: 'move-part', target: id, to }))\n }\n private removePart(id: string) {\n try {\n const view = this.session!.edit({ kind: 'remove-part', target: id }) as { removal?: Parameters<typeof removalNoticeOf>[0] }\n this.error = ''\n /* What else the removal let go of, named (chief architect, 2026-09-27); undo brings it back. */\n this.notice = removalNoticeOf(view.removal, (key, params) => i18next.t(key, params)) ?? ''\n if (this.selected === id) this.selected = ''\n this.changed()\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.removePart(id))) return\n this.error = partRefusalOf(error, id, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n private toggleHiddenPart(id: string) {\n const next = new Set(this.hiddenParts)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n this.hiddenParts = next\n }\n /** Whether the figure declares its size (the three size inputs). */\n private hasSize(): boolean {\n const values = this.designValues()\n return ['x', 'y', 'z'].every(axis => typeof values[`size.${axis}`] === 'number')\n }\n /**\n * A recipe put in (ADR-0095): resolved on the figure as it stands -- its parts take the next free name, onto the part\n * chosen -- and applied as one step. Refused, the kernel's sentence goes to the form as it is (condition 3).\n */\n private insertRecipe(recipe: FigureRecipe, values: Record<string, FigureRecipeValue>) {\n try {\n const asset = this.shown()!.asset\n const checked = parseFigureRecipe(recipe)\n const id = figureRecipeIdFor(asset, checked)\n const steps = resolveFigureRecipe(checked, { id, ...(checked.target === 'part' ? { target: this.selected } : {}), values })\n this.session!.applyRecipe(steps)\n this.recipeError = ''\n this.catalogOpen = false\n this.error = ''\n this.changed()\n } catch (error) {\n this.recipeError = recipeRefusalOf(error, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n /** The design values of the asset being edited. */\n private designValues(): Record<string, number> {\n try {\n return this.shown()?.asset.designInputs ?? {}\n } catch {\n return {}\n }\n }\n /** What the gizmo may write for the selected part — read off the asset being edited. */\n private reachOf(id: string): GizmoReach {\n const none = { translate: false, rotate: false, scale: false }\n /* A repeat is moved and sized through its row, not by a gizmo on one copy. */\n if (!id || !this.session || !this.session.read().geometry.some(g => g.id === id)) return none\n try {\n const asset = this.shown()!.asset\n /* Turned any way, fastened or not: a size drag is drawn from figure-model's one size function, frame by frame (ADR-0140 4.4). */\n return gizmoReachOf(asset, id)\n } catch {\n return none\n }\n }\n /**\n * A size drag in hand, a frame of it: the sizes the handle comes to, through figure-model's size function and the\n * evaluator stepped to them, drawn and written nowhere (ADR-0140 4.4). Begun at the first frame, from the figure as it\n * is drawn and the handle the scene says was held; the release writes the last frame's changes.\n */\n private resizing(id: string, result: GizmoResult) {\n const part = ownerOf(id)\n const shown = this.shown()\n if (!shown || !result.scale) return\n try {\n const drawn = drawableFigureParts(this.session!.read().geometry ?? [])\n if (this.sizing?.part !== part)\n this.sizing = { part, drag: startSizeDrag(shown.asset, part, shown.inputs, sizeKeepOf(result.grab)), through: throughPlaneOf(shown.asset, drawn, part) }\n const sizes = gizmoChanges(id, this.reachOf(id), { scale: result.scale }, { ...shown.inputs })\n this.sizing = { ...this.sizing, frame: this.sizing.drag.frame(sizes) }\n } catch {\n /* A size the figure cannot take on the way: the figure as it stands is drawn, and the release says why. */\n this.sizing = undefined\n }\n }\n /**\n * A free part a size change takes past the mounting plane: said, with 「…에 붙이기」 to fasten it there (ADR-0140 5). The\n * size rule is not changed for it: what the author picks is the fastening, one step of the history.\n */\n private tellThroughPlane(part: string, mm: number) {\n const plane = i18next.t('figure.label.resize-place-' + (this.asset()?.placement ?? 'floor'))\n this.refusals.point(i18next.t('figure.text.size-through-plane', { part: partLabelOf(part), plane, mm: String(mm) }), {\n label: i18next.t('figure.button.fasten-to-plane', { plane }),\n run: () => this.run(() => this.session!.command({ kind: 'attach', part, to: { plane: 'mounting-plane' } }))\n })\n }\n /** A drag, written back as the part's own inputs — one step of the history, like typing the numbers. */\n private transformed(id: string, result: GizmoResult) {\n const view = this.session!.read()\n /* A part hanging from a joint: the drag edits the joint -- its value, or where it sits (ADR-0093). */\n const shown = this.shown()!\n const asset = shown.asset\n const drawn = view.geometry.find(g => g.id === id) as unknown as FigureRenderPart | undefined\n const drag = drawn ? jointDragOf(asset, ownerOf(id), drawn, result, shown.inputs) : null\n if (drag) {\n if (drag.kind === 'value') this.run(() => this.session!.apply([{ kind: 'set-state', input: drag.input, unit: drag.unit, value: drag.value }]))\n else if (drag.kind === 'joint') this.run(() => this.session!.command({ kind: 'set-joint', joint: drag.joint }))\n else {\n this.error = i18next.t(`figure.text.gizmo-joint-${drag.reason}`, { joint: drag.joint, leader: drag.leader ?? '', axis: drag.axis ?? '' })\n this.requestUpdate()\n }\n return\n }\n const sizes = Object.fromEntries(view.fields.map(field => [field.id, field.value as number]))\n /*\n A part a joint places, scaled: only its measures change. The shift of its centre that an anchored scale makes is\n the joint's to give -- the face on the joint stays there by itself (user, 2026-09-25: 「'R'모드에서 크기가 변하지 않는다」;\n the shift had been taken for a move of the joint, and the size was dropped).\n */\n const jointed = !!asset.joints?.some(j => j.body1.part === ownerOf(id))\n /*\n A size dragged is written as its last frame was drawn: figure-model's one size function, keeping the side opposite\n the handle held -- or, fastened, its fastening (ADR-0140 4.1 · 4.4). What the scene put the part at is not read.\n */\n const scaled = !!result.scale && !result.rotation && result.scale.some(k => Math.abs(k - 1) > 1e-4)\n const taken = jointed || scaled ? { scale: result.scale } : result\n const written = gizmoChanges(id, this.reachOf(id), taken, sizes)\n const drawnLast = this.sizing?.part === ownerOf(id) ? this.sizing.frame : undefined\n const changes = !scaled ? written : drawnLast ? drawnLast.changes : figureSizeEditOf(asset, ownerOf(id), written, sizeKeepOf(result.grab)).changes\n if (changes.length) {\n const through = scaled ? (this.sizing?.part === ownerOf(id) ? this.sizing.through : undefined) ?? throughPlaneOf(asset, drawableFigureParts(view.geometry), ownerOf(id)) : 0\n this.run(() => this.session!.apply(changes))\n /* Taken past the mounting plane by the size it was given: said with how far, once it is written, and the way to fasten it (ADR-0140 5). */\n const now = scaled ? throughPlaneOf(this.shown()!.asset, drawableFigureParts(this.session!.read().geometry ?? []), ownerOf(id)) : 0\n if (now > through + 0.5) this.tellThroughPlane(ownerOf(id), now)\n return\n }\n if (jointed && result.scale) {\n /* Only measures that follow another were pulled: the relation says their size, and it is not broken here. */\n const axes = (['x', 'y', 'z'] as const).filter((_, i) => Math.abs(result.scale![i]! - 1) > 1e-4)\n this.error = i18next.t('figure.text.gizmo-size-follows', { part: partLabelOf(id), axis: axes.join(', ').toUpperCase() })\n return this.requestUpdate()\n }\n /*\n A part whose place is worked out has no numbers for the gizmo to write: the drag is added beside\n its rule (`nudge-part`). A part a joint or a fastening places, or a size that is worked out, is refused -- said in\n words, not by the part silently springing back (user, 2026-09-24: 「기즈모 컨트롤도 전혀 작동이 안되는군」).\n */\n const body = view.geometry.find(g => g.id === id) as unknown as FigureRenderPart | undefined\n if (!body) return this.requestUpdate()\n const { by, turn } = nudgeOf(body, result)\n /* A size worked out from the figure's: the drag's factor beside its rule, so it still follows. */\n const grow: Partial<Record<'x' | 'y' | 'z', number>> = {}\n if (result.scale) (['x', 'y', 'z'] as const).forEach((axis, i) => Math.abs(result.scale![i]! - 1) > 1e-6 && (grow[axis] = Math.round(result.scale![i]! * 1e6) / 1e6))\n if (!Object.keys(by).length && !Object.keys(turn).length && !Object.keys(grow).length) return this.requestUpdate()\n try {\n this.session!.command({\n kind: 'nudge-part',\n part: id,\n ...(Object.keys(by).length ? { by } : {}),\n ...(Object.keys(turn).length ? { turn } : {}),\n ...(Object.keys(grow).length ? { grow } : {})\n })\n this.error = ''\n this.changed()\n } catch (error) {\n this.error = placedRefusalOf(error, partLabelOf(id), (key, params) => i18next.t(key, params)) ?? this.said(error)\n this.requestUpdate()\n }\n }\n /** 맞추기 — one tool, one step of the history, through the same inputs as the gizmo. */\n private align(tool: AlignTool) {\n this.run(() => {\n const changes = alignChanges(this.shown()!, this.selected, this.reachOf(this.selected), tool)\n if (changes.length) this.session!.apply(changes)\n })\n }\n /** A mirrored copy: duplicate, then place the copy on the other side — two steps. */\n private mirror(axis: 'x' | 'z') {\n this.run(() => {\n const id = this.selected\n const copy = this.session!.edit({ kind: 'duplicate-part', target: id }).made?.[0]\n if (!copy) return\n this.session!.apply(mirrorChanges(this.shown()!, id, copy, axis))\n this.selected = copy\n })\n }\n /**\n * The one-off \"put it on the plane\", by the figure's placement (designer 2026-09-27): figure-model's rule\n * (`figurePlaneAlignChanges`) -- a floor figure's part to the floor by its bottom, a ceiling one's to the ceiling by\n * its top, a wall one's to the wall by its back, a centred one's centre to the origin's height. Once: nothing is\n * fastened. Refused, it says why.\n */\n /* What a tilted part's typed size keeps, by the figure's placement: not the floor's lowest point everywhere (designer 2026-09-27). */\n /* How the selected part would meet the plane, worked out once per version and part. */\n private planeContactOf(shown: FigureRevision, part: string): FigurePlaneContact | undefined {\n return derivedOf(shown, `plane-contact|${part}`, () => {\n try {\n return figurePlaneAlignChanges(shown.asset, part).contact\n } catch {\n return undefined\n }\n })\n }\n private renderPlaneAlign(shown: FigureRevision, unavailable: boolean) {\n const placement = shown.asset.placement ?? 'floor'\n /* A tilted part touches the plane at a point or an edge, a ball at its lowest; the tooltip says so rather than promise a face (designer 2026-09-27). */\n const contact = this.planeContactOf(shown, this.selected)\n const told = contact === 'tilted' || contact === 'extreme' ? `-${contact}` : ''\n return html`<button plane-align=${placement} ?disabled=${unavailable} title=${i18next.t(`figure.text.align-to-${placement}${told}`)}\n @click=${() => this.alignToPlane()}>${i18next.t(`figure.button.align-to-${placement}`)}</button>`\n }\n private alignToPlane() {\n const asset = this.shown()!.asset\n const { changes, contact, refusal } = figurePlaneAlignChanges(asset, this.selected)\n if (refusal) {\n this.error = i18next.t(`figure.text.align-refused-${refusal.toLowerCase().replace(/_/g, '-')}`, { part: partLabelOf(this.selected) })\n return\n }\n if (changes.length) this.run(() => this.session!.apply(changes))\n if ((contact === 'tilted' || contact === 'extreme') && !this.error) this.notice = i18next.t(`figure.text.aligned-${contact}-${asset.placement ?? 'floor'}`)\n }\n private renderTools(unavailable: boolean) {\n const reach = this.reachOf(this.selected)\n const shown = this.shown()\n if (!this.selected || !reach.translate || !shown) return null\n /*\n * In words, two rows by what they do (user 2026-10-01: 「무엇을 하는 것인지 모르겠다」): moving the part to the figure's\n * centre lines, onto its plane or onto the grid; and making a mirrored copy, which makes a part and moves nothing.\n */\n const tool = (name: AlignTool, label: string, title: string) =>\n html`<button ?disabled=${unavailable} title=${i18next.t(title)} @click=${() => this.align(name)}>${i18next.t(label)}</button>`\n const mirrors = (['x', 'z'] as const).map(axis => ({ axis, able: canMirror(shown, this.selected, axis, reach) }))\n return html`<div vector-row>\n <label>${i18next.t('figure.label.tools')}</label>\n <div tools>\n ${tool('centre-x', 'figure.button.center-x', 'figure.text.center-on-x')}\n ${tool('centre-z', 'figure.button.center-z', 'figure.text.center-on-z')}\n ${this.renderPlaneAlign(shown, unavailable)}\n ${tool('snap', 'figure.button.snap', 'figure.text.snap-explained')}\n </div>\n </div>\n <div vector-row>\n <label>${i18next.t('figure.label.mirror-copy')}</label>\n <div tools>\n ${mirrors.map(\n ({ axis, able }) => html`<button ?disabled=${unavailable || !able} title=${i18next.t(able ? 'figure.text.mirror-explained' : 'figure.text.mirror-would-overlap')} @click=${() => this.mirror(axis)}>\n ${i18next.t('figure.button.mirror-' + axis)}\n </button>`\n )}\n </div>\n </div>\n`\n }\n /**\n * A part's name. It renames every value the part owns, and what refers to them follows\n * (figure-model's rename-part), as one step of the history.\n */\n /**\n * A repeated body is one of its repeat's copies and is named after it -- the list and this field read `roller 15`, not\n * its path through the repeat (user, 2026-09-24: 「부품 이름 ???」). A copy has no name of its own to change.\n */\n private renderRepeatNote(geometry: readonly unknown[] | undefined) {\n const repeat = repeatOf(this.selected, geometry)\n return repeat?.index ? html`<p hint>${i18next.t('figure.text.repeat-member', { name: repeat.name, count: repeat.count, index: repeat.index })}</p>` : nothing\n }\n private renamePart(input: HTMLInputElement) {\n const name = input.value.trim()\n const from = this.selected\n if (!name || name === from) {\n input.value = from\n return\n }\n try {\n this.session!.edit({ kind: 'rename-part', target: from, name })\n this.selected = name\n this.error = ''\n this.changed()\n } catch (error) {\n input.value = from\n /* Whether a name is a name is the kernel's rule, said from its refusal (ADR-0127), not checked again here. */\n this.error = partNameRefusalOf(error, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n /** Size response, fastening and motion for the selected part, as authoring commands. */\n private renderLinks(unavailable: boolean, section: 'shape' | 'response' | 'places' | 'motion', slotted: unknown = nothing) {\n const shown = this.shown()\n if (!shown) return null\n const tab: SideTab = section === 'shape' ? 'properties' : section === 'places' ? 'capability' : section\n return html`<figure-links\n .revision=${shown}\n .section=${section}\n .active=${this.tab === tab && !(section === 'shape' && this.fastening)}\n .partId=${this.selected}\n ?locked=${unavailable}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n @size-recipe=${(e: CustomEvent) => this.applySizeSteps(e.detail.steps)}\n @size-input=${(e: CustomEvent) => this.writeField({ id: e.detail.input, unit: 'mm' }, e.detail.value)}\n @size-typing=${(e: CustomEvent) => this.hold(this.heldOf({ id: e.detail.input, unit: 'mm' }, e.detail.value))}\n @size-let-go=${() => (this.live = NOTHING_LIVE)}\n @fasten-open=${() => this.openFastening()}\n .previewWords=${this.commandPreview.words()}\n .detachWords=${this.commandPreview.detachWords(shown)}\n .overhangWords=${section === 'shape' ? this.overhangOf(shown).words : NO_WORDS}\n .overhangNote=${section === 'shape' ? this.overhangOf(shown).note : NO_WORDS}\n .motionEnds=${section === 'motion' ? this.motionEnds() : null}\n @go-fasten=${() => this.goFasten()}\n @preview-command=${(e: CustomEvent) => this.commandPreview.ask(e.detail)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n >${slotted}</figure-links>`\n }\n /**\n * A part's groups in one order whatever its state (chief architect 2026-10-16): its size, its place. The links draw\n * the groups; the part's own numbers go into them by slot. How the part answers a size -- its rules, a position that\n * follows, its row -- is the 「반응형」 tab's. A fastened part's place and turn are its fastening's: the place group\n * says it in one line and the locked cells are not drawn (user 2026-10-16).\n */\n private renderPartGroups(shown: FigureRevision | undefined, geometry: readonly { id: string }[], fields: FieldLike[], unavailable: boolean, held?: HeldValues) {\n const groups = this.withSizeRow(groupFields(fields, this.selected), held)\n const integrated = !!shown && canFollow(shown.asset, this.selected)\n const dimensionInputs = new Set(integrated ? followableAxes(shown!.asset, this.selected).map(axis => sizeInputOf(shown!.asset, this.selected, axis)) : [])\n const singles = groups.singles.filter(g => g.kind !== 'single' || !dimensionInputs.has(g.field.id))\n const size = integrated ? [] : groups.vectors.filter(g => g.kind === 'vector' && g.name === 'size')\n const place = groups.vectors.filter(g => g.kind === 'vector' && g.name !== 'size')\n const fastened = !!this.asset()?.joints?.some(j => j.body1.part === ownerOf(this.selected))\n const placeLocked = fastened && place.every(g => g.kind === 'vector' && (['x', 'y', 'z'] as const).every(axis => !g.cells[axis]))\n return this.renderLinks(\n unavailable,\n 'shape',\n html`${size.length || singles.length\n ? html`<section slot=\"size\" group-fields>\n <h3>${i18next.t(integrated ? 'figure.label.group-shape' : 'figure.label.group-size')}</h3>\n ${size.map(g => this.renderVector(g, unavailable, held))}\n ${singles.length\n ? html`<div form>${singles.map(g => (g.kind === 'single' ? this.renderSingle(g.name, g.field, unavailable) : nothing))}</div>`\n : nothing}\n ${!integrated ? this.renderSizeKeeps() : nothing}\n </section>`\n : nothing}\n ${place.length && !placeLocked\n ? html`<div slot=\"place\" group-fields>${place.map(g => this.renderVector(g, unavailable, held))}${this.renderHeldAxes(place)}</div>`\n : nothing}`\n )\n }\n /** The 「반응형」 tab of a part: the links' response groups, its row's own section put in by slot. */\n private renderResponse(shown: FigureRevision | undefined, geometry: readonly { id: string }[], unavailable: boolean) {\n return this.renderLinks(unavailable, 'response', html`<div slot=\"size-note\">${this.renderSizeKeeps()}</div>${this.renderRepeat(shown, geometry, unavailable)}`)\n }\n /**\n * 「더 보기」: what few parts need, folded by default and left as this person last left it (chief architect\n * 2026-10-16) -- the section, its corners and inside; transparency, glow and segments; the mirrored copy and the\n * alignment tools.\n */\n private renderMore(part: object, palette: Record<string, string>, unavailable: boolean) {\n const tools = this.renderTools(unavailable)\n return html`<section more>\n <details more-fold ?open=${this.moreOpen} @toggle=${(e: Event) => this.setMoreOpen((e.target as HTMLDetailsElement).open)}>\n <summary><h3>${i18next.t('figure.label.group-more')}</h3></summary>\n <div more-body>\n ${tools ? html`<div group-fields>${tools}</div>` : nothing}\n <figure-section-panel\n embedded\n .body=${{ ...part, id: this.selected }}\n ?locked=${unavailable}\n .faceMapping=${this.faceMapping?.from === 'panel' ? this.faceMapping.need : undefined}\n @face-mapped=${(e: CustomEvent) => this.mapFaces(e.detail.remap)}\n @face-mapping-cancel=${() => (this.faceMapping = undefined)}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n @command-live=${(e: CustomEvent) => this.holdAction(e.detail.action)}\n @section-editor-open=${() => (this.sectionEditing = this.selected)}\n ></figure-section-panel>\n <figure-material-panel\n show=\"more\"\n .body=${{ ...part, id: this.selected }}\n .palette=${palette}\n ?locked=${unavailable}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-live=${(e: CustomEvent) => this.hold({}, e.detail.edit)}\n ></figure-material-panel>\n </div>\n </details>\n </section>`\n }\n /** A bar button that opens the view settings or the release history over the work; pressed while it is open. */\n private renderOverlayButton(which: BarOverlay, icon: string, label: string, slot?: string) {\n const open = this.overlay === which\n return html`<button\n slot=${slot ?? nothing}\n tool\n bar-overlay=${which}\n aria-pressed=${String(open)}\n aria-label=${i18next.t(label)}\n title=${i18next.t(label)}\n @click=${() => (this.overlay = open ? undefined : which)}\n >\n <md-icon>${icon}</md-icon>\n </button>`\n }\n /**\n * The view settings or the release history, over the work under the bar. Both stay drawn, hidden when closed: the\n * history keeps what it read, as the tabs kept it. Esc closes it.\n */\n private renderOverlay() {\n const close = () => (this.overlay = undefined)\n const panel = (which: BarOverlay, label: string, body: unknown) => html`<div\n side-overlay\n bar-overlay-panel=${which}\n role=\"dialog\"\n aria-label=${i18next.t(label)}\n ?off=${this.overlay !== which}\n @keydown=${(e: KeyboardEvent) => e.key === 'Escape' && (e.stopPropagation(), close())}\n >\n <div overlay-head>\n <h3>${i18next.t(label)}</h3>\n <button quiet aria-label=${i18next.t('figure.button.close')} title=${i18next.t('figure.button.close')} @click=${close}><md-icon>close</md-icon></button>\n </div>\n <div overlay-body>${body}</div>\n </div>`\n return html`${panel('view', 'figure.label.tab-environment', html`<figure-settings .view=${this.view} @update-view=${(e: CustomEvent) => this.setView(e.detail.view)}></figure-settings>`)}\n ${panel('history', 'figure.button.release', html`<slot name=\"history\"></slot>`)}`\n }\n /** Data tried in the data tab, given to the preview's figures as their `data`; null when none is (ADR-0051 §8). */\n @state() private dataSample: unknown = null\n /** The figure's controls: try a value, name it, set its range and travel time, keep the pose. */\n private renderControls(view: { fields: Array<{ id: string; role?: string; value: number }> }, unavailable: boolean) {\n const asset = this.shown()?.asset\n if (!asset) return null\n const values = Object.fromEntries(view.fields.filter(f => f.role === 'state').map(f => [f.id, f.value]))\n return html`<figure-controls\n .asset=${asset}\n .values=${values}\n ?locked=${unavailable}\n @state=${(e: CustomEvent) => this.run(() => this.session!.apply([{ kind: 'set-state', input: e.detail.input, unit: e.detail.unit, value: e.detail.value }]))}\n @state-live=${(e: CustomEvent) => this.hold({ [e.detail.input]: e.detail.value })}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-controls>\n <figure-clips\n .asset=${asset}\n .values=${values}\n ?locked=${unavailable}\n @states=${(e: CustomEvent) => this.run(() => this.session!.apply(e.detail.changes))}\n @states-live=${(e: CustomEvent) => this.hold(e.detail.values)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-clips>`\n }\n /** One command, one step of the history. A refusal a person can meet here is said in their words. */\n /** Where a held edit goes once the author has chosen where what stands on its lost faces goes. */\n private mapFaces(remap: FigureFaceRemap[]) {\n const held = this.faceMapping\n if (!held) return\n const done = this.linkCommand({ ...held.action, remap } as FigureAuthoringAction, held.from)\n if (done && held.from === 'section-editor') this.closeSectionEditor()\n }\n /** The figure's size, declared for a part to follow, in one line (ADR ruling Q1). */\n private sizeDeclaredWords() {\n const size = this.designValues()\n return i18next.t('figure.text.size-declared-to-follow', {\n x: Math.round(size['size.x'] ?? 0).toLocaleString(),\n y: Math.round(size['size.y'] ?? 0).toLocaleString(),\n z: Math.round(size['size.z'] ?? 0).toLocaleString()\n })\n }\n /**\n * The size editor's steps, one step of the history. A measure made to follow the figure on a figure with no size\n * declares it on the way; that is said in one line, as follow-size said it (ADR ruling Q1, 2026-10-24).\n */\n private applySizeSteps(steps: readonly FigureProposalStep[]) {\n const hadSize = this.hasSize()\n this.run(() => this.session!.applyRecipe(steps))\n if (!hadSize && !this.error && this.hasSize()) this.notice = this.sizeDeclaredWords()\n }\n /** Runs a command; true when it was taken. */\n private linkCommand(action: FigureAuthoringAction, from: 'section-editor' | 'panel' = 'panel'): boolean {\n /* Committed or refused, a command in hand is let go of: the figure as it stands is drawn again. */\n this.holdAction(null)\n this.notice = ''\n const hadSize = this.hasSize()\n try {\n this.session!.command(action)\n this.error = ''\n this.faceMapping = undefined\n /* What the command did besides what was asked, in one line: the figure's size declared to follow (ADR ruling Q1). */\n if (action.kind === 'follow-size' && !hadSize) this.notice = this.sizeDeclaredWords()\n this.changed()\n return true\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.linkCommand(action, from))) return false\n const code = (error as { code?: string })?.code\n /* Something stands on a face this takes away: ask where it goes, there, rather than only saying no. */\n const need = (error as { details?: FigureFaceMappingNeed }).details\n if (code === 'FEATURE_MAPPING_REQUIRED' && need?.lost?.length) {\n this.faceMapping = { action, need, from }\n this.error = ''\n return false\n }\n this.error = this.said(error)\n return false\n }\n }\n private changeField(field: { id: string; unit: FigureInputChange['unit']; role?: string }, event: Event) {\n const input = event.target as HTMLInputElement\n // Rejected edits must also restore the displayed numeric value.\n input.value = String(this.writeField(field, input.valueAsNumber))\n }\n /**\n * A number written to an input, from a field, a scrub or the size editor's rows: a size keeps the part's middle, or its\n * fastening -- figure-model's one size function (ADR-0140 4.1). Gives the value the input holds after, refused or not.\n */\n private writeField(field: { id: string; unit: FigureInputChange['unit']; role?: string }, value: number): number {\n const part = this.selected\n const change: FigureInputChange = { kind: field.role === 'state' ? 'set-state' : 'set-design', input: field.id, unit: field.unit, value }\n const asset = this.shown()?.asset\n const before = asset && part ? throughPlaneOf(asset, drawableFigureParts(this.session!.read().geometry ?? []), part) : 0\n this.run(() => this.session!.apply(field.role !== 'state' && part ? figureSizeEditOf(this.shown()!.asset, part, [change], { keep: 'centre' }).changes : [change]))\n /* Typed past the mounting plane: said, with the way to fasten it there (ADR-0140 5). */\n const after = asset && part && field.role !== 'state' ? throughPlaneOf(this.shown()!.asset, drawableFigureParts(this.session!.read().geometry ?? []), part) : 0\n if (after > before + 0.5) this.tellThroughPlane(part, after)\n return this.session!.read().fields.find(i => i.id === field.id)!.value\n }\n /** Typing or a held spinner: each number on the way is drawn; the field's change records it. */\n private typing(field: { id: string; unit?: FigureInputChange['unit']; role?: string }, event: Event) {\n const value = (event.target as HTMLInputElement).valueAsNumber\n if (Number.isFinite(value)) this.hold(this.heldOf(field, value))\n }\n /**\n * The values in hand for a number typed or scrubbed: what its release writes -- a size with the part's middle kept,\n * or its fastening (figure-model's one size function, ADR-0140 4.1), so the figure does not jump on the release.\n */\n private heldOf(field: { id: string; unit?: FigureInputChange['unit']; role?: string }, value: number, sized?: ReturnType<typeof figureSizeEditorOf>): Record<string, number> {\n const part = this.selected\n const asset = this.shown()?.asset\n if (field.role === 'state' || !part || !asset) return { [field.id]: value }\n const change: FigureInputChange = { kind: 'set-design', input: field.id, unit: field.unit ?? 'mm', value }\n try {\n const { changes } = sized ? sized([change], { keep: 'centre' }) : figureSizeEditOf(asset, part, [change], { keep: 'centre' })\n return Object.fromEntries(changes.map(c => [c.input, c.value as number]))\n } catch {\n return { [field.id]: value }\n }\n }\n /**\n * Drag a field's label (or an axis letter) sideways to scrub its value, as vector tools do: the figure follows the\n * pointer, and the release records one step. The field's number follows too, so the value in hand is always read.\n */\n private scrub(field: { id: string; unit: FigureInputChange['unit']; role?: string; value: number }, down: PointerEvent, unavailable: boolean) {\n if (unavailable) return\n const label = down.currentTarget as HTMLElement\n const input = (label.closest('div[cell]')?.querySelector('input') ?? label.nextElementSibling) as HTMLInputElement | null\n if (!input) return\n /* Prepared once for the scrub: each move is a size through the same function its release writes with. */\n const asset = this.shown()?.asset\n const sized = asset && this.selected && field.role !== 'state' ? (() => { try { return figureSizeEditorOf(asset, this.selected) } catch { return undefined } })() : undefined\n scrubLabel(down, field, {\n move: value => {\n input.value = String(value)\n this.hold(this.heldOf(field, value, sized))\n },\n release: value => (input.value = String(this.writeField(field, value))),\n cancel: () => {\n input.value = String(field.value)\n this.live = NOTHING_LIVE\n }\n })\n }\n /** The sizes a board may give the figure: the ends the author typed, and the rest as far as its parts allow. */\n private renderInstanceRange(shown: FigureRevision | undefined, unavailable: boolean) {\n if (!shown) return nothing\n const asset = shown.asset\n /* Computed once per version: figure-model evaluates the figure at its edges. */\n const measured = derivedOf(shown, 'instance-range', () => {\n let of: ReturnType<typeof instanceRangeOf>\n let toDeclare: ReturnType<typeof instanceSizeToDeclare>\n try {\n of = instanceRangeOf(asset)\n } catch {\n of = undefined\n }\n try {\n toDeclare = of ? undefined : instanceSizeToDeclare(asset)\n } catch {\n toDeclare = undefined\n }\n return { of, toDeclare }\n })\n const range = measured.of\n /*\n In words a person reads (user 2026-10-19/20): what the figure does on a drawing, not the inputs behind it. Fixed,\n it says the size it is always drawn at; resizable, the sizes it may take on each axis and the parts that change\n with it. The way to it stays one press -- a figure no part follows (a robot scaled whole) reaches the one-ratio\n rule only from here -- and the help mark says how parts are made to follow.\n */\n const mm = (v: number) => Math.round(v).toLocaleString()\n const toDeclare = measured.toDeclare\n const title = (explained: string) =>\n html`<h3>${i18next.t('figure.label.board-size')}${this.help.button(explained)}</h3>${this.help.hint(explained)}`\n if (!range && toDeclare)\n return html`<section board-size>\n ${title('figure.text.board-size-fixed-explained')}\n <p fixed-size>${i18next.t('figure.text.board-size-fixed', { x: mm(toDeclare.at.x), y: mm(toDeclare.at.y), z: mm(toDeclare.at.z) })}</p>\n <button act ?disabled=${unavailable} @click=${() => this.linkCommand({ kind: 'declare-instance-size', at: toDeclare.at })}>\n <md-icon>open_in_full</md-icon>${i18next.t('figure.button.declare-instance-size')}\n </button>\n </section>`\n if (!range) return nothing\n const followers = sizeFollowersOf(asset)\n /*\n An end the author typed shows its number; an open end is empty, with what the parts allow written faintly in it\n (ADR-0087 decision 6). Typing narrows that end, emptying the field opens it again.\n */\n const shownEnd = (r: (typeof range)['x'], bound: 'min' | 'max') => (bound === 'max' && !Number.isFinite(r.max) ? '∞' : mm(r[bound]))\n return html`<section board-size>\n ${title('figure.text.board-size-range-explained')}\n ${(['x', 'y', 'z'] as const).map(\n axis => html`<div inline-field>\n <label>${i18next.t('figure.label.resize-' + axis)} <span unit>mm</span></label>\n <div pair range>\n ${(['min', 'max'] as const).map(\n (bound, i) => html`${i ? html`<span dash aria-hidden=\"true\">–</span>` : nothing}<input\n aria-label=${`size.${axis}.${bound}`}\n type=\"number\"\n step=\"any\"\n .value=${live(range[axis].narrowed[bound] ? String(Math.round(range[axis][bound])) : '')}\n placeholder=${shownEnd(range[axis], bound)}\n ?disabled=${unavailable}\n @change=${(e: Event) => {\n const typed = (e.target as HTMLInputElement).valueAsNumber\n this.linkCommand({ kind: 'declare-instance-size', range: rangeWith(range, axis, bound, typed), replace: true })\n }}\n />`\n )}\n </div>\n </div>`\n )}\n <p followers>\n ${followers.length\n ? i18next.t('figure.text.board-size-followers', {\n parts: followers.length > 4 ? i18next.t('figure.text.board-size-followers-more', { first: followers.slice(0, 4).join(', '), rest: String(followers.length - 4) }) : followers.join(', ')\n })\n : i18next.t('figure.text.board-size-no-followers')}\n </p>\n ${this.renderSizingRule(asset, unavailable)}\n </section>`\n }\n /**\n * How the figure grows. One ratio (`sizing: 'uniform'`) is said as it is; a figure with joints that has not declared\n * it is offered it -- a mechanism does not shear -- and the author decides (chief architect's ruling 2026-09-24).\n */\n private renderSizingRule(asset: FigureAsset, unavailable: boolean) {\n if (asset.sizing === 'uniform') {\n /* One ratio reaches only what reads the size: every other length is offered to follow it, in one step. */\n const follow = proportionToFollow(asset)\n return html`<div inline-field><label>${i18next.t('figure.label.sizing-rule')}</label><span>${i18next.t('figure.label.sizing-uniform')}</span></div>\n ${follow?.count\n ? html`<p hint>${i18next.t('figure.text.proportion-to-follow', { count: follow.count })}</p>\n <button act ?disabled=${unavailable} @click=${() => this.linkCommand({ kind: 'follow-size-in-proportion' })}>\n <md-icon>open_in_full</md-icon>${i18next.t('figure.button.follow-size-in-proportion')}\n </button>`\n : nothing}\n ${follow?.kept.length ? html`<p hint>${i18next.t('figure.text.proportion-kept', { what: follow.kept.join(', ') })}</p>` : nothing}`\n }\n return html`${turnsAboutAJoint(asset) ? html`<p hint>${i18next.t('figure.text.sizing-uniform-proposed')}</p>` : nothing}\n <button act ?disabled=${unavailable} title=${i18next.t('figure.text.sizing-uniform-explained')} @click=${() => this.linkCommand({ kind: 'scale-uniformly' })}>\n <md-icon>aspect_ratio</md-icon>${i18next.t('figure.button.scale-uniformly')}\n </button>`\n }\n /**\n * The parts list, one row per part the author made: a repeat is one row with how many copies it makes now\n * (user, 2026-09-24: the conveyor's sixteen rollers were sixteen rows).\n */\n private partRows(geometry: readonly { id: string }[], asset?: FigureAsset): FigurePartRow[] {\n /* Where each part is fastened, straight above it: `part · face`, or the mounting plane (ADR-0097 §5.5). */\n const fastened = new Map(\n (asset?.joints ?? []).map(j => [\n j.body1.part,\n 'plane' in j.body0 ? i18next.t('figure.label.mounting-plane') : `${partLabelOf(j.body0.part)} · ${i18next.t(endPlaceKeyOf(j.body0))}`\n ])\n )\n const rows = new Map<string, FigurePartRow>()\n for (const g of geometry) {\n const id = ownerOf(g.id)\n const row = rows.get(id)\n if (row) {\n row.copies = (row.copies ?? 1) + 1\n continue\n }\n rows.set(id, {\n id,\n kind: startingShapeKindOfBody((g as { shape?: never }).shape) ?? '',\n hidden: this.hiddenParts.has(id),\n invisible: (g as { visible?: boolean }).visible === false,\n ...(id !== g.id ? { copies: 1 } : {}),\n ...(fastened.has(id) ? { fastenedTo: fastened.get(id)! } : {})\n })\n }\n return [...rows.values()]\n }\n /** The detail level's part budget for the list's head, from figure-model's count (a repeat once). */\n private partBudgetOf(asset: FigureAsset | undefined) {\n if (!asset) return undefined\n try {\n return { level: asset.detailLevel ?? null, used: figurePartCountOf(asset), limit: asset.detailLevel ? PART_LIMIT[asset.detailLevel] : null }\n } catch {\n return undefined\n }\n }\n /**\n * A repeat: which way its copies run, how many there are now, and how far apart.\n * The pitch of a row that fills its length is edited as a number (`set-repeat` makes it the part's own the first\n * time); a row of a fixed count says its pitch cannot be set yet (figure-model refuses it the same way).\n */\n private renderRepeat(shown: FigureRevision | undefined, geometry: readonly { id: string }[], unavailable: boolean) {\n const repeat = repeatOf(this.selected, geometry)\n const asset = shown?.asset\n if (!shown || !asset || !repeat || repeat.index) return nothing\n /* The row is set on its part; what hangs from that part is copied with it and has no row of its own. */\n if (!asset.document.model.nodes.some(n => n.id === `${this.selected}.repeat`)) return nothing\n const model = asset.document.model as unknown as {\n nodes: { id: string; op: string; args: string[]; params?: Record<string, string> }[]\n constants: { id: string; value: number }[]\n inputs: { id: string; max?: number }[]\n }\n const layout = model.nodes.find(n => n.id === `${this.selected}.layout`)\n const axis = model.nodes.find(n => n.id === `${this.selected}.repeat`)?.params?.axis ?? '?'\n const own = `${this.selected}.repeat.pitch`\n /* The pitch as it stands: the part's own number, a constant, or what a pitch that follows a length comes to. */\n const fits = layout?.op === 'fit-pitch@1'\n const pitch = fits ? asset.designInputs[own] ?? model.constants.find(c => c.id === layout?.args[4])?.value ?? valueNow(shown, layout?.args[4]) : this.rowNow(shown)?.pitch\n const field = { id: own, unit: 'mm' as const, role: 'design', value: pitch ?? 0 }\n const record = asset.joints?.find(j => j.body1.part === this.selected && j.repeat)\n const parent = record && 'part' in record.body0 ? record.body0.part : undefined\n const removable = !!record\n const axes = record && 'part' in record.body0 && 'face' in record.body0 ? figureFastenAxesOf(asset, record.body0) : []\n const update = (change: Partial<NonNullable<typeof record>['repeat']>) => {\n if (!record?.repeat || unavailable) return\n this.run(() => this.session!.command({ kind: 'set-joint', joint: { ...record, repeat: { ...record.repeat!, ...change } } }))\n }\n return html`<section slot=\"row\" row>\n <h3>\n ${i18next.t('figure.label.repeat')}\n <span section-state active>${i18next.t('figure.label.repeat-active')}</span>\n </h3>\n <div choice-row role=\"radiogroup\" aria-label=${i18next.t('figure.label.row-basis')}>\n <label toggle><input type=\"radio\" name=\"applied-repeat-mode\" .checked=${live(fits)} ?disabled=${unavailable || !record} @change=${() => update({ count: undefined, pitch: pitch && pitch > 0 ? pitch : 200 })}>${i18next.t('figure.label.repeat-fills')}</label>\n <label toggle><input type=\"radio\" name=\"applied-repeat-mode\" .checked=${live(!fits)} ?disabled=${unavailable || !record} @change=${() => update({ count: repeat.count })}>${i18next.t('figure.label.row-by-count')}</label>\n </div>\n <p hint>${i18next.t(fits ? 'figure.text.repeat-mode-pitch' : 'figure.text.repeat-mode-count')}</p>\n <div inline-field><label>${i18next.t('figure.label.size-source')}</label><span value>${parent ?? '—'}</span></div>\n <div inline-field><label>${i18next.t('figure.label.repeat-axis')}</label>${axes.length ? html`<select aria-label=${i18next.t('figure.label.repeat-axis')} ?disabled=${unavailable} .value=${live(axis)} @change=${(e: Event) => update({ axis: (e.target as HTMLSelectElement).value.toUpperCase() as 'X' | 'Y' | 'Z' })}>${axes.map(a => html`<option value=${a} ?selected=${a === axis}>${a.toUpperCase()}</option>`)}</select>` : html`<span value>${axis.toUpperCase()}</span>`}</div>\n <div inline-field><label>${i18next.t('figure.label.repeat-count')}</label>${!fits && record ? html`<input type=\"number\" min=\"1\" step=\"1\" aria-label=${i18next.t('figure.label.repeat-count')} .value=${live(String(repeat.count))} ?disabled=${unavailable} @change=${(e: Event) => update({ count: (e.target as HTMLInputElement).valueAsNumber })}>` : html`<span value>${repeat.count}</span>`}</div>\n <div inline-field>\n <label>${i18next.t('figure.label.repeat-gap')} <span unit>mm</span></label>\n ${fits ? html`<input\n type=\"number\"\n step=\"any\"\n aria-label=${i18next.t('figure.label.repeat-gap')}\n .value=${live(String(pitch ?? ''))}\n ?disabled=${unavailable}\n @change=${(e: Event) => this.setPitch(field, e)}\n />` : html`<span value>${pitch === undefined ? '—' : Number(pitch.toFixed(3))}</span>`}\n </div>\n <ul row-reading>${rowWordsOf(this.rowNow(shown), (key, params) => i18next.t(key, params)).slice(1).map(line => html`<li>${line}</li>`)}</ul>\n <button quiet ?disabled=${unavailable || !removable} @click=${() => this.run(() => this.session!.command({ kind: 'remove-repeat', part: this.selected }))}>${i18next.t('figure.button.remove-repeat')}</button>\n <p hint>${i18next.t('figure.text.repeat-remove-explained')}</p>\n ${fits ? this.renderPublicPitch(asset, pitch ?? 0, unavailable) : nothing}\n </section>`\n }\n /** The selected row as it is drawn now, read by figure-model: nothing when it cannot be read. */\n private rowNow(shown: FigureRevision): FigureRowReading | undefined {\n return derivedOf(shown, `row|${this.selected}`, () => {\n try {\n return figureRowOf(shown.asset, this.selected, shown.inputs)\n } catch {\n return undefined\n }\n })\n }\n /** The design input a row's pitch is read from, when it is read from one (ADR-0096). */\n private pitchInputOf(asset: FigureAsset, part: string): string | undefined {\n const pitch = asset.joints?.find(j => j.body1.part === part && j.repeat)?.repeat?.pitch as { from?: { of?: string; input?: string } } | number | undefined\n return typeof pitch === 'object' && pitch?.from?.of === 'input' ? pitch.from.input : undefined\n }\n /**\n * 「보드에서 바꿀 수 있음」 (ADR-0096): the row's pitch made a design input the figure publishes -- a name on the board and\n * a range the board's value is held to -- in one step; changed or withdrawn the same way. Only a row with a record.\n */\n private renderPublicPitch(asset: FigureAsset, pitch: number, unavailable: boolean) {\n const part = this.selected\n if (!asset.joints?.some(j => j.body1.part === part && j.repeat)) return nothing\n const from = this.pitchInputOf(asset, part)\n const listed = from ? asset.publicInputs?.find(p => p.input === from) : undefined\n const input = from ? asset.document.model.inputs.find(i => i.id === from) : undefined\n const form =\n this.publishing?.part === part\n ? this.publishing\n : listed && input\n ? /* A published input has both ends (figure-model checkPublicInput). */ { part, label: listed.label, min: input.min!, max: input.max! }\n : undefined\n const open = !!form\n const edit = (key: 'label' | 'min' | 'max') => (e: Event) => {\n const target = e.target as HTMLInputElement\n const base = form ?? { part, label: '', min: 0, max: 0 }\n this.publishing = { ...base, [key]: key === 'label' ? target.value : target.valueAsNumber }\n }\n const steps = (): FigureProposalStep[] => {\n const f = form!\n const id = from ?? `${part}.pitch`\n if (listed) return [{ kind: 'set-input-range', input: id, min: f.min, max: f.max }, { kind: 'publish-input', input: id, label: f.label }] as FigureProposalStep[]\n const exists = asset.document.model.inputs.some(i => i.id === id)\n return [\n ...(exists ? [{ kind: 'set-input-range', input: id, min: f.min, max: f.max }] : [{ kind: 'add-design-input', id, unit: 'mm', min: f.min, max: f.max, value: pitch }]),\n ...(from ? [] : [{ kind: 'set-repeat', part, pitch: { from: { of: 'input', input: id } } }]),\n { kind: 'publish-input', input: id, label: f.label }\n ] as FigureProposalStep[]\n }\n const run = (list: FigureProposalStep[]) => {\n try {\n this.session!.applyRecipe(list)\n this.publishing = undefined\n this.error = ''\n this.changed()\n } catch (error) {\n this.error = this.said(error)\n }\n }\n return html`<div public-pitch>\n <label toggle>\n <input\n type=\"checkbox\"\n aria-label=\"figure.label.board-sets\"\n .checked=${open}\n ?disabled=${unavailable}\n @change=${(e: Event) =>\n (e.target as HTMLInputElement).checked\n ? (this.publishing = { part, label: i18next.t('figure.label.repeat-gap'), min: Math.max(1, Math.round(pitch / 2)), max: Math.round(pitch * 2) })\n : listed\n ? run([{ kind: 'unpublish-input', input: from }, { kind: 'set-repeat', part, pitch }] as FigureProposalStep[])\n : (this.publishing = undefined)}\n />\n ${i18next.t('figure.label.board-sets')}\n </label>\n ${open\n ? html`<div inline-field><label>${i18next.t('figure.label.board-name')}</label><input aria-label=\"figure.label.board-name\" .value=${form!.label} @change=${edit('label')} /></div>\n <div inline-field><label>${i18next.t('figure.label.least')} <span unit>mm</span></label><input type=\"number\" step=\"any\" aria-label=\"figure.label.least\" .value=${String(form!.min)} @change=${edit('min')} /></div>\n <div inline-field><label>${i18next.t('figure.label.most')} <span unit>mm</span></label><input type=\"number\" step=\"any\" aria-label=\"figure.label.most\" .value=${String(form!.max)} @change=${edit('max')} /></div>\n <button act publish-pitch ?disabled=${unavailable || !form!.label.trim()} @click=${() => run(steps())}>\n <md-icon>${listed ? 'check' : 'ios_share'}</md-icon>${i18next.t(listed ? 'figure.button.apply' : 'figure.button.publish-input')}\n </button>`\n : nothing}\n </div>`\n }\n /**\n * A pitch always goes through `set-repeat`: the command moves the longest length with it (at most `limit` copies),\n * which a plain input edit would not. Refused only when the authored length would already hold more copies than\n * that -- said with the numbers.\n */\n private setPitch(field: { id: string; value: number }, event: Event) {\n const input = event.target as HTMLInputElement\n const pitch = input.valueAsNumber\n if (!Number.isFinite(pitch) || pitch === field.value) return\n /* Read from a design input the board may set: the input's value changes, the row keeps reading it (ADR-0096). */\n const from = this.pitchInputOf(this.shown()!.asset, this.selected)\n if (from) {\n this.run(() => this.session!.apply([{ kind: 'set-design', input: from, unit: 'mm', value: pitch }]))\n input.value = String(this.session!.read().fields.find(i => i.id === from)?.value ?? field.value)\n return\n }\n try {\n this.session!.command({ kind: 'set-repeat', part: this.selected, pitch })\n this.error = ''\n this.changed()\n } catch (error) {\n input.value = String(field.value)\n this.error = this.said(error)\n }\n }\n /** Choose a part, from the list, the canvas or a place row. A figure-level tab gives way to the part's properties. */\n /*\n Saving and releasing told apart, beside the save (ADR-0097 §5.6, Q-D2): what the saved figure is -- a draft never\n released, a draft while boards use an earlier release, a release -- as the server said it. Edits not saved are the\n status before it. Boards read a draft's latest release (figureBlueprint), so that is what is said.\n */\n private releaseWords(view: { id?: string | null }): string {\n if (!view.id || !this.releaseState?.state) return ''\n const { state, version } = this.releaseState\n if (state === 'released') return i18next.t('figure.text.release-state-released', { version: String(version) })\n return version > 0 ? i18next.t('figure.text.release-state-draft-over', { version: String(version) }) : i18next.t('figure.text.release-state-draft-new')\n }\n /** The findings that block release, under the bar beside 「발행」. */\n private renderReleaseBlockers(blockers: FigureGateFinding[], asset: FigureAsset | undefined) {\n const parts = (asset?.appearance ?? []).map(look => look.target)\n return html`<div release-blockers role=\"dialog\" aria-label=${i18next.t('figure.text.must-fix-to-release')} @keydown=${(e: KeyboardEvent) => e.key === 'Escape' && (this.blockersOpen = false)}>\n <ul gate>\n <li head>${i18next.t('figure.text.must-fix-to-release')}</li>\n ${blockers.map(finding => renderGateFinding(finding, true, nothing, parts))}\n </ul>\n </div>`\n }\n /*\n The bar's one way to the releases (user 2026-10-18: the history icon and 「발행」 opened the same panel): the panel\n of releases -- what to release now, the releases before it and going back to one -- opened at its release section,\n closed again by a second press.\n */\n private goRelease = async () => {\n if (this.overlay === 'history') {\n this.overlay = undefined\n return\n }\n this.overlay = 'history'\n await this.updateComplete\n await this.querySelector<HTMLElement & { showRelease?: () => Promise<void> }>('figure-history-panel')?.showRelease?.()\n }\n /*\n Past the edge of the face a part is fastened to (ADR-0097 §5.5, Q3): the selected part's own, and the parts fastened\n to it -- said apart from the room, nothing moved. Read once per version, part and language. The note says it is wider\n than its face: a fact of the relation, said in its details, not as a warning (designer 2026-09-27).\n */\n private overhangOf(shown: FigureRevision): { words: string[]; note: string[] } {\n const part = this.selected\n if (!part) return NO_OVERHANG\n return derivedOf(shown, `overhang|${part}|${i18next.language}`, () => {\n const asset = shown.asset\n const say = (k: string, params?: Record<string, string>) => i18next.t(k, params)\n const where = (o: FigureFaceOverhang & { on: { part: string; face: string } }) => ({ on: partLabelOf(o.on.part), face: say(`figure.label.face-${o.on.face}`) })\n /* On another part's face: the plane's edges are the figure's room, said where the room is. */\n const onPart = (o: FigureFaceOverhang | undefined): o is FigureFaceOverhang & { on: { part: string; face: string } } => !!o && o.on !== 'plane'\n const sides = (o: FigureFaceOverhang) => o.sides.map(s => say(`figure.text.overhang-side-${s.side}`, { axis: s.axis.toUpperCase(), mm: String(s.mm) })).join(', ')\n const words: string[] = []\n const note: string[] = []\n try {\n const found = figureFaceOverhangOf(asset, part, shown.inputs)\n const own = onPart(found) ? found : undefined\n if (own?.state === 'larger') {\n note.push(say('figure.text.overhang-larger', { ...where(own), sides: sides(own) }))\n if (own.lopsided.length) note.push(say('figure.text.overhang-lopsided', { axes: own.lopsided.map(a => a.toUpperCase()).join(', ') }))\n }\n if (own?.state === 'out') words.push(say('figure.text.overhang-out', { ...where(own), sides: sides(own) }))\n else if (own?.state === 'possible') words.push(say('figure.text.overhang-possible', where(own)))\n else if (own?.state === 'unknown') words.push(say('figure.text.overhang-unknown', where(own)))\n if (own?.contact === 'off') words.push(say('figure.text.overhang-off', where(own)))\n const held = (asset.joints ?? []).filter(j => 'part' in j.body0 && j.body0.part === part).map(j => figureFaceOverhangOf(asset, j.body1.part, shown.inputs))\n const past = held.filter((o): o is FigureFaceOverhang => o?.state === 'out' || o?.state === 'possible' || o?.contact === 'off')\n if (past.length) words.push(say('figure.text.overhang-held', { parts: past.map(o => partLabelOf(o.part)).join(', ') }))\n } catch {\n /* Not read: nothing said rather than a guess. */\n }\n return { words, note }\n })\n }\n /** The selected part's motion at both ends of its range, made once per version and part. */\n private motionEnds(): MotionEnds | null {\n const shown = this.shown()\n const part = this.selected\n if (!shown || !part) return null\n return derivedOf(shown, `motion-ends|${part}`, () => {\n try {\n return motionEndsOf(shown, part)\n } catch {\n return null\n }\n })\n }\n /** \"Fasten it first\", from the motion tab or a row: to the properties tab, the fastening window open on this part. */\n private async goFasten() {\n this.tab = 'properties'\n await this.updateComplete\n this.openFastening()\n }\n private openFastening() {\n if (!this.selected || this.fastenPopup) return\n this.fastenError = ''\n this.fastenHover = null\n this.fastening = true\n const content = document.createElement('figure-fasten-dialog') as NonNullable<typeof this.fastenWindow>\n content.addEventListener('preview-command', e => this.commandPreview.ask((e as CustomEvent).detail))\n content.addEventListener('fasten-hover', e => this.hoverFastening((e as CustomEvent).detail))\n content.addEventListener('fasten-apply', e => this.applyFastening((e as CustomEvent).detail.action))\n content.addEventListener('fasten-cancel', () => this.closeFastening())\n this.fastenWindow = content\n this.tellFastening()\n /* No backdrop: the canvas stays reachable while it is open -- a part pressed there is aimed at (ADR-0140 stage 4). */\n const popup = openPopup(html`${content}`, { title: i18next.t('figure.label.fastening'), size: 'fit', backdrop: false, movable: true, closable: true, escapable: true })\n this.fastenPopup = popup\n /* Closed by its own X or Esc as well: the editor lets go of it the same way. */\n popup.result.then(() => this.fastenPopup === popup && this.fastenClosed())\n }\n private closeFastening() {\n const popup = this.fastenPopup\n this.fastenClosed()\n popup?.close()\n }\n private fastenClosed() {\n this.fastenPopup = undefined\n this.fastenWindow = undefined\n this.fastening = false\n this.fastenError = ''\n this.fastenHover = null\n }\n /** What the window shows is the editor's: the figure on screen, the part, and what the preview and a refusal said. */\n private tellFastening() {\n const content = this.fastenWindow\n const view = this.session?.read()\n if (!content || !view) return\n content.revision = this.shown()\n content.partId = this.selected\n content.locked = view.loading || !!view.error || view.saving || !view.context\n content.previewWords = this.commandPreview.words()\n content.error = this.fastenError\n }\n disconnectedCallback() {\n super.disconnectedCallback()\n this.closeFastening()\n }\n /** 「적용」: the command, one step; refused, the window stays open and says why. */\n private applyFastening(action: FigureAuthoringAction) {\n if (this.linkCommand(action)) this.closeFastening()\n else this.fastenError = this.error\n }\n /** A row of the window's list under the pointer or the arrows: the face of that part it would be fastened on, lit. */\n private hoverFastening(on: { part: string; face?: string } | null) {\n const shown = this.shown()\n let lit: FigureRenderPart | null = null\n try {\n lit = on?.face && shown ? faceHighlightOf(figurePartFaceOf(shown.asset, on.part, on.face, shown.inputs)) : null\n } catch {\n lit = null\n }\n this.fastenHover = lit\n }\n /** What the canvas draws of it, made once per preview: a new list every render would stand the board up each time. */\n private previewShown(): { ghost: FigureRenderPart[]; highlight: FigureRenderPart | null } {\n const p = this.commandPreview.current()\n /* On the motion tab, with nothing being tried: where the selected part's motion takes it, at both ends. */\n if (!p && this.tab === 'motion' && this.middle === 'edit') return { ghost: this.motionEnds()?.ghost ?? [], highlight: null }\n const drawn = this.commandPreview.drawnOf(p)\n /* A part in the fastening window's list under the pointer: its face lit in place of the one the command meets. */\n return this.fastenHover ? { ghost: drawn.ghost, highlight: this.fastenHover } : drawn\n }\n /**\n * What the author has in view, for the AI dock to hear with a request (ADR-0097 §5.6 item 5): the part selected and\n * what the preview is trying. Read at the moment of sending, never cached, and never a reason to start a new\n * conversation -- selecting is not a new subject.\n */\n assistantFocus(): { part?: string; trying?: { clips?: Record<string, number>; controls?: Record<string, number> } } {\n const trying = this.middle === 'preview' ? this.renderRoot.querySelector<HTMLElement & { tried?: () => { clips?: Record<string, number>; controls?: Record<string, number> } | undefined }>('figure-preview')?.tried?.() : undefined\n return { ...(this.selected ? { part: this.selected } : {}), ...(trying ? { trying } : {}) }\n }\n /**\n * The slots the figure's slot layout unfolds to, where they fall now (ADR-0118): drawn while the places are being\n * edited. Made again only when the evaluation is new, so the canvas is not stood up again for nothing.\n */\n private slotMarks(view: { bindings?: readonly unknown[] }, asset: unknown) {\n const places = view.bindings ?? []\n if (this.slotMarksDrawn?.of !== places) {\n const layout = (asset as { document?: { capabilities?: { slotLayout?: { layout: never } } } })?.document?.capabilities?.slotLayout?.layout\n this.slotMarksDrawn = { of: places, marks: slotMarksOf(places as never, layout) as never }\n }\n return this.slotMarksDrawn.marks\n }\n private slotMarksDrawn?: { of: readonly unknown[]; marks: FigureRenderPart[] }\n private choose(id: string) {\n /* A copy on the canvas selects its repeat: the part the author made. */\n this.selected = id ? ownerOf(id) : id\n this.faceMapping = undefined\n if (id && this.tab === 'verdict') this.tab = 'properties'\n }\n private asset(): FigureAsset | undefined {\n return this.shown()?.asset\n }\n /** A side tab says what it is in words under its icon: the icons alone had to be learnt (designer 2026-09-27, U05). */\n private renderTab(tab: SideTab, icon: string, label: string) {\n /* Its accessible name is the name it shows (designer 2026-09-27); the longer title stays as its tooltip. */\n const name = i18next.t(tab === 'response' && this.selected ? 'figure.label.tab-arrangement' : 'figure.label.tab-short-' + tab)\n return html`<button tab ?on=${this.tab === tab} title=${tab === 'response' && this.selected ? name : label} aria-label=${name} @click=${() => (this.tab = tab)}>\n <md-icon>${icon}</md-icon><span tab-label aria-hidden=\"true\">${name}</span>\n </button>`\n }\n updated(changed: PropertyValues<this>) {\n super.updated?.(changed)\n this.tellFastening()\n /* Nothing blocks release any more: the list under the bar closes, and opens fresh when something does again. */\n if (changed.has('releaseBlockers') && !this.releaseBlockers.length && this.blockersOpen) this.blockersOpen = false\n this.refusals.tell(changed)\n this.panelMemory.restore(() => this.selected)\n const panes = this.renderRoot.querySelector<OxThreePane>('ox-three-pane') ?? undefined\n if (panes !== this.panes) {\n this.panes = panes\n this.paneFold.fitTo(this.getBoundingClientRect().width)\n }\n }\n /**\n * A new figure's first question, on the canvas where the work will be (designer 2026-09-27, U04): a basic shape\n * or an AI draft when the page offers one. Recipes require a host part and are reached from the parts panel after\n * that part exists. Nothing is added until one is chosen; the type, the space, the\n * mounting face and the tags are not asked for first.\n */\n /** The section editor over the canvas, the figure behind it drawing what the working points make. */\n private renderSectionEditor(geometry: readonly { id: string }[]) {\n const part = geometry.find(g => ownerOf(g.id) === this.selected) as { id: string; shape: FigureEvaluatedShape } | undefined\n /* A door frame's section is its own width, height, jamb and head: its fields edit it, not an outline. */\n const drawn = part?.shape && drawnOf(part.shape)\n if (!part || !drawn || part.shape.dimensions.jamb !== undefined) return nothing\n const asset = this.asset() as FigureAsset\n const measures = figureSectionMeasuresOf(asset, this.selected)\n /* What a measure typed here keeps: the part's middle, or its fastening (ADR-0140 4.1). */\n const kept = keptBySizeOf(asset, this.selected)\n return html`<figure-section-editor\n .body=${{ ...part, id: this.selected }}\n .measures=${measures}\n .kept=${kept}\n .pointBlocked=${this.pointBlockedOf(drawn)}\n .revision=${this.session?.read().revision ?? 0}\n .faceMapping=${this.faceMapping?.from === 'section-editor' ? this.faceMapping.need : undefined}\n @command=${(e: CustomEvent) => {\n /* Held for a choice of where things go: the editor stays open, the choice shown in it. */\n if (!this.linkCommand(e.detail.action, 'section-editor')) e.detail.held = true\n }}\n @command-live=${(e: CustomEvent) => this.holdAction(e.detail.action)}\n @face-mapped=${(e: CustomEvent) => this.mapFaces(e.detail.remap)}\n @face-mapping-cancel=${() => (this.faceMapping = undefined)}\n @section-editor-close=${() => this.closeSectionEditor()}\n ></figure-section-editor>`\n }\n /**\n * Why a drawn push's end cannot be drawn to one point now: the kernel's own refusal of that command on a copy (what is\n * fastened to the end face), said as the face. Asked once per figure revision and part.\n */\n private pointBlockedOf(drawn: NonNullable<ReturnType<typeof drawnOf>>): string {\n const shown = this.shown()\n const session = this.session\n if (drawn.apex || drawn.section.kind !== 'polygon' || !session || !shown) return ''\n const part = this.selected\n const apex = apexOver(drawn.section.points, drawn.axis)\n return derivedOf(shown, `point-blocked|${part}|${i18next.language}`, () => {\n try {\n session.previewCommand({ kind: 'set-section', part, apex })\n } catch (error) {\n if ((error as { code?: string }).code === 'FEATURE_MAPPING_REQUIRED')\n return i18next.t('figure.text.section-editor-apex-blocked', { face: i18next.t('figure.label.face-' + END_FACE(drawn.axis, 'end')) })\n }\n return ''\n })\n }\n private renderStart() {\n const shapes: FigurePaletteKind[] = ['box', 'cylinder', 'plate']\n /* Where it is authored from, chosen before any part (ADR-0097): the figure's own setting, no room made up for it. */\n const placement = ((this.asset())?.placement ?? 'floor') as FigurePlacement\n return html`<div start role=\"region\" aria-label=${i18next.t('figure.text.start-question')}>\n <h2>${i18next.t('figure.text.start-question')}</h2>\n <div start-paths>\n <section>\n <h3>${i18next.t('figure.label.start-placement')}</h3>\n <div start-shapes role=\"radiogroup\" aria-label=${i18next.t('figure.label.start-placement')}>\n ${(['floor', 'ceiling', 'wall', 'center'] as const).map(\n one => html`<button start-button role=\"radio\" aria-checked=${String(one === placement)} ?pressed=${one === placement}\n @click=${() => one !== placement && this.linkCommand({ kind: 'set-placement', placement: one })}>\n ${i18next.t(`figure.label.resize-place-${one}`)}\n </button>`\n )}\n </div>\n </section>\n <section>\n <h3>${i18next.t('figure.label.start-shape')}</h3>\n <div start-shapes>\n ${shapes.map(\n kind => html`<button start-button start-shape=${kind} @click=${() => this.add(kind)}>\n ${i18next.t(kind === 'box' ? 'figure.label.primitive-cube' : `figure.label.primitive-${kind}`)}\n </button>`\n )}\n </div>\n <small>${i18next.t('figure.text.start-shape-more')}</small>\n </section>\n ${this.aiDraft\n ? html`<section>\n <h3>${i18next.t('figure.label.start-ai')}</h3>\n <button start-button start-ai @click=${() => this.dispatchEvent(new CustomEvent('ask-ai-draft', { bubbles: true, composed: true }))}>\n ${i18next.t('figure.button.start-ai')}\n </button>\n <small>${i18next.t('figure.text.start-ai-optional')}</small>\n </section>`\n : nothing}\n </div>\n </div>`\n }\n /**\n * The part the panel speaks of, held at its top: its kind, and what its size follows when it follows something. No path above it (user 2026-10-01): the parts list and the canvas already show which part is chosen, and the\n * list's root is the way back to the model's settings.\n */\n private renderSubject() {\n let summary: { kind: string; size: string } | undefined\n try {\n summary = this.selected\n ? partSummaryOf(this.shown()!.asset, ownerOf(this.selected), (key, params) => i18next.t(key, params), i18next.language || 'ko')\n : undefined\n } catch {\n summary = undefined\n }\n if (!summary) return nothing\n return html`<div subject>\n <div subject-summary>\n <b>${ownerOf(this.selected)}</b>\n ${summary.kind ? html`<small>${summary.kind}</small>` : nothing}\n </div>\n </div>`\n }\n /**\n * The model's settings, from the parts list's root (B.1). It shows them on\n * the properties tab whatever tab was open; it changes no data, no camera, no history and no AI conversation.\n */\n private showModelSettings() {\n this.selected = ''\n this.tab = 'properties'\n }\n render() {\n const view = this.session?.read()\n if (!view) return html`<p>${i18next.t('figure.text.opening-model')}</p>`\n const unavailable = view.loading || !!view.error || view.saving || !view.context\n const part = view.geometry.find(g => ownerOf(g.id) === this.selected)\n /* The controls (state inputs) have their own place in the motion tab; these are the design values. */\n const design = view.fields.filter(i => i.role !== 'state')\n /* A repeat's own row values (its pitch) have their own section, not the shape's. */\n const own = design.filter(i => this.selected && i.id.startsWith(this.selected + '.') && !i.id.startsWith(this.selected + '.repeat.'))\n const common = design.filter(i => !view.geometry.some(g => i.id.startsWith(ownerOf(g.id) + '.')))\n const shown = this.shown()\n const asset = shown?.asset\n const partFields = own\n /* The numbers a rule gives the axes that have no field of their own -- shown read-only, never as a blank. */\n let held: HeldValues | undefined\n try {\n const body = view.geometry.find(g => g.id === this.selected) as unknown as FigureRenderPart | undefined\n const placed = body ? placementOf(body) : undefined\n if (placed && shown && this.selected)\n held = {\n position: placed.position,\n rotation: placed.rotation,\n size: (['x', 'y', 'z'] as const).map(axis => measureNow(shown, ownerOf(this.selected), axis)),\n /* Only a size a rule sets: a palette part's own numbers are its shape's fields, not a rule's (found in the browser). */\n sizeRuled: (['x', 'y', 'z'] as const).every(axis => followOf(shown.asset, ownerOf(this.selected), axis).of !== 'own')\n }\n } catch {\n held = undefined\n }\n /*\n Only what is under way is said. Saved or not is the save button's: filled and pressable when there is something\n to save, dimmed when not -- the saved and unsaved words beside it said the same thing again in the primary\n colour, read as a button (screen copy rule: a state is the control's).\n */\n const status = view.loading ? 'figure.text.loading-figure' : view.saving ? 'figure.text.saving-figure' : ''\n /*\n A figure with no parts yet is not one that failed: what blocks its release is said once it has something to\n release (first 15 minutes, 2026-10-16 evening -- red from the first click read as a failure). The verdict tab\n still says it.\n */\n const blockers = view.geometry.length ? this.releaseBlockers : []\n const tab = this.tab\n const live = this.liveParts(shown)\n return html`<ox-canvas-bar\n history\n fit\n undo-shortcut=\"Ctrl+Z\"\n redo-shortcut=\"Ctrl+Y\"\n ?can-undo=${!unavailable && view.canUndo}\n ?can-redo=${!unavailable && view.canRedo}\n .pane=${this.panes}\n @canvas-undo=${() => this.run(() => this.session!.undo())}\n @canvas-redo=${() => this.run(() => this.session!.redo())}\n @canvas-fit=${() => this.renderRoot.querySelector<FigureCanvas>('figure-canvas')?.fit()}\n >\n ${this.renderGizmoTools(!unavailable && this.middle === 'edit')}\n ${this.renderOverlayButton('view', 'wb_sunny', 'figure.label.tab-environment')}\n ${(['edit', 'preview'] as const).map(\n mode => html`<button slot=\"mode\" mode aria-pressed=${String(this.middle === mode)} title=${i18next.t('figure.text.mode-' + mode + '-explained')} @click=${() => (this.middle = mode)}>\n ${i18next.t('figure.label.mode-' + mode)}\n </button>`\n )}\n ${status ? html`<span slot=\"status\" class=\"status\" role=\"status\">${i18next.t(status)}</span>` : nothing}\n <span slot=\"status\" release-state>${this.releaseWords(view)}</span>\n ${blockers.length\n ? html`<button slot=\"commit\" release-blocked aria-expanded=${String(this.blockersOpen)} @click=${() => (this.blockersOpen = !this.blockersOpen)}>\n <md-icon>error</md-icon>${i18next.t('figure.button.release-blocked', { count: blockers.length })}\n </button>`\n : nothing}\n <button\n slot=\"commit\"\n publish\n aria-pressed=${String(this.overlay === 'history')}\n ?disabled=${!view.id}\n title=${view.id ? '' : i18next.t('figure.text.save-the-figure-before-releasing')}\n @click=${this.goRelease}\n >\n <md-icon>publish</md-icon>${i18next.t('figure.button.release')}\n </button>\n <button slot=\"commit\" save ?disabled=${unavailable || (!view.dirty && !!view.id)} @click=${this.save}><md-icon>save</md-icon>${i18next.t('figure.button.save')}</button>\n </ox-canvas-bar>\n ${this.blockersOpen && blockers.length ? this.renderReleaseBlockers(blockers, asset) : nothing}\n ${this.catalogOpen\n ? html`<figure-recipe-catalog\n .templates=${this.templates}\n .selected=${this.selected}\n .error=${this.recipeError}\n .guideOf=${this.guideOf}\n .thumbnailOf=${this.thumbnailOf}\n ?locked=${unavailable}\n @insert-recipe=${(e: CustomEvent) => this.insertRecipe(e.detail.recipe, e.detail.values)}\n @close-catalog=${() => (this.catalogOpen = false)}\n ></figure-recipe-catalog>`\n : null}\n <ox-three-pane>\n <figure-parts\n slot=\"start\"\n .budget=${this.budget}\n @show-maturity=${() => (this.tab = 'verdict')}\n .parts=${this.partRows(view.geometry, asset)}\n .partBudget=${this.partBudgetOf(asset)}\n @set-detail-level=${(e: CustomEvent) => this.linkCommand({ kind: 'set-detail-level', level: e.detail.level })}\n .selected=${this.selected}\n .modelName=${view.name ?? ''}\n @show-model-settings=${() => this.showModelSettings()}\n ?locked=${unavailable}\n @add-part=${(e: CustomEvent) => this.add(e.detail.kind)}\n @import-mesh=${(e: CustomEvent) => this.importMesh(e.detail.file)}\n .meshProgress=${this.meshProgress}\n .recipeCount=${this.templates.length}\n @open-recipe-catalog=${() => ((this.catalogOpen = true), (this.recipeError = ''))}\n @select-part=${(e: CustomEvent) => this.choose(e.detail.id)}\n @toggle-part-hidden=${(e: CustomEvent) => this.toggleHiddenPart(e.detail.id)}\n @set-all-parts-hidden=${(e: CustomEvent) =>\n (this.hiddenParts = e.detail.hidden ? new Set(view.geometry.map(g => ownerOf(g.id))) : new Set())}\n @move-part-up=${(e: CustomEvent) => this.movePart(e.detail.id, e.detail.to)}\n @move-part-down=${(e: CustomEvent) => this.movePart(e.detail.id, e.detail.to)}\n @duplicate-part=${(e: CustomEvent) => this.duplicatePart(e.detail.id)}\n @remove-part=${(e: CustomEvent) => this.removePart(e.detail.id)}\n ></figure-parts>\n ${this.previewMounted\n ? html`<figure-preview\n ?hidden=${this.middle !== 'preview'}\n .active=${this.middle === 'preview'}\n .revision=${shown}\n .context=${view.context ?? ''}\n .view=${this.view}\n .selected=${this.selected}\n .sample=${this.dataSample}\n @configure-size=${async (e: CustomEvent<{ part: string }>) => {\n this.middle = 'edit'\n this.selected = e.detail.part\n this.tab = 'response'\n await this.updateComplete\n this.renderRoot.querySelector('figure-links')?.scrollIntoView({ block: 'nearest' })\n }}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-preview>`\n : nothing}\n <div middle ?hidden=${this.middle === 'preview'}>\n ${view.geometry.length === 0 && !unavailable ? this.renderStart() : nothing}\n ${this.sectionEditing && this.sectionEditing === this.selected && !unavailable ? this.renderSectionEditor(view.geometry) : nothing}\n <figure-canvas\n .view=${this.view}\n .parts=${this.drawnParts(view.geometry, live)}\n .fan=${this.fanOf(shown, live)}\n .ghost=${this.previewShown().ghost}\n .highlight=${this.previewShown().highlight}\n .marks=${this.tab === 'capability' ? this.slotMarks(view, asset) : NO_MARKS}\n .palette=${view.palette ?? {}}\n .context=${view.context ?? ''}\n .selected=${this.selected}\n ?aiming=${this.fastening}\n .reach=${unavailable ? { translate: false, rotate: false, scale: false } : this.reachOf(this.selected)}\n @part-sizing=${(e: CustomEvent) => this.resizing(e.detail.id, e.detail.result)}\n @part-transformed=${(e: CustomEvent) => this.transformed(e.detail.id, e.detail.result)}\n @part-selected=${(e: CustomEvent<string>) => this.choose(e.detail)}\n @part-aimed=${(e: CustomEvent<{ id: string; point?: number[]; normal?: number[] }>) =>\n this.fastenWindow?.aimAt?.(e.detail)}\n @render-error=${(e: CustomEvent<Error>) => {\n this.error = e.detail.message\n }}\n ></figure-canvas>${this.renderSameMeasure(unavailable)}</div>\n <aside slot=\"end\">\n <div tabs>\n ${this.renderTab('properties', 'tune', i18next.t('figure.label.properties'))}\n ${this.renderTab('response', 'aspect_ratio', i18next.t('figure.label.tab-response'))}\n ${this.renderTab('motion', 'animation', i18next.t('figure.label.motion'))}\n ${this.renderTab('capability', 'conveyor_belt', i18next.t('figure.label.tab-capability'))}\n ${this.renderTab('data', 'sensors', i18next.t('figure.label.tab-data'))}\n ${this.renderTab('verdict', 'insights', i18next.t('figure.label.maturity'))}\n </div>\n <slot name=\"notice\"></slot>\n <div panel ?off=${tab !== 'properties'}>\n ${this.selected && part\n ? html`${this.renderSubject()}\n <section>\n <h3>${i18next.t('figure.label.group-part')}</h3>\n <div inline-field>\n <label>${i18next.t('figure.label.name')}</label>\n <input\n name-field\n aria-label=${i18next.t('figure.label.name')}\n .value=${partLabelOf(this.selected)}\n ?disabled=${unavailable || !!repeatOf(this.selected, view.geometry)?.index}\n @change=${(e: Event) => this.renamePart(e.target as HTMLInputElement)}\n />\n </div>\n ${this.renderRepeatNote(view.geometry)}\n </section>\n ${this.renderPartGroups(shown, view.geometry, partFields, unavailable, held)}\n <figure-material-panel\n .body=${{ ...part, id: this.selected }}\n .palette=${view.palette ?? {}}\n ?locked=${unavailable}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-live=${(e: CustomEvent) => this.hold({}, e.detail.edit)}\n ></figure-material-panel>\n ${this.renderMore(part, view.palette ?? {}, unavailable)}`\n : view.geometry.length === 0\n ? html`${this.renderSubject()}<section empty-figure>\n <p>${i18next.t('figure.text.empty-figure-next')}</p>\n <details>\n <summary>${i18next.t('figure.label.figure-info-later')}</summary>\n <slot name=\"figure\"></slot>\n </details>\n </section>`\n : html`${this.renderSubject()}<slot name=\"figure\"></slot>`}\n </div>\n <div panel ?off=${tab !== 'response'}>\n ${this.renderSubject()}\n ${this.selected && part\n ? this.renderResponse(shown, view.geometry, unavailable)\n : html`${this.renderGroups(groupFields(common), 'figure.label.group-figure-size', 'figure.label.design-inputs', unavailable)}\n ${this.renderInstanceRange(shown, unavailable)}`}\n </div>\n <div panel ?off=${tab !== 'motion'}>\n ${this.renderSubject()}\n ${this.selected && part ? this.renderLinks(unavailable, 'motion') : html`<section><p hint>${i18next.t('figure.text.choose-a-part-to-move')}</p></section>`}\n ${this.renderControls(view, unavailable)}\n </div>\n <div panel ?off=${tab !== 'capability'}>\n ${this.renderSubject()}\n ${this.selected && part ? this.renderLinks(unavailable, 'places') : nothing}\n <figure-capability-panel\n .asset=${asset}\n .selected=${this.selected}\n ?locked=${unavailable}\n @select-part=${(e: CustomEvent) => this.choose(e.detail.id)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n ></figure-capability-panel>\n </div>\n <div panel ?off=${tab !== 'data'}>\n ${this.renderSubject()}\n <figure-data-panel\n .asset=${asset}\n ?locked=${unavailable}\n @data-sample=${(e: CustomEvent) => (this.dataSample = e.detail.data)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-edits=${(e: CustomEvent) => this.run(() => this.session!.applyRecipe(e.detail.edits))}\n ></figure-data-panel>\n </div>\n <div panel flush ?off=${tab !== 'verdict'}><slot name=\"verdict\"></slot></div>\n </aside>\n </ox-three-pane>\n ${this.renderOverlay()}`\n }\n /** Position, rotation and size as rows of three cells; the shape's own measures one to a line, under their title. */\n private renderGroups(\n groups: { vectors: FieldGroup[]; singles: FieldGroup[] },\n vectorTitle: string,\n singleTitle: string,\n unavailable: boolean,\n tools: unknown = null,\n held?: HeldValues\n ) {\n return html`${groups.vectors.length || tools\n ? html`<section>\n <h3>${i18next.t(vectorTitle)}</h3>\n ${groups.vectors.map(g => this.renderVector(g, unavailable, held))}\n ${this.renderHeldAxes(groups.vectors)}\n ${tools ?? nothing}\n </section>`\n : nothing}\n ${groups.singles.length\n ? html`<section>\n <h3>${i18next.t(singleTitle)}</h3>\n <div form>${groups.singles.map(g => (g.kind === 'single' ? this.renderSingle(g.name, g.field, unavailable) : nothing))}</div>\n </section>`\n : nothing}`\n }\n /**\n * A box-like part's size row stands when a rule sets every side -- each following the figure's size -- with the\n * numbers the rule gives, as its position and turn rows do (designer 2026-09-27: not a blank, not gone).\n */\n private withSizeRow(groups: ReturnType<typeof groupFields>, held?: HeldValues) {\n if (groups.vectors.some(v => v.kind === 'vector' && v.name === 'size')) return groups\n if (!held?.sizeRuled || !held.size || held.size.length !== 3 || held.size.some(v => v === undefined)) return groups\n const at = groups.vectors.findIndex(v => v.kind === 'vector' && v.name === 'rotation')\n const vectors = [...groups.vectors]\n vectors.splice(at < 0 ? vectors.length : at + 1, 0, { kind: 'vector', name: 'size', cells: {} })\n return { ...groups, vectors }\n }\n private renderVector(group: FieldGroup, unavailable: boolean, held?: HeldValues) {\n if (group.kind !== 'vector') return nothing\n const unit = group.name === 'rotation' ? '°' : 'mm'\n const ruled = (['x', 'y', 'z'] as const).filter(axis => !group.cells[axis])\n const given = (axis: 'x' | 'y' | 'z') => {\n const v = held?.[group.name]?.[['x', 'y', 'z'].indexOf(axis)]\n return v === undefined || !Number.isFinite(v) ? '—' : String(Math.round(v * 10) / 10)\n }\n return html`<div vector-row>\n <label>${i18next.t('figure.label.group-' + group.name)}${group.name === 'rotation' ? '' : html` <span unit>${unit}</span>`}</label>\n <div triple>\n ${(['x', 'y', 'z'] as const).map(\n axis => !group.cells[axis]\n ? html`<div cell held title=${i18next.t('figure.text.axis-held-by-rule')}>\n <span axis>${axis.toUpperCase()}</span>\n <input type=\"text\" readonly .value=${given(axis)} aria-label=${`${group.name}.${axis} · ${i18next.t('figure.text.axis-held-by-rule')}`} />\n </div>`\n : html`<div cell>\n <span axis ?scrub=${!unavailable} @pointerdown=${(e: PointerEvent) => this.scrub(group.cells[axis] as never, e, unavailable)}>${axis.toUpperCase()}</span>\n <input\n aria-label=${group.cells[axis]!.id}\n type=\"number\"\n step=\"any\"\n .value=${String(group.cells[axis]!.value)}\n ?disabled=${unavailable}\n @input=${(e: Event) => this.typing(group.cells[axis] as never, e)}\n @change=${(e: Event) => this.changeField(group.cells[axis] as never, e)}\n />\n </div>`\n )}\n </div>\n </div>\n`\n }\n /**\n * Why a row's numbers cannot be typed, said once under the rows by what decides them (user 2026-10-01: \"set by a\n * rule\" named nothing): a fastened part's place and turn are its fastening's; other numbers are worked out from\n * something else. A size that follows something is said at the panel's head, so not again here.\n */\n /** What a size typed keeps, under the size fields: the part's middle, where it is fastened, or only its size (ADR-0140 4.1). */\n private renderSizeKeeps() {\n const asset = this.asset()\n const kept = asset && this.selected ? keptBySizeOf(asset, this.selected) : undefined\n return kept ? html`<p hint size-keeps>${i18next.t(SIZE_KEEPS_WORDS[kept])}</p>` : nothing\n }\n private renderHeldAxes(vectors: FieldGroup[]) {\n const fastened = !!(this.asset())?.joints?.some(j => j.body1.part === ownerOf(this.selected))\n const held = vectors.filter(g => g.kind === 'vector' && g.name !== 'size' && (['x', 'y', 'z'] as const).some(axis => !g.cells[axis]))\n if (!held.length) return nothing\n const placed = held.every(g => g.name === 'position' || g.name === 'rotation')\n if (fastened && placed) return html`<p hint held-axes>${i18next.t('figure.text.held-by-fastening')}</p>`\n return html`<p hint held-axes>${i18next.t('figure.text.held-worked-out', { group: held.map(g => i18next.t('figure.label.group-' + g.name)).join(' · ') })}</p>`\n }\n private renderSingle(name: string, field: FieldLike, unavailable: boolean) {\n const words = name.split('.').map(part => i18next.t('figure.label.field-' + part, { defaultValue: part }))\n return html`<span ?scrub=${!unavailable} @pointerdown=${(e: PointerEvent) => this.scrub(field as never, e, unavailable)}>${words.join(' · ')} (${field.unit})</span\n ><input\n aria-label=${field.id}\n type=\"number\"\n step=\"any\"\n .value=${String(field.value)}\n ?disabled=${unavailable}\n @input=${(e: Event) => this.typing(field as never, e)}\n @change=${(e: Event) => this.changeField(field as never, e)}\n />`\n }\n}\n"]}
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../client/modeller/editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing, type PropertyValues } from 'lit'\nimport { i18next } from '@operato/i18n'\nimport type { OxThreePane } from '@operato/layout'\nimport '@operato/layout'\nimport { openPopup } from '@operato/layout'\nimport { OxPrompt } from '@operato/popup'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { figureFastenAxesOf, figurePartFaceOf, PART_LIMIT, parseFigureRecipe, resolveFigureRecipe, figurePartCountOf, figurePartIdFor, figureRecipeIdFor, figureSizeEditOf, figureSizeEditorOf, figureSectionMeasuresOf, figurePlaneAlignChanges, type FigurePlaneContact, figureRowOf, type FigureRowReading, figureFaceOverhangOf, type FigureFaceOverhang } from '@hatiolab/figure-model'\nimport type { RecipeTemplate } from './recipes.js'\nimport './figure-recipe-catalog.js'\nimport type { FigureAsset, FigureAuthoringAction, FigureEvaluatedShape, FigureInputChange, FigurePartEdit, FigurePrimitiveCreation, FigureProposalStep, FigureRecipe, FigureRecipeValue, FigurePlacement, FigureFaceMappingNeed, FigureFaceRemap } from '@hatiolab/figure-model'\nimport type { FigureProductSession } from './product-session.js'\nimport { captureFigureThumbnail } from './thumbnail.js'\nimport { drawableFigureParts } from './renderer.js'\nimport './canvas.js'\nimport './figure-parts.js'\nimport './figure-material-panel.js'\nimport './figure-section-panel.js'\nimport './figure-section-editor.js'\nimport { faceHighlightOf, rowWordsOf } from './command-preview.js'\nimport { CommandPreview, NO_WORDS } from './command-preview-controller.js'\nimport { motionEndsOf, type MotionEnds } from './motion-ends.js'\nimport './figure-links.js'\nimport './figure-fasten-dialog.js'\nimport './figure-controls.js'\nimport './figure-clips.js'\nimport './figure-data-panel.js'\nimport './figure-preview.js'\nimport './figure-settings.js'\nimport { DEFAULT_VIEW, type ViewSettings } from '@things-factory/figure-viewer/dist-client/figure-view.js'\nimport './figure-capability-panel.js'\nimport { gizmoChanges, gizmoReachOf, sameMeasureAxesOf, sizeKeepOf, type GizmoReach, type GizmoResult } from './gizmo.js'\nimport { keptBySizeOf, partsAtFrame, SIZE_KEEPS_WORDS, startSizeDrag, throughPlaneOf, type SizeDrag, type SizeDragFrame } from './size-drag.js'\nimport type { KeyAction } from './keys.js'\nimport { ModellerKeys } from './modeller-keys.js'\nimport { PaneFold } from './pane-fold.js'\nimport { PanelMemory } from './panel-memory.js'\nimport { RefusalTeller } from './refusal-teller.js'\nimport { groupFields, ownerOf, partLabelOf, repeatOf, type FieldLike, type FieldGroup } from './fields.js'\nimport { SidePanelStyles } from '@things-factory/figure-viewer/dist-client/side-panel-styles.js'\nimport { EditorStyles } from './editor-styles.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { alignChanges, canMirror, mirrorChanges, type AlignTool } from './align.js'\nimport type { FigurePaletteKind, FigurePartRow } from './figure-parts.js'\nimport { paletteRecipe } from './palette.js'\nimport { meshChoicesOf, meshPartOf } from './mesh-import.js'\nimport './figure-mesh-choice.js'\nimport { uploadFigureMesh } from '../graphql/index.js'\nimport { placeMarksOf, slotMarksOf } from './slot-layout-host.js'\n\nconst NO_MARKS: FigureRenderPart[] = []\nimport { apexOver, drawnOf } from './section-drawing.js'\nimport { END_FACE } from './section-controls.js'\nimport type { FigureCanvas } from './canvas.js'\nimport { nudgeOf, placementOf } from './stage-model.js'\n\n/** The numbers a rule gives a part's position, turn and size, per axis, for the cells that have no field. */\ntype HeldValues = { position?: number[]; rotation?: number[]; size?: (number | undefined)[]; sizeRuled?: boolean }\nimport { gateFindingStyles, renderGateFinding } from './gate-findings.js'\nimport type { FigureGateFinding } from '../types.js'\nimport { editRefusalOf, partNameRefusalOf, sizeRangeFitsOf, partRefusalOf, placedRefusalOf, recipeRefusalOf, removalNoticeOf } from './refusals.js'\nimport type { FigureRenderPart } from './renderer.js'\nimport type { FigureBudgetLine } from './maturity.js'\nimport { HelpToggles } from './help.js'\nimport { sizeInputOf } from './size-response.js'\nimport { canFollow, followableAxes, endPlaceKeyOf, fieldWordsOf, followOf, sizeFollowersOf, measureNow, partSummaryOf, instanceRangeOf, instanceSizeToDeclare, proportionToFollow, rangeWith, turnsAboutAJoint, valueNow } from './links.js'\nimport { jointFanOf } from './joint-fan.js'\nimport { derivedOf, type FigureRevision } from './revision.js'\nimport { jointDragOf } from './joint-drag.js'\nimport type { FirstSave } from './first-save.js'\nimport { isLive, livePartsOf, liveOverSession, NOTHING_LIVE, scrubLabel, type LiveValues } from './live.js'\nimport { startingShapeKindOfBody } from './starting-shape.js'\nimport { groupMenu, GroupMenuStyles } from './group-menu.js'\n\n\n/**\n * The side's six tabs (user 2026-10-17: up to six): properties -- the part's shape, place and look; 「반응형」 -- how it\n * answers a size it is placed at (its size rules, a position that follows the size, its row; the figure's range);\n * motion; what it does (its places); its data (ADR-0051); the verdict. The view is a menu over the canvas and the\n * release history opens from the bar, since neither is about the part chosen. The verdict gives way to properties when\n * a part is chosen; a tab about parts keeps showing the newly chosen part.\n */\ntype SideTab = 'properties' | 'response' | 'motion' | 'capability' | 'data' | 'verdict'\n\n/** What opens over the work from the bar: the view settings or the release history, one at a time. */\ntype BarOverlay = 'view' | 'history'\n\n/** The person's own fold of the properties' 「더 보기」, kept in their browser. */\nconst MORE_OPEN_KEY = 'figure-properties-more-open'\n\n/** Product editor surface. The injected session is shared by page persistence and AI commands. */\nconst NO_OVERHANG = { words: NO_WORDS, note: NO_WORDS }\n\n@customElement('figure-editor')\nexport class FigureEditor extends LitElement {\n /* The operato scrollbar, as every scrolling panel of the app has it -- the side panel scrolled with the browser's own. */\n static styles = [ScrollbarStyles, SidePanelStyles, gateFindingStyles, GroupMenuStyles, EditorStyles]\n @property({ attribute: false }) session?: FigureProductSession\n /** The saved figure's state and version, as the server gave them (the page reads the row). */\n @property({ attribute: false }) releaseState?: { state?: 'draft' | 'released'; version: number }\n /**\n * What blocks release now, as the page's verdict heard it: said beside 「발행」 with the way out at hand, so an author\n * does not find it at the foot of the verdict tab (first 15 minutes, 2026-10-16; chief architect, Q1 B).\n */\n @property({ attribute: false }) releaseBlockers: FigureGateFinding[] = []\n @state() private blockersOpen = false\n /** The recipe templates (ADR-0095), read by the page from the server. */\n @property({ attribute: false }) templates: RecipeTemplate[] = []\n /** Reads a template's guide; given by the page. */\n @property({ attribute: false }) guideOf?: (name: string) => Promise<string>\n @property({ attribute: false }) thumbnailOf?: (name: string) => string\n /** The 「보드에서 바꿀 수 있음」 form being filled for a row, before it is published (ADR-0096). */\n @state() private publishing?: { part: string; label: string; min: number; max: number }\n @state() private catalogOpen = false\n /** Why the last recipe was refused, in the kernel's words. */\n @state() private recipeError = ''\n @property({ type: Number }) revision = 0\n /** The 「?」 beside a group's title and the sentence it opens. */\n private readonly help = new HelpToggles(this)\n /** The cost line the parts list shows, from the maturity report. */\n @property({ attribute: false }) budget?: FigureBudgetLine\n /**\n * Asks the type and name of a figure saved for the first time (the host has the catalogue's names); undefined\n * when the author cancels, and then nothing is saved. Without it a new figure is saved under a temporary type.\n */\n @property({ attribute: false }) firstSave?: (name: string) => Promise<FirstSave | undefined>\n @state() private selected = ''\n @state() private error = ''\n /** How far the GLB being brought in has gone up (0‒1), while it does. */\n @state() private meshProgress?: number\n /*\n * An edit that takes a face away which something stands on (ADR-0100 A8): held, with what the kernel says stands\n * there, until the author chooses where each goes -- then the same edit goes again with the remap. Shown where the\n * edit was made (`from`).\n */\n @state() private faceMapping?: { action: FigureAuthoringAction; need: FigureFaceMappingNeed; from: 'section-editor' | 'panel' }\n @state() private tab: SideTab = 'properties'\n /** The view settings or the release history, open over the work from the bar. */\n @state() private overlay?: BarOverlay\n /**\n * The fastening window open for the selected part (user 2026-10-17), in the standard popup, moved by its head\n * (2026-10-18; put back 2026-10-20 -- the side panel it was moved to could not be moved), with no backdrop, so the\n * canvas can be pressed while it is open: chosen there, applied once. It closes with nothing written when the part,\n * the tab or the middle changes under it.\n */\n @state() private fastening = false\n private fastenPopup?: { close: () => void }\n private fastenWindow?: HTMLElement & {\n revision?: FigureRevision\n partId: string\n locked: boolean\n previewWords: string[]\n error: string\n aimAt?: (at: { id: string; point?: number[]; normal?: number[] }) => void\n }\n /** Why the window's 「적용」 was refused, said in it. */\n @state() private fastenError = ''\n /** The face of the part a row of the window's list is on, lit on the canvas while the pointer or the arrows are there. */\n @state() private fastenHover: FigureRenderPart | null = null\n /** 「더 보기」 open, as this person left it last (chief architect 2026-10-16: kept per person). */\n @state() private moreOpen = FigureEditor.storedMoreOpen()\n private static storedMoreOpen(): boolean {\n try {\n return localStorage.getItem(MORE_OPEN_KEY) === '1'\n } catch {\n return false\n }\n }\n private setMoreOpen(open: boolean) {\n if (open === this.moreOpen) return\n this.moreOpen = open\n try {\n localStorage.setItem(MORE_OPEN_KEY, open ? '1' : '0')\n } catch {\n /* A browser that keeps nothing folds it again next time. */\n }\n }\n /** The frame the bar folds - found after the first render, since the bar is drawn before it. */\n @state() private panes?: OxThreePane\n /** What the middle shows: the parts being edited, or the figure placed on a board at eight sizes. */\n @state() private middle: 'edit' | 'preview' = 'edit'\n /** The gizmo shown on the selected part, as the tools in the bar and W · E · R choose it; none once the part changes. */\n @state() private gizmoMode?: 'translate' | 'rotate' | 'scale'\n /** A line saying what a command did besides what was asked; gone at the next command. */\n @state() private notice = ''\n /**\n * How the workbench shows the figure, in the board's own state names. The viewer's, kept in\n * their browser, never in the figure.\n */\n @state() private view: ViewSettings = FigureEditor.storedView()\n private static storedView(): ViewSettings {\n try {\n const stored = JSON.parse(localStorage.getItem('figure-view') ?? 'null')\n return stored && typeof stored === 'object' ? { ...DEFAULT_VIEW, ...stored } : { ...DEFAULT_VIEW }\n } catch {\n return { ...DEFAULT_VIEW }\n }\n }\n private setView(view: ViewSettings) {\n this.view = { ...DEFAULT_VIEW, ...view }\n try {\n localStorage.setItem('figure-view', JSON.stringify(this.view))\n } catch {\n /* A browser that keeps nothing still shows the change for this visit. */\n }\n }\n /**\n * Parts hidden on the workbench — the author's view while working, not the asset's visibility. Not saved: a part\n * hidden here is still in the figure, still checked, still drawn on a board.\n */\n /** The page offers an AI draft for a new figure (the modeller page, through the app's assistant dock). */\n @property({ type: Boolean }) aiDraft = false\n @state() private hiddenParts = new Set<string>()\n /** A value in hand -- typed, held on a spinner, scrubbed, dragged -- drawn at once and recorded on release. */\n @state() private live: LiveValues = NOTHING_LIVE\n /** A size drag in hand, drawn from figure-model each frame (ADR-0140 4.4); gone with the release. */\n @state() private sizing?: { part: string; drag: SizeDrag; frame?: SizeDragFrame; through?: number }\n /** The part whose drawn section is open in the section editor (ADR-0100 §3.2), or null. */\n @state() private sectionEditing: string | null = null\n private lastContext: string | null = null\n private commandPreview = new CommandPreview(this, {\n session: () => this.session,\n selected: () => this.selected,\n shown: () => this.shown(),\n formsInSight: () => this.middle === 'edit' && (this.tab === 'properties' || this.tab === 'response'),\n said: error => this.said(error)\n })\n /**\n * Move, turn and size on the canvas, in the bar's tools: the gizmo the W · E · R keys give, found without knowing the\n * keys (2026-09-26 -- a person dragging the part turned the camera). Each is offered only where the part's own\n * numbers can take it (`gizmoReachOf`).\n */\n private renderGizmoTools(editing: boolean) {\n const reach = editing && this.selected ? this.reachOf(this.selected) : undefined\n const tools = [\n { mode: 'translate', icon: 'open_with', key: 'W', can: !!reach?.translate },\n { mode: 'rotate', icon: '3d_rotation', key: 'E', can: !!reach?.rotate },\n { mode: 'scale', icon: 'open_in_full', key: 'R', can: !!reach?.scale }\n ] as const\n return html`<span class=\"gizmo-tools\" role=\"group\" aria-label=${i18next.t('figure.label.gizmo-tools')}>\n ${tools.map(\n tool => html`<button\n tool\n aria-pressed=${String(this.gizmoMode === tool.mode)}\n ?disabled=${!tool.can}\n aria-label=${i18next.t('figure.button.gizmo-' + tool.mode)}\n title=${`${i18next.t('figure.button.gizmo-' + tool.mode)} (${tool.key})${tool.can || !this.selected ? '' : ' · ' + i18next.t('figure.text.gizmo-not-own')}`}\n @click=${() => this.useGizmo(tool.mode)}\n >\n <md-icon>${tool.icon}</md-icon>\n </button>`\n )}\n </span>`\n }\n private keys = new ModellerKeys(this, {\n taking: () => {\n const view = this.session?.read()\n /*\n * The section editor open takes the keys for its own: Esc cancels it, Delete deletes a point, Ctrl+Z undoes a point.\n * Heard here first, they deselected the part, deleted the part and undid the figure's last step (2026-09-30).\n */\n return !!view && !view.loading && !view.saving && !!view.context && this.isConnected && !this.sectionEditing\n },\n scene: () => this.renderRoot.querySelector<FigureCanvas>('figure-canvas'),\n selected: () => this.selected,\n act: action => this.keyAction(action)\n })\n /** The part Ctrl+C took: pasted as the kernel's duplicate. Not kept past the editor, nor written anywhere. */\n private copied = ''\n /** A copied part still in the figure is duplicated -- a part of its own, named by figure-model; one gone, nothing. */\n private pasteCopied() {\n const asset = this.session?.revisionNow()?.asset\n if (!this.copied || !asset?.document.model.nodes.some(n => n.op === 'place@1' && n.id === this.copied)) return\n this.duplicatePart(this.copied)\n }\n private keyAction(action: KeyAction) {\n const view = this.session!.read()\n const canvas = this.renderRoot.querySelector<FigureCanvas>('figure-canvas')\n if (action === 'translate' || action === 'rotate' || action === 'scale') canvas && this.useGizmo(action)\n else if (action === 'undo') view.canUndo && this.run(() => this.session!.undo())\n else if (action === 'redo') view.canRedo && this.run(() => this.session!.redo())\n else if (action === 'duplicate') this.duplicatePart(this.selected)\n else if (action === 'copy') this.copied = this.selected\n else if (action === 'paste') this.pasteCopied()\n else if (action === 'hold') return\n else if (action === 'remove') this.removePart(this.selected)\n else this.selected = ''\n }\n private paneFold = new PaneFold(this, () => this.panes)\n private refusals = new RefusalTeller({\n session: () => this.session,\n error: () => this.error,\n notice: () => this.notice,\n refuse: message => (this.error = message)\n })\n private panelMemory = new PanelMemory(() => this.renderRoot)\n /** The preview is made when first asked for, and kept (hidden) after that; it is taken down with the editor. */\n private previewMounted = false\n protected willUpdate(_changed: PropertyValues) {\n if (this.middle === 'preview') this.previewMounted = true\n const view = this.session?.read()\n if (view?.context !== this.lastContext) {\n this.lastContext = view?.context ?? null\n this.selected = ''\n this.error = ''\n this.hiddenParts = new Set()\n this.panelMemory.clear()\n } else if (_changed.has('selected')) {\n this.panelMemory.leave((_changed.get('selected') as string | undefined) ?? '', this.selected)\n }\n if (view && !view.geometry.some(g => ownerOf(g.id) === this.selected)) this.selected = ''\n if (_changed.has('selected')) this.gizmoMode = undefined\n /* The window is about the part chosen on the properties tab, being edited: it does not follow anywhere else. */\n if (this.fastening && (_changed.has('selected') || !this.selected || this.tab !== 'properties' || this.middle !== 'edit')) this.closeFastening()\n /*\n * The section editor is of one part: when the selection moves off it by any way -- another part picked, the scene's\n * own Esc, the part removed, another figure opened -- it closes and lets go of the preview it held.\n */\n if (this.sectionEditing && this.sectionEditing !== this.selected) this.leaveSectionEditor(this.selected)\n }\n /**\n * The selection moved off the part being edited. With nothing changed there the editor closes; with changes, the part\n * stays selected while the editor asks (apply, let go, keep editing), and the move goes on only once it closed. A part\n * gone or another figure opened has nothing to go back to: the editor closes.\n */\n private leaveSectionEditor(next: string) {\n const editing = this.sectionEditing!\n const editor = this.renderRoot.querySelector('figure-section-editor') as (HTMLElement & { dirty: boolean; requestClose(): Promise<boolean> }) | null\n const view = this.session?.read()\n const stillThere = !!view?.geometry.some(g => ownerOf(g.id) === editing)\n if (!editor?.dirty || !stillThere) {\n this.closeSectionEditor()\n return\n }\n this.selected = editing\n editor.requestClose().then(closed => {\n if (closed && this.selected === editing) this.selected = next\n })\n }\n /** While the size tool is on a round part: which of its handles change the one diameter (ADR-0140 4.1). */\n private renderSameMeasure(unavailable: boolean) {\n if (unavailable || this.gizmoMode !== 'scale' || !this.selected) return nothing\n const axes = sameMeasureAxesOf(this.reachOf(this.selected))\n return axes\n ? html`<p same-measure role=\"status\">${i18next.t('figure.text.gizmo-same-measure', { axes: axes.map(a => a.toUpperCase()).join(' · ') })}</p>`\n : nothing\n }\n /** The scene toggles: the mode already shown takes the gizmo away. */\n private useGizmo(mode: 'translate' | 'rotate' | 'scale') {\n /*\n R does what the bar's resize tool does: on a part whose size is not its own to drag the tool is off, so no gizmo is\n put on it to drag in vain (:3300, 10.1.196) -- the tool's own words are said instead.\n */\n if (mode === 'scale' && this.selected && this.gizmoMode !== 'scale' && !this.reachOf(this.selected).scale) {\n this.refusals.say(i18next.t('figure.text.gizmo-not-own'))\n return\n }\n this.renderRoot.querySelector<FigureCanvas>('figure-canvas')?.gizmo(mode)\n this.gizmoMode = this.gizmoMode === mode ? undefined : mode\n }\n /**\n * A refusal no particular sentence knows: figure-model's code said as a refusal, never its English; any other error\n * (the network, the server) as it came. A loop is said as a loop whichever way it was made: a command, or the size\n * editor's steps (a measure made to follow what follows it, 2026-10-24 -- said as a bare refused step before).\n */\n private said(error: unknown): string {\n const code = (error as { code?: string })?.code\n if (code === 'DIMENSION_CYCLE') return i18next.t('figure.text.follow-would-loop')\n if (code === 'FASTEN_CYCLE' || code === 'ATTACH_CYCLE') return i18next.t('figure.text.fasten-would-loop')\n return code ? editRefusalOf(error, (key, params) => i18next.t(key, params)) : error instanceof Error ? error.message : String(error)\n }\n private run(action: () => unknown) {\n try {\n action()\n this.error = ''\n /* The next step stands on its own: what the last removal let go of is no longer the news. */\n this.notice = ''\n this.changed()\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.run(action))) return\n this.error = this.said(error)\n } finally {\n /* Committed or refused, the value in hand is gone: the figure as it stands is drawn again. */\n this.live = NOTHING_LIVE\n this.sizing = undefined\n }\n }\n /** The bodies drawn with the value in hand, or null when nothing is in hand (or the figure cannot take it). */\n private liveParts(shown: FigureRevision | undefined): FigureRenderPart[] | null {\n return shown ? liveOverSession(shown, this.live) : null\n }\n /** What the canvas draws: the figure with the value in hand when there is one, and without the parts hidden on the workbench. */\n private drawnParts(geometry: Parameters<typeof drawableFigureParts>[0] | undefined, live: FigureRenderPart[] | null) {\n const parts = live ?? drawableFigureParts(geometry ?? [])\n const frame = this.sizing?.frame\n return (frame ? partsAtFrame(parts, frame.moved) : parts).filter(body => !this.hiddenParts.has(ownerOf((body as { id: string }).id)))\n }\n /**\n * Where the selected part turns and how far, with the pose as it is drawn now -- a value in hand included, so the\n * fan follows the arm while a control is dragged. Its size comes from what the joint turns (`joint-fan`).\n */\n private fanOf(shown: FigureRevision | undefined, live: FigureRenderPart[] | null) {\n if (!shown || !this.selected || this.hiddenParts.has(this.selected)) return null\n try {\n return jointFanOf(shown, this.selected, live ? { values: this.live.values, geometry: live } : undefined)\n } catch {\n return null\n }\n }\n /**\n * The figure on screen at its version: what every panel and helper reads (`revision.ts`). Every input as the session\n * holds it now is its `inputs` -- the pose set with the controls included: drawing a value in hand over the saved\n * defaults put every other joint back to its saved angle while one slider moved (user, 2026-09-24).\n */\n private shown(): FigureRevision | undefined {\n return this.session?.revisionNow()\n }\n /** A value in hand: an input's value (design or pose) or a part edit. Nothing is recorded. */\n private hold(values: Record<string, number>, edit?: FigurePartEdit) {\n this.live = { values: { ...this.live.values, ...values }, ...(edit ? { edit } : this.live.edit ? { edit: this.live.edit } : {}) }\n }\n private closeSectionEditor() {\n this.sectionEditing = null\n this.holdAction(null)\n }\n /** A command in hand, drawn and not run; `null` lets go of it and the figure as it stands is drawn again. */\n private holdAction(action: FigureAuthoringAction | null) {\n const { action: _, ...rest } = this.live\n this.live = action ? { ...rest, action } : rest\n }\n\n private changed() {\n /* What the step did to the size ends the author typed, said with whatever else it said. */\n const fits = this.session?.takeSizeRangeFits() ?? []\n if (fits.length) this.notice = [this.notice, sizeRangeFitsOf(fits, (key, params) => i18next.t(key, params))].filter(Boolean).join(' ')\n this.requestUpdate()\n this.dispatchEvent(new CustomEvent('changed', { bubbles: true, composed: true }))\n }\n private async save() {\n if (!this.session) return\n try {\n /*\n The card's picture is taken before the save starts, from a canvas of its own at the card's size —\n not from the one on screen, which stands wherever the author left it turned. A picture that cannot\n be taken is not an error: the save goes on without it (see `thumbnail.ts`).\n */\n let type: string | undefined\n let namespace: string | undefined\n if (!this.session.read().id && this.firstSave) {\n const answer = await this.firstSave(this.session.read().name ?? '')\n if (!answer) return\n /* The name is the figure's own, in the asset: one step of the history, like typing it in the properties. */\n if (answer.name !== this.session.read().name) {\n this.session.command({ kind: 'rename', name: answer.name })\n this.changed()\n }\n type = answer.type\n namespace = answer.namespace\n }\n const view = this.session.read()\n const thumbnail = await captureFigureThumbnail(drawableFigureParts(view.geometry ?? []), view.palette ?? {})\n const promise = this.session.save({ thumbnail, type, namespace })\n this.changed()\n await promise\n this.error = ''\n } catch (error) {\n /* Not reached: whether it was written is not known, and the edits are still here -- said so, not \"not saved\". */\n this.error = (error as { code?: string })?.code === 'SAVE_UNREACHABLE' ? i18next.t('figure.text.save-unreachable') : this.said(error)\n } finally {\n this.changed()\n }\n }\n private add(kind: FigurePaletteKind) {\n if (!this.session) return\n this.run(() => {\n /* The id is figure-model's to choose: what is in use is its rule, not a list the screen keeps. */\n const part = paletteRecipe(kind, figurePartIdFor(this.session!.revisionNow()!.asset, kind))\n this.session!.add(part)\n this.selected = part.id\n })\n }\n /**\n * A GLB made into a mesh part (ADR-0129): the server reads and keeps it, the author picks the whole file or one node\n * of it, and the part is added as one step of the history, standing where it stood in the file. A file the server\n * refuses is said in its words; nothing is added.\n */\n private async importMesh(file: File) {\n if (!this.session) return\n let upload: Awaited<ReturnType<typeof uploadFigureMesh>>\n this.meshProgress = 0\n try {\n upload = await uploadFigureMesh(file, fraction => (this.meshProgress = fraction))\n } catch (error) {\n this.error = this.said(error)\n return\n } finally {\n this.meshProgress = undefined\n }\n const choices = meshChoicesOf(upload)\n /* Only the whole file and the one node that is all of it: there is nothing to choose between. */\n const choice =\n choices.length <= 2\n ? {}\n : await openPopup(html`<figure-mesh-choice .choices=${choices}></figure-mesh-choice>`, {\n backdrop: true,\n size: 'small',\n title: i18next.t('figure.title.choose-mesh-part')\n }).result\n if (!choice) return\n const node = upload.summary.nodes.find(n => n.index === (choice as { node?: number }).node)\n this.run(() => {\n const id = figurePartIdFor(this.session!.revisionNow()!.asset, node?.name ?? file.name.replace(/\\.glb$/i, ''))\n this.session!.add(meshPartOf(upload, choice as { node?: number }, id))\n this.selected = id\n })\n }\n /**\n * The list's own operations, as part edits — each one step of the session's history. The copy and the moved\n * part stay selected.\n */\n private duplicatePart(id: string) {\n this.run(() => {\n /* The copy is the part the edit made, as figure-model named it. */\n this.selected = this.session!.edit({ kind: 'duplicate-part', target: id }).made?.[0] ?? id\n })\n }\n private movePart(id: string, to: number) {\n this.run(() => this.session!.edit({ kind: 'move-part', target: id, to }))\n }\n private removePart(id: string) {\n try {\n const view = this.session!.edit({ kind: 'remove-part', target: id }) as { removal?: Parameters<typeof removalNoticeOf>[0] }\n this.error = ''\n /* What else the removal let go of, named (chief architect, 2026-09-27); undo brings it back. */\n this.notice = removalNoticeOf(view.removal, (key, params) => i18next.t(key, params)) ?? ''\n if (this.selected === id) this.selected = ''\n this.changed()\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.removePart(id))) return\n this.error = partRefusalOf(error, id, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n private toggleHiddenPart(id: string) {\n const next = new Set(this.hiddenParts)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n this.hiddenParts = next\n }\n /** Whether the figure declares its size (the three size inputs). */\n private hasSize(): boolean {\n const values = this.designValues()\n return ['x', 'y', 'z'].every(axis => typeof values[`size.${axis}`] === 'number')\n }\n /**\n * A recipe put in (ADR-0095): resolved on the figure as it stands -- its parts take the next free name, onto the part\n * chosen -- and applied as one step. Refused, the kernel's sentence goes to the form as it is (condition 3).\n */\n private insertRecipe(recipe: FigureRecipe, values: Record<string, FigureRecipeValue>) {\n try {\n const asset = this.shown()!.asset\n const checked = parseFigureRecipe(recipe)\n const id = figureRecipeIdFor(asset, checked)\n const steps = resolveFigureRecipe(checked, { id, ...(checked.target === 'part' ? { target: this.selected } : {}), values })\n this.session!.applyRecipe(steps)\n this.recipeError = ''\n this.catalogOpen = false\n this.error = ''\n this.changed()\n } catch (error) {\n this.recipeError = recipeRefusalOf(error, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n /** The design values of the asset being edited. */\n private designValues(): Record<string, number> {\n try {\n return this.shown()?.asset.designInputs ?? {}\n } catch {\n return {}\n }\n }\n /** What the gizmo may write for the selected part — read off the asset being edited. */\n private reachOf(id: string): GizmoReach {\n const none = { translate: false, rotate: false, scale: false }\n /* A repeat is moved and sized through its row, not by a gizmo on one copy. */\n if (!id || !this.session || !this.session.read().geometry.some(g => g.id === id)) return none\n try {\n const asset = this.shown()!.asset\n /* Turned any way, fastened or not: a size drag is drawn from figure-model's one size function, frame by frame (ADR-0140 4.4). */\n return gizmoReachOf(asset, id)\n } catch {\n return none\n }\n }\n /**\n * A size drag in hand, a frame of it: the sizes the handle comes to, through figure-model's size function and the\n * evaluator stepped to them, drawn and written nowhere (ADR-0140 4.4). Begun at the first frame, from the figure as it\n * is drawn and the handle the scene says was held; the release writes the last frame's changes.\n */\n private resizing(id: string, result: GizmoResult) {\n const part = ownerOf(id)\n const shown = this.shown()\n if (!shown || !result.scale) return\n try {\n const drawn = drawableFigureParts(this.session!.read().geometry ?? [])\n if (this.sizing?.part !== part)\n this.sizing = { part, drag: startSizeDrag(shown.asset, part, shown.inputs, sizeKeepOf(result.grab)), through: throughPlaneOf(shown.asset, drawn, part) }\n const sizes = gizmoChanges(id, this.reachOf(id), { scale: result.scale }, { ...shown.inputs })\n this.sizing = { ...this.sizing, frame: this.sizing.drag.frame(sizes) }\n } catch {\n /* A size the figure cannot take on the way: the figure as it stands is drawn, and the release says why. */\n this.sizing = undefined\n }\n }\n /**\n * A free part a size change takes past the mounting plane: said, with 「…에 붙이기」 to fasten it there (ADR-0140 5). The\n * size rule is not changed for it: what the author picks is the fastening, one step of the history.\n */\n private tellThroughPlane(part: string, mm: number) {\n const plane = i18next.t('figure.label.resize-place-' + (this.asset()?.placement ?? 'floor'))\n this.refusals.point(i18next.t('figure.text.size-through-plane', { part: partLabelOf(part), plane, mm: String(mm) }), {\n label: i18next.t('figure.button.fasten-to-plane', { plane }),\n run: () => this.run(() => this.session!.command({ kind: 'attach', part, to: { plane: 'mounting-plane' } }))\n })\n }\n /** A drag, written back as the part's own inputs — one step of the history, like typing the numbers. */\n private transformed(id: string, result: GizmoResult) {\n const view = this.session!.read()\n /* A part hanging from a joint: the drag edits the joint -- its value, or where it sits (ADR-0093). */\n const shown = this.shown()!\n const asset = shown.asset\n const drawn = view.geometry.find(g => g.id === id) as unknown as FigureRenderPart | undefined\n const drag = drawn ? jointDragOf(asset, ownerOf(id), drawn, result, shown.inputs) : null\n if (drag) {\n if (drag.kind === 'value') this.run(() => this.session!.apply([{ kind: 'set-state', input: drag.input, unit: drag.unit, value: drag.value }]))\n else if (drag.kind === 'joint') this.run(() => this.session!.command({ kind: 'set-joint', joint: drag.joint }))\n else {\n this.error = i18next.t(`figure.text.gizmo-joint-${drag.reason}`, { joint: drag.joint, leader: drag.leader ?? '', axis: drag.axis ?? '' })\n this.requestUpdate()\n }\n return\n }\n const sizes = Object.fromEntries(view.fields.map(field => [field.id, field.value as number]))\n /*\n A part a joint places, scaled: only its measures change. The shift of its centre that an anchored scale makes is\n the joint's to give -- the face on the joint stays there by itself (user, 2026-09-25: 「'R'모드에서 크기가 변하지 않는다」;\n the shift had been taken for a move of the joint, and the size was dropped).\n */\n const jointed = !!asset.joints?.some(j => j.body1.part === ownerOf(id))\n /*\n A size dragged is written as its last frame was drawn: figure-model's one size function, keeping the side opposite\n the handle held -- or, fastened, its fastening (ADR-0140 4.1 · 4.4). What the scene put the part at is not read.\n */\n const scaled = !!result.scale && !result.rotation && result.scale.some(k => Math.abs(k - 1) > 1e-4)\n const taken = jointed || scaled ? { scale: result.scale } : result\n const written = gizmoChanges(id, this.reachOf(id), taken, sizes)\n const drawnLast = this.sizing?.part === ownerOf(id) ? this.sizing.frame : undefined\n const changes = !scaled ? written : drawnLast ? drawnLast.changes : figureSizeEditOf(asset, ownerOf(id), written, sizeKeepOf(result.grab)).changes\n if (changes.length) {\n const through = scaled ? (this.sizing?.part === ownerOf(id) ? this.sizing.through : undefined) ?? throughPlaneOf(asset, drawableFigureParts(view.geometry), ownerOf(id)) : 0\n this.run(() => this.session!.apply(changes))\n /* Taken past the mounting plane by the size it was given: said with how far, once it is written, and the way to fasten it (ADR-0140 5). */\n const now = scaled ? throughPlaneOf(this.shown()!.asset, drawableFigureParts(this.session!.read().geometry ?? []), ownerOf(id)) : 0\n if (now > through + 0.5) this.tellThroughPlane(ownerOf(id), now)\n return\n }\n if (jointed && result.scale) {\n /* Only measures that follow another were pulled: the relation says their size, and it is not broken here. */\n const axes = (['x', 'y', 'z'] as const).filter((_, i) => Math.abs(result.scale![i]! - 1) > 1e-4)\n this.error = i18next.t('figure.text.gizmo-size-follows', { part: partLabelOf(id), axis: axes.join(', ').toUpperCase() })\n return this.requestUpdate()\n }\n /*\n A part whose place is worked out has no numbers for the gizmo to write: the drag is added beside\n its rule (`nudge-part`). A part a joint or a fastening places, or a size that is worked out, is refused -- said in\n words, not by the part silently springing back (user, 2026-09-24: 「기즈모 컨트롤도 전혀 작동이 안되는군」).\n */\n const body = view.geometry.find(g => g.id === id) as unknown as FigureRenderPart | undefined\n if (!body) return this.requestUpdate()\n const { by, turn } = nudgeOf(body, result)\n /* A size worked out from the figure's: the drag's factor beside its rule, so it still follows. */\n const grow: Partial<Record<'x' | 'y' | 'z', number>> = {}\n if (result.scale) (['x', 'y', 'z'] as const).forEach((axis, i) => Math.abs(result.scale![i]! - 1) > 1e-6 && (grow[axis] = Math.round(result.scale![i]! * 1e6) / 1e6))\n if (!Object.keys(by).length && !Object.keys(turn).length && !Object.keys(grow).length) return this.requestUpdate()\n try {\n this.session!.command({\n kind: 'nudge-part',\n part: id,\n ...(Object.keys(by).length ? { by } : {}),\n ...(Object.keys(turn).length ? { turn } : {}),\n ...(Object.keys(grow).length ? { grow } : {})\n })\n this.error = ''\n this.changed()\n } catch (error) {\n this.error = placedRefusalOf(error, partLabelOf(id), (key, params) => i18next.t(key, params)) ?? this.said(error)\n this.requestUpdate()\n }\n }\n /** 맞추기 — one tool, one step of the history, through the same inputs as the gizmo. */\n private align(tool: AlignTool) {\n this.run(() => {\n const changes = alignChanges(this.shown()!, this.selected, this.reachOf(this.selected), tool)\n if (changes.length) this.session!.apply(changes)\n })\n }\n /** A mirrored copy: duplicate, then place the copy on the other side — two steps. */\n private mirror(axis: 'x' | 'z') {\n this.run(() => {\n const id = this.selected\n const copy = this.session!.edit({ kind: 'duplicate-part', target: id }).made?.[0]\n if (!copy) return\n this.session!.apply(mirrorChanges(this.shown()!, id, copy, axis))\n this.selected = copy\n })\n }\n /**\n * The one-off \"put it on the plane\", by the figure's placement (designer 2026-09-27): figure-model's rule\n * (`figurePlaneAlignChanges`) -- a floor figure's part to the floor by its bottom, a ceiling one's to the ceiling by\n * its top, a wall one's to the wall by its back, a centred one's centre to the origin's height. Once: nothing is\n * fastened. Refused, it says why.\n */\n /* What a tilted part's typed size keeps, by the figure's placement: not the floor's lowest point everywhere (designer 2026-09-27). */\n /* How the selected part would meet the plane, worked out once per version and part. */\n private planeContactOf(shown: FigureRevision, part: string): FigurePlaneContact | undefined {\n return derivedOf(shown, `plane-contact|${part}`, () => {\n try {\n return figurePlaneAlignChanges(shown.asset, part).contact\n } catch {\n return undefined\n }\n })\n }\n private renderPlaneAlign(shown: FigureRevision, unavailable: boolean) {\n const placement = shown.asset.placement ?? 'floor'\n /* A tilted part touches the plane at a point or an edge, a ball at its lowest; the tooltip says so rather than promise a face (designer 2026-09-27). */\n const contact = this.planeContactOf(shown, this.selected)\n const told = contact === 'tilted' || contact === 'extreme' ? `-${contact}` : ''\n return html`<button plane-align=${placement} ?disabled=${unavailable} title=${i18next.t(`figure.text.align-to-${placement}${told}`)}\n @click=${() => this.alignToPlane()}>${i18next.t(`figure.button.align-to-${placement}`)}</button>`\n }\n private alignToPlane() {\n const asset = this.shown()!.asset\n const { changes, contact, refusal } = figurePlaneAlignChanges(asset, this.selected)\n if (refusal) {\n this.error = i18next.t(`figure.text.align-refused-${refusal.toLowerCase().replace(/_/g, '-')}`, { part: partLabelOf(this.selected) })\n return\n }\n if (changes.length) this.run(() => this.session!.apply(changes))\n if ((contact === 'tilted' || contact === 'extreme') && !this.error) this.notice = i18next.t(`figure.text.aligned-${contact}-${asset.placement ?? 'floor'}`)\n }\n private renderTools(unavailable: boolean) {\n const reach = this.reachOf(this.selected)\n const shown = this.shown()\n if (!this.selected || !reach.translate || !shown) return null\n /*\n * In words, two rows by what they do (user 2026-10-01: 「무엇을 하는 것인지 모르겠다」): moving the part to the figure's\n * centre lines, onto its plane or onto the grid; and making a mirrored copy, which makes a part and moves nothing.\n */\n const tool = (name: AlignTool, label: string, title: string) =>\n html`<button ?disabled=${unavailable} title=${i18next.t(title)} @click=${() => this.align(name)}>${i18next.t(label)}</button>`\n const mirrors = (['x', 'z'] as const).map(axis => ({ axis, able: canMirror(shown, this.selected, axis, reach) }))\n return html`<div vector-row>\n <label>${i18next.t('figure.label.tools')}</label>\n <div tools>\n ${tool('centre-x', 'figure.button.center-x', 'figure.text.center-on-x')}\n ${tool('centre-z', 'figure.button.center-z', 'figure.text.center-on-z')}\n ${this.renderPlaneAlign(shown, unavailable)}\n ${tool('snap', 'figure.button.snap', 'figure.text.snap-explained')}\n </div>\n </div>\n <div vector-row>\n <label>${i18next.t('figure.label.mirror-copy')}</label>\n <div tools>\n ${mirrors.map(\n ({ axis, able }) => html`<button ?disabled=${unavailable || !able} title=${i18next.t(able ? 'figure.text.mirror-explained' : 'figure.text.mirror-would-overlap')} @click=${() => this.mirror(axis)}>\n ${i18next.t('figure.button.mirror-' + axis)}\n </button>`\n )}\n </div>\n </div>\n`\n }\n /**\n * A part's name. It renames every value the part owns, and what refers to them follows\n * (figure-model's rename-part), as one step of the history.\n */\n /**\n * A repeated body is one of its repeat's copies and is named after it -- the list and this field read `roller 15`, not\n * its path through the repeat (user, 2026-09-24: 「부품 이름 ???」). A copy has no name of its own to change.\n */\n private renderRepeatNote(geometry: readonly unknown[] | undefined) {\n const repeat = repeatOf(this.selected, geometry)\n return repeat?.index ? html`<p hint>${i18next.t('figure.text.repeat-member', { name: repeat.name, count: repeat.count, index: repeat.index })}</p>` : nothing\n }\n private renamePart(input: HTMLInputElement) {\n const name = input.value.trim()\n const from = this.selected\n if (!name || name === from) {\n input.value = from\n return\n }\n try {\n this.session!.edit({ kind: 'rename-part', target: from, name })\n this.selected = name\n this.error = ''\n this.changed()\n } catch (error) {\n input.value = from\n /* Whether a name is a name is the kernel's rule, said from its refusal (ADR-0127), not checked again here. */\n this.error = partNameRefusalOf(error, (key, params) => i18next.t(key, params)) ?? this.said(error)\n }\n }\n /** Size response, fastening and motion for the selected part, as authoring commands. */\n private renderLinks(unavailable: boolean, section: 'shape' | 'response' | 'places' | 'motion', slotted: unknown = nothing) {\n const shown = this.shown()\n if (!shown) return null\n const tab: SideTab = section === 'shape' ? 'properties' : section === 'places' ? 'capability' : section\n return html`<figure-links\n .revision=${shown}\n .section=${section}\n .active=${this.tab === tab && !(section === 'shape' && this.fastening)}\n .partId=${this.selected}\n ?locked=${unavailable}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n @size-recipe=${(e: CustomEvent) => this.applySizeSteps(e.detail.steps)}\n @size-input=${(e: CustomEvent) => this.writeField({ id: e.detail.input, unit: 'mm' }, e.detail.value)}\n @size-typing=${(e: CustomEvent) => this.hold(this.heldOf({ id: e.detail.input, unit: 'mm' }, e.detail.value))}\n @size-let-go=${() => (this.live = NOTHING_LIVE)}\n @fasten-open=${() => this.openFastening()}\n .previewWords=${this.commandPreview.words()}\n .detachWords=${this.commandPreview.detachWords(shown)}\n .overhangWords=${section === 'shape' ? this.overhangOf(shown).words : NO_WORDS}\n .overhangNote=${section === 'shape' ? this.overhangOf(shown).note : NO_WORDS}\n .motionEnds=${section === 'motion' ? this.motionEnds() : null}\n @go-fasten=${() => this.goFasten()}\n @preview-command=${(e: CustomEvent) => this.commandPreview.ask(e.detail)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n >${slotted}</figure-links>`\n }\n /**\n * A part's groups in one order whatever its state (chief architect 2026-10-16): its size, its place. The links draw\n * the groups; the part's own numbers go into them by slot. How the part answers a size -- its rules, a position that\n * follows, its row -- is the 「반응형」 tab's. A fastened part's place and turn are its fastening's: the place group\n * says it in one line and the locked cells are not drawn (user 2026-10-16).\n */\n private renderPartGroups(shown: FigureRevision | undefined, geometry: readonly { id: string }[], fields: FieldLike[], unavailable: boolean, held?: HeldValues) {\n const groups = this.withSizeRow(groupFields(fields, this.selected), held)\n const integrated = !!shown && canFollow(shown.asset, this.selected)\n const dimensionInputs = new Set(integrated ? followableAxes(shown!.asset, this.selected).map(axis => sizeInputOf(shown!.asset, this.selected, axis)) : [])\n const singles = groups.singles.filter(g => g.kind !== 'single' || !dimensionInputs.has(g.field.id))\n const size = integrated ? [] : groups.vectors.filter(g => g.kind === 'vector' && g.name === 'size')\n const place = groups.vectors.filter(g => g.kind === 'vector' && g.name !== 'size')\n const fastened = !!this.asset()?.joints?.some(j => j.body1.part === ownerOf(this.selected))\n const placeLocked = fastened && place.every(g => g.kind === 'vector' && (['x', 'y', 'z'] as const).every(axis => !g.cells[axis]))\n return this.renderLinks(\n unavailable,\n 'shape',\n html`${size.length || singles.length\n ? html`<section slot=\"size\" group-fields>\n <h3>${i18next.t(integrated ? 'figure.label.group-shape' : 'figure.label.group-size')}</h3>\n ${size.map(g => this.renderVector(g, unavailable, held))}\n ${singles.length\n ? html`<div form>${singles.map(g => (g.kind === 'single' ? this.renderSingle(g.name, g.field, unavailable) : nothing))}</div>`\n : nothing}\n ${!integrated ? this.renderSizeKeeps() : nothing}\n </section>`\n : nothing}\n ${place.length && !placeLocked\n ? html`<div slot=\"place\" group-fields>${place.map(g => this.renderVector(g, unavailable, held))}${this.renderHeldAxes(place)}</div>`\n : nothing}`\n )\n }\n /** The 「반응형」 tab of a part: the links' response groups, its row's own section put in by slot. */\n private renderResponse(shown: FigureRevision | undefined, geometry: readonly { id: string }[], unavailable: boolean) {\n return this.renderLinks(unavailable, 'response', html`<div slot=\"size-note\">${this.renderSizeKeeps()}</div>${this.renderRepeat(shown, geometry, unavailable)}`)\n }\n /**\n * 「더 보기」: what few parts need, folded by default and left as this person last left it (chief architect\n * 2026-10-16) -- the section, its corners and inside; transparency, glow and segments; the mirrored copy and the\n * alignment tools.\n */\n private renderMore(part: object, palette: Record<string, string>, unavailable: boolean) {\n const tools = this.renderTools(unavailable)\n return html`<section more>\n <details more-fold ?open=${this.moreOpen} @toggle=${(e: Event) => this.setMoreOpen((e.target as HTMLDetailsElement).open)}>\n <summary><h3>${i18next.t('figure.label.group-more')}</h3></summary>\n <div more-body>\n ${tools ? html`<div group-fields>${tools}</div>` : nothing}\n <figure-section-panel\n embedded\n .body=${{ ...part, id: this.selected }}\n ?locked=${unavailable}\n .faceMapping=${this.faceMapping?.from === 'panel' ? this.faceMapping.need : undefined}\n @face-mapped=${(e: CustomEvent) => this.mapFaces(e.detail.remap)}\n @face-mapping-cancel=${() => (this.faceMapping = undefined)}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n @command-live=${(e: CustomEvent) => this.holdAction(e.detail.action)}\n @section-editor-open=${() => (this.sectionEditing = this.selected)}\n ></figure-section-panel>\n <figure-material-panel\n show=\"more\"\n .body=${{ ...part, id: this.selected }}\n .palette=${palette}\n ?locked=${unavailable}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-live=${(e: CustomEvent) => this.hold({}, e.detail.edit)}\n ></figure-material-panel>\n </div>\n </details>\n </section>`\n }\n /** A bar button that opens the view settings or the release history over the work; pressed while it is open. */\n private renderOverlayButton(which: BarOverlay, icon: string, label: string, slot?: string) {\n const open = this.overlay === which\n return html`<button\n slot=${slot ?? nothing}\n tool\n bar-overlay=${which}\n aria-pressed=${String(open)}\n aria-label=${i18next.t(label)}\n title=${i18next.t(label)}\n @click=${() => (this.overlay = open ? undefined : which)}\n >\n <md-icon>${icon}</md-icon>\n </button>`\n }\n /**\n * The view settings or the release history, over the work under the bar. Both stay drawn, hidden when closed: the\n * history keeps what it read, as the tabs kept it. Esc closes it.\n */\n private renderOverlay() {\n const close = () => (this.overlay = undefined)\n const panel = (which: BarOverlay, label: string, body: unknown) => html`<div\n side-overlay\n bar-overlay-panel=${which}\n role=\"dialog\"\n aria-label=${i18next.t(label)}\n ?off=${this.overlay !== which}\n @keydown=${(e: KeyboardEvent) => e.key === 'Escape' && (e.stopPropagation(), close())}\n >\n <div overlay-head>\n <h3>${i18next.t(label)}</h3>\n <button quiet aria-label=${i18next.t('figure.button.close')} title=${i18next.t('figure.button.close')} @click=${close}><md-icon>close</md-icon></button>\n </div>\n <div overlay-body>${body}</div>\n </div>`\n return html`${panel('view', 'figure.label.tab-environment', html`<figure-settings .view=${this.view} @update-view=${(e: CustomEvent) => this.setView(e.detail.view)}></figure-settings>`)}\n ${panel('history', 'figure.button.release', html`<slot name=\"history\"></slot>`)}`\n }\n /** Data tried in the data tab, given to the preview's figures as their `data`; null when none is (ADR-0051 §8). */\n @state() private dataSample: unknown = null\n /** Sample legends by role, pasted in the data tab: the preview shows the figure's tables by them. Not saved. */\n @state() private legendSample: Record<string, unknown> = {}\n /** The figure's controls: try a value, name it, set its range and travel time, keep the pose. */\n private renderControls(view: { fields: Array<{ id: string; role?: string; value: number }> }, unavailable: boolean) {\n const asset = this.shown()?.asset\n if (!asset) return null\n const values = Object.fromEntries(view.fields.filter(f => f.role === 'state').map(f => [f.id, f.value]))\n return html`<figure-controls\n .asset=${asset}\n .values=${values}\n ?locked=${unavailable}\n @state=${(e: CustomEvent) => this.run(() => this.session!.apply([{ kind: 'set-state', input: e.detail.input, unit: e.detail.unit, value: e.detail.value }]))}\n @state-live=${(e: CustomEvent) => this.hold({ [e.detail.input]: e.detail.value })}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-controls>\n <figure-clips\n .asset=${asset}\n .values=${values}\n ?locked=${unavailable}\n @states=${(e: CustomEvent) => this.run(() => this.session!.apply(e.detail.changes))}\n @states-live=${(e: CustomEvent) => this.hold(e.detail.values)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-clips>`\n }\n /** One command, one step of the history. A refusal a person can meet here is said in their words. */\n /** Where a held edit goes once the author has chosen where what stands on its lost faces goes. */\n private mapFaces(remap: FigureFaceRemap[]) {\n const held = this.faceMapping\n if (!held) return\n const done = this.linkCommand({ ...held.action, remap } as FigureAuthoringAction, held.from)\n if (done && held.from === 'section-editor') this.closeSectionEditor()\n }\n /** The figure's size, declared for a part to follow, in one line (ADR ruling Q1). */\n private sizeDeclaredWords() {\n const size = this.designValues()\n return i18next.t('figure.text.size-declared-to-follow', {\n x: Math.round(size['size.x'] ?? 0).toLocaleString(),\n y: Math.round(size['size.y'] ?? 0).toLocaleString(),\n z: Math.round(size['size.z'] ?? 0).toLocaleString()\n })\n }\n /**\n * The size editor's steps, one step of the history. A measure made to follow the figure on a figure with no size\n * declares it on the way; that is said in one line, as follow-size said it (ADR ruling Q1, 2026-10-24).\n */\n private applySizeSteps(steps: readonly FigureProposalStep[]) {\n const hadSize = this.hasSize()\n this.run(() => this.session!.applyRecipe(steps))\n if (!hadSize && !this.error && this.hasSize()) this.notice = this.sizeDeclaredWords()\n }\n /** Runs a command; true when it was taken. */\n private linkCommand(action: FigureAuthoringAction, from: 'section-editor' | 'panel' = 'panel'): boolean {\n /* Committed or refused, a command in hand is let go of: the figure as it stands is drawn again. */\n this.holdAction(null)\n this.notice = ''\n const hadSize = this.hasSize()\n try {\n this.session!.command(action)\n this.error = ''\n this.faceMapping = undefined\n /* What the command did besides what was asked, in one line: the figure's size declared to follow (ADR ruling Q1). */\n if (action.kind === 'follow-size' && !hadSize) this.notice = this.sizeDeclaredWords()\n this.changed()\n return true\n } catch (error) {\n if (this.refusals.askClipLoss(error, () => this.linkCommand(action, from))) return false\n const code = (error as { code?: string })?.code\n /* Something stands on a face this takes away: ask where it goes, there, rather than only saying no. */\n const need = (error as { details?: FigureFaceMappingNeed }).details\n if (code === 'FEATURE_MAPPING_REQUIRED' && need?.lost?.length) {\n this.faceMapping = { action, need, from }\n this.error = ''\n return false\n }\n this.error = this.said(error)\n return false\n }\n }\n private changeField(field: { id: string; unit: FigureInputChange['unit']; role?: string }, event: Event) {\n const input = event.target as HTMLInputElement\n // Rejected edits must also restore the displayed numeric value.\n input.value = String(this.writeField(field, input.valueAsNumber))\n }\n /**\n * A number written to an input, from a field, a scrub or the size editor's rows: a size keeps the part's middle, or its\n * fastening -- figure-model's one size function (ADR-0140 4.1). Gives the value the input holds after, refused or not.\n */\n private writeField(field: { id: string; unit: FigureInputChange['unit']; role?: string }, value: number): number {\n const part = this.selected\n const change: FigureInputChange = { kind: field.role === 'state' ? 'set-state' : 'set-design', input: field.id, unit: field.unit, value }\n const asset = this.shown()?.asset\n const before = asset && part ? throughPlaneOf(asset, drawableFigureParts(this.session!.read().geometry ?? []), part) : 0\n this.run(() => this.session!.apply(field.role !== 'state' && part ? figureSizeEditOf(this.shown()!.asset, part, [change], { keep: 'centre' }).changes : [change]))\n /* Typed past the mounting plane: said, with the way to fasten it there (ADR-0140 5). */\n const after = asset && part && field.role !== 'state' ? throughPlaneOf(this.shown()!.asset, drawableFigureParts(this.session!.read().geometry ?? []), part) : 0\n if (after > before + 0.5) this.tellThroughPlane(part, after)\n return this.session!.read().fields.find(i => i.id === field.id)!.value\n }\n /** Typing or a held spinner: each number on the way is drawn; the field's change records it. */\n private typing(field: { id: string; unit?: FigureInputChange['unit']; role?: string }, event: Event) {\n const value = (event.target as HTMLInputElement).valueAsNumber\n if (Number.isFinite(value)) this.hold(this.heldOf(field, value))\n }\n /**\n * The values in hand for a number typed or scrubbed: what its release writes -- a size with the part's middle kept,\n * or its fastening (figure-model's one size function, ADR-0140 4.1), so the figure does not jump on the release.\n */\n private heldOf(field: { id: string; unit?: FigureInputChange['unit']; role?: string }, value: number, sized?: ReturnType<typeof figureSizeEditorOf>): Record<string, number> {\n const part = this.selected\n const asset = this.shown()?.asset\n if (field.role === 'state' || !part || !asset) return { [field.id]: value }\n const change: FigureInputChange = { kind: 'set-design', input: field.id, unit: field.unit ?? 'mm', value }\n try {\n const { changes } = sized ? sized([change], { keep: 'centre' }) : figureSizeEditOf(asset, part, [change], { keep: 'centre' })\n return Object.fromEntries(changes.map(c => [c.input, c.value as number]))\n } catch {\n return { [field.id]: value }\n }\n }\n /**\n * Drag a field's label (or an axis letter) sideways to scrub its value, as vector tools do: the figure follows the\n * pointer, and the release records one step. The field's number follows too, so the value in hand is always read.\n */\n private scrub(field: { id: string; unit: FigureInputChange['unit']; role?: string; value: number }, down: PointerEvent, unavailable: boolean) {\n if (unavailable) return\n const label = down.currentTarget as HTMLElement\n const input = (label.closest('div[cell]')?.querySelector('input') ?? label.nextElementSibling) as HTMLInputElement | null\n if (!input) return\n /* Prepared once for the scrub: each move is a size through the same function its release writes with. */\n const asset = this.shown()?.asset\n const sized = asset && this.selected && field.role !== 'state' ? (() => { try { return figureSizeEditorOf(asset, this.selected) } catch { return undefined } })() : undefined\n scrubLabel(down, field, {\n move: value => {\n input.value = String(value)\n this.hold(this.heldOf(field, value, sized))\n },\n release: value => (input.value = String(this.writeField(field, value))),\n cancel: () => {\n input.value = String(field.value)\n this.live = NOTHING_LIVE\n }\n })\n }\n /** The sizes a board may give the figure: the ends the author typed, and the rest as far as its parts allow. */\n private renderInstanceRange(shown: FigureRevision | undefined, unavailable: boolean) {\n if (!shown) return nothing\n const asset = shown.asset\n /* Computed once per version: figure-model evaluates the figure at its edges. */\n const measured = derivedOf(shown, 'instance-range', () => {\n let of: ReturnType<typeof instanceRangeOf>\n let toDeclare: ReturnType<typeof instanceSizeToDeclare>\n try {\n of = instanceRangeOf(asset)\n } catch {\n of = undefined\n }\n try {\n toDeclare = of ? undefined : instanceSizeToDeclare(asset)\n } catch {\n toDeclare = undefined\n }\n return { of, toDeclare }\n })\n const range = measured.of\n /*\n In words a person reads (user 2026-10-19/20): what the figure does on a drawing, not the inputs behind it. Fixed,\n it says the size it is always drawn at; resizable, the sizes it may take on each axis and the parts that change\n with it. The way to it stays one press -- a figure no part follows (a robot scaled whole) reaches the one-ratio\n rule only from here -- and the help mark says how parts are made to follow.\n */\n const mm = (v: number) => Math.round(v).toLocaleString()\n const toDeclare = measured.toDeclare\n const title = (explained: string) =>\n html`<h3>${i18next.t('figure.label.board-size')}${this.help.button(explained)}</h3>${this.help.hint(explained)}`\n if (!range && toDeclare)\n return html`<section board-size>\n ${title('figure.text.board-size-fixed-explained')}\n <p fixed-size>${i18next.t('figure.text.board-size-fixed', { x: mm(toDeclare.at.x), y: mm(toDeclare.at.y), z: mm(toDeclare.at.z) })}</p>\n <button act ?disabled=${unavailable} @click=${() => this.linkCommand({ kind: 'declare-instance-size', at: toDeclare.at })}>\n <md-icon>open_in_full</md-icon>${i18next.t('figure.button.declare-instance-size')}\n </button>\n </section>`\n if (!range) return nothing\n const followers = sizeFollowersOf(asset)\n /*\n An end the author typed shows its number; an open end is empty, with what the parts allow written faintly in it\n (ADR-0087 decision 6). Typing narrows that end, emptying the field opens it again.\n */\n const shownEnd = (r: (typeof range)['x'], bound: 'min' | 'max') => (bound === 'max' && !Number.isFinite(r.max) ? '∞' : mm(r[bound]))\n return html`<section board-size>\n ${title('figure.text.board-size-range-explained')}\n ${(['x', 'y', 'z'] as const).map(\n axis => html`<div inline-field>\n <label>${i18next.t('figure.label.resize-' + axis)} <span unit>mm</span></label>\n <div pair range>\n ${(['min', 'max'] as const).map(\n (bound, i) => html`${i ? html`<span dash aria-hidden=\"true\">–</span>` : nothing}<input\n aria-label=${`size.${axis}.${bound}`}\n type=\"number\"\n step=\"any\"\n .value=${live(range[axis].narrowed[bound] ? String(Math.round(range[axis][bound])) : '')}\n placeholder=${shownEnd(range[axis], bound)}\n ?disabled=${unavailable}\n @change=${(e: Event) => {\n const typed = (e.target as HTMLInputElement).valueAsNumber\n this.linkCommand({ kind: 'declare-instance-size', range: rangeWith(range, axis, bound, typed), replace: true })\n }}\n />`\n )}\n </div>\n </div>`\n )}\n <p followers>\n ${followers.length\n ? i18next.t('figure.text.board-size-followers', {\n parts: followers.length > 4 ? i18next.t('figure.text.board-size-followers-more', { first: followers.slice(0, 4).join(', '), rest: String(followers.length - 4) }) : followers.join(', ')\n })\n : i18next.t('figure.text.board-size-no-followers')}\n </p>\n ${this.renderSizingRule(asset, unavailable)}\n </section>`\n }\n /**\n * How the figure grows. One ratio (`sizing: 'uniform'`) is said as it is; a figure with joints that has not declared\n * it is offered it -- a mechanism does not shear -- and the author decides (chief architect's ruling 2026-09-24).\n */\n private renderSizingRule(asset: FigureAsset, unavailable: boolean) {\n if (asset.sizing === 'uniform') {\n /* One ratio reaches only what reads the size: every other length is offered to follow it, in one step. */\n const follow = proportionToFollow(asset)\n return html`<div inline-field><label>${i18next.t('figure.label.sizing-rule')}</label><span>${i18next.t('figure.label.sizing-uniform')}</span></div>\n ${follow?.count\n ? html`<p hint>${i18next.t('figure.text.proportion-to-follow', { count: follow.count })}</p>\n <button act ?disabled=${unavailable} @click=${() => this.linkCommand({ kind: 'follow-size-in-proportion' })}>\n <md-icon>open_in_full</md-icon>${i18next.t('figure.button.follow-size-in-proportion')}\n </button>`\n : nothing}\n ${follow?.kept.length ? html`<p hint>${i18next.t('figure.text.proportion-kept', { what: follow.kept.join(', ') })}</p>` : nothing}`\n }\n return html`${turnsAboutAJoint(asset) ? html`<p hint>${i18next.t('figure.text.sizing-uniform-proposed')}</p>` : nothing}\n <button act ?disabled=${unavailable} title=${i18next.t('figure.text.sizing-uniform-explained')} @click=${() => this.linkCommand({ kind: 'scale-uniformly' })}>\n <md-icon>aspect_ratio</md-icon>${i18next.t('figure.button.scale-uniformly')}\n </button>`\n }\n /**\n * The parts list, one row per part the author made: a repeat is one row with how many copies it makes now\n * (user, 2026-09-24: the conveyor's sixteen rollers were sixteen rows).\n */\n private partRows(geometry: readonly { id: string }[], asset?: FigureAsset): FigurePartRow[] {\n /* Where each part is fastened, straight above it: `part · face`, or the mounting plane (ADR-0097 §5.5). */\n const fastened = new Map(\n (asset?.joints ?? []).map(j => [\n j.body1.part,\n 'plane' in j.body0 ? i18next.t('figure.label.mounting-plane') : `${partLabelOf(j.body0.part)} · ${i18next.t(endPlaceKeyOf(j.body0))}`\n ])\n )\n const rows = new Map<string, FigurePartRow>()\n for (const g of geometry) {\n const id = ownerOf(g.id)\n const row = rows.get(id)\n if (row) {\n row.copies = (row.copies ?? 1) + 1\n continue\n }\n rows.set(id, {\n id,\n kind: startingShapeKindOfBody((g as { shape?: never }).shape) ?? '',\n hidden: this.hiddenParts.has(id),\n invisible: (g as { visible?: boolean }).visible === false,\n ...(id !== g.id ? { copies: 1 } : {}),\n ...(fastened.has(id) ? { fastenedTo: fastened.get(id)! } : {})\n })\n }\n return [...rows.values()]\n }\n /** The detail level's part budget for the list's head, from figure-model's count (a repeat once). */\n private partBudgetOf(asset: FigureAsset | undefined) {\n if (!asset) return undefined\n try {\n return { level: asset.detailLevel ?? null, used: figurePartCountOf(asset), limit: asset.detailLevel ? PART_LIMIT[asset.detailLevel] : null }\n } catch {\n return undefined\n }\n }\n /**\n * A repeat: which way its copies run, how many there are now, and how far apart.\n * The pitch of a row that fills its length is edited as a number (`set-repeat` makes it the part's own the first\n * time); a row of a fixed count says its pitch cannot be set yet (figure-model refuses it the same way).\n */\n private renderRepeat(shown: FigureRevision | undefined, geometry: readonly { id: string }[], unavailable: boolean) {\n const repeat = repeatOf(this.selected, geometry)\n const asset = shown?.asset\n if (!shown || !asset || !repeat || repeat.index) return nothing\n /* The row is set on its part; what hangs from that part is copied with it and has no row of its own. */\n if (!asset.document.model.nodes.some(n => n.id === `${this.selected}.repeat`)) return nothing\n const model = asset.document.model as unknown as {\n nodes: { id: string; op: string; args: string[]; params?: Record<string, string> }[]\n constants: { id: string; value: number }[]\n inputs: { id: string; max?: number }[]\n }\n const layout = model.nodes.find(n => n.id === `${this.selected}.layout`)\n const axis = model.nodes.find(n => n.id === `${this.selected}.repeat`)?.params?.axis ?? '?'\n const own = `${this.selected}.repeat.pitch`\n /* The pitch as it stands: the part's own number, a constant, or what a pitch that follows a length comes to. */\n const fits = layout?.op === 'fit-pitch@1'\n const pitch = fits ? asset.designInputs[own] ?? model.constants.find(c => c.id === layout?.args[4])?.value ?? valueNow(shown, layout?.args[4]) : this.rowNow(shown)?.pitch\n const field = { id: own, unit: 'mm' as const, role: 'design', value: pitch ?? 0 }\n const record = asset.joints?.find(j => j.body1.part === this.selected && j.repeat)\n const parent = record && 'part' in record.body0 ? record.body0.part : undefined\n const removable = !!record\n const axes = record && 'part' in record.body0 && 'face' in record.body0 ? figureFastenAxesOf(asset, record.body0) : []\n const update = (change: Partial<NonNullable<typeof record>['repeat']>) => {\n if (!record?.repeat || unavailable) return\n this.run(() => this.session!.command({ kind: 'set-joint', joint: { ...record, repeat: { ...record.repeat!, ...change } } }))\n }\n return html`<section slot=\"row\" row>\n <h3>\n ${i18next.t('figure.label.repeat')}\n <span section-state active>${i18next.t('figure.label.repeat-active')}</span>\n </h3>\n <div choice-row role=\"radiogroup\" aria-label=${i18next.t('figure.label.row-basis')}>\n <label toggle><input type=\"radio\" name=\"applied-repeat-mode\" .checked=${live(fits)} ?disabled=${unavailable || !record} @change=${() => update({ count: undefined, pitch: pitch && pitch > 0 ? pitch : 200 })}>${i18next.t('figure.label.repeat-fills')}</label>\n <label toggle><input type=\"radio\" name=\"applied-repeat-mode\" .checked=${live(!fits)} ?disabled=${unavailable || !record} @change=${() => update({ count: repeat.count })}>${i18next.t('figure.label.row-by-count')}</label>\n </div>\n <p hint>${i18next.t(fits ? 'figure.text.repeat-mode-pitch' : 'figure.text.repeat-mode-count')}</p>\n <div inline-field><label>${i18next.t('figure.label.size-source')}</label><span value>${parent ?? '—'}</span></div>\n <div inline-field><label>${i18next.t('figure.label.repeat-axis')}</label>${axes.length ? html`<select aria-label=${i18next.t('figure.label.repeat-axis')} ?disabled=${unavailable} .value=${live(axis)} @change=${(e: Event) => update({ axis: (e.target as HTMLSelectElement).value.toUpperCase() as 'X' | 'Y' | 'Z' })}>${axes.map(a => html`<option value=${a} ?selected=${a === axis}>${a.toUpperCase()}</option>`)}</select>` : html`<span value>${axis.toUpperCase()}</span>`}</div>\n <div inline-field><label>${i18next.t('figure.label.repeat-count')}</label>${!fits && record ? html`<input type=\"number\" min=\"1\" step=\"1\" aria-label=${i18next.t('figure.label.repeat-count')} .value=${live(String(repeat.count))} ?disabled=${unavailable} @change=${(e: Event) => update({ count: (e.target as HTMLInputElement).valueAsNumber })}>` : html`<span value>${repeat.count}</span>`}</div>\n <div inline-field>\n <label>${i18next.t('figure.label.repeat-gap')} <span unit>mm</span></label>\n ${fits ? html`<input\n type=\"number\"\n step=\"any\"\n aria-label=${i18next.t('figure.label.repeat-gap')}\n .value=${live(String(pitch ?? ''))}\n ?disabled=${unavailable}\n @change=${(e: Event) => this.setPitch(field, e)}\n />` : html`<span value>${pitch === undefined ? '—' : Number(pitch.toFixed(3))}</span>`}\n </div>\n <ul row-reading>${rowWordsOf(this.rowNow(shown), (key, params) => i18next.t(key, params)).slice(1).map(line => html`<li>${line}</li>`)}</ul>\n <button quiet ?disabled=${unavailable || !removable} @click=${() => this.run(() => this.session!.command({ kind: 'remove-repeat', part: this.selected }))}>${i18next.t('figure.button.remove-repeat')}</button>\n <p hint>${i18next.t('figure.text.repeat-remove-explained')}</p>\n ${fits ? this.renderPublicPitch(asset, pitch ?? 0, unavailable) : nothing}\n </section>`\n }\n /** The selected row as it is drawn now, read by figure-model: nothing when it cannot be read. */\n private rowNow(shown: FigureRevision): FigureRowReading | undefined {\n return derivedOf(shown, `row|${this.selected}`, () => {\n try {\n return figureRowOf(shown.asset, this.selected, shown.inputs)\n } catch {\n return undefined\n }\n })\n }\n /** The design input a row's pitch is read from, when it is read from one (ADR-0096). */\n private pitchInputOf(asset: FigureAsset, part: string): string | undefined {\n const pitch = asset.joints?.find(j => j.body1.part === part && j.repeat)?.repeat?.pitch as { from?: { of?: string; input?: string } } | number | undefined\n return typeof pitch === 'object' && pitch?.from?.of === 'input' ? pitch.from.input : undefined\n }\n /**\n * 「보드에서 바꿀 수 있음」 (ADR-0096): the row's pitch made a design input the figure publishes -- a name on the board and\n * a range the board's value is held to -- in one step; changed or withdrawn the same way. Only a row with a record.\n */\n private renderPublicPitch(asset: FigureAsset, pitch: number, unavailable: boolean) {\n const part = this.selected\n if (!asset.joints?.some(j => j.body1.part === part && j.repeat)) return nothing\n const from = this.pitchInputOf(asset, part)\n const listed = from ? asset.publicInputs?.find(p => p.input === from) : undefined\n const input = from ? asset.document.model.inputs.find(i => i.id === from) : undefined\n const form =\n this.publishing?.part === part\n ? this.publishing\n : listed && input\n ? /* A published input has both ends (figure-model checkPublicInput). */ { part, label: listed.label, min: input.min!, max: input.max! }\n : undefined\n const open = !!form\n const edit = (key: 'label' | 'min' | 'max') => (e: Event) => {\n const target = e.target as HTMLInputElement\n const base = form ?? { part, label: '', min: 0, max: 0 }\n this.publishing = { ...base, [key]: key === 'label' ? target.value : target.valueAsNumber }\n }\n const steps = (): FigureProposalStep[] => {\n const f = form!\n const id = from ?? `${part}.pitch`\n if (listed) return [{ kind: 'set-input-range', input: id, min: f.min, max: f.max }, { kind: 'publish-input', input: id, label: f.label }] as FigureProposalStep[]\n const exists = asset.document.model.inputs.some(i => i.id === id)\n return [\n ...(exists ? [{ kind: 'set-input-range', input: id, min: f.min, max: f.max }] : [{ kind: 'add-design-input', id, unit: 'mm', min: f.min, max: f.max, value: pitch }]),\n ...(from ? [] : [{ kind: 'set-repeat', part, pitch: { from: { of: 'input', input: id } } }]),\n { kind: 'publish-input', input: id, label: f.label }\n ] as FigureProposalStep[]\n }\n const run = (list: FigureProposalStep[]) => {\n try {\n this.session!.applyRecipe(list)\n this.publishing = undefined\n this.error = ''\n this.changed()\n } catch (error) {\n this.error = this.said(error)\n }\n }\n return html`<div public-pitch>\n <label toggle>\n <input\n type=\"checkbox\"\n aria-label=\"figure.label.board-sets\"\n .checked=${open}\n ?disabled=${unavailable}\n @change=${(e: Event) =>\n (e.target as HTMLInputElement).checked\n ? (this.publishing = { part, label: i18next.t('figure.label.repeat-gap'), min: Math.max(1, Math.round(pitch / 2)), max: Math.round(pitch * 2) })\n : listed\n ? run([{ kind: 'unpublish-input', input: from }, { kind: 'set-repeat', part, pitch }] as FigureProposalStep[])\n : (this.publishing = undefined)}\n />\n ${i18next.t('figure.label.board-sets')}\n </label>\n ${open\n ? html`<div inline-field><label>${i18next.t('figure.label.board-name')}</label><input aria-label=\"figure.label.board-name\" .value=${form!.label} @change=${edit('label')} /></div>\n <div inline-field><label>${i18next.t('figure.label.least')} <span unit>mm</span></label><input type=\"number\" step=\"any\" aria-label=\"figure.label.least\" .value=${String(form!.min)} @change=${edit('min')} /></div>\n <div inline-field><label>${i18next.t('figure.label.most')} <span unit>mm</span></label><input type=\"number\" step=\"any\" aria-label=\"figure.label.most\" .value=${String(form!.max)} @change=${edit('max')} /></div>\n <button act publish-pitch ?disabled=${unavailable || !form!.label.trim()} @click=${() => run(steps())}>\n <md-icon>${listed ? 'check' : 'ios_share'}</md-icon>${i18next.t(listed ? 'figure.button.apply' : 'figure.button.publish-input')}\n </button>`\n : nothing}\n </div>`\n }\n /**\n * A pitch always goes through `set-repeat`: the command moves the longest length with it (at most `limit` copies),\n * which a plain input edit would not. Refused only when the authored length would already hold more copies than\n * that -- said with the numbers.\n */\n private setPitch(field: { id: string; value: number }, event: Event) {\n const input = event.target as HTMLInputElement\n const pitch = input.valueAsNumber\n if (!Number.isFinite(pitch) || pitch === field.value) return\n /* Read from a design input the board may set: the input's value changes, the row keeps reading it (ADR-0096). */\n const from = this.pitchInputOf(this.shown()!.asset, this.selected)\n if (from) {\n this.run(() => this.session!.apply([{ kind: 'set-design', input: from, unit: 'mm', value: pitch }]))\n input.value = String(this.session!.read().fields.find(i => i.id === from)?.value ?? field.value)\n return\n }\n try {\n this.session!.command({ kind: 'set-repeat', part: this.selected, pitch })\n this.error = ''\n this.changed()\n } catch (error) {\n input.value = String(field.value)\n this.error = this.said(error)\n }\n }\n /** Choose a part, from the list, the canvas or a place row. A figure-level tab gives way to the part's properties. */\n /*\n Saving and releasing told apart, beside the save (ADR-0097 §5.6, Q-D2): what the saved figure is -- a draft never\n released, a draft while boards use an earlier release, a release -- as the server said it. Edits not saved are the\n status before it. Boards read a draft's latest release (figureBlueprint), so that is what is said.\n */\n private releaseWords(view: { id?: string | null }): string {\n if (!view.id || !this.releaseState?.state) return ''\n const { state, version } = this.releaseState\n if (state === 'released') return i18next.t('figure.text.release-state-released', { version: String(version) })\n return version > 0 ? i18next.t('figure.text.release-state-draft-over', { version: String(version) }) : i18next.t('figure.text.release-state-draft-new')\n }\n /** The findings that block release, under the bar beside 「발행」. */\n private renderReleaseBlockers(blockers: FigureGateFinding[], asset: FigureAsset | undefined) {\n const parts = (asset?.appearance ?? []).map(look => look.target)\n return html`<div release-blockers role=\"dialog\" aria-label=${i18next.t('figure.text.must-fix-to-release')} @keydown=${(e: KeyboardEvent) => e.key === 'Escape' && (this.blockersOpen = false)}>\n <ul gate>\n <li head>${i18next.t('figure.text.must-fix-to-release')}</li>\n ${blockers.map(finding => renderGateFinding(finding, true, nothing, parts))}\n </ul>\n </div>`\n }\n /*\n The bar's one way to the releases (user 2026-10-18: the history icon and 「발행」 opened the same panel): the panel\n of releases -- what to release now, the releases before it and going back to one -- opened at its release section,\n closed again by a second press.\n */\n private goRelease = async () => {\n if (this.overlay === 'history') {\n this.overlay = undefined\n return\n }\n this.overlay = 'history'\n await this.updateComplete\n await this.querySelector<HTMLElement & { showRelease?: () => Promise<void> }>('figure-history-panel')?.showRelease?.()\n }\n /*\n Past the edge of the face a part is fastened to (ADR-0097 §5.5, Q3): the selected part's own, and the parts fastened\n to it -- said apart from the room, nothing moved. Read once per version, part and language. The note says it is wider\n than its face: a fact of the relation, said in its details, not as a warning (designer 2026-09-27).\n */\n private overhangOf(shown: FigureRevision): { words: string[]; note: string[] } {\n const part = this.selected\n if (!part) return NO_OVERHANG\n return derivedOf(shown, `overhang|${part}|${i18next.language}`, () => {\n const asset = shown.asset\n const say = (k: string, params?: Record<string, string>) => i18next.t(k, params)\n const where = (o: FigureFaceOverhang & { on: { part: string; face: string } }) => ({ on: partLabelOf(o.on.part), face: say(`figure.label.face-${o.on.face}`) })\n /* On another part's face: the plane's edges are the figure's room, said where the room is. */\n const onPart = (o: FigureFaceOverhang | undefined): o is FigureFaceOverhang & { on: { part: string; face: string } } => !!o && o.on !== 'plane'\n const sides = (o: FigureFaceOverhang) => o.sides.map(s => say(`figure.text.overhang-side-${s.side}`, { axis: s.axis.toUpperCase(), mm: String(s.mm) })).join(', ')\n const words: string[] = []\n const note: string[] = []\n try {\n const found = figureFaceOverhangOf(asset, part, shown.inputs)\n const own = onPart(found) ? found : undefined\n if (own?.state === 'larger') {\n note.push(say('figure.text.overhang-larger', { ...where(own), sides: sides(own) }))\n if (own.lopsided.length) note.push(say('figure.text.overhang-lopsided', { axes: own.lopsided.map(a => a.toUpperCase()).join(', ') }))\n }\n if (own?.state === 'out') words.push(say('figure.text.overhang-out', { ...where(own), sides: sides(own) }))\n else if (own?.state === 'possible') words.push(say('figure.text.overhang-possible', where(own)))\n else if (own?.state === 'unknown') words.push(say('figure.text.overhang-unknown', where(own)))\n if (own?.contact === 'off') words.push(say('figure.text.overhang-off', where(own)))\n const held = (asset.joints ?? []).filter(j => 'part' in j.body0 && j.body0.part === part).map(j => figureFaceOverhangOf(asset, j.body1.part, shown.inputs))\n const past = held.filter((o): o is FigureFaceOverhang => o?.state === 'out' || o?.state === 'possible' || o?.contact === 'off')\n if (past.length) words.push(say('figure.text.overhang-held', { parts: past.map(o => partLabelOf(o.part)).join(', ') }))\n } catch {\n /* Not read: nothing said rather than a guess. */\n }\n return { words, note }\n })\n }\n /** The selected part's motion at both ends of its range, made once per version and part. */\n private motionEnds(): MotionEnds | null {\n const shown = this.shown()\n const part = this.selected\n if (!shown || !part) return null\n return derivedOf(shown, `motion-ends|${part}`, () => {\n try {\n return motionEndsOf(shown, part)\n } catch {\n return null\n }\n })\n }\n /** \"Fasten it first\", from the motion tab or a row: to the properties tab, the fastening window open on this part. */\n private async goFasten() {\n this.tab = 'properties'\n await this.updateComplete\n this.openFastening()\n }\n private openFastening() {\n if (!this.selected || this.fastenPopup) return\n this.fastenError = ''\n this.fastenHover = null\n this.fastening = true\n const content = document.createElement('figure-fasten-dialog') as NonNullable<typeof this.fastenWindow>\n content.addEventListener('preview-command', e => this.commandPreview.ask((e as CustomEvent).detail))\n content.addEventListener('fasten-hover', e => this.hoverFastening((e as CustomEvent).detail))\n content.addEventListener('fasten-apply', e => this.applyFastening((e as CustomEvent).detail.action))\n content.addEventListener('fasten-cancel', () => this.closeFastening())\n this.fastenWindow = content\n this.tellFastening()\n /* No backdrop: the canvas stays reachable while it is open -- a part pressed there is aimed at (ADR-0140 stage 4). */\n const popup = openPopup(html`${content}`, { title: i18next.t('figure.label.fastening'), size: 'fit', backdrop: false, movable: true, closable: true, escapable: true })\n this.fastenPopup = popup\n /* Closed by its own X or Esc as well: the editor lets go of it the same way. */\n popup.result.then(() => this.fastenPopup === popup && this.fastenClosed())\n }\n private closeFastening() {\n const popup = this.fastenPopup\n this.fastenClosed()\n popup?.close()\n }\n private fastenClosed() {\n this.fastenPopup = undefined\n this.fastenWindow = undefined\n this.fastening = false\n this.fastenError = ''\n this.fastenHover = null\n }\n /** What the window shows is the editor's: the figure on screen, the part, and what the preview and a refusal said. */\n private tellFastening() {\n const content = this.fastenWindow\n const view = this.session?.read()\n if (!content || !view) return\n content.revision = this.shown()\n content.partId = this.selected\n content.locked = view.loading || !!view.error || view.saving || !view.context\n content.previewWords = this.commandPreview.words()\n content.error = this.fastenError\n }\n disconnectedCallback() {\n super.disconnectedCallback()\n this.closeFastening()\n }\n /** 「적용」: the command, one step; refused, the window stays open and says why. */\n private applyFastening(action: FigureAuthoringAction) {\n if (this.linkCommand(action)) this.closeFastening()\n else this.fastenError = this.error\n }\n /** A row of the window's list under the pointer or the arrows: the face of that part it would be fastened on, lit. */\n private hoverFastening(on: { part: string; face?: string } | null) {\n const shown = this.shown()\n let lit: FigureRenderPart | null = null\n try {\n lit = on?.face && shown ? faceHighlightOf(figurePartFaceOf(shown.asset, on.part, on.face, shown.inputs)) : null\n } catch {\n lit = null\n }\n this.fastenHover = lit\n }\n /** What the canvas draws of it, made once per preview: a new list every render would stand the board up each time. */\n private previewShown(): { ghost: FigureRenderPart[]; highlight: FigureRenderPart | null } {\n const p = this.commandPreview.current()\n /* On the motion tab, with nothing being tried: where the selected part's motion takes it, at both ends. */\n if (!p && this.tab === 'motion' && this.middle === 'edit') return { ghost: this.motionEnds()?.ghost ?? [], highlight: null }\n const drawn = this.commandPreview.drawnOf(p)\n /* A part in the fastening window's list under the pointer: its face lit in place of the one the command meets. */\n return this.fastenHover ? { ghost: drawn.ghost, highlight: this.fastenHover } : drawn\n }\n /**\n * What the author has in view, for the AI dock to hear with a request (ADR-0097 §5.6 item 5): the part selected and\n * what the preview is trying. Read at the moment of sending, never cached, and never a reason to start a new\n * conversation -- selecting is not a new subject.\n */\n assistantFocus(): { part?: string; trying?: { clips?: Record<string, number>; controls?: Record<string, number> } } {\n const trying = this.middle === 'preview' ? this.renderRoot.querySelector<HTMLElement & { tried?: () => { clips?: Record<string, number>; controls?: Record<string, number> } | undefined }>('figure-preview')?.tried?.() : undefined\n return { ...(this.selected ? { part: this.selected } : {}), ...(trying ? { trying } : {}) }\n }\n /**\n * The places things are held, where they fall now (ADR-0118): the slots the slot layout unfolds to and the places held\n * one by one, drawn while the places are being edited, the selected part's in the primary colour. Made again only when the\n * evaluation or the selection is new, so the canvas is not stood up again for nothing.\n */\n private slotMarks(view: { bindings?: readonly unknown[]; geometry: readonly unknown[] }, asset: unknown) {\n const places = view.bindings ?? []\n if (this.slotMarksDrawn?.of !== places || this.slotMarksDrawn.selected !== this.selected) {\n const layout = (asset as { document?: { capabilities?: { slotLayout?: { layout: never } } } })?.document?.capabilities?.slotLayout?.layout\n const marks = [...slotMarksOf(places as never, layout), ...(asset ? placeMarksOf(places as never, asset as never, view.geometry as never, this.selected) : [])]\n this.slotMarksDrawn = { of: places, selected: this.selected, marks: marks as never }\n }\n return this.slotMarksDrawn.marks\n }\n private slotMarksDrawn?: { of: readonly unknown[]; selected: string; marks: FigureRenderPart[] }\n private choose(id: string) {\n /* A copy on the canvas selects its repeat: the part the author made. */\n this.selected = id ? ownerOf(id) : id\n this.faceMapping = undefined\n if (id && this.tab === 'verdict') this.tab = 'properties'\n }\n private asset(): FigureAsset | undefined {\n return this.shown()?.asset\n }\n /** A side tab says what it is in words under its icon: the icons alone had to be learnt (designer 2026-09-27, U05). */\n private renderTab(tab: SideTab, icon: string, label: string) {\n /* Its accessible name is the name it shows (designer 2026-09-27); the longer title stays as its tooltip. */\n const name = i18next.t(tab === 'response' && this.selected ? 'figure.label.tab-arrangement' : 'figure.label.tab-short-' + tab)\n return html`<button tab ?on=${this.tab === tab} title=${tab === 'response' && this.selected ? name : label} aria-label=${name} @click=${() => (this.tab = tab)}>\n <md-icon>${icon}</md-icon><span tab-label aria-hidden=\"true\">${name}</span>\n </button>`\n }\n updated(changed: PropertyValues<this>) {\n super.updated?.(changed)\n this.tellFastening()\n /* Nothing blocks release any more: the list under the bar closes, and opens fresh when something does again. */\n if (changed.has('releaseBlockers') && !this.releaseBlockers.length && this.blockersOpen) this.blockersOpen = false\n this.refusals.tell(changed)\n this.panelMemory.restore(() => this.selected)\n const panes = this.renderRoot.querySelector<OxThreePane>('ox-three-pane') ?? undefined\n if (panes !== this.panes) {\n this.panes = panes\n this.paneFold.fitTo(this.getBoundingClientRect().width)\n }\n }\n /**\n * A new figure's first question, on the canvas where the work will be (designer 2026-09-27, U04): a basic shape\n * or an AI draft when the page offers one. Recipes require a host part and are reached from the parts panel after\n * that part exists. Nothing is added until one is chosen; the type, the space, the\n * mounting face and the tags are not asked for first.\n */\n /** The section editor over the canvas, the figure behind it drawing what the working points make. */\n private renderSectionEditor(geometry: readonly { id: string }[]) {\n const part = geometry.find(g => ownerOf(g.id) === this.selected) as { id: string; shape: FigureEvaluatedShape } | undefined\n /* A door frame's section is its own width, height, jamb and head: its fields edit it, not an outline. */\n const drawn = part?.shape && drawnOf(part.shape)\n if (!part || !drawn || part.shape.dimensions.jamb !== undefined) return nothing\n const asset = this.asset() as FigureAsset\n const measures = figureSectionMeasuresOf(asset, this.selected)\n /* What a measure typed here keeps: the part's middle, or its fastening (ADR-0140 4.1). */\n const kept = keptBySizeOf(asset, this.selected)\n return html`<figure-section-editor\n .body=${{ ...part, id: this.selected }}\n .measures=${measures}\n .kept=${kept}\n .pointBlocked=${this.pointBlockedOf(drawn)}\n .revision=${this.session?.read().revision ?? 0}\n .faceMapping=${this.faceMapping?.from === 'section-editor' ? this.faceMapping.need : undefined}\n @command=${(e: CustomEvent) => {\n /* Held for a choice of where things go: the editor stays open, the choice shown in it. */\n if (!this.linkCommand(e.detail.action, 'section-editor')) e.detail.held = true\n }}\n @command-live=${(e: CustomEvent) => this.holdAction(e.detail.action)}\n @face-mapped=${(e: CustomEvent) => this.mapFaces(e.detail.remap)}\n @face-mapping-cancel=${() => (this.faceMapping = undefined)}\n @section-editor-close=${() => this.closeSectionEditor()}\n ></figure-section-editor>`\n }\n /**\n * Why a drawn push's end cannot be drawn to one point now: the kernel's own refusal of that command on a copy (what is\n * fastened to the end face), said as the face. Asked once per figure revision and part.\n */\n private pointBlockedOf(drawn: NonNullable<ReturnType<typeof drawnOf>>): string {\n const shown = this.shown()\n const session = this.session\n if (drawn.apex || drawn.section.kind !== 'polygon' || !session || !shown) return ''\n const part = this.selected\n const apex = apexOver(drawn.section.points, drawn.axis)\n return derivedOf(shown, `point-blocked|${part}|${i18next.language}`, () => {\n try {\n session.previewCommand({ kind: 'set-section', part, apex })\n } catch (error) {\n if ((error as { code?: string }).code === 'FEATURE_MAPPING_REQUIRED')\n return i18next.t('figure.text.section-editor-apex-blocked', { face: i18next.t('figure.label.face-' + END_FACE(drawn.axis, 'end')) })\n }\n return ''\n })\n }\n private renderStart() {\n const shapes: FigurePaletteKind[] = ['box', 'cylinder', 'plate']\n /* Where it is authored from, chosen before any part (ADR-0097): the figure's own setting, no room made up for it. */\n const placement = ((this.asset())?.placement ?? 'floor') as FigurePlacement\n return html`<div start role=\"region\" aria-label=${i18next.t('figure.text.start-question')}>\n <h2>${i18next.t('figure.text.start-question')}</h2>\n <div start-paths>\n <section>\n <h3>${i18next.t('figure.label.start-placement')}</h3>\n <div start-shapes role=\"radiogroup\" aria-label=${i18next.t('figure.label.start-placement')}>\n ${(['floor', 'ceiling', 'wall', 'center'] as const).map(\n one => html`<button start-button role=\"radio\" aria-checked=${String(one === placement)} ?pressed=${one === placement}\n @click=${() => one !== placement && this.linkCommand({ kind: 'set-placement', placement: one })}>\n ${i18next.t(`figure.label.resize-place-${one}`)}\n </button>`\n )}\n </div>\n </section>\n <section>\n <h3>${i18next.t('figure.label.start-shape')}</h3>\n <div start-shapes>\n ${shapes.map(\n kind => html`<button start-button start-shape=${kind} @click=${() => this.add(kind)}>\n ${i18next.t(kind === 'box' ? 'figure.label.primitive-cube' : `figure.label.primitive-${kind}`)}\n </button>`\n )}\n </div>\n <small>${i18next.t('figure.text.start-shape-more')}</small>\n </section>\n ${this.aiDraft\n ? html`<section>\n <h3>${i18next.t('figure.label.start-ai')}</h3>\n <button start-button start-ai @click=${() => this.dispatchEvent(new CustomEvent('ask-ai-draft', { bubbles: true, composed: true }))}>\n ${i18next.t('figure.button.start-ai')}\n </button>\n <small>${i18next.t('figure.text.start-ai-optional')}</small>\n </section>`\n : nothing}\n </div>\n </div>`\n }\n /**\n * The part the panel speaks of, held at its top: its kind, and what its size follows when it follows something. No path above it (user 2026-10-01): the parts list and the canvas already show which part is chosen, and the\n * list's root is the way back to the model's settings.\n */\n private renderSubject() {\n let summary: { kind: string; size: string } | undefined\n try {\n summary = this.selected\n ? partSummaryOf(this.shown()!.asset, ownerOf(this.selected), (key, params) => i18next.t(key, params), i18next.language || 'ko')\n : undefined\n } catch {\n summary = undefined\n }\n if (!summary) return nothing\n return html`<div subject>\n <div subject-summary>\n <b>${ownerOf(this.selected)}</b>\n ${summary.kind ? html`<small>${summary.kind}</small>` : nothing}\n </div>\n </div>`\n }\n /**\n * The model's settings, from the parts list's root (B.1). It shows them on\n * the properties tab whatever tab was open; it changes no data, no camera, no history and no AI conversation.\n */\n private showModelSettings() {\n this.selected = ''\n this.tab = 'properties'\n }\n render() {\n const view = this.session?.read()\n if (!view) return html`<p>${i18next.t('figure.text.opening-model')}</p>`\n const unavailable = view.loading || !!view.error || view.saving || !view.context\n const part = view.geometry.find(g => ownerOf(g.id) === this.selected)\n /* The controls (state inputs) have their own place in the motion tab; these are the design values. */\n const design = view.fields.filter(i => i.role !== 'state')\n /* A repeat's own row values (its pitch) have their own section, not the shape's. */\n const own = design.filter(i => this.selected && i.id.startsWith(this.selected + '.') && !i.id.startsWith(this.selected + '.repeat.'))\n const common = design.filter(i => !view.geometry.some(g => i.id.startsWith(ownerOf(g.id) + '.')))\n const shown = this.shown()\n const asset = shown?.asset\n const partFields = own\n /* The numbers a rule gives the axes that have no field of their own -- shown read-only, never as a blank. */\n let held: HeldValues | undefined\n try {\n const body = view.geometry.find(g => g.id === this.selected) as unknown as FigureRenderPart | undefined\n const placed = body ? placementOf(body) : undefined\n if (placed && shown && this.selected)\n held = {\n position: placed.position,\n rotation: placed.rotation,\n size: (['x', 'y', 'z'] as const).map(axis => measureNow(shown, ownerOf(this.selected), axis)),\n /* Only a size a rule sets: a palette part's own numbers are its shape's fields, not a rule's (found in the browser). */\n sizeRuled: (['x', 'y', 'z'] as const).every(axis => followOf(shown.asset, ownerOf(this.selected), axis).of !== 'own')\n }\n } catch {\n held = undefined\n }\n /*\n Only what is under way is said. Saved or not is the save button's: filled and pressable when there is something\n to save, dimmed when not -- the saved and unsaved words beside it said the same thing again in the primary\n colour, read as a button (screen copy rule: a state is the control's).\n */\n const status = view.loading ? 'figure.text.loading-figure' : view.saving ? 'figure.text.saving-figure' : ''\n /*\n A figure with no parts yet is not one that failed: what blocks its release is said once it has something to\n release (first 15 minutes, 2026-10-16 evening -- red from the first click read as a failure). The verdict tab\n still says it.\n */\n const blockers = view.geometry.length ? this.releaseBlockers : []\n const tab = this.tab\n const live = this.liveParts(shown)\n return html`<ox-canvas-bar\n history\n fit\n undo-shortcut=\"Ctrl+Z\"\n redo-shortcut=\"Ctrl+Y\"\n ?can-undo=${!unavailable && view.canUndo}\n ?can-redo=${!unavailable && view.canRedo}\n .pane=${this.panes}\n @canvas-undo=${() => this.run(() => this.session!.undo())}\n @canvas-redo=${() => this.run(() => this.session!.redo())}\n @canvas-fit=${() => this.renderRoot.querySelector<FigureCanvas>('figure-canvas')?.fit()}\n >\n ${this.renderGizmoTools(!unavailable && this.middle === 'edit')}\n ${this.renderOverlayButton('view', 'wb_sunny', 'figure.label.tab-environment')}\n ${(['edit', 'preview'] as const).map(\n mode => html`<button slot=\"mode\" mode aria-pressed=${String(this.middle === mode)} title=${i18next.t('figure.text.mode-' + mode + '-explained')} @click=${() => (this.middle = mode)}>\n ${i18next.t('figure.label.mode-' + mode)}\n </button>`\n )}\n ${status ? html`<span slot=\"status\" class=\"status\" role=\"status\">${i18next.t(status)}</span>` : nothing}\n <span slot=\"status\" release-state>${this.releaseWords(view)}</span>\n ${blockers.length\n ? html`<button slot=\"commit\" release-blocked aria-expanded=${String(this.blockersOpen)} @click=${() => (this.blockersOpen = !this.blockersOpen)}>\n <md-icon>error</md-icon>${i18next.t('figure.button.release-blocked', { count: blockers.length })}\n </button>`\n : nothing}\n <button\n slot=\"commit\"\n publish\n aria-pressed=${String(this.overlay === 'history')}\n ?disabled=${!view.id}\n title=${view.id ? '' : i18next.t('figure.text.save-the-figure-before-releasing')}\n @click=${this.goRelease}\n >\n <md-icon>publish</md-icon>${i18next.t('figure.button.release')}\n </button>\n <button slot=\"commit\" save ?disabled=${unavailable || (!view.dirty && !!view.id)} @click=${this.save}><md-icon>save</md-icon>${i18next.t('figure.button.save')}</button>\n </ox-canvas-bar>\n ${this.blockersOpen && blockers.length ? this.renderReleaseBlockers(blockers, asset) : nothing}\n ${this.catalogOpen\n ? html`<figure-recipe-catalog\n .templates=${this.templates}\n .selected=${this.selected}\n .error=${this.recipeError}\n .guideOf=${this.guideOf}\n .thumbnailOf=${this.thumbnailOf}\n ?locked=${unavailable}\n @insert-recipe=${(e: CustomEvent) => this.insertRecipe(e.detail.recipe, e.detail.values)}\n @close-catalog=${() => (this.catalogOpen = false)}\n ></figure-recipe-catalog>`\n : null}\n <ox-three-pane>\n <figure-parts\n slot=\"start\"\n .budget=${this.budget}\n @show-maturity=${() => (this.tab = 'verdict')}\n .parts=${this.partRows(view.geometry, asset)}\n .partBudget=${this.partBudgetOf(asset)}\n @set-detail-level=${(e: CustomEvent) => this.linkCommand({ kind: 'set-detail-level', level: e.detail.level })}\n .selected=${this.selected}\n .modelName=${view.name ?? ''}\n @show-model-settings=${() => this.showModelSettings()}\n ?locked=${unavailable}\n @add-part=${(e: CustomEvent) => this.add(e.detail.kind)}\n @import-mesh=${(e: CustomEvent) => this.importMesh(e.detail.file)}\n .meshProgress=${this.meshProgress}\n .recipeCount=${this.templates.length}\n @open-recipe-catalog=${() => ((this.catalogOpen = true), (this.recipeError = ''))}\n @select-part=${(e: CustomEvent) => this.choose(e.detail.id)}\n @toggle-part-hidden=${(e: CustomEvent) => this.toggleHiddenPart(e.detail.id)}\n @set-all-parts-hidden=${(e: CustomEvent) =>\n (this.hiddenParts = e.detail.hidden ? new Set(view.geometry.map(g => ownerOf(g.id))) : new Set())}\n @move-part-up=${(e: CustomEvent) => this.movePart(e.detail.id, e.detail.to)}\n @move-part-down=${(e: CustomEvent) => this.movePart(e.detail.id, e.detail.to)}\n @duplicate-part=${(e: CustomEvent) => this.duplicatePart(e.detail.id)}\n @remove-part=${(e: CustomEvent) => this.removePart(e.detail.id)}\n ></figure-parts>\n ${this.previewMounted\n ? html`<figure-preview\n ?hidden=${this.middle !== 'preview'}\n .active=${this.middle === 'preview'}\n .revision=${shown}\n .context=${view.context ?? ''}\n .view=${this.view}\n .selected=${this.selected}\n .sample=${this.dataSample}\n .legends=${this.legendSample}\n @configure-size=${async (e: CustomEvent<{ part: string }>) => {\n this.middle = 'edit'\n this.selected = e.detail.part\n this.tab = 'response'\n await this.updateComplete\n this.renderRoot.querySelector('figure-links')?.scrollIntoView({ block: 'nearest' })\n }}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n ></figure-preview>`\n : nothing}\n <div middle ?hidden=${this.middle === 'preview'}>\n ${view.geometry.length === 0 && !unavailable ? this.renderStart() : nothing}\n ${this.sectionEditing && this.sectionEditing === this.selected && !unavailable ? this.renderSectionEditor(view.geometry) : nothing}\n <figure-canvas\n .view=${this.view}\n .parts=${this.drawnParts(view.geometry, live)}\n .fan=${this.fanOf(shown, live)}\n .ghost=${this.previewShown().ghost}\n .highlight=${this.previewShown().highlight}\n .marks=${this.tab === 'capability' ? this.slotMarks(view, asset) : NO_MARKS}\n .palette=${view.palette ?? {}}\n .context=${view.context ?? ''}\n .selected=${this.selected}\n ?aiming=${this.fastening}\n .reach=${unavailable ? { translate: false, rotate: false, scale: false } : this.reachOf(this.selected)}\n @part-sizing=${(e: CustomEvent) => this.resizing(e.detail.id, e.detail.result)}\n @part-transformed=${(e: CustomEvent) => this.transformed(e.detail.id, e.detail.result)}\n @part-selected=${(e: CustomEvent<string>) => this.choose(e.detail)}\n @part-aimed=${(e: CustomEvent<{ id: string; point?: number[]; normal?: number[] }>) =>\n this.fastenWindow?.aimAt?.(e.detail)}\n @render-error=${(e: CustomEvent<Error>) => {\n this.error = e.detail.message\n }}\n ></figure-canvas>${this.renderSameMeasure(unavailable)}</div>\n <aside slot=\"end\">\n <div tabs>\n ${this.renderTab('properties', 'tune', i18next.t('figure.label.properties'))}\n ${this.renderTab('response', 'aspect_ratio', i18next.t('figure.label.tab-response'))}\n ${this.renderTab('motion', 'animation', i18next.t('figure.label.motion'))}\n ${this.renderTab('capability', 'conveyor_belt', i18next.t('figure.label.tab-capability'))}\n ${this.renderTab('data', 'sensors', i18next.t('figure.label.tab-data'))}\n ${this.renderTab('verdict', 'insights', i18next.t('figure.label.maturity'))}\n </div>\n <slot name=\"notice\"></slot>\n <div panel ?off=${tab !== 'properties'}>\n ${this.selected && part\n ? html`${this.renderSubject()}\n <section>\n <h3>${i18next.t('figure.label.group-part')}</h3>\n <div inline-field>\n <label>${i18next.t('figure.label.name')}</label>\n <input\n name-field\n aria-label=${i18next.t('figure.label.name')}\n .value=${partLabelOf(this.selected)}\n ?disabled=${unavailable || !!repeatOf(this.selected, view.geometry)?.index}\n @change=${(e: Event) => this.renamePart(e.target as HTMLInputElement)}\n />\n </div>\n ${this.renderRepeatNote(view.geometry)}\n </section>\n ${this.renderPartGroups(shown, view.geometry, partFields, unavailable, held)}\n <figure-material-panel\n .body=${{ ...part, id: this.selected }}\n .palette=${view.palette ?? {}}\n ?locked=${unavailable}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-live=${(e: CustomEvent) => this.hold({}, e.detail.edit)}\n ></figure-material-panel>\n ${this.renderMore(part, view.palette ?? {}, unavailable)}`\n : view.geometry.length === 0\n ? html`${this.renderSubject()}<section empty-figure>\n <p>${i18next.t('figure.text.empty-figure-next')}</p>\n <details>\n <summary>${i18next.t('figure.label.figure-info-later')}</summary>\n <slot name=\"figure\"></slot>\n </details>\n </section>`\n : html`${this.renderSubject()}<slot name=\"figure\"></slot>`}\n </div>\n <div panel ?off=${tab !== 'response'}>\n ${this.renderSubject()}\n ${this.selected && part\n ? this.renderResponse(shown, view.geometry, unavailable)\n : html`${this.renderGroups(groupFields(common), 'figure.label.group-figure-size', 'figure.label.design-inputs', unavailable)}\n ${this.renderInstanceRange(shown, unavailable)}`}\n </div>\n <div panel ?off=${tab !== 'motion'}>\n ${this.renderSubject()}\n ${this.selected && part ? this.renderLinks(unavailable, 'motion') : html`<section><p hint>${i18next.t('figure.text.choose-a-part-to-move')}</p></section>`}\n ${this.renderControls(view, unavailable)}\n </div>\n <div panel ?off=${tab !== 'capability'}>\n ${this.renderSubject()}\n ${this.selected && part ? this.renderLinks(unavailable, 'places') : nothing}\n <figure-capability-panel\n .asset=${asset}\n .selected=${this.selected}\n ?locked=${unavailable}\n @select-part=${(e: CustomEvent) => this.choose(e.detail.id)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @command=${(e: CustomEvent) => this.linkCommand(e.detail.action)}\n ></figure-capability-panel>\n </div>\n <div panel ?off=${tab !== 'data'}>\n ${this.renderSubject()}\n <figure-data-panel\n .asset=${asset}\n .selected=${this.selected}\n ?locked=${unavailable}\n @data-sample=${(e: CustomEvent) => (this.dataSample = e.detail.data)}\n @legend-sample=${(e: CustomEvent) => (this.legendSample = e.detail.legends)}\n @part-edit=${(e: CustomEvent) => this.run(() => this.session!.edit(e.detail.edit))}\n @part-edits=${(e: CustomEvent) => this.run(() => this.session!.applyRecipe(e.detail.edits))}\n ></figure-data-panel>\n </div>\n <div panel flush ?off=${tab !== 'verdict'}><slot name=\"verdict\"></slot></div>\n </aside>\n </ox-three-pane>\n ${this.renderOverlay()}`\n }\n /** Position, rotation and size as rows of three cells; the shape's own measures one to a line, under their title. */\n private renderGroups(\n groups: { vectors: FieldGroup[]; singles: FieldGroup[] },\n vectorTitle: string,\n singleTitle: string,\n unavailable: boolean,\n tools: unknown = null,\n held?: HeldValues\n ) {\n return html`${groups.vectors.length || tools\n ? html`<section>\n <h3>${i18next.t(vectorTitle)}</h3>\n ${groups.vectors.map(g => this.renderVector(g, unavailable, held))}\n ${this.renderHeldAxes(groups.vectors)}\n ${tools ?? nothing}\n </section>`\n : nothing}\n ${groups.singles.length\n ? html`<section>\n <h3>${i18next.t(singleTitle)}</h3>\n <div form>${groups.singles.map(g => (g.kind === 'single' ? this.renderSingle(g.name, g.field, unavailable) : nothing))}</div>\n </section>`\n : nothing}`\n }\n /**\n * A box-like part's size row stands when a rule sets every side -- each following the figure's size -- with the\n * numbers the rule gives, as its position and turn rows do (designer 2026-09-27: not a blank, not gone).\n */\n private withSizeRow(groups: ReturnType<typeof groupFields>, held?: HeldValues) {\n if (groups.vectors.some(v => v.kind === 'vector' && v.name === 'size')) return groups\n if (!held?.sizeRuled || !held.size || held.size.length !== 3 || held.size.some(v => v === undefined)) return groups\n const at = groups.vectors.findIndex(v => v.kind === 'vector' && v.name === 'rotation')\n const vectors = [...groups.vectors]\n vectors.splice(at < 0 ? vectors.length : at + 1, 0, { kind: 'vector', name: 'size', cells: {} })\n return { ...groups, vectors }\n }\n private renderVector(group: FieldGroup, unavailable: boolean, held?: HeldValues) {\n if (group.kind !== 'vector') return nothing\n const unit = group.name === 'rotation' ? '°' : 'mm'\n const ruled = (['x', 'y', 'z'] as const).filter(axis => !group.cells[axis])\n const given = (axis: 'x' | 'y' | 'z') => {\n const v = held?.[group.name]?.[['x', 'y', 'z'].indexOf(axis)]\n return v === undefined || !Number.isFinite(v) ? '—' : String(Math.round(v * 10) / 10)\n }\n return html`<div vector-row>\n <label>${i18next.t('figure.label.group-' + group.name)}${group.name === 'rotation' ? '' : html` <span unit>${unit}</span>`}</label>\n <div triple>\n ${(['x', 'y', 'z'] as const).map(\n axis => !group.cells[axis]\n ? html`<div cell held title=${i18next.t('figure.text.axis-held-by-rule')}>\n <span axis>${axis.toUpperCase()}</span>\n <input type=\"text\" readonly .value=${given(axis)} aria-label=${`${group.name}.${axis} · ${i18next.t('figure.text.axis-held-by-rule')}`} />\n </div>`\n : html`<div cell>\n <span axis ?scrub=${!unavailable} @pointerdown=${(e: PointerEvent) => this.scrub(group.cells[axis] as never, e, unavailable)}>${axis.toUpperCase()}</span>\n <input\n aria-label=${group.cells[axis]!.id}\n type=\"number\"\n step=\"any\"\n .value=${String(group.cells[axis]!.value)}\n ?disabled=${unavailable}\n @input=${(e: Event) => this.typing(group.cells[axis] as never, e)}\n @change=${(e: Event) => this.changeField(group.cells[axis] as never, e)}\n />\n </div>`\n )}\n </div>\n </div>\n`\n }\n /**\n * Why a row's numbers cannot be typed, said once under the rows by what decides them (user 2026-10-01: \"set by a\n * rule\" named nothing): a fastened part's place and turn are its fastening's; other numbers are worked out from\n * something else. A size that follows something is said at the panel's head, so not again here.\n */\n /** What a size typed keeps, under the size fields: the part's middle, where it is fastened, or only its size (ADR-0140 4.1). */\n private renderSizeKeeps() {\n const asset = this.asset()\n const kept = asset && this.selected ? keptBySizeOf(asset, this.selected) : undefined\n return kept ? html`<p hint size-keeps>${i18next.t(SIZE_KEEPS_WORDS[kept])}</p>` : nothing\n }\n private renderHeldAxes(vectors: FieldGroup[]) {\n const fastened = !!(this.asset())?.joints?.some(j => j.body1.part === ownerOf(this.selected))\n const held = vectors.filter(g => g.kind === 'vector' && g.name !== 'size' && (['x', 'y', 'z'] as const).some(axis => !g.cells[axis]))\n if (!held.length) return nothing\n const placed = held.every(g => g.name === 'position' || g.name === 'rotation')\n if (fastened && placed) return html`<p hint held-axes>${i18next.t('figure.text.held-by-fastening')}</p>`\n return html`<p hint held-axes>${i18next.t('figure.text.held-worked-out', { group: held.map(g => i18next.t('figure.label.group-' + g.name)).join(' · ') })}</p>`\n }\n private renderSingle(name: string, field: FieldLike, unavailable: boolean) {\n const words = name.split('.').map(part => i18next.t('figure.label.field-' + part, { defaultValue: part }))\n return html`<span ?scrub=${!unavailable} @pointerdown=${(e: PointerEvent) => this.scrub(field as never, e, unavailable)}>${words.join(' · ')} (${field.unit})</span\n ><input\n aria-label=${field.id}\n type=\"number\"\n step=\"any\"\n .value=${String(field.value)}\n ?disabled=${unavailable}\n @input=${(e: Event) => this.typing(field as never, e)}\n @change=${(e: Event) => this.changeField(field as never, e)}\n />`\n }\n}\n"]}