@ixfx/components 0.5.17 → 0.5.18

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 (50) hide show
  1. package/bundle/index.d.ts +49 -1
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +311 -80
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +1 -1
  6. package/dist/colour-picker.d.ts +1 -1
  7. package/dist/{crumb-navigation-DFqTzElw.js → crumb-navigation-DTwJ8468.js} +54 -80
  8. package/dist/crumb-navigation-DTwJ8468.js.map +1 -0
  9. package/dist/crumbs.d.ts +1 -1
  10. package/dist/crumbs.d.ts.map +1 -1
  11. package/dist/crumbs.js +1 -1
  12. package/dist/{icon-DpA9x2Ve.d.ts → icon-BUwP1CZ1.d.ts} +2 -2
  13. package/dist/icon-BUwP1CZ1.d.ts.map +1 -0
  14. package/dist/icons.d.ts +2 -2
  15. package/dist/{index-D_ftz_IT.d.ts → index-BKAlRgbq.d.ts} +2 -2
  16. package/dist/{index-D_ftz_IT.d.ts.map → index-BKAlRgbq.d.ts.map} +1 -1
  17. package/dist/{index-CoqtMSd9.d.ts → index-BUB5SICW.d.ts} +2 -2
  18. package/dist/{index-CoqtMSd9.d.ts.map → index-BUB5SICW.d.ts.map} +1 -1
  19. package/dist/{index-DfEkTGvT.d.ts → index-DkhBGHgF.d.ts} +3 -3
  20. package/dist/{index-DfEkTGvT.d.ts.map → index-DkhBGHgF.d.ts.map} +1 -1
  21. package/dist/{index-BtGFYfaK.d.ts → index-RqMh1i-O.d.ts} +2 -2
  22. package/dist/{index-BtGFYfaK.d.ts.map → index-RqMh1i-O.d.ts.map} +1 -1
  23. package/dist/index.d.ts +55 -9
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +257 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/{labelled-input-base-DiTme1JO.d.ts → labelled-input-base-Dp_9KP0G.d.ts} +2 -2
  28. package/dist/{labelled-input-base-DiTme1JO.d.ts.map → labelled-input-base-Dp_9KP0G.d.ts.map} +1 -1
  29. package/dist/labelled-radial-input.d.ts +2 -2
  30. package/dist/labelled-radial-input.d.ts.map +1 -1
  31. package/dist/labelled-range-input.d.ts +1 -1
  32. package/dist/{menu-B8gE2MSo.js → menu-CdwSe_XN.js} +2 -2
  33. package/dist/{menu-B8gE2MSo.js.map → menu-CdwSe_XN.js.map} +1 -1
  34. package/dist/{menu-item-DSyf9f_L.d.ts → menu-item-BG5w7fi4.d.ts} +4 -2
  35. package/dist/menu-item-BG5w7fi4.d.ts.map +1 -0
  36. package/dist/{menu-item-BYRvfyXK.js → menu-item-CrmUwIoJ.js} +7 -2
  37. package/dist/menu-item-CrmUwIoJ.js.map +1 -0
  38. package/dist/menu.d.ts +2 -2
  39. package/dist/menu.js +2 -2
  40. package/dist/panel.d.ts +1 -1
  41. package/dist/{tab-list-ih-0I0NE.d.ts → tab-list-CLqlPnX-.d.ts} +2 -2
  42. package/dist/{tab-list-ih-0I0NE.d.ts.map → tab-list-CLqlPnX-.d.ts.map} +1 -1
  43. package/dist/tabs.d.ts +1 -1
  44. package/docs-user/README.md +1 -0
  45. package/docs-user/select-horiz.md +114 -0
  46. package/package.json +1 -1
  47. package/dist/crumb-navigation-DFqTzElw.js.map +0 -1
  48. package/dist/icon-DpA9x2Ve.d.ts.map +0 -1
  49. package/dist/menu-item-BYRvfyXK.js.map +0 -1
  50. package/dist/menu-item-DSyf9f_L.d.ts.map +0 -1
package/dist/ac-text.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import "./icon-DpA9x2Ve.js";
1
+ import "./icon-BUwP1CZ1.js";
2
2
  import { LitElement, PropertyValues } from "lit";
3
3
  //#region src/ac-text/ac-text.d.ts
4
4
  type AcTextItem = {
@@ -1,2 +1,2 @@
1
- import { a as ColourPickerInputEvent, i as ColourPickerEventDetail, n as ColourPicker, o as OklchValue, r as ColourPickerChangeEvent, t as ColourPickerPopup } from "./index-D_ftz_IT.js";
1
+ import { a as ColourPickerInputEvent, i as ColourPickerEventDetail, n as ColourPicker, o as OklchValue, r as ColourPickerChangeEvent, t as ColourPickerPopup } from "./index-BKAlRgbq.js";
2
2
  export { ColourPicker, type ColourPickerChangeEvent, type ColourPickerEventDetail, type ColourPickerInputEvent, ColourPickerPopup, type OklchValue };
@@ -2,7 +2,7 @@ import { n as tickledStyles, r as TickledController, t as tickledItemStyles } fr
2
2
  import { t as themeFallbacks } from "./fallbacks-DPgPEqo8.js";
3
3
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
4
4
  import "./interaction-D6efrBLo.js";
5
- import "./menu-item-BYRvfyXK.js";
5
+ import "./menu-item-CrmUwIoJ.js";
6
6
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
7
7
  import "./narrowed-text.js";
8
8
  import { LitElement, css, html, nothing, unsafeCSS } from "lit";
@@ -127,7 +127,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
127
127
  const r = this.root;
128
128
  const sel = this.selectedNode;
129
129
  if (!r || !sel) break;
130
- const totalItems = (this.#findPath(r, sel) ?? [r]).length + (this.#hasChildOptions() ? 1 : 0);
130
+ const totalItems = this.#getTickledItems().length;
131
131
  const currentTickled = this.tickled.tickledId ?? -1;
132
132
  if (e.key === `ArrowLeft`) {
133
133
  if (currentTickled > 0) this.tickled.handleKeyboardNavigation(`previous`);
@@ -140,13 +140,13 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
140
140
  const r = this.root;
141
141
  const sel = this.selectedNode;
142
142
  if (!r || !sel) return;
143
- const totalItems = (this.#findPath(r, sel) ?? [r]).length + (this.#hasChildOptions() ? 1 : 0);
143
+ const totalItems = this.#getTickledItems().length;
144
144
  const currentTickled = this.tickled.tickledId ?? -1;
145
145
  switch (e.key) {
146
146
  case `ArrowRight`:
147
147
  e.preventDefault();
148
148
  if (currentTickled < totalItems - 1) this.tickled.handleKeyboardNavigation(`next`);
149
- else if (currentTickled === totalItems - 1) this.#shiftFocusToNarrowedText();
149
+ else if (currentTickled === totalItems - 1 && this.#canFocusSuggestions()) this.#shiftFocusToNarrowedText();
150
150
  break;
151
151
  case `ArrowLeft`:
152
152
  e.preventDefault();
@@ -166,8 +166,9 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
166
166
  }
167
167
  break;
168
168
  case `Enter`:
169
+ case ` `:
169
170
  e.preventDefault();
170
- this.#handleEnter();
171
+ this.#activateTickled();
171
172
  break;
172
173
  case `Escape`:
173
174
  e.preventDefault();
@@ -175,16 +176,12 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
175
176
  this.tickled.clearTickled();
176
177
  this.blur();
177
178
  break;
178
- case `Tab`: if (e.shiftKey) {
179
- e.preventDefault();
180
- this.#shiftFocusToPath();
181
- } else if (currentTickled === totalItems - 1) {
182
- e.preventDefault();
183
- this._menuOpen = false;
184
- this._focusOnNarrowedText = true;
185
- const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);
186
- if (narrowedText) narrowedText.focus();
187
- }
179
+ case `Tab`:
180
+ if (e.shiftKey) break;
181
+ if (currentTickled === totalItems - 1 && this.#canFocusSuggestions()) {
182
+ e.preventDefault();
183
+ this.#shiftFocusToNarrowedText();
184
+ }
188
185
  }
189
186
  };
190
187
  this.#onNarrowedTextBlur = () => {
@@ -236,7 +233,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
236
233
  enabled: true
237
234
  });
238
235
  });
239
- if (this.#hasChildOptions()) items.push({
236
+ if (this.#canFocusSuggestions()) items.push({
240
237
  id: pathNodes.length,
241
238
  enabled: true
242
239
  });
@@ -272,8 +269,8 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
272
269
  if (!r || !sel) return;
273
270
  const pathNodes = this.#findPath(r, sel) ?? [r];
274
271
  let el = null;
275
- if (index < pathNodes.length) el = this.shadowRoot?.querySelectorAll(`.crumb-segment`)[index] ?? null;
276
- else if (index === pathNodes.length) el = this.shadowRoot?.querySelector(`#child-options-trigger`) ?? null;
272
+ if (this.caretEmbedded && this.#canFocusSuggestions() && index === pathNodes.length) el = this.shadowRoot?.querySelector(`ixfx-narrowed-text`) ?? null;
273
+ else el = this.shadowRoot?.querySelectorAll(`.crumb-segment`)[index] ?? null;
277
274
  el?.scrollIntoView({
278
275
  inline: `nearest`,
279
276
  block: `nearest`,
@@ -286,6 +283,10 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
286
283
  const isPending = this.#pendingNode === s;
287
284
  return (s.children ?? []).length > 0 || isPending;
288
285
  }
286
+ /** True when the suggestions (narrowed-text) sub-part is renderable and focusable. */
287
+ #canFocusSuggestions() {
288
+ return this.showSuggestions && this.#hasChildOptions();
289
+ }
289
290
  #onFocus;
290
291
  #onBlur;
291
292
  #getHostContainer() {
@@ -298,26 +299,18 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
298
299
  const r = this.root;
299
300
  const sel = this.selectedNode;
300
301
  if (!r || !sel) return;
301
- if (currentTickled < (this.#findPath(r, sel) ?? [r]).length - 1) {
302
- const trigger = (this.shadowRoot?.querySelectorAll(`.crumb-segment`))?.[currentTickled]?.querySelector(`.caret ixfx-menu-trigger`);
303
- if (trigger) {
304
- this.#menuOpenedByKeyboard = true;
305
- this.#currentOpenTrigger = trigger;
306
- document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });
307
- trigger.openMenu();
308
- this.#propagateInputModeToMenu();
309
- return;
310
- }
302
+ const pathNodes = this.#findPath(r, sel) ?? [r];
303
+ if (this.caretEmbedded && this.#canFocusSuggestions() && currentTickled === pathNodes.length) {
304
+ this.#shiftFocusToNarrowedText();
305
+ return;
311
306
  }
312
- if (this.#hasChildOptions()) {
313
- const trigger = this.shadowRoot?.querySelector(`#child-options-trigger`);
314
- if (trigger) {
315
- this.#menuOpenedByKeyboard = true;
316
- this.#currentOpenTrigger = trigger;
317
- document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });
318
- trigger.openMenu();
319
- this.#propagateInputModeToMenu();
320
- }
307
+ const trigger = (this.shadowRoot?.querySelectorAll(`.crumb-segment`))?.[currentTickled]?.querySelector(`.caret ixfx-menu-trigger`);
308
+ if (trigger) {
309
+ this.#menuOpenedByKeyboard = true;
310
+ this.#currentOpenTrigger = trigger;
311
+ document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });
312
+ trigger.openMenu();
313
+ this.#propagateInputModeToMenu();
321
314
  }
322
315
  }
323
316
  #propagateInputModeToMenu() {
@@ -330,40 +323,24 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
330
323
  #onMenuTriggerClose;
331
324
  #onMenuKeyNav;
332
325
  #onKeyDown;
333
- #handleEnter() {
326
+ /** Activates the currently tickled item, as if it had been clicked. */
327
+ #activateTickled() {
328
+ const currentTickled = this.tickled.tickledId;
329
+ if (currentTickled === void 0) return;
334
330
  const r = this.root;
335
331
  const sel = this.selectedNode;
336
332
  if (!r || !sel) return;
337
333
  const pathNodes = this.#findPath(r, sel) ?? [r];
338
- const hasChildOptions = this.#hasChildOptions();
339
- const currentTickled = this.tickled.tickledId ?? -1;
340
- if (currentTickled < pathNodes.length) {
341
- const node = pathNodes[currentTickled];
342
- this.#setSelected(node);
343
- this._menuOpen = false;
344
- this.dispatchEvent(new CustomEvent(`item-click`, {
345
- detail: {
346
- node,
347
- depth: currentTickled
348
- },
349
- bubbles: true,
350
- composed: true
351
- }));
352
- } else if (hasChildOptions && currentTickled === pathNodes.length) {
353
- this._menuOpen = true;
354
- this.#menuOpenedByKeyboard = true;
355
- const trigger = this.shadowRoot?.querySelector(`#child-options-trigger`);
356
- if (trigger) {
357
- this.#currentOpenTrigger = trigger;
358
- document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });
359
- trigger.openMenu();
360
- this.#propagateInputModeToMenu();
361
- }
334
+ if (this.caretEmbedded && this.#canFocusSuggestions() && currentTickled === pathNodes.length) {
335
+ this.#shiftFocusToNarrowedText();
336
+ return;
362
337
  }
338
+ (this.shadowRoot?.querySelector(`.crumb-segment[data-segment-id="${currentTickled}"]`))?.click();
363
339
  }
364
340
  #shiftFocusToNarrowedText() {
365
341
  const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);
366
342
  if (narrowedText) {
343
+ this._menuOpen = false;
367
344
  this._focusOnNarrowedText = true;
368
345
  narrowedText.focus();
369
346
  }
@@ -498,7 +475,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
498
475
  const previousSet = previous ? /* @__PURE__ */ new Set([previous]) : /* @__PURE__ */ new Set();
499
476
  this.selectedNode = node;
500
477
  this._selectedNodes = /* @__PURE__ */ new Set([node]);
501
- if (this.leadingCaret && this.root) {
478
+ if (this.root) {
502
479
  const path = this.#findPath(this.root, node);
503
480
  if (path) {
504
481
  const depth = this.hideRoot && path.length > 1 ? path.length - 2 : path.length - 1;
@@ -519,7 +496,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
519
496
  #onLabelClick(node, depth) {
520
497
  this._openIdx = -1;
521
498
  this.#setSelected(node);
522
- if (this.leadingCaret) this.#scrollSegmentIntoView(depth);
499
+ this.#scrollSegmentIntoView(depth);
523
500
  this.dispatchEvent(new CustomEvent(`item-click`, {
524
501
  detail: {
525
502
  node,
@@ -710,7 +687,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
710
687
  ${showLeadingCaret ? html`
711
688
  <span class="caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}">
712
689
  ${isPending ? html`<span class="loading-spinner"></span>` : html`
713
- <ixfx-menu-trigger mode="trigger" label="›" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
690
+ <ixfx-menu-trigger mode="trigger" label="›" .tabStop=${false} @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
714
691
  <ixfx-menu-container slot="menu">
715
692
  ${siblingMenuItems}
716
693
  </ixfx-menu-container>
@@ -722,7 +699,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
722
699
  ${showTrailingCaret ? html`
723
700
  <span class="caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}">
724
701
  ${isPending ? html`<span class="loading-spinner"></span>` : html`
725
- <ixfx-menu-trigger mode="trigger" label="›" placement="right-start" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
702
+ <ixfx-menu-trigger mode="trigger" label="›" .tabStop=${false} placement="right-start" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
726
703
  <ixfx-menu-container slot="menu">
727
704
  ${childMenuItems}
728
705
  </ixfx-menu-container>
@@ -744,7 +721,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
744
721
  >
745
722
  <span class="caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}">
746
723
  ${isPending ? html`<span class="loading-spinner"></span>` : html`
747
- <ixfx-menu-trigger mode="trigger" label="›" placement="right-start" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
724
+ <ixfx-menu-trigger mode="trigger" label="›" .tabStop=${false} placement="right-start" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
748
725
  <ixfx-menu-container slot="menu">
749
726
  ${siblingMenuItems}
750
727
  </ixfx-menu-container>
@@ -779,7 +756,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
779
756
  >
780
757
  <span class="caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}">
781
758
  ${isPending ? html`<span class="loading-spinner"></span>` : html`
782
- <ixfx-menu-trigger mode="trigger" label="›" @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
759
+ <ixfx-menu-trigger mode="trigger" label="›" .tabStop=${false} @menu-command=${(e) => this.#onSegmentMenuCommand(e, node, i)}>
783
760
  <ixfx-menu-container slot="menu">
784
761
  ${childMenuItems}
785
762
  </ixfx-menu-container>
@@ -887,7 +864,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
887
864
  --crumb-item-text-tickled: var(--item-text-tickled);
888
865
  --crumb-item-border: var(--item-border);
889
866
  --crumb-item-border-tickled: var(--item-border-tickled);
890
- --crumb-item-padding: var(--item-padding, var(--space-xs));
867
+ --crumb-item-padding: var(--space-s, 2px);
891
868
  --crumb-item-border-radius: var(--item-border-radius);
892
869
  --crumb-item-gap: var(--item-gap, var(--space-xs));
893
870
  --crumb-separator: var(--surface-muted-text);
@@ -896,11 +873,10 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
896
873
  width: 100%;
897
874
  }
898
875
 
899
- :host(.focused) {
900
- outline: none;
901
- }
902
-
903
- :host(:focus-within) .host-container {
876
+ /* Outline goes on :host, not .host-container: .host-container carries the
877
+ * scroll-fade mask-image, and CSS masks clip everything painted outside
878
+ * the masked box - including an outline, which paints outside the border edge. */
879
+ :host(:focus-within) {
904
880
  outline: 2px solid var(--accent);
905
881
  outline-offset: 2px;
906
882
  }
@@ -934,6 +910,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
934
910
  background: var(--crumb-item-bg);
935
911
  border: var(--crumb-item-border);
936
912
  border-radius: var(--crumb-item-border-radius);
913
+ padding:0;
937
914
  }
938
915
 
939
916
  .crumb-segment.leading-caret {
@@ -962,6 +939,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
962
939
  }
963
940
 
964
941
  .label {
942
+ padding: var(--crumb-item-padding);
965
943
  cursor: pointer;
966
944
  white-space: nowrap;
967
945
  color: inherit;
@@ -982,15 +960,12 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
982
960
  }
983
961
 
984
962
  .crumb-segment ixfx-menu-trigger {
985
- --ixfx-button-padding: var(--space-xs) 8px;
963
+ --ixfx-button-padding: var(--space-s, 2px);
986
964
  }
987
965
 
988
966
  .caret {
989
967
  position: relative;
990
968
  cursor: pointer;
991
- padding: var(--crumb-item-padding);
992
- margin-left: var(--crumb-item-gap);
993
- margin-right: var(--crumb-item-gap);
994
969
  color: var(--crumb-separator);
995
970
  display: inline-flex;
996
971
  align-items: center;
@@ -1017,7 +992,6 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
1017
992
  background: none;
1018
993
  border: none;
1019
994
  color: inherit;
1020
- padding: 0;
1021
995
  cursor: pointer;
1022
996
  font-size: inherit;
1023
997
  line-height: 1;
@@ -1146,4 +1120,4 @@ CrumbNavigationElement = __decorate([safeCustomElement(`ixfx-crumb-navigation`)]
1146
1120
  //#endregion
1147
1121
  export { scrollFadeStyles as n, CrumbNavigationElement as t };
1148
1122
 
1149
- //# sourceMappingURL=crumb-navigation-DFqTzElw.js.map
1123
+ //# sourceMappingURL=crumb-navigation-DTwJ8468.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crumb-navigation-DTwJ8468.js","names":["#getTickledItems","#onTickled","#getHostContainer","#onMenuKeyNav","#currentOpenTrigger","#menuOpenedByKeyboard","#canFocusSuggestions","#shiftFocusToNarrowedText","#handleOpenCaretMenu","#activateTickled","#shiftFocusToPath","#isWheelScrolling","#wheelScrollTimeout","#findPath","#scrollTickledIntoView","#pendingNode","#hasChildOptions","#propagateInputModeToMenu","#setSelected","#modelUnsubscribe","#runLayoutUpdate","#onHostClick","#onWheel","#previousSelectionKey","#scrollToValue","#pendingController","#scrollSegmentIntoView","#abortPending","#invokeLoadChildren","#onChildClick","#currentLeadingSiblings","#findNodePath","#getSiblingMenuItems","#onLabelClick","#onSegmentMenuCommand","#onFocus","#onBlur","#onKeyDown","#onMenuTriggerClose","#renderChildOptions","#getChildOptionsWidth","#onNarrowedTextChange","#onNarrowedTextBlur","#onNarrowedTextShiftTab","customElement"],"sources":["../src/styles/scroll-fade.ts","../src/crumbs/crumb-navigation.ts"],"sourcesContent":["import { css, unsafeCSS } from 'lit';\n\nexport type ScrollFadeAxis = `x` | `y`;\n\n/**\n * Zero-JS scroll edge fade.\n *\n * A CSS alpha mask driven by a scroll-linked animation (`scroll-timeline`),\n * rather than a JS scroll/resize listener - so it can never go stale after\n * a resize (widening a scroller so content fully fits clears the fade\n * immediately, with no JS involved), and it fades the whole element\n * including its children, not just a background layer that an opaque\n * item background would hide.\n *\n * Apply the returned `.scroll-fade-x` / `.scroll-fade-y` class to\n * whichever element actually has `overflow` scrolling on that axis.\n *\n * CSS variables:\n * - `--scroll-fade-width` (default `30px`): how far the fade extends from each edge.\n *\n * ```ts\n * import { scrollFadeStyles } from '../styles/scroll-fade.js';\n *\n * static styles = [scrollFadeStyles(`x`), css`...`];\n * ```\n * ```html\n * <div class=\"scroll-fade-x\" style=\"overflow-x: scroll\">...</div>\n * ```\n */\nexport function scrollFadeStyles(axis: ScrollFadeAxis) {\n const className = `scroll-fade-${axis}`;\n const start = `--${className}-start`;\n const end = `--${className}-end`;\n const timeline = `--${className}-timeline`;\n const keyframesName = `${className}-fade`;\n const gradientDirection = axis === `x` ? `to right` : `to bottom`;\n\n return css`\n @property ${unsafeCSS(start)} {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n\n @property ${unsafeCSS(end)} {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n\n @keyframes ${unsafeCSS(keyframesName)} {\n 0% { ${unsafeCSS(start)}: 0px; }\n 10%, 100% { ${unsafeCSS(start)}: var(--scroll-fade-width, 30px); }\n 0%, 90% { ${unsafeCSS(end)}: var(--scroll-fade-width, 30px); }\n 100% { ${unsafeCSS(end)}: 0px; }\n }\n\n .${unsafeCSS(className)} {\n scroll-timeline: ${unsafeCSS(timeline)} ${unsafeCSS(axis)};\n animation: ${unsafeCSS(keyframesName)};\n animation-timeline: ${unsafeCSS(timeline)};\n mask-image: linear-gradient(${unsafeCSS(gradientDirection)},\n transparent,\n black var(${unsafeCSS(start)}, 0px) calc(100% - var(${unsafeCSS(end)}, 0px)),\n transparent\n );\n }\n `;\n}\n","/* eslint-disable ts/no-unsafe-declaration-merging */\nimport type { PropertyValues } from 'lit';\nimport type {\n TreeActivateEvent,\n TreeComponent,\n TreeComponentEventMap,\n TreeExpandEvent,\n TreeItemClickEvent,\n TreeSelectDetail,\n TreeSelectEvent,\n TreeTickleDetail,\n TreeTickleEvent,\n} from '../common/tree-component.js';\nimport type { TreeDataModel } from '../common/tree-data-model.js';\nimport type {\n TreeExclusivity,\n TreeFilterPredicate,\n TreeSelectionFilter,\n} from '../common/types.js';\nimport type { MenuTrigger } from '../menu/menu-trigger.js';\nimport type { LoadChildrenCallback, TreeNode } from '../tree/types.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { collectDataResult } from '../common/data-provider.js';\n\nimport { TickledController, tickledItemStyles, tickledStyles } from '../interaction/index.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { scrollFadeStyles } from '../styles/scroll-fade.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport '../menu/menu-trigger.js';\nimport '../menu/menu-container.js';\nimport '../menu/menu-item.js';\n\nimport '../narrowed-text/index.js';\n\n/** @deprecated Use TreeSelectDetail from src/common/tree-component.ts */\nexport type CrumbNavigationChangeDetail = {\n readonly selected: TreeNode;\n readonly previous: TreeNode | undefined;\n};\n\nexport type CrumbNavigationChangeEvent = CustomEvent<CrumbNavigationChangeDetail>;\n\nexport type CrumbNavigationItemClickDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationItemClickEvent = CustomEvent<CrumbNavigationItemClickDetail>;\n\nexport type CrumbNavigationExpandDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationExpandEvent = CustomEvent<CrumbNavigationExpandDetail>;\n\n/**\n * Breadcrumb navigation with lazy-loading support.\n *\n * Uses the same `TreeNode` / `TreeItem` data model as `ixfx-tree-list`,\n * so the two components can be swapped with minimal code changes.\n *\n * Events\n * - `navigate`: fired when user clicks a breadcrumb label. detail: `{ node: TreeNode }`\n * - `change`: fired when selected node changes. detail: `{ selected: TreeNode, previous: TreeNode | undefined }`\n * - `expand`: fired when user clicks a caret whose node has no children yet.\n * detail: `{ node: TreeNode, depth: number, signal: AbortSignal }`\n * Populate `node.children` then call `requestUpdate()` on the element.\n *\n * CSS variables\n * --crumb-item-bg: var(--item-bg, transparent); // item background\n * --crumb-item-bg-tickled: var(--item-bg-tickled); // item background on hover\n * --crumb-item-text-tickled: var(--item-text-tickled); // text color on hover\n * --crumb-item-border: var(--item-border); // item border\n * --crumb-item-border-tickled: var(--item-border-tickled); // border color on hover\n * --crumb-item-padding: var(--item-padding, var(--space-xs)); // item padding\n * --crumb-item-border-radius: var(--item-border-radius); // item border radius\n * --crumb-item-gap: var(--item-gap, var(--space-xs)); // gap between items\n * --crumb-separator: var(--surface-muted-text); // separator/caret color\n * --crumb-truncate-min-width: 5ch; // minimum width for truncatable segments\n */\n@customElement(`ixfx-crumb-navigation`)\nexport class CrumbNavigationElement extends LitElement implements TreeComponent {\n @property({ type: Object })\n root: TreeNode | undefined;\n\n @property({ attribute: false })\n model: TreeDataModel | undefined;\n\n @property({ type: Object })\n selectedNode: TreeNode | undefined;\n\n @state()\n private _selectedNodes = new Set<TreeNode>();\n\n get selectedNodes(): ReadonlySet<TreeNode> {\n return this._selectedNodes;\n }\n\n /** Callback to lazily load children for a node. When set, replaces event-based lazy loading. */\n @property({ attribute: false })\n loadChildren: LoadChildrenCallback | undefined;\n\n @property({ attribute: false })\n filterPredicate: TreeFilterPredicate | undefined;\n\n @property({ reflect: true, attribute: `exclusivity` })\n exclusivity: TreeExclusivity = `none`;\n\n @property({ reflect: true, attribute: `selection-filter` })\n selectionFilter: TreeSelectionFilter = `leaf`;\n\n @state()\n private _openIdx = -1;\n\n @state()\n private _isFocused = false;\n\n @state()\n private _menuOpen = false;\n\n @state()\n private _focusOnNarrowedText = false;\n\n @property({ reflect: true, attribute: `input-mode` })\n inputMode: string = ``;\n\n @property({ type: Boolean, reflect: true, attribute: `no-truncate` })\n noTruncate = false;\n\n @property({ type: Boolean, reflect: true, attribute: `show-suggestions` })\n showSuggestions = false;\n\n @property({ type: Boolean, reflect: true, attribute: `leading-caret` })\n leadingCaret = false;\n\n @property({ type: Boolean, reflect: true, attribute: `caret-embedded` })\n caretEmbedded = true;\n\n @property({ type: Boolean, reflect: true, attribute: `hide-root` })\n hideRoot = false;\n\n #pendingNode: TreeNode | undefined;\n #pendingController: AbortController | undefined;\n #modelUnsubscribe: (() => void) | undefined;\n\n #previousSelectionKey = ``;\n #menuOpenedByKeyboard = false;\n #currentOpenTrigger: MenuTrigger | null = null;\n\n private tickled = new TickledController<number>(this, {\n getItems: () => this.#getTickledItems(),\n onTickle: (index) => {\n if (index !== undefined) {\n this.#onTickled(index);\n }\n },\n });\n\n #getTickledItems() {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return [];\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const items: Array<{ id: number; enabled: boolean }> = [];\n\n if (this.caretEmbedded) {\n pathNodes.forEach((_node, i) => {\n items.push({ id: i, enabled: true });\n });\n if (this.#canFocusSuggestions()) {\n items.push({ id: pathNodes.length, enabled: true });\n }\n } else {\n let segmentId = 0;\n pathNodes.forEach((node, i) => {\n const isLast = i === pathNodes.length - 1;\n const hasChildren = node.item.isLeaf !== true && (node.children === undefined || node.children.length > 0);\n const showLeadingCaret = this.leadingCaret && (i > 0 || this.hideRoot) && hasChildren;\n const showTrailingCaret = (!this.leadingCaret && hasChildren) || (this.leadingCaret && isLast && hasChildren);\n\n if (showLeadingCaret) {\n items.push({ id: segmentId++, enabled: true });\n }\n items.push({ id: segmentId++, enabled: true });\n if (showTrailingCaret) {\n items.push({ id: segmentId++, enabled: true });\n }\n });\n }\n\n return items;\n }\n\n #onTickled(index: number) {\n if (this.tickled.inputMode === `keyboard`) {\n this.#scrollTickledIntoView(index);\n }\n }\n\n #scrollTickledIntoView(index: number): void {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n let el: HTMLElement | null = null;\n\n if (this.caretEmbedded && this.#canFocusSuggestions() && index === pathNodes.length) {\n el = this.shadowRoot?.querySelector<HTMLElement>(`ixfx-narrowed-text`) ?? null;\n } else {\n el = this.shadowRoot?.querySelectorAll<HTMLElement>(`.crumb-segment`)[index] ?? null;\n }\n\n el?.scrollIntoView({ inline: `nearest`, block: `nearest`, behavior: `smooth` });\n }\n\n #hasChildOptions(): boolean {\n const s = this.selectedNode;\n if (s === undefined)\n return false;\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n return children.length > 0 || isPending;\n }\n\n /** True when the suggestions (narrowed-text) sub-part is renderable and focusable. */\n #canFocusSuggestions(): boolean {\n return this.showSuggestions && this.#hasChildOptions();\n }\n\n #onFocus = (): void => {\n this._isFocused = true;\n };\n\n #onBlur = (): void => {\n this._isFocused = false;\n };\n\n #getHostContainer(): HTMLElement | null {\n return this.shadowRoot?.querySelector<HTMLElement>(`.host-container`) ?? null;\n }\n\n #onHostClick = (): void => {\n this.#getHostContainer()?.focus();\n };\n\n #handleOpenCaretMenu() {\n const currentTickled = this.tickled.tickledId;\n if (currentTickled === undefined)\n return;\n\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n\n // Virtual \"beyond last\" item (embedded mode only, when suggestions are available)\n if (this.caretEmbedded && this.#canFocusSuggestions() && currentTickled === pathNodes.length) {\n this.#shiftFocusToNarrowedText();\n return;\n }\n\n const segments = this.shadowRoot?.querySelectorAll<HTMLElement>(`.crumb-segment`);\n const trigger = segments?.[currentTickled]?.querySelector<MenuTrigger>(`.caret ixfx-menu-trigger`);\n if (trigger) {\n this.#menuOpenedByKeyboard = true;\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n }\n }\n\n #propagateInputModeToMenu(): void {\n const inputMode = this.tickled.inputMode;\n requestAnimationFrame(() => {\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (container) {\n container.setAttribute(`data-input-mode`, inputMode);\n }\n });\n }\n\n #onMenuTriggerClose = (): void => {\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n this.#menuOpenedByKeyboard = false;\n requestAnimationFrame(() => {\n this.#getHostContainer()?.focus();\n });\n };\n\n #onMenuKeyNav = (e: KeyboardEvent): void => {\n // Only handle ArrowLeft/ArrowRight - close menu and navigate to previous/next breadcrumb segment\n // ArrowDown/ArrowUp should pass through to let the menu handle them\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (!container || !this.#currentOpenTrigger?.isOpen)\n return;\n\n switch (e.key) {\n case `ArrowLeft`:\n case `ArrowRight`: {\n e.preventDefault();\n e.stopPropagation();\n this.#currentOpenTrigger.closeMenu();\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n break;\n const totalItems = this.#getTickledItems().length;\n const currentTickled = this.tickled.tickledId ?? -1;\n if (e.key === `ArrowLeft`) {\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n } else {\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n }\n }\n break;\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent): void => {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const totalItems = this.#getTickledItems().length;\n const currentTickled = this.tickled.tickledId ?? -1;\n\n switch (e.key) {\n case `ArrowRight`: {\n e.preventDefault();\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n } else if (currentTickled === totalItems - 1 && this.#canFocusSuggestions()) {\n this.#shiftFocusToNarrowedText();\n }\n break;\n }\n case `ArrowLeft`: {\n e.preventDefault();\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n break;\n }\n case `ArrowDown`:\n case `ArrowUp`: {\n if (this.tickled.tickledId !== undefined) {\n e.preventDefault();\n if (this.#currentOpenTrigger?.isOpen) {\n // Menu is already open - dispatch ArrowDown to the popover element for it to handle\n const container = this.#currentOpenTrigger.querySelector(`ixfx-menu-container`);\n const popover = container?.shadowRoot?.querySelector(`.popover`);\n if (popover) {\n popover.dispatchEvent(new KeyboardEvent(`keydown`, { key: e.key, bubbles: true }));\n }\n } else {\n this.#handleOpenCaretMenu();\n }\n }\n break;\n }\n case `Enter`:\n case ` `: {\n e.preventDefault();\n this.#activateTickled();\n break;\n }\n case `Escape`: {\n e.preventDefault();\n this._menuOpen = false;\n this.tickled.clearTickled();\n this.blur();\n break;\n }\n case `Tab`: {\n if (e.shiftKey) {\n // Let default Shift+Tab move focus backward, out of the component.\n break;\n }\n if (currentTickled === totalItems - 1 && this.#canFocusSuggestions()) {\n e.preventDefault();\n this.#shiftFocusToNarrowedText();\n }\n break;\n }\n }\n };\n\n /** Activates the currently tickled item, as if it had been clicked. */\n #activateTickled() {\n const currentTickled = this.tickled.tickledId;\n if (currentTickled === undefined)\n return;\n\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n\n // Virtual \"beyond last\" item (embedded mode only, when suggestions are available)\n if (this.caretEmbedded && this.#canFocusSuggestions() && currentTickled === pathNodes.length) {\n this.#shiftFocusToNarrowedText();\n return;\n }\n\n const segment = this.shadowRoot?.querySelector<HTMLElement>(`.crumb-segment[data-segment-id=\"${currentTickled}\"]`);\n segment?.click();\n }\n\n #shiftFocusToNarrowedText() {\n const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);\n if (narrowedText) {\n this._menuOpen = false;\n this._focusOnNarrowedText = true;\n narrowedText.focus();\n }\n }\n\n #shiftFocusToPath() {\n this._focusOnNarrowedText = false;\n const hostContainer = this.#getHostContainer();\n if (hostContainer) {\n hostContainer.focus();\n }\n }\n\n #onNarrowedTextBlur = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n #onNarrowedTextShiftTab = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n // --- TreeComponent methods ---\n\n select(node: TreeNode): void {\n this.#setSelected(node);\n }\n\n deselect(_node: TreeNode): void {\n // Crumb navigation is single-selection; deselect navigates to parent or root\n }\n\n clearSelection(): void {\n if (this.root)\n this.#setSelected(this.root);\n }\n\n /** Not implemented on crumb-navigation. */\n selectAll(): void {\n // no-op\n }\n\n /** Not implemented on crumb-navigation. */\n deselectAll(): void {\n // no-op\n }\n\n getNodes(): ReadonlyArray<{ node: TreeNode; depth: number }> {\n if (!this.root)\n return [];\n const result: Array<{ node: TreeNode; depth: number }> = [];\n const visit = (node: TreeNode, depth: number) => {\n result.push({ node, depth });\n if (node.children) {\n for (const child of node.children) visit(child, depth + 1);\n }\n };\n for (const child of this.root.children ?? []) visit(child, 0);\n return result;\n }\n\n // --- Lifecycle ---\n\n override updated(changedProps: PropertyValues): void {\n if (changedProps.has(`model`)) {\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n const model = this.model;\n if (model) {\n this.root = model.root;\n this.#modelUnsubscribe = model._subscribe((event) => {\n if (event.type === `root`) {\n this.root = event.root;\n this.requestUpdate();\n }\n });\n }\n }\n this.#runLayoutUpdate(changedProps);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener(`click`, this.#onHostClick);\n this.addEventListener(`wheel`, this.#onWheel, { passive: false });\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(`click`, this.#onHostClick);\n this.removeEventListener(`wheel`, this.#onWheel);\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n }\n\n override firstUpdated() {\n const hostContainer = this.#getHostContainer();\n if (hostContainer) {\n hostContainer.scrollLeft = hostContainer.scrollWidth - hostContainer.clientWidth;\n }\n }\n\n #isWheelScrolling = false;\n\n #onWheel = (e: Event) => {\n const wheelEvent = e as WheelEvent;\n if (wheelEvent.deltaX !== 0 || wheelEvent.deltaY !== 0) {\n e.preventDefault();\n if (!this.#isWheelScrolling) {\n this.#isWheelScrolling = true;\n this.tickled.clearTickled();\n }\n const hostContainer = this.#getHostContainer();\n if (hostContainer) {\n hostContainer.scrollLeft += wheelEvent.deltaX + wheelEvent.deltaY;\n }\n clearTimeout(this.#wheelScrollTimeout);\n this.#wheelScrollTimeout = setTimeout(() => {\n this.#isWheelScrolling = false;\n }, 150);\n }\n };\n\n #wheelScrollTimeout: ReturnType<typeof setTimeout> | undefined;\n\n #runLayoutUpdate(_changedProperties: PropertyValues): void {\n if (!this.shadowRoot)\n return;\n\n const hsiElement: HTMLElement | null = this.shadowRoot.querySelector(`.horiz-select-items`);\n if (!hsiElement)\n return;\n\n const ulElement: HTMLElement | null = hsiElement.querySelector(`ul`);\n if (!ulElement)\n return;\n\n const menuTrigger: HTMLElement | null = this.shadowRoot.querySelector(`ixfx-menu-trigger`);\n if (!menuTrigger)\n return;\n\n if (ulElement.getBoundingClientRect().width > hsiElement.getBoundingClientRect().width) {\n menuTrigger.style.display = `inline-flex`;\n } else {\n menuTrigger.style.display = `none`;\n }\n\n for (const li of ulElement.querySelectorAll(`li`)) {\n const key = li.getAttribute(`data-key`) ?? ``;\n if (key === this.#previousSelectionKey) {\n this.#scrollToValue(li);\n break;\n }\n }\n }\n\n #scrollToValue(li: HTMLLIElement) {\n let l = li.offsetLeft;\n\n const ul = li.parentElement;\n if (!ul)\n return;\n l -= ul.offsetLeft;\n\n const horizSelectItems = ul.parentElement;\n if (!horizSelectItems)\n return;\n horizSelectItems.scroll({ left: l, top: 0, behavior: `smooth` });\n\n const horizSelect = horizSelectItems.parentElement;\n if (!horizSelect)\n return;\n horizSelect.style.minWidth = `${li.getBoundingClientRect().width}px`;\n }\n\n #abortPending() {\n if (this.#pendingController) {\n this.#pendingController.abort();\n this.#pendingController = undefined;\n this.#pendingNode = undefined;\n }\n }\n\n #findPath(node: TreeNode, target: TreeNode, acc: TreeNode[] = []): TreeNode[] | undefined {\n const path = [...acc, node];\n if (node === target)\n return path;\n if (!node.children)\n return undefined;\n for (const child of node.children) {\n const result = this.#findPath(child, target, path);\n if (result)\n return result;\n }\n return undefined;\n }\n\n #scrollSegmentIntoView(depth: number) {\n if (!this.shadowRoot)\n return;\n const segments = this.shadowRoot.querySelectorAll(`.crumb-segment`);\n const segment = segments[depth];\n segment?.scrollIntoView({ block: `nearest`, inline: `start` });\n }\n\n #setSelected(node: TreeNode) {\n const previous = this.selectedNode;\n if (previous) {\n this.#previousSelectionKey = previous.item?.key ?? ``;\n } else {\n this.#previousSelectionKey = ``;\n }\n const previousSet: ReadonlySet<TreeNode> = previous ? new Set([previous]) : new Set();\n this.selectedNode = node;\n this._selectedNodes = new Set([node]);\n\n if (this.root) {\n const path = this.#findPath(this.root, node);\n if (path) {\n const depth = this.hideRoot && path.length > 1 ? path.length - 2 : path.length - 1;\n requestAnimationFrame(() => {\n this.#scrollSegmentIntoView(depth);\n });\n }\n }\n\n this.dispatchEvent(new CustomEvent<TreeSelectDetail>(`select`, {\n detail: { selected: new Set([node]), previous: previousSet },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onLabelClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.#scrollSegmentIntoView(depth);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onCaretClick(node: TreeNode, depth: number, e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (this._openIdx === depth) {\n this._openIdx = -1;\n return;\n }\n this._openIdx = depth;\n\n if (node.children === undefined && this.#pendingNode !== node) {\n this.#abortPending();\n this.#pendingNode = node;\n const controller = new AbortController();\n this.#pendingController = controller;\n\n if (this.loadChildren) {\n this.#invokeLoadChildren(node, depth, controller).catch(() => {});\n }\n }\n\n this.requestUpdate();\n }\n\n async #invokeLoadChildren(node: TreeNode, depth: number, controller: AbortController): Promise<void> {\n try {\n const children = [...await collectDataResult(\n this.loadChildren!({ node, depth }, controller.signal),\n controller.signal,\n )];\n if (controller.signal.aborted)\n return;\n node.children = children;\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.dispatchEvent(new CustomEvent<CrumbNavigationExpandDetail>(`expand`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n this.requestUpdate();\n } catch {\n if (controller.signal.aborted)\n return;\n node.children = [];\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.requestUpdate();\n }\n }\n\n #onSegmentMenuCommand(e: CustomEvent, node: TreeNode, depth: number) {\n const key = e.detail.command;\n if (this.leadingCaret) {\n const child = node.children?.find(c => c.item.key === key);\n if (child) {\n this.#onChildClick(child, depth + 1);\n return;\n }\n if (this.#currentLeadingSiblings) {\n const sibling = this.#currentLeadingSiblings.find(c => c.item.key === key);\n if (sibling) {\n this.#onChildClick(sibling, depth);\n }\n this.#currentLeadingSiblings = undefined;\n return;\n }\n }\n const child = node.children?.find(c => c.item.key === key);\n if (child) {\n this.#onChildClick(child, depth + 1);\n }\n }\n\n #currentLeadingSiblings: TreeNode[] | undefined = undefined;\n\n #getSiblingMenuItems(pathNodes: TreeNode[], index: number): unknown {\n if (index === 0) {\n if (!this.hideRoot || !this.root)\n return [];\n const siblings = [...(this.root.children ?? [])].sort((a, b) => (a.item.label ?? ``).localeCompare(b.item.label ?? ``));\n this.#currentLeadingSiblings = siblings;\n return siblings.map(sibling => html`\n <ixfx-menu-item\n label=\"${sibling.item.label}\"\n command=\"${sibling.item.key}\"\n icon-name=\"${sibling.item.icon ?? nothing}\"\n @click=${() => {\n this.#onChildClick(sibling, index);\n }}\n ></ixfx-menu-item>\n `);\n }\n const parent = pathNodes[index - 1];\n const siblings = [...(parent.children ?? [])].sort((a, b) => (a.item.label ?? ``).localeCompare(b.item.label ?? ``));\n this.#currentLeadingSiblings = siblings;\n return siblings.map(sibling => html`\n <ixfx-menu-item\n label=\"${sibling.item.label}\"\n command=\"${sibling.item.key}\"\n icon-name=\"${sibling.item.icon ?? nothing}\"\n @click=${() => {\n this.#onChildClick(sibling, index);\n }}\n ></ixfx-menu-item>\n `);\n }\n\n #onChildClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n /** Navigate to a node by key path. Returns false if any key is not found in already-loaded children. */\n navigateTo(keys: readonly string[]): boolean {\n if (!this.root?.children)\n return false;\n let current: TreeNode | undefined = this.root;\n for (const key of keys) {\n const found: TreeNode | undefined = current?.children?.find(n => n.item.key === key);\n if (!found)\n return false;\n current = found;\n }\n if (current && current !== this.root) {\n this.#setSelected(current);\n }\n return true;\n }\n\n /** Navigate to the first node matching the predicate. Returns false if not found. */\n navigateToNode(predicate: (node: TreeNode) => boolean): boolean {\n if (!this.root)\n return false;\n const keyPath = this.#findNodePath(this.root.children ?? [], predicate);\n if (!keyPath)\n return false;\n return this.navigateTo(keyPath);\n }\n\n #findNodePath(\n nodes: TreeNode[],\n predicate: (node: TreeNode) => boolean,\n prefix: string[] = [],\n ): string[] | undefined {\n for (const node of nodes) {\n const path = [...prefix, node.item.key];\n if (predicate(node))\n return path;\n if (node.children?.length) {\n const result = this.#findNodePath(node.children, predicate, path);\n if (result)\n return result;\n }\n }\n return undefined;\n }\n\n #onMenuCommand(e: CustomEvent) {\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const key = e.detail.command;\n const child = node.children.find(c => c.item.key === key);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n render() {\n const r = this.root;\n const sel = this.selectedNode;\n\n if (!r || !sel) {\n return html``;\n }\n\n this.inputMode = this.tickled.inputMode;\n\n let pathNodes = this.#findPath(r, sel) ?? [r];\n if (this.hideRoot && pathNodes.length > 1) {\n pathNodes = pathNodes.slice(1);\n }\n const _hasChildOptions = this.#hasChildOptions();\n\n const parts: Array<ReturnType<typeof html>> = [];\n let segmentId = 0;\n\n pathNodes.forEach((node, i) => {\n const isLast = i === pathNodes.length - 1;\n const isPending = this.#pendingNode === node;\n const isOpen = this._openIdx === i;\n const hasChildren = node.item.isLeaf !== true && (node.children === undefined || node.children.length > 0);\n const isTickled = this.tickled.isTickled(i);\n\n const showLeadingCaret = this.leadingCaret && (i > 0 || this.hideRoot) && hasChildren;\n const showTrailingCaret = (!this.leadingCaret && hasChildren) || (this.leadingCaret && isLast && hasChildren);\n\n const siblingMenuItems = showLeadingCaret ? this.#getSiblingMenuItems(pathNodes, i) : [];\n const childMenuItems = (node.children ?? []).map(c => html`\n <ixfx-menu-item\n label=\"${c.item.label}\"\n command=\"${c.item.key}\"\n icon-name=\"${c.item.icon ?? nothing}\"\n ></ixfx-menu-item>\n `);\n\n if (this.caretEmbedded) {\n const canTruncate = !this.noTruncate && !isLast && !isTickled;\n\n parts.push(html`\n <div class=\"item crumb-segment ${isTickled ? `tickled` : ``} ${canTruncate ? `truncatable` : ``} ${this.leadingCaret ? `leading-caret` : ``} ${isLast ? `last-label` : ``}\" data-segment-id=\"${i}\" data-path-index=\"${i}\"\n @click=${(e: MouseEvent) => {\n if ((e.target as HTMLElement).closest(`.caret`))\n return; this.#onLabelClick(node, i);\n }}\n >\n ${showLeadingCaret\n ? html`\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" .tabStop=${false} @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${siblingMenuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n `\n : nothing\n }\n <span class=\"label\">${node.item.label}</span>\n ${showTrailingCaret\n ? html`\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" .tabStop=${false} placement=\"right-start\" @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${childMenuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n `\n : nothing\n }\n </div>\n `);\n } else {\n const leadingCaretTickled = showLeadingCaret ? this.tickled.isTickled(segmentId) : false;\n if (showLeadingCaret) {\n parts.push(html`\n <div class=\"item crumb-segment ${leadingCaretTickled ? `tickled` : ``}\" data-segment-id=\"${segmentId}\" data-path-index=\"${i}\"\n @click=${(e: MouseEvent) => {\n const trigger = (e.target as HTMLElement).closest(`.crumb-segment`)?.querySelector(`ixfx-menu-trigger`);\n if (trigger)\n trigger.openMenu();\n }}\n >\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" .tabStop=${false} placement=\"right-start\" @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${siblingMenuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n </div>\n `);\n segmentId++;\n }\n const labelTickled = this.tickled.isTickled(segmentId);\n const canTruncate = !this.noTruncate && !isLast && !labelTickled;\n parts.push(html`\n <div class=\"item crumb-segment ${labelTickled ? `tickled` : ``} ${canTruncate ? `truncatable` : ``} ${isLast ? `last-label` : ``}\" data-segment-id=\"${segmentId}\" data-path-index=\"${i}\"\n @click=${(e: MouseEvent) => {\n if ((e.target as HTMLElement).closest(`.caret`))\n return; this.#onLabelClick(node, i);\n }}\n >\n <span class=\"label\">${node.item.label}</span>\n </div>\n `);\n segmentId++;\n if (showTrailingCaret) {\n const trailingCaretTickled = this.tickled.isTickled(segmentId);\n parts.push(html`\n <div class=\"item crumb-segment ${trailingCaretTickled ? `tickled` : ``}\" data-segment-id=\"${segmentId}\" data-path-index=\"${i}\"\n @click=${(e: MouseEvent) => {\n const trigger = (e.target as HTMLElement).closest(`.crumb-segment`)?.querySelector(`ixfx-menu-trigger`);\n if (trigger)\n trigger.openMenu();\n }}\n >\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" .tabStop=${false} @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${childMenuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n </div>\n `);\n segmentId++;\n }\n }\n });\n\n return html`\n <div\n class=\"host-container scroll-fade-x\"\n tabindex=\"0\"\n @focus=${this.#onFocus}\n @blur=${this.#onBlur}\n @keydown=${this.#onKeyDown}\n @click=${this.#onHostClick}\n @menu-trigger-close=${this.#onMenuTriggerClose}\n @mouseout=${(e: MouseEvent) => this.tickled.handlePointerLeave(e as PointerEvent)}\n >\n <div class=\"parts\"\n @mouseover=${(e: MouseEvent) => {\n if (this.#isWheelScrolling)\n return;\n const target = e.target;\n if (!(target instanceof HTMLElement))\n return;\n const segment = target.closest(`.crumb-segment`) as HTMLElement | null;\n if (!segment)\n return;\n const segmentId = parseInt(segment.dataset.segmentId ?? ``, 10);\n if (Number.isNaN(segmentId))\n return;\n const pathIndex = parseInt(segment.dataset.pathIndex ?? ``, 10);\n const node = pathNodes[pathIndex];\n if (!node)\n return;\n this.tickled.handlePointerEnter(segmentId);\n this.dispatchEvent(new CustomEvent<TreeTickleDetail>(`tickle`, { detail: { node, depth: pathIndex }, bubbles: true, composed: true }));\n }}\n >${parts}<div class=\"trailing\"></div></div>\n ${this.showSuggestions ? this.#renderChildOptions() : nothing}\n </div>\n `;\n }\n\n #renderChildOptions() {\n const s = this.selectedNode;\n if (s === undefined) {\n return nothing;\n }\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n if (children.length === 0 && !isPending) {\n return nothing;\n }\n\n if (isPending) {\n return html`\n <div class=\"horiz-select\">\n <div class=\"horiz-select-items\">\n <span class=\"loading-spinner\"></span>\n </div>\n </div>\n `;\n }\n\n return html`\n <ixfx-narrowed-text\n class=\"horiz-select\"\n selection-mode=\"single\"\n orientation=\"horizontal\"\n nowrap\n width=${this.#getChildOptionsWidth()}\n @change=${this.#onNarrowedTextChange}\n @narrowed-text-blur=${this.#onNarrowedTextBlur}\n @narrowed-text-shift-tab=${this.#onNarrowedTextShiftTab}\n >\n ${children.map(c => html`\n <span data-value=\"${c.item.key}\" data-label=\"${c.item.label}\"></span>\n `)}\n </ixfx-narrowed-text>\n `;\n }\n\n #onNarrowedTextChange(e: CustomEvent) {\n e.stopPropagation();\n const detail = e.detail as { item: { value: string } };\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const child = node.children.find(c => c.item.key === detail.item.value);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n #getChildOptionsWidth(): string {\n return `var(--child-options-width, 50ch)`;\n }\n\n static styles = [themeFallbacks, tickledStyles, tickledItemStyles, scrollFadeStyles(`x`), css`\n :host {\n --crumb-item-bg: var(--item-bg, transparent);\n --crumb-item-bg-tickled: var(--item-bg-tickled);\n --crumb-item-text-tickled: var(--item-text-tickled);\n --crumb-item-border: var(--item-border);\n --crumb-item-border-tickled: var(--item-border-tickled);\n --crumb-item-padding: var(--space-s, 2px);\n --crumb-item-border-radius: var(--item-border-radius);\n --crumb-item-gap: var(--item-gap, var(--space-xs));\n --crumb-separator: var(--surface-muted-text);\n --crumb-truncate-min-width: 10ch;\n display: flex;\n width: 100%;\n }\n\n /* Outline goes on :host, not .host-container: .host-container carries the\n * scroll-fade mask-image, and CSS masks clip everything painted outside\n * the masked box - including an outline, which paints outside the border edge. */\n :host(:focus-within) {\n outline: 2px solid var(--accent);\n outline-offset: 2px;\n }\n\n /* Edge fade (shows/hides based on scroll position) comes from the\n * shared .scroll-fade-x class - see ../styles/scroll-fade.ts */\n .host-container {\n display: flex;\n width: 100%;\n outline: none;\n overflow: scroll;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n\n .parts {\n display: flex;\n gap: var(--space-s);\n }\n\n .trailing {\n flex: 1;\n min-width: 1em;\n cursor: pointer;\n }\n\n .crumb-segment {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n background: var(--crumb-item-bg);\n border: var(--crumb-item-border);\n border-radius: var(--crumb-item-border-radius);\n padding:0;\n }\n\n .crumb-segment.leading-caret {\n flex-direction: row;\n }\n\n .crumb-segment.tickled {\n background: var(--crumb-item-bg-tickled);\n border-color: var(--crumb-item-border-tickled);\n color: var(--crumb-item-text-tickled);\n flex-shrink: 0;\n min-width: auto;\n }\n\n .crumb-segment.truncatable {\n flex-shrink: 1;\n min-width: min(var(--crumb-truncate-min-width), auto);\n overflow: hidden;\n }\n\n .crumb-segment.truncatable .label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n }\n\n .label {\n padding: var(--crumb-item-padding);\n cursor: pointer;\n white-space: nowrap;\n color: inherit;\n }\n\n .crumb-segment.last-label .label {\n color: var(--crumb-last-label-color, inherit);\n font-style: var(--crumb-last-label-font-style, inherit);\n font-weight: var(--crumb-last-label-font-weight, inherit);\n text-decoration: var(--crumb-last-label-text-decoration, inherit);\n text-underline-offset: var(--crumb-last-label-text-underline-offset, auto);\n }\n\n .crumb-segment.tickled .label {\n color: var(--crumb-item-text-tickled);\n overflow: visible;\n text-overflow: clip;\n }\n\n .crumb-segment ixfx-menu-trigger {\n --ixfx-button-padding: var(--space-s, 2px);\n }\n\n .caret {\n position: relative;\n cursor: pointer;\n color: var(--crumb-separator);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease-in-out;\n }\n\n .caret.open {\n background: color-mix(in srgb, var(--surface-5) 40%, transparent);\n }\n\n .caret.pending {\n display: inline-flex;\n }\n\n .caret > ixfx-menu-trigger {\n display: inline-flex;\n margin: 0;\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .caret > ixfx-menu-trigger::part(base) {\n background: none;\n border: none;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .caret > ixfx-menu-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator {\n margin-left: var(--crumb-item-gap);\n margin-right: var(--crumb-item-gap);\n color: var(--crumb-separator);\n }\n\n .separator-trigger {\n display: inline-flex;\n margin-left: var(--crumb-item-gap);\n margin-right: var(--crumb-item-gap);\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .separator-trigger::part(base) {\n background: none;\n border: none;\n color: var(--crumb-separator);\n padding: 0;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .separator-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator-trigger.tickled::part(base) {\n }\n\n ixfx-menu-trigger {\n display: none;\n }\n\n .horiz-select > ixfx-menu-trigger {\n display: inline-flex;\n }\n\n .horiz-select {\n display: flex;\n min-width: 5ch;\n }\n\n .loading-spinner {\n display: inline-block;\n width: 12px;\n height: 12px;\n border: 2px solid var(--surface-5);\n border-top-color: var(--accent);\n border-radius: 50%;\n animation: crumb-spin 0.7s linear infinite;\n }\n\n @keyframes crumb-spin {\n to { transform: rotate(360deg); }\n }\n\n ::slotted(*), option {\n user-select: none;\n scroll-snap-align: start;\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-navigation\": CrumbNavigationElement;\n }\n}\n\nexport interface CrumbNavigationElementEventMap extends TreeComponentEventMap {\n 'item-click': TreeItemClickEvent;\n 'expand': TreeExpandEvent;\n 'select': TreeSelectEvent;\n 'tickle': TreeTickleEvent;\n 'activate': TreeActivateEvent;\n}\n\nexport interface CrumbNavigationElement {\n addEventListener: (<K extends keyof CrumbNavigationElementEventMap>(\n type: K,\n listener: (this: CrumbNavigationElement, event: CrumbNavigationElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":"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"}
package/dist/crumbs.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-DO3gt5vg.js";
2
2
  import { a as TreeComponent, c as TreeExpandEvent, g as TreeDataModel, h as TreeTickleEvent, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSelectEvent, u as TreeItemClickEvent } from "./tree-component-DQ9vzdy5.js";
3
- import "./menu-item-DSyf9f_L.js";
3
+ import "./menu-item-BG5w7fi4.js";
4
4
  import "./narrowed-text.js";
5
5
  import { LitElement, PropertyValues } from "lit";
6
6
  //#region src/crumbs/crumb-navigation.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"crumbs.d.ts","names":[],"sources":["../src/crumbs/crumb-navigation.ts"],"mappings":";;;;;;;KAoCY;WACD,UAAU;WACV,UAAU;;KAGT,6BAA6B,YAAY;KAEzC;EAAmC,MAAM;EAAU;;KACnD,gCAAgC,YAAY;KAE5C;EAAgC,MAAM;EAAU;;KAChD,6BAA6B,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;cA4BxC,+BAA+B,sBAAsB;;EAEhE,MAAM;EAGN,OAAO;EAGP,cAAc;UAGN;MAEJ,iBAAiB,YAAY;;EAMjC,cAAc;EAGd,iBAAiB;EAGjB,aAAa;EAGb,iBAAiB;UAGT;UAGA;UAGA;UAGA;EAGR;EAGA;EAGA;EAGA;EAGA;EAGA;UAUQ;EAmUR,OAAO,MAAM;EAIb,SAAS,OAAO;EAIhB;;EAMA;;EAKA;EAIA,YAAY;IAAgB,MAAM;IAAU;;EAgBnC,QAAQ,cAAc;EAkBtB;EAMA;EAUA;;EA8QT,WAAW;;EAiBX,eAAe,YAAY,MAAM;EAwCjC,wBAAM;SA0PC,sBAAM;;QAsNP;YACI;IACR,yBAAyB;;;UAIZ,uCAAuC;EACtD,cAAc;EACd,UAAU;EACV,UAAU;EACV,UAAU;EACV,YAAY;;UAGG;EACf,oBAAoB,gBAAgB,gCAClC,MAAM,GACN,WAAW,MAAM,wBAAwB,OAAO,+BAA+B,aAC/E,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
1
+ {"version":3,"file":"crumbs.d.ts","names":[],"sources":["../src/crumbs/crumb-navigation.ts"],"mappings":";;;;;;;KAoCY;WACD,UAAU;WACV,UAAU;;KAGT,6BAA6B,YAAY;KAEzC;EAAmC,MAAM;EAAU;;KACnD,gCAAgC,YAAY;KAE5C;EAAgC,MAAM;EAAU;;KAChD,6BAA6B,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;cA4BxC,+BAA+B,sBAAsB;;EAEhE,MAAM;EAGN,OAAO;EAGP,cAAc;UAGN;MAEJ,iBAAiB,YAAY;;EAMjC,cAAc;EAGd,iBAAiB;EAGjB,aAAa;EAGb,iBAAiB;UAGT;UAGA;UAGA;UAGA;EAGR;EAGA;EAGA;EAGA;EAGA;EAGA;UAUQ;EAiTR,OAAO,MAAM;EAIb,SAAS,OAAO;EAIhB;;EAMA;;EAKA;EAIA,YAAY;IAAgB,MAAM;IAAU;;EAgBnC,QAAQ,cAAc;EAkBtB;EAMA;EAUA;;EA4QT,WAAW;;EAiBX,eAAe,YAAY,MAAM;EAwCjC,wBAAM;SA0PC,sBAAM;;QAmNP;YACI;IACR,yBAAyB;;;UAIZ,uCAAuC;EACtD,cAAc;EACd,UAAU;EACV,UAAU;EACV,UAAU;EACV,YAAY;;UAGG;EACf,oBAAoB,gBAAgB,gCAClC,MAAM,GACN,WAAW,MAAM,wBAAwB,OAAO,+BAA+B,aAC/E,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
package/dist/crumbs.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as CrumbNavigationElement } from "./crumb-navigation-DFqTzElw.js";
1
+ import { t as CrumbNavigationElement } from "./crumb-navigation-DTwJ8468.js";
2
2
  import "./narrowed-text.js";
3
3
  export { CrumbNavigationElement };
@@ -20,7 +20,7 @@ declare class IxfxIconElement extends LitElement {
20
20
  rotate: string;
21
21
  connectedCallback(): void;
22
22
  disconnectedCallback(): void;
23
- protected render(): typeof nothing | import("lit").TemplateResult<1>;
23
+ protected render(): import("lit").TemplateResult<1> | typeof nothing;
24
24
  protected updated(changed: Map<string, unknown>): void;
25
25
  static styles: import("lit").CSSResult[];
26
26
  }
@@ -31,4 +31,4 @@ declare global {
31
31
  }
32
32
  //#endregion
33
33
  export { IxfxIconElement as t };
34
- //# sourceMappingURL=icon-DpA9x2Ve.d.ts.map
34
+ //# sourceMappingURL=icon-BUwP1CZ1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-BUwP1CZ1.d.ts","names":[],"sources":["../src/icons/icon.ts"],"mappings":";;;;;;;;;;;;;cAoBa,wBAAwB;;EACvB;EACgB;EAChB;EAC0C;EACU;EAQvD;EAKA;YAKU,wBAAM,2BAAA;YAgBN,QAAQ,SAAS;SAWpB,sBAAM;;QAsChB;YACI;IACR,aAAa"}
package/dist/icons.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { t as IxfxIconElement } from "./icon-DpA9x2Ve.js";
2
- import { a as iconBus, c as ICON_CARET_RIGHT, d as ICON_CLOSE, i as hasIcon, l as ICON_CHECK, n as IconChangedEvent, o as registerIcon, r as getIcon, s as svgToDataUri, t as IconChangedDetail, u as ICON_CHEVRON_DOWN } from "./index-BtGFYfaK.js";
1
+ import { t as IxfxIconElement } from "./icon-BUwP1CZ1.js";
2
+ import { a as iconBus, c as ICON_CARET_RIGHT, d as ICON_CLOSE, i as hasIcon, l as ICON_CHECK, n as IconChangedEvent, o as registerIcon, r as getIcon, s as svgToDataUri, t as IconChangedDetail, u as ICON_CHEVRON_DOWN } from "./index-RqMh1i-O.js";
3
3
  export { ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, type IconChangedDetail, type IconChangedEvent, IxfxIconElement, getIcon, hasIcon, iconBus, registerIcon, svgToDataUri };
@@ -1,4 +1,4 @@
1
- import "./index-CoqtMSd9.js";
1
+ import "./index-BUB5SICW.js";
2
2
  import { CSSResultGroup, LitElement, PropertyValues } from "lit";
3
3
  import { Colour } from "@ixfx/visual";
4
4
  //#region src/colour-picker/types.d.ts
@@ -181,4 +181,4 @@ declare global {
181
181
  }
182
182
  //#endregion
183
183
  export { ColourPickerInputEvent as a, ColourPickerEventDetail as i, ColourPicker as n, OklchValue as o, ColourPickerChangeEvent as r, ColourPickerPopup as t };
184
- //# sourceMappingURL=index-D_ftz_IT.d.ts.map
184
+ //# sourceMappingURL=index-BKAlRgbq.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-D_ftz_IT.d.ts","names":[],"sources":["../src/colour-picker/types.ts","../src/colour-picker/colour-picker.ts","../src/colour-picker/colour-picker-popup.ts"],"mappings":";;;;;;;KAGY;WACD;WACA;WACA;WACA;;;;;KAMC,0BAA0B;;;;KAK1B,yBAAyB,YAAY;KACrC,0BAA0B,YAAY;KAiBtC;KACA;;;;QAKJ;YACI;IACR,sBAAmD;;;;;cCV1C,qBAAqB;EACJ;EACA;EACA;EACA;EAE2C;EACN;EACA;EACA;EACf;EACmB;EACM;EACH;UAGhE;EAE0C;EACA;EACA;EACA;UAE1C;EAOY,UAAW;EACX,UAAW;EACX,UAAW;EACX,UAAW;EACZ,YAAa;UAIxB;UACA;UACA;UACA;mBAKS;MAEb;MAIA,MAAM;;;;;;EAcV,UAAU,QAAQ,OAAO;MASrB,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;EAIlB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIR,WAAW,mBAAmB;UAY/B;UAOA;UASA;UAUA;UA0BA;UAIA;UAYA;UAWA;EAKC,wBAAM;EAoCN,aAAa,mBAAmB;EAKhC,QAAQ,mBAAmB;EAqBpC;EA4FA,WAAY,GAAG,OAAO;EAQtB,YAAa,GAAG,OAAO;EAevB;EAKA;SAKO,QAAQ;;QAoIT;YACI;IACR,sBAAsB;;;;;cCvhBpB;;;;;;;;;;;;;;;;;;KAOD,0BAA0B;cAgBlB,0BAA0B;EACT;EAEA;EACA;EACA;EACA;EAE4B;EACS;EACA;EACA;EACf;EACI;EAC1B,MAAM;UAEjB;UACA;EAEA,UAAW;EACC,WAAY;mBAExB;mBACA;mBACA;UAGT;UACA;UACA;UACA;UAGA;UACA;UACA;UACA;UAGA;;MAUJ;cAIQ;cAQA;EAIZ,UAAU,QAAQ,OAAO;EAQhB,aAAa,mBAAmB;EAMhC,QAAQ,mBAAmB;UAS5B;UAUA;UAOA;UAoBA;UAmBA;UAmBA;UAcA;UAYA;UAKA;EAKC,wBAAM;SAiDR,QAAQ;;QAmGT;YACI;IACR,4BAA4B"}
1
+ {"version":3,"file":"index-BKAlRgbq.d.ts","names":[],"sources":["../src/colour-picker/types.ts","../src/colour-picker/colour-picker.ts","../src/colour-picker/colour-picker-popup.ts"],"mappings":";;;;;;;KAGY;WACD;WACA;WACA;WACA;;;;;KAMC,0BAA0B;;;;KAK1B,yBAAyB,YAAY;KACrC,0BAA0B,YAAY;KAiBtC;KACA;;;;QAKJ;YACI;IACR,sBAAmD;;;;;cCV1C,qBAAqB;EACJ;EACA;EACA;EACA;EAE2C;EACN;EACA;EACA;EACf;EACmB;EACM;EACH;UAGhE;EAE0C;EACA;EACA;EACA;UAE1C;EAOY,UAAW;EACX,UAAW;EACX,UAAW;EACX,UAAW;EACZ,YAAa;UAIxB;UACA;UACA;UACA;mBAKS;MAEb;MAIA,MAAM;;;;;;EAcV,UAAU,QAAQ,OAAO;MASrB,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;EAIlB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIR,WAAW,mBAAmB;UAY/B;UAOA;UASA;UAUA;UA0BA;UAIA;UAYA;UAWA;EAKC,wBAAM;EAoCN,aAAa,mBAAmB;EAKhC,QAAQ,mBAAmB;EAqBpC;EA4FA,WAAY,GAAG,OAAO;EAQtB,YAAa,GAAG,OAAO;EAevB;EAKA;SAKO,QAAQ;;QAoIT;YACI;IACR,sBAAsB;;;;;cCvhBpB;;;;;;;;;;;;;;;;;;KAOD,0BAA0B;cAgBlB,0BAA0B;EACT;EAEA;EACA;EACA;EACA;EAE4B;EACS;EACA;EACA;EACf;EACI;EAC1B,MAAM;UAEjB;UACA;EAEA,UAAW;EACC,WAAY;mBAExB;mBACA;mBACA;UAGT;UACA;UACA;UACA;UAGA;UACA;UACA;UACA;UAGA;;MAUJ;cAIQ;cAQA;EAIZ,UAAU,QAAQ,OAAO;EAQhB,aAAa,mBAAmB;EAMhC,QAAQ,mBAAmB;UAS5B;UAUA;UAOA;UAoBA;UAmBA;UAmBA;UAcA;UAYA;UAKA;EAKC,wBAAM;SAiDR,QAAQ;;QAmGT;YACI;IACR,4BAA4B"}
@@ -1,4 +1,4 @@
1
- import { t as LabelledInputBase } from "./labelled-input-base-DiTme1JO.js";
1
+ import { t as LabelledInputBase } from "./labelled-input-base-Dp_9KP0G.js";
2
2
  import { CSSResultGroup } from "lit";
3
3
  //#region src/labelled-range-input/labelled-range-input.d.ts
4
4
  declare class LabelledRangeInput extends LabelledInputBase {
@@ -21,4 +21,4 @@ declare global {
21
21
  }
22
22
  //#endregion
23
23
  export { LabelledRangeInput as t };
24
- //# sourceMappingURL=index-CoqtMSd9.d.ts.map
24
+ //# sourceMappingURL=index-BUB5SICW.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CoqtMSd9.d.ts","names":[],"sources":["../src/labelled-range-input/labelled-range-input.ts"],"mappings":";;;cAuEa,2BAA2B;WAC7B;EAEmB;EACC;EACyB;EACQ;;EAEjC;EAE2B;YAErC,uCAAqB;EA2B/B,wBAAM;SA2BR,QAAQ;;QA2ET;YACI;IACR,6BAA6B"}
1
+ {"version":3,"file":"index-BUB5SICW.d.ts","names":[],"sources":["../src/labelled-range-input/labelled-range-input.ts"],"mappings":";;;cAuEa,2BAA2B;WAC7B;EAEmB;EACC;EACyB;EACQ;;EAEjC;EAE2B;YAErC,uCAAqB;EA2B/B,wBAAM;SA2BR,QAAQ;;QA2ET;YACI;IACR,6BAA6B"}
@@ -1,6 +1,6 @@
1
- import "./icon-DpA9x2Ve.js";
1
+ import "./icon-BUwP1CZ1.js";
2
2
  import { o as TreeNode } from "./types-DO3gt5vg.js";
3
- import { i as MenuContainer, n as MenuTrigger, r as MenuTriggerCommandDetail, t as MenuItem } from "./menu-item-DSyf9f_L.js";
3
+ import { i as MenuContainer, n as MenuTrigger, r as MenuTriggerCommandDetail, t as MenuItem } from "./menu-item-BG5w7fi4.js";
4
4
  import { LitElement, TemplateResult } from "lit";
5
5
  import { CommandRegistry, KeyboardManager } from "@clinth/ui-commands";
6
6
  //#region src/menu/menu-bar.d.ts
@@ -179,4 +179,4 @@ declare namespace index_d_exports {
179
179
  }
180
180
  //#endregion
181
181
  export { menuFromTree as a, MenuSeparator as c, MenuCheckItem as d, MenuBar as f, MenuFromTreeOptions as i, MenuSubTrigger as l, MenuRadioGroup as n, menuFromTreeToElements as o, MenuRadioItem as r, MenuHeader as s, index_d_exports as t, MenuCommandController as u };
182
- //# sourceMappingURL=index-DfEkTGvT.d.ts.map
182
+ //# sourceMappingURL=index-DkhBGHgF.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DfEkTGvT.d.ts","names":[],"sources":["../src/menu/menu-bar.ts","../src/menu/menu-check-item.ts","../src/menu/menu-command-controller.ts","../src/menu/menu-sub-trigger.ts","../src/menu/menu-separator.ts","../src/menu/menu-header.ts","../src/menu/menu-from-tree.ts","../src/menu/menu-radio-item.ts","../src/menu/menu-radio-group.ts","../src/menu/index.ts"],"mappings":";;;;;;cAMa,gBAAgB;UACnB;UACA;EAER;EASA;UASQ;UAOA;UAIA;UAMA;UAIA;UAQA;UASA;SAkCD,sBAAM;EAab,wBAAM;;QAKA;YACI;IACR,iBAAiB;;;;;cCvGR,sBAAsB;EACL;EAC2B;EAC3B;EACC;EACA;EACuB;EACpB,WAAW;EACX,kBAAkB;UAE1C;UAYA;UASA;EASR,WAAW,mBAAmB;EAU9B,QAAQ,mBAAmB;UAInB;SAaQ,sBAAM;EA0DtB,wBAAM;;QAoBA;YACI;IACR,wBAAwB;;;;;cClKf;UACH;UACA;UACA;EAEI,YAAA;IAAW,UAAU;IAA0B,SAAS;;EAMpE;EAIA;UAIQ;;;;cCZG,uBAAuB;EACN;EAC2B;EAC3B;EACC;EACuB;EACpB,WAAW;EACX,kBAAkB;UAEjC;UACsB;UACJ;UACX;iBAET;UACP;UACA;UACA;EAER;EAKA;EAIA;UAWQ;EAUC,QAAQ,mBAAmB;EAMpC,WAAW,mBAAmB;UAUtB;UASA;UAKA;UAQA;UAQA;UAOA;UAQA;UAYA;UAQA;UAIA;UAIA;UAWA;SAiCQ,sBAAM;EAmEtB,wBAAM;;QA2BA;YACI;IACR,yBAAyB;;;;;cC1RhB,sBAAsB;SAC1B,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,uBAAuB;;;;;cCnBd,mBAAmB;EACF;SAErB,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,oBAAoB;;;;;KCjBZ;EACV,aAAa,QAAQ;EACrB,WAAW;EACX,kBAAkB;;iBAOJ,aACd,OAAO,YACP,UAAS,sBACR;iBAmGa,uBACd,OAAO,YACP,UAAS,sBACR;;;cChHU,sBAAsB;EACL;EACA;EACC;EACD;EACwB;UAE5C;SAWQ,sBAAM;EAoDtB,wBAAM;;QAmBA;YACI;IACR,wBAAwB;;;;;cC5Ff,uBAAuB;EACN;EACA;UAEX;UAET;UAMA;UAMA;EAYR,QAAQ,mBAAmB;SAMpB,sBAAM;EAUb,wBAAM;;QAOA;YACI;IACR,yBAAyB"}
1
+ {"version":3,"file":"index-DkhBGHgF.d.ts","names":[],"sources":["../src/menu/menu-bar.ts","../src/menu/menu-check-item.ts","../src/menu/menu-command-controller.ts","../src/menu/menu-sub-trigger.ts","../src/menu/menu-separator.ts","../src/menu/menu-header.ts","../src/menu/menu-from-tree.ts","../src/menu/menu-radio-item.ts","../src/menu/menu-radio-group.ts","../src/menu/index.ts"],"mappings":";;;;;;cAMa,gBAAgB;UACnB;UACA;EAER;EASA;UASQ;UAOA;UAIA;UAMA;UAIA;UAQA;UASA;SAkCD,sBAAM;EAab,wBAAM;;QAKA;YACI;IACR,iBAAiB;;;;;cCvGR,sBAAsB;EACL;EAC2B;EAC3B;EACC;EACA;EACuB;EACpB,WAAW;EACX,kBAAkB;UAE1C;UAYA;UASA;EASR,WAAW,mBAAmB;EAU9B,QAAQ,mBAAmB;UAInB;SAaQ,sBAAM;EA0DtB,wBAAM;;QAoBA;YACI;IACR,wBAAwB;;;;;cClKf;UACH;UACA;UACA;EAEI,YAAA;IAAW,UAAU;IAA0B,SAAS;;EAMpE;EAIA;UAIQ;;;;cCZG,uBAAuB;EACN;EAC2B;EAC3B;EACC;EACuB;EACpB,WAAW;EACX,kBAAkB;UAEjC;UACsB;UACJ;UACX;iBAET;UACP;UACA;UACA;EAER;EAKA;EAIA;UAWQ;EAUC,QAAQ,mBAAmB;EAMpC,WAAW,mBAAmB;UAUtB;UASA;UAKA;UAQA;UAQA;UAOA;UAQA;UAYA;UAQA;UAIA;UAIA;UAWA;SAiCQ,sBAAM;EAmEtB,wBAAM;;QA2BA;YACI;IACR,yBAAyB;;;;;cC1RhB,sBAAsB;SAC1B,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,uBAAuB;;;;;cCnBd,mBAAmB;EACF;SAErB,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,oBAAoB;;;;;KCjBZ;EACV,aAAa,QAAQ;EACrB,WAAW;EACX,kBAAkB;;iBAOJ,aACd,OAAO,YACP,UAAS,sBACR;iBAmGa,uBACd,OAAO,YACP,UAAS,sBACR;;;cChHU,sBAAsB;EACL;EACA;EACC;EACD;EACwB;UAE5C;SAWQ,sBAAM;EAoDtB,wBAAM;;QAmBA;YACI;IACR,wBAAwB;;;;;cC5Ff,uBAAuB;EACN;EACA;UAEX;UAET;UAMA;UAMA;EAYR,QAAQ,mBAAmB;SAMpB,sBAAM;EAUb,wBAAM;;QAOA;YACI;IACR,yBAAyB"}
@@ -1,4 +1,4 @@
1
- import "./icon-DpA9x2Ve.js";
1
+ import "./icon-BUwP1CZ1.js";
2
2
  //#region src/icons/defaults.d.ts
3
3
  /**
4
4
  * Chevron pointing down. Used for split-button dropdown toggle.
@@ -34,4 +34,4 @@ declare function hasIcon(name: string): boolean;
34
34
  declare function svgToDataUri(svg: string): string;
35
35
  //#endregion
36
36
  export { iconBus as a, ICON_CARET_RIGHT as c, ICON_CLOSE as d, hasIcon as i, ICON_CHECK as l, IconChangedEvent as n, registerIcon as o, getIcon as r, svgToDataUri as s, IconChangedDetail as t, ICON_CHEVRON_DOWN as u };
37
- //# sourceMappingURL=index-BtGFYfaK.d.ts.map
37
+ //# sourceMappingURL=index-RqMh1i-O.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BtGFYfaK.d.ts","names":[],"sources":["../src/icons/defaults.ts","../src/icons/registry.ts"],"mappings":";;;;;;cAMa;;;;;cAMA;;;;;cAMA;;;;;cAMA;;;cCtBA,SAAO;KAER;WAA+B;;KAC/B,mBAAmB,YAAY;iBAE3B,aAAa,cAAc;iBAK3B,QAAQ;iBAIR,QAAQ;;iBAKR,aAAa"}
1
+ {"version":3,"file":"index-RqMh1i-O.d.ts","names":[],"sources":["../src/icons/defaults.ts","../src/icons/registry.ts"],"mappings":";;;;;;cAMa;;;;;cAMA;;;;;cAMA;;;;;cAMA;;;cCtBA,SAAO;KAER;WAA+B;;KAC/B,mBAAmB,YAAY;iBAE3B,aAAa,cAAc;iBAK3B,QAAQ;iBAIR,QAAQ;;iBAKR,aAAa"}