@things-factory/figure-ui 10.1.175 → 10.1.177

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 (41) hide show
  1. package/client/modeller/editor-styles.ts +4 -6
  2. package/client/modeller/editor.ts +41 -39
  3. package/client/modeller/figure-links.ts +41 -12
  4. package/client/modeller/figure-parts.ts +31 -14
  5. package/client/modeller/figure-properties.ts +2 -2
  6. package/client/pages/figure-modeller-page.ts +34 -11
  7. package/dist-client/modeller/editor-styles.js +4 -6
  8. package/dist-client/modeller/editor-styles.js.map +1 -1
  9. package/dist-client/modeller/editor.d.ts +6 -10
  10. package/dist-client/modeller/editor.js +34 -37
  11. package/dist-client/modeller/editor.js.map +1 -1
  12. package/dist-client/modeller/figure-links.d.ts +7 -2
  13. package/dist-client/modeller/figure-links.js +45 -11
  14. package/dist-client/modeller/figure-links.js.map +1 -1
  15. package/dist-client/modeller/figure-parts.js +31 -14
  16. package/dist-client/modeller/figure-parts.js.map +1 -1
  17. package/dist-client/modeller/figure-properties.js +2 -2
  18. package/dist-client/modeller/figure-properties.js.map +1 -1
  19. package/dist-client/pages/figure-modeller-page.js +34 -11
  20. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  21. package/dist-client/route.d.ts +1 -1
  22. package/dist-client/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +6 -6
  24. package/test/browser/acceptance-page.js +2 -1
  25. package/test/browser/build.mjs +9 -1
  26. package/test/browser/editing-page.js +2 -1
  27. package/test/browser/links.check.mjs +24 -9
  28. package/test/browser/modeller.check.mjs +6 -0
  29. package/test/browser/parts.check.mjs +3 -12
  30. package/test/browser/places-mesh.check.mjs +4 -9
  31. package/test/browser/props.check.mjs +67 -12
  32. package/test/browser/row-preview.check.mjs +4 -0
  33. package/test/browser/screen.check.mjs +49 -19
  34. package/test/browser/serve-acceptance.mjs +2 -1
  35. package/test/place-words.test.ts +31 -0
  36. package/translations/en.json +6 -3
  37. package/translations/es.json +3 -0
  38. package/translations/ja.json +3 -0
  39. package/translations/ko.json +6 -3
  40. package/translations/ms.json +3 -0
  41. package/translations/zh.json +3 -0
@@ -78,8 +78,6 @@ let FigureEditor = class FigureEditor extends LitElement {
78
78
  this.selected = '';
79
79
  this.error = '';
80
80
  this.tab = 'properties';
81
- /** The capability group open: the canvas marks the places only while their group is in sight. */
82
- this.capabilityOpen = false;
83
81
  /** 「더 보기」 open, as this person left it last (chief architect 2026-10-16: kept per person). */
84
82
  this.moreOpen = FigureEditor_1.storedMoreOpen();
85
83
  /** What the middle shows: the parts being edited, or the figure placed on a board at eight sizes. */
@@ -107,7 +105,7 @@ let FigureEditor = class FigureEditor extends LitElement {
107
105
  session: () => this.session,
108
106
  selected: () => this.selected,
109
107
  shown: () => this.shown(),
110
- formsInSight: () => this.middle === 'edit' && this.tab === 'properties',
108
+ formsInSight: () => this.middle === 'edit' && (this.tab === 'properties' || this.tab === 'response'),
111
109
  said: error => this.said(error)
112
110
  });
113
111
  this.keys = new ModellerKeys(this, {
@@ -757,9 +755,11 @@ let FigureEditor = class FigureEditor extends LitElement {
757
755
  const shown = this.shown();
758
756
  if (!shown)
759
757
  return null;
758
+ const tab = section === 'shape' ? 'properties' : section === 'places' ? 'capability' : section;
760
759
  return html `<figure-links
761
760
  .revision=${shown}
762
761
  .section=${section}
762
+ .active=${this.tab === tab}
763
763
  .partId=${this.selected}
764
764
  ?locked=${unavailable}
765
765
  @command=${(e) => this.linkCommand(e.detail.action)}
@@ -774,9 +774,10 @@ let FigureEditor = class FigureEditor extends LitElement {
774
774
  >${slotted}</figure-links>`;
775
775
  }
776
776
  /**
777
- * A part's groups in one order whatever its state (chief architect 2026-10-16): its size, its place, its row. The links
778
- * draw the three groups and their rules; the part's own numbers go into them by slot. A fastened part's place and turn
779
- * are its fastening's: the place group says it in one line and the locked cells are not drawn (user 2026-10-16).
777
+ * A part's groups in one order whatever its state (chief architect 2026-10-16): its size, its place. The links draw
778
+ * the groups; the part's own numbers go into them by slot. How the part answers a size -- its rules, a position that
779
+ * follows, its row -- is the 「반응형」 tab's. A fastened part's place and turn are its fastening's: the place group
780
+ * says it in one line and the locked cells are not drawn (user 2026-10-16).
780
781
  */
781
782
  renderPartGroups(shown, geometry, fields, unavailable, held) {
782
783
  const groups = this.withSizeRow(groupFields(fields, this.selected), held);
@@ -794,27 +795,11 @@ let FigureEditor = class FigureEditor extends LitElement {
794
795
  : nothing}
795
796
  ${place.length && !placeLocked
796
797
  ? html `<div slot="place" group-fields>${place.map(g => this.renderVector(g, unavailable, held))}${this.renderHeldAxes(place)}</div>`
797
- : nothing}
798
- ${this.renderRepeat(shown, geometry, unavailable)}`);
798
+ : nothing}`);
799
799
  }
800
- /**
801
- * What the figure does -- its places (ADR-0118) -- as a group of the properties, folded: a declaration made once,
802
- * whose marks on the canvas show while it is open. A verdict that finds it empty still says where it is.
803
- */
804
- renderCapability(asset, unavailable) {
805
- return html `<section capability>
806
- <details capability-fold ?open=${this.capabilityOpen} @toggle=${(e) => (this.capabilityOpen = e.target.open)}>
807
- <summary><h3>${i18next.t('figure.label.tab-capability')}</h3></summary>
808
- ${this.selected ? this.renderLinks(unavailable, 'places') : nothing}
809
- <figure-capability-panel
810
- .asset=${asset}
811
- .selected=${this.selected}
812
- ?locked=${unavailable}
813
- @select-part=${(e) => this.choose(e.detail.id)}
814
- @part-edit=${(e) => this.run(() => this.session.edit(e.detail.edit))}
815
- ></figure-capability-panel>
816
- </details>
817
- </section>`;
800
+ /** The 「반응형」 tab of a part: the links' response groups, its row's own section put in by slot. */
801
+ renderResponse(shown, geometry, unavailable) {
802
+ return this.renderLinks(unavailable, 'response', this.renderRepeat(shown, geometry, unavailable));
818
803
  }
819
804
  /**
820
805
  * 「더 보기」: what few parts need, folded by default and left as this person last left it (chief architect
@@ -1764,7 +1749,7 @@ let FigureEditor = class FigureEditor extends LitElement {
1764
1749
  @configure-size=${async (e) => {
1765
1750
  this.middle = 'edit';
1766
1751
  this.selected = e.detail.part;
1767
- this.tab = 'properties';
1752
+ this.tab = 'response';
1768
1753
  await this.updateComplete;
1769
1754
  this.renderRoot.querySelector('figure-links')?.scrollIntoView({ block: 'nearest' });
1770
1755
  }}
@@ -1781,7 +1766,7 @@ let FigureEditor = class FigureEditor extends LitElement {
1781
1766
  .fan=${this.fanOf(shown, live)}
1782
1767
  .ghost=${this.previewShown().ghost}
1783
1768
  .highlight=${this.previewShown().highlight}
1784
- .marks=${this.tab === 'properties' && this.capabilityOpen ? this.slotMarks(view, asset) : NO_MARKS}
1769
+ .marks=${this.tab === 'capability' ? this.slotMarks(view, asset) : NO_MARKS}
1785
1770
  .palette=${view.palette ?? {}}
1786
1771
  .context=${view.context ?? ''}
1787
1772
  .selected=${this.selected}
@@ -1795,7 +1780,9 @@ let FigureEditor = class FigureEditor extends LitElement {
1795
1780
  <aside slot="end">
1796
1781
  <div tabs>
1797
1782
  ${this.renderTab('properties', 'tune', i18next.t('figure.label.properties'))}
1783
+ ${this.renderTab('response', 'aspect_ratio', i18next.t('figure.label.tab-response'))}
1798
1784
  ${this.renderTab('motion', 'animation', i18next.t('figure.label.motion'))}
1785
+ ${this.renderTab('capability', 'conveyor_belt', i18next.t('figure.label.tab-capability'))}
1799
1786
  ${this.renderTab('data', 'sensors', i18next.t('figure.label.tab-data'))}
1800
1787
  ${this.renderTab('verdict', 'insights', i18next.t('figure.label.maturity'), this.instances)}
1801
1788
  </div>
@@ -1826,7 +1813,6 @@ let FigureEditor = class FigureEditor extends LitElement {
1826
1813
  @part-edit=${(e) => this.run(() => this.session.edit(e.detail.edit))}
1827
1814
  @part-live=${(e) => this.hold({}, e.detail.edit)}
1828
1815
  ></figure-material-panel>
1829
- ${this.renderCapability(asset, unavailable)}
1830
1816
  ${this.renderMore(part, view.palette ?? {}, unavailable)}`
1831
1817
  : view.geometry.length === 0
1832
1818
  ? html `${this.renderSubject()}<section empty-figure>
@@ -1836,16 +1822,31 @@ let FigureEditor = class FigureEditor extends LitElement {
1836
1822
  <slot name="figure"></slot>
1837
1823
  </details>
1838
1824
  </section>`
1839
- : html `${this.renderSubject()}<slot name="figure"></slot>
1840
- ${this.renderGroups(groupFields(common), 'figure.label.group-figure-size', 'figure.label.design-inputs', unavailable)}
1841
- ${this.renderInstanceRange(shown, unavailable)}
1842
- ${this.renderCapability(asset, unavailable)}`}
1825
+ : html `${this.renderSubject()}<slot name="figure"></slot>`}
1826
+ </div>
1827
+ <div panel ?off=${tab !== 'response'}>
1828
+ ${this.renderSubject()}
1829
+ ${this.selected && part
1830
+ ? this.renderResponse(shown, view.geometry, unavailable)
1831
+ : html `${this.renderGroups(groupFields(common), 'figure.label.group-figure-size', 'figure.label.design-inputs', unavailable)}
1832
+ ${this.renderInstanceRange(shown, unavailable)}`}
1843
1833
  </div>
1844
1834
  <div panel ?off=${tab !== 'motion'}>
1845
1835
  ${this.renderSubject()}
1846
1836
  ${this.selected && part ? this.renderLinks(unavailable, 'motion') : html `<section><p hint>${i18next.t('figure.text.choose-a-part-to-move')}</p></section>`}
1847
1837
  ${this.renderControls(view, unavailable)}
1848
1838
  </div>
1839
+ <div panel ?off=${tab !== 'capability'}>
1840
+ ${this.renderSubject()}
1841
+ ${this.selected && part ? this.renderLinks(unavailable, 'places') : nothing}
1842
+ <figure-capability-panel
1843
+ .asset=${asset}
1844
+ .selected=${this.selected}
1845
+ ?locked=${unavailable}
1846
+ @select-part=${(e) => this.choose(e.detail.id)}
1847
+ @part-edit=${(e) => this.run(() => this.session.edit(e.detail.edit))}
1848
+ ></figure-capability-panel>
1849
+ </div>
1849
1850
  <div panel ?off=${tab !== 'data'}>
1850
1851
  ${this.renderSubject()}
1851
1852
  <figure-data-panel
@@ -2086,10 +2087,6 @@ __decorate([
2086
2087
  state(),
2087
2088
  __metadata("design:type", String)
2088
2089
  ], FigureEditor.prototype, "overlay", void 0);
2089
- __decorate([
2090
- state(),
2091
- __metadata("design:type", Object)
2092
- ], FigureEditor.prototype, "capabilityOpen", void 0);
2093
2090
  __decorate([
2094
2091
  state(),
2095
2092
  __metadata("design:type", Object)