@things-factory/figure-ui 10.1.93 → 10.1.95

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.
@@ -386,13 +386,18 @@ let FigureEditor = class FigureEditor extends LitElement {
386
386
  z-index: 1;
387
387
  display: grid;
388
388
  gap: 4px;
389
- padding: 8px 10px;
389
+ padding: 10px 12px;
390
390
  background: var(--md-sys-color-surface-container-lowest);
391
391
  border-bottom: 1px solid var(--md-sys-color-outline-variant);
392
392
  }
393
+ /* The panel's three sizes (side-panel-styles): the part's kind at the title's, its two lines at the hint's. */
393
394
  div[subject-summary] {
394
395
  display: grid;
395
- gap: 1px;
396
+ gap: 2px;
397
+ }
398
+ div[subject-summary] b {
399
+ font-size: var(--ui-t-body, 13px);
400
+ font-weight: 600;
396
401
  }
397
402
  div[subject-summary] b span {
398
403
  font-weight: 400;
@@ -2150,6 +2155,7 @@ let FigureEditor = class FigureEditor extends LitElement {
2150
2155
  ? html `<section>
2151
2156
  <h3>${i18next.t(vectorTitle)}</h3>
2152
2157
  ${groups.vectors.map(g => this.renderVector(g, unavailable, held))}
2158
+ ${this.renderHeldAxes(groups.vectors)}
2153
2159
  ${tools ?? nothing}
2154
2160
  </section>`
2155
2161
  : nothing}
@@ -2205,7 +2211,24 @@ let FigureEditor = class FigureEditor extends LitElement {
2205
2211
  </div>`)}
2206
2212
  </div>
2207
2213
  </div>
2208
- ${ruled.length ? html `<p hint held-axes>${i18next.t('figure.text.axes-held-by-rule', { group: i18next.t('figure.label.group-' + group.name), axes: ruled.map(a => a.toUpperCase()).join(' · ') })}</p>` : nothing}`;
2214
+ `;
2215
+ }
2216
+ /**
2217
+ * Which axes a rule sets, said once under the rows (position and rotation X · Y · Z set by a rule), not a line under each row
2218
+ * saying the same (user 2026-10-01, the panel checked for balance). The cells themselves are dashed and read-only.
2219
+ */
2220
+ renderHeldAxes(vectors) {
2221
+ const byAxes = new Map();
2222
+ for (const g of vectors) {
2223
+ if (g.kind !== 'vector')
2224
+ continue;
2225
+ const ruled = ['x', 'y', 'z'].filter(axis => !g.cells[axis]);
2226
+ if (!ruled.length)
2227
+ continue;
2228
+ const axes = ruled.map(a => a.toUpperCase()).join(' · ');
2229
+ byAxes.set(axes, [...(byAxes.get(axes) ?? []), i18next.t('figure.label.group-' + g.name)]);
2230
+ }
2231
+ return [...byAxes].map(([axes, groups]) => html `<p hint held-axes>${i18next.t('figure.text.axes-held-by-rule', { group: groups.join(' · '), axes })}</p>`);
2209
2232
  }
2210
2233
  /**
2211
2234
  * A part's fields only the declared room still reads (ADR-0097, designer 2026-09-27): shown as what they are and not
@@ -2218,7 +2241,7 @@ let FigureEditor = class FigureEditor extends LitElement {
2218
2241
  <div form>
2219
2242
  ${fields.map(f => html `<span>${fieldWordsOf(f.id, key => i18next.t(key))} (${f.unit})</span><input aria-label=${f.id} type="number" .value=${String(f.value)} disabled />`)}
2220
2243
  </div>
2221
- <button act room-refit ?disabled=${unavailable} @click=${() => this.askRoomRefit()}>${i18next.t('figure.button.room-refit')}</button>
2244
+ <button act room-refit ?disabled=${unavailable} @click=${() => this.askRoomRefit()}><md-icon>fit_screen</md-icon>${i18next.t('figure.button.room-refit')}</button>
2222
2245
  </section>`;
2223
2246
  }
2224
2247
  /** The room as declared and as proposed, and what lies outside each as measured, before the author confirms. */