@ixfx/components 0.5.18 → 0.5.19

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 (38) hide show
  1. package/bundle/index.d.ts +22 -7
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +252 -36
  4. package/bundle/index.js.map +1 -1
  5. package/bundle/style.css +4 -2
  6. package/dist/button.d.ts +1 -1
  7. package/dist/button.d.ts.map +1 -1
  8. package/dist/{colour-picker-DbypcEp6.js → colour-picker-37NyVenk.js} +2 -2
  9. package/dist/{colour-picker-DbypcEp6.js.map → colour-picker-37NyVenk.js.map} +1 -1
  10. package/dist/colour-picker.js +1 -1
  11. package/dist/{crumb-navigation-DTwJ8468.js → crumb-navigation-BrB0r14u.js} +116 -19
  12. package/dist/crumb-navigation-BrB0r14u.js.map +1 -0
  13. package/dist/crumbs.d.ts +2 -0
  14. package/dist/crumbs.d.ts.map +1 -1
  15. package/dist/crumbs.js +1 -1
  16. package/dist/{defaults-DcE8RQJc.js → defaults-BkWCPJFL.js} +7 -1
  17. package/dist/{defaults-DcE8RQJc.js.map → defaults-BkWCPJFL.js.map} +1 -1
  18. package/dist/icons.js +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +32 -7
  21. package/dist/index.js.map +1 -1
  22. package/dist/split-layout.d.ts +7 -1
  23. package/dist/split-layout.d.ts.map +1 -1
  24. package/dist/split-layout.js +84 -14
  25. package/dist/split-layout.js.map +1 -1
  26. package/dist/style.css +4 -2
  27. package/dist/{tab-list-CLqlPnX-.d.ts → tab-list-Beuh2nom.d.ts} +9 -2
  28. package/dist/tab-list-Beuh2nom.d.ts.map +1 -0
  29. package/dist/{tab-list-6W5CgXix.js → tab-list-mAoD6L0e.js} +20 -2
  30. package/dist/tab-list-mAoD6L0e.js.map +1 -0
  31. package/dist/tabs.d.ts +1 -1
  32. package/dist/tabs.js +1 -1
  33. package/docs-user/crumbs.md +4 -0
  34. package/docs-user/split-layout.md +29 -7
  35. package/package.json +3 -1
  36. package/dist/crumb-navigation-DTwJ8468.js.map +0 -1
  37. package/dist/tab-list-6W5CgXix.js.map +0 -1
  38. package/dist/tab-list-CLqlPnX-.d.ts.map +0 -1
package/bundle/index.js CHANGED
@@ -2979,6 +2979,11 @@ const ICON_WARNING = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="
2979
2979
  * fill="currentColor" so it inherits CSS color.
2980
2980
  */
2981
2981
  const ICON_CHEVRON_RIGHT = `<svg viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"/></svg>`;
2982
+ /**
2983
+ * Folder with up arrow. Angled line style for navigating up one level.
2984
+ * fill="currentColor" so it inherits CSS color.
2985
+ */
2986
+ const ICON_FOLDER_UP = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 4L4 12h5v8h6v-8h5L12 4z"/></svg>`;
2982
2987
  function registerDefaults() {
2983
2988
  registerIcon(`chevron-down`, ICON_CHEVRON_DOWN);
2984
2989
  registerIcon(`chevron-right`, ICON_CHEVRON_RIGHT);
@@ -2986,6 +2991,7 @@ function registerDefaults() {
2986
2991
  registerIcon(`check`, ICON_CHECK);
2987
2992
  registerIcon(`close`, ICON_CLOSE);
2988
2993
  registerIcon(`error`, ICON_ERROR);
2994
+ registerIcon(`folder-up`, ICON_FOLDER_UP);
2989
2995
  registerIcon(`info`, ICON_INFO);
2990
2996
  registerIcon(`warning`, ICON_WARNING);
2991
2997
  }
@@ -7105,6 +7111,8 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7105
7111
  this.leadingCaret = false;
7106
7112
  this.caretEmbedded = true;
7107
7113
  this.hideRoot = false;
7114
+ this.padEnding = false;
7115
+ this.withUp = false;
7108
7116
  this.#previousSelectionKey = ``;
7109
7117
  this.#menuOpenedByKeyboard = false;
7110
7118
  this.#currentOpenTrigger = null;
@@ -7483,6 +7491,24 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7483
7491
  inline: `start`
7484
7492
  });
7485
7493
  }
7494
+ #updateTrailingWidth() {
7495
+ if (!this.padEnding || !this.shadowRoot) return;
7496
+ const hostContainer = this.shadowRoot.querySelector(`.host-container`);
7497
+ const trailing = this.shadowRoot.querySelector(`.trailing`);
7498
+ if (!hostContainer || !trailing) return;
7499
+ const segments = this.shadowRoot.querySelectorAll(`.crumb-segment`);
7500
+ const lastSegment = segments[segments.length - 1];
7501
+ if (!lastSegment) return;
7502
+ const containerWidth = hostContainer.getBoundingClientRect().width;
7503
+ const itemWidth = lastSegment.getBoundingClientRect().width;
7504
+ if (itemWidth < containerWidth) {
7505
+ trailing.style.width = `${containerWidth - itemWidth - 5}px`;
7506
+ requestAnimationFrame(() => {
7507
+ if (hostContainer.scrollWidth <= hostContainer.clientWidth) hostContainer.style.setProperty(`--scroll-fade-x-start`, `0px`, `important`);
7508
+ else hostContainer.style.removeProperty(`--scroll-fade-x-start`);
7509
+ });
7510
+ } else trailing.style.width = ``;
7511
+ }
7486
7512
  #setSelected(node) {
7487
7513
  const previous = this.selectedNode;
7488
7514
  if (previous) this.#previousSelectionKey = previous.item?.key ?? ``;
@@ -7495,6 +7521,9 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7495
7521
  if (path) {
7496
7522
  const depth = this.hideRoot && path.length > 1 ? path.length - 2 : path.length - 1;
7497
7523
  requestAnimationFrame(() => {
7524
+ this.#updateTrailingWidth();
7525
+ const hostContainer = this.#getHostContainer();
7526
+ if (hostContainer) hostContainer.scrollLeft = 0;
7498
7527
  this.#scrollSegmentIntoView(depth);
7499
7528
  });
7500
7529
  }
@@ -7625,6 +7654,15 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7625
7654
  composed: true
7626
7655
  }));
7627
7656
  }
7657
+ #onUpClick() {
7658
+ const r = this.root;
7659
+ const sel = this.selectedNode;
7660
+ if (!r || !sel) return;
7661
+ const path = this.#findPath(r, sel);
7662
+ if (!path || path.length <= 1) return;
7663
+ const parent = path[path.length - 2];
7664
+ this.#setSelected(parent);
7665
+ }
7628
7666
  /** Navigate to a node by key path. Returns false if any key is not found in already-loaded children. */
7629
7667
  navigateTo(keys) {
7630
7668
  if (!this.root?.children) return false;
@@ -7672,6 +7710,9 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7672
7710
  let pathNodes = this.#findPath(r, sel) ?? [r];
7673
7711
  if (this.hideRoot && pathNodes.length > 1) pathNodes = pathNodes.slice(1);
7674
7712
  this.#hasChildOptions();
7713
+ const isAtRoot = (() => {
7714
+ return (this.#findPath(r, sel) ?? [r]).length <= 1;
7715
+ })();
7675
7716
  const parts = [];
7676
7717
  let segmentId = 0;
7677
7718
  pathNodes.forEach((node, i) => {
@@ -7785,18 +7826,29 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7785
7826
  }
7786
7827
  });
7787
7828
  return b`
7788
- <div
7789
- class="host-container scroll-fade-x"
7790
- tabindex="0"
7791
- @focus=${this.#onFocus}
7792
- @blur=${this.#onBlur}
7793
- @keydown=${this.#onKeyDown}
7794
- @click=${this.#onHostClick}
7795
- @menu-trigger-close=${this.#onMenuTriggerClose}
7796
- @mouseout=${(e) => this.tickled.handlePointerLeave(e)}
7797
- >
7798
- <div class="parts"
7799
- @mouseover=${(e) => {
7829
+ <div class="crumb-wrapper">
7830
+ ${this.withUp ? b`
7831
+ <button
7832
+ class="up-button"
7833
+ ?disabled=${isAtRoot}
7834
+ aria-label="Go up one level"
7835
+ @click=${this.#onUpClick}
7836
+ >
7837
+ <ixfx-icon name="folder-up"></ixfx-icon>
7838
+ </button>
7839
+ ` : A}
7840
+ <div
7841
+ class="host-container scroll-fade-x"
7842
+ tabindex="0"
7843
+ @focus=${this.#onFocus}
7844
+ @blur=${this.#onBlur}
7845
+ @keydown=${this.#onKeyDown}
7846
+ @click=${this.#onHostClick}
7847
+ @menu-trigger-close=${this.#onMenuTriggerClose}
7848
+ @mouseout=${(e) => this.tickled.handlePointerLeave(e)}
7849
+ >
7850
+ <div class="parts"
7851
+ @mouseover=${(e) => {
7800
7852
  if (this.#isWheelScrolling) return;
7801
7853
  const target = e.target;
7802
7854
  if (!(target instanceof HTMLElement)) return;
@@ -7817,8 +7869,9 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7817
7869
  composed: true
7818
7870
  }));
7819
7871
  }}
7820
- >${parts}<div class="trailing"></div></div>
7821
- ${this.showSuggestions ? this.#renderChildOptions() : A}
7872
+ >${parts}${this.padEnding ? b`<div class="trailing"></div>` : A}</div>
7873
+ ${this.showSuggestions ? this.#renderChildOptions() : A}
7874
+ </div>
7822
7875
  </div>
7823
7876
  `;
7824
7877
  }
@@ -7896,15 +7949,57 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7896
7949
  outline-offset: 2px;
7897
7950
  }
7898
7951
 
7952
+ .crumb-wrapper {
7953
+ display: flex;
7954
+ align-items: center;
7955
+ gap: var(--crumb-item-gap);
7956
+ width: 100%;
7957
+ }
7958
+
7959
+ .up-button {
7960
+ display: inline-flex;
7961
+ align-items: center;
7962
+ justify-content: center;
7963
+ flex-shrink: 0;
7964
+ background: var(--crumb-item-bg);
7965
+ border: var(--crumb-item-border);
7966
+ border-radius: var(--crumb-item-border-radius);
7967
+ padding: var(--crumb-item-padding);
7968
+ cursor: pointer;
7969
+ color: inherit;
7970
+ }
7971
+
7972
+ .up-button:disabled {
7973
+ opacity: 0.5;
7974
+ cursor: not-allowed;
7975
+ }
7976
+
7977
+ .up-button:hover:not(:disabled) {
7978
+ background: var(--crumb-item-bg-tickled);
7979
+ border-color: var(--crumb-item-border-tickled);
7980
+ }
7981
+
7982
+ .up-button ixfx-icon {
7983
+ width: 1em;
7984
+ height: 1em;
7985
+ pointer-events: none;
7986
+ }
7987
+
7899
7988
  /* Edge fade (shows/hides based on scroll position) comes from the
7900
7989
  * shared .scroll-fade-x class - see ../styles/scroll-fade.ts */
7901
7990
  .host-container {
7902
7991
  display: flex;
7903
- width: 100%;
7992
+ flex: 1;
7993
+ min-width: 0;
7904
7994
  outline: none;
7905
7995
  overflow: scroll;
7906
7996
  scroll-snap-type: x mandatory;
7907
7997
  scrollbar-width: none;
7998
+ overscroll-behavior: none;
7999
+ }
8000
+
8001
+ .host-container::-webkit-scrollbar {
8002
+ display: none;
7908
8003
  }
7909
8004
 
7910
8005
  .parts {
@@ -7913,9 +8008,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7913
8008
  }
7914
8009
 
7915
8010
  .trailing {
7916
- flex: 1;
7917
- min-width: 1em;
7918
- cursor: pointer;
8011
+ flex-shrink: 0;
7919
8012
  }
7920
8013
 
7921
8014
  .crumb-segment {
@@ -8131,6 +8224,16 @@ __decorate([property({
8131
8224
  reflect: true,
8132
8225
  attribute: `hide-root`
8133
8226
  })], CrumbNavigationElement.prototype, "hideRoot", void 0);
8227
+ __decorate([property({
8228
+ type: Boolean,
8229
+ reflect: true,
8230
+ attribute: `pad-ending`
8231
+ })], CrumbNavigationElement.prototype, "padEnding", void 0);
8232
+ __decorate([property({
8233
+ type: Boolean,
8234
+ reflect: true,
8235
+ attribute: `with-up`
8236
+ })], CrumbNavigationElement.prototype, "withUp", void 0);
8134
8237
  CrumbNavigationElement = __decorate([safeCustomElement(`ixfx-crumb-navigation`)], CrumbNavigationElement);
8135
8238
  //#endregion
8136
8239
  //#region src/crumbs/crumb-path-controller.ts
@@ -24198,7 +24301,7 @@ let SplitLayoutElement = class SplitLayoutElement extends i {
24198
24301
  if (nestedSplit) {
24199
24302
  this.#nestedSplitInitialSizeA = nestedSplit.sizeA;
24200
24303
  const nestedBounds = nestedSplit.getBoundingClientRect();
24201
- const nestedHandle = nestedSplit.shadowRoot?.querySelector(`.resize-handle`);
24304
+ const nestedHandle = nestedSplit.shadowRoot?.querySelector(`.split-bar`);
24202
24305
  if (nestedHandle) {
24203
24306
  this.#nestedSplitBounds = nestedBounds;
24204
24307
  this.#nestedHandleBounds = nestedHandle.getBoundingClientRect();
@@ -24267,6 +24370,11 @@ let SplitLayoutElement = class SplitLayoutElement extends i {
24267
24370
  event.preventDefault();
24268
24371
  };
24269
24372
  }
24373
+ get showGrabHandle() {
24374
+ const size = getComputedStyle(this).getPropertyValue(`--handle-size`).trim();
24375
+ const num = Number.parseFloat(size);
24376
+ return !Number.isNaN(num) && num > 3;
24377
+ }
24270
24378
  #elementBounds;
24271
24379
  #startSizeA;
24272
24380
  #startSizeB;
@@ -24487,17 +24595,30 @@ let SplitLayoutElement = class SplitLayoutElement extends i {
24487
24595
  <div id="zone">
24488
24596
  <slot style=${sizeA} name="a"></slot>
24489
24597
  ${this._hasCorner ? b`<div class="corner-zone" @pointerdown=${this.#onCornerResizeDown}></div>` : ``}
24490
- <div @pointerdown=${this.#onResizeHandleDown} class="resize-handle"></div>
24491
- <slot style=${sizeB} name="b"></slot>
24598
+ <div @pointerdown=${this.#onResizeHandleDown} class="split-bar">
24599
+ ${this.showGrabHandle ? b`
24600
+ <div class="grab-handle">
24601
+ <span class="dot"></span>
24602
+ <span class="dot"></span>
24603
+ <span class="dot"></span>
24604
+ </div>
24605
+ ` : ``}
24606
+ </div>
24607
+ <slot style=${sizeB} name="b"></slot>
24492
24608
  </div>`;
24493
24609
  }
24494
24610
  static {
24495
24611
  this.styles = [themeFallbacks, i$3`
24496
24612
  :host {
24497
24613
  --handle-size: 2px;
24498
- --handle-colour: var(--surface-5);
24614
+ --handle-colour: transparent;
24499
24615
  --handle-hover-colour: var(--surface-6);
24500
24616
  --handle-active-colour: var(--accent);
24617
+ --handle-bg: var(--handle-colour);
24618
+ --handle-grab-colour: var(--border-subtle-color);
24619
+ --handle-grab-dot-size: 3px;
24620
+ --handle-grab-size: 16px;
24621
+ --handle-grab-thickness: 8px;
24501
24622
 
24502
24623
  display: block;
24503
24624
  box-sizing: border-box;
@@ -24515,29 +24636,80 @@ let SplitLayoutElement = class SplitLayoutElement extends i {
24515
24636
  slot {
24516
24637
  display: block;
24517
24638
  overflow: hidden;
24639
+ border: var(--border-subtle);
24640
+ border-radius: var(--radius-m);
24518
24641
  }
24519
24642
  :slotted(*) {
24520
24643
  width: 100%;
24521
24644
  height: 100%;
24522
24645
  }
24523
24646
 
24524
- .resize-handle {
24647
+ .split-bar {
24648
+ position: relative;
24525
24649
  background-color: var(--handle-colour);
24650
+ transition: background-color 0.3s ease 0s;
24526
24651
  width: var(--handle-size);
24527
24652
  height: 100%;
24528
24653
  cursor: ew-resize;
24529
24654
  flex-shrink: 0;
24655
+ border-radius: var(--radius-m);
24656
+
24657
+ }
24658
+
24659
+ @keyframes handle-hover {
24660
+ from { background-color: var(--handle-colour); }
24661
+ to { background-color: var(--handle-hover-colour); }
24662
+ }
24663
+
24664
+ .grab-handle {
24665
+ position: absolute;
24666
+ top: 50%;
24667
+ left: 50%;
24668
+ transform: translate(-50%, -50%);
24669
+ display: flex;
24670
+ align-items: center;
24671
+ justify-content: center;
24672
+ gap: var(--handle-grab-dot-size);
24673
+ background: var(--handle-bg);
24674
+ border-radius: var(--radius-s);
24675
+ }
24676
+
24677
+ .grab-handle .dot {
24678
+ width: var(--handle-grab-dot-size);
24679
+ height: var(--handle-grab-dot-size);
24680
+ border-radius: 50%;
24681
+ background: var(--handle-grab-colour);
24682
+ flex-shrink: 0;
24683
+ }
24684
+
24685
+ :host([layout="vertical"]) .grab-handle {
24686
+ flex-direction: column;
24687
+ width: var(--handle-grab-thickness);
24688
+ height: var(--handle-grab-size);
24689
+ }
24690
+
24691
+ :host([layout="horizontal"]) .grab-handle {
24692
+ flex-direction: row;
24693
+ width: var(--handle-grab-size);
24694
+ height: var(--handle-grab-thickness);
24695
+ }
24696
+
24697
+ #zone.user-resizing .grab-handle {
24698
+ display: none;
24530
24699
  }
24531
24700
  #zone.user-resizing {
24532
24701
  slot {
24533
24702
  opacity: 0.5;
24534
24703
  }
24535
- .resize-handle {
24704
+ .split-bar {
24536
24705
  background-color: var(--handle-active-colour);
24706
+ transition: none;
24707
+ animation: none !important;
24537
24708
  }
24538
24709
  }
24539
- .resize-handle:hover {
24540
- background-color: var(--handle-hover-colour);
24710
+
24711
+ #zone:not(.user-resizing) .split-bar:hover {
24712
+ animation: handle-hover 0.001s ease-out 0.7s both;
24541
24713
  }
24542
24714
 
24543
24715
  .corner-zone {
@@ -24556,17 +24728,18 @@ let SplitLayoutElement = class SplitLayoutElement extends i {
24556
24728
  #zone {
24557
24729
  flex-direction: column;
24558
24730
  }
24559
- .resize-handle {
24560
- background-color: silver;
24731
+ .split-bar {
24732
+ position: relative;
24733
+ background-color: var(--handle-colour);
24734
+ transition: background-color 0.3s ease 0s;
24561
24735
  height: var(--handle-size);
24562
24736
  width: 100%;
24563
24737
  cursor: ns-resize;
24564
24738
  }
24565
- .resize-handle:hover {
24566
- background-color: var(--handle-hover-colour);
24567
- }
24568
- #zone.user-resizing .resize-handle {
24739
+ #zone.user-resizing .split-bar {
24569
24740
  background-color: var(--handle-active-colour);
24741
+ transition: none;
24742
+ animation: none !important;
24570
24743
  }
24571
24744
  }
24572
24745
 
@@ -24822,11 +24995,16 @@ let TabListItemElement = class TabListItemElement extends i {
24822
24995
  constructor(..._args) {
24823
24996
  super(..._args);
24824
24997
  this.closeable = false;
24998
+ this.hideLabels = false;
24825
24999
  this.iconName = void 0;
24826
25000
  this.description = void 0;
24827
25001
  this.commandActive = void 0;
24828
25002
  this.registry = void 0;
24829
25003
  this._compact = false;
25004
+ this._hasToolbarContent = false;
25005
+ this._onToolbarSlotChange = () => {
25006
+ this._updateToolbarContent();
25007
+ };
24830
25008
  }
24831
25009
  connectedCallback() {
24832
25010
  super.connectedCallback();
@@ -24834,6 +25012,7 @@ let TabListItemElement = class TabListItemElement extends i {
24834
25012
  this._compact = entry.contentRect.width < 64;
24835
25013
  });
24836
25014
  this._resizeObserver.observe(this);
25015
+ (this.shadowRoot?.querySelector(`slot[name="toolbar"]`))?.addEventListener(`slotchange`, this._onToolbarSlotChange);
24837
25016
  }
24838
25017
  disconnectedCallback() {
24839
25018
  super.disconnectedCallback();
@@ -24841,6 +25020,7 @@ let TabListItemElement = class TabListItemElement extends i {
24841
25020
  this._resizeObserver = void 0;
24842
25021
  this._commandCleanup?.();
24843
25022
  this._commandCleanup = void 0;
25023
+ (this.shadowRoot?.querySelector(`slot[name="toolbar"]`))?.removeEventListener(`slotchange`, this._onToolbarSlotChange);
24844
25024
  }
24845
25025
  updated(changed) {
24846
25026
  super.updated(changed);
@@ -24863,12 +25043,21 @@ let TabListItemElement = class TabListItemElement extends i {
24863
25043
  if (id === this.commandActive) this.click();
24864
25044
  });
24865
25045
  }
25046
+ _updateToolbarContent() {
25047
+ const slot = this.shadowRoot?.querySelector(`slot[name="toolbar"]`);
25048
+ this._hasToolbarContent = (slot?.assignedElements().length ?? 0) > 0;
25049
+ }
25050
+ firstUpdated() {
25051
+ this._updateToolbarContent();
25052
+ }
24866
25053
  render() {
24867
- const showLabel = !this._compact || !this.iconName;
25054
+ const showLabel = !this.hideLabels || !this.iconName;
25055
+ const hasActions = this.closeable || this._hasToolbarContent;
24868
25056
  return b`
24869
25057
  <div>
24870
25058
  ${this.iconName ? b`<ixfx-icon name="${this.iconName}"></ixfx-icon>` : A}
24871
25059
  ${showLabel ? b`<span class="label"><slot></slot></span>` : A}
25060
+ ${hasActions ? b`
24872
25061
  <div class="actions">
24873
25062
  <div class="toolbar"><slot name="toolbar"></slot></div>
24874
25063
  ${this.closeable ? b`
@@ -24882,6 +25071,7 @@ let TabListItemElement = class TabListItemElement extends i {
24882
25071
  </button>
24883
25072
  ` : A}
24884
25073
  </div>
25074
+ ` : A}
24885
25075
  </div>
24886
25076
  `;
24887
25077
  }
@@ -24908,17 +25098,19 @@ let TabListItemElement = class TabListItemElement extends i {
24908
25098
  min-width: 0;
24909
25099
  user-select: none;
24910
25100
  box-sizing: border-box;
25101
+ height:fit-content;
24911
25102
  }
24912
25103
 
24913
25104
  :host > div {
24914
25105
  display: flex;
24915
25106
  align-items: center;
24916
- gap: var(--space-s, 4px);
24917
- padding: var(--tab-padding) calc(2 * var(--tab-padding));
25107
+ padding: var(--tab-padding) calc(2 * var(--tab-padding-horizontal, var(--tab-padding)));
24918
25108
  min-width: 0;
24919
25109
  width: 100%;
24920
25110
  font-weight: 500;
24921
25111
  border: var(--selected-tab-border-width) solid transparent;
25112
+ gap: var(--space-s);
25113
+
24922
25114
  }
24923
25115
 
24924
25116
  :host([selected]) > div {
@@ -24929,6 +25121,7 @@ let TabListItemElement = class TabListItemElement extends i {
24929
25121
  border-right-color: var(--indicator-color-right, transparent);
24930
25122
  background: var(--selected-background);
24931
25123
  font-weight: var(--selected-tab-weight);
25124
+ border-radius:var(--radius-m);
24932
25125
  }
24933
25126
 
24934
25127
  .label {
@@ -25003,6 +25196,10 @@ let TabListItemElement = class TabListItemElement extends i {
25003
25196
  }
25004
25197
  };
25005
25198
  __decorate([property({ type: Boolean })], TabListItemElement.prototype, "closeable", void 0);
25199
+ __decorate([property({
25200
+ type: Boolean,
25201
+ attribute: `hide-labels`
25202
+ })], TabListItemElement.prototype, "hideLabels", void 0);
25006
25203
  __decorate([property({
25007
25204
  type: String,
25008
25205
  attribute: `icon-name`
@@ -25014,6 +25211,7 @@ __decorate([property({
25014
25211
  })], TabListItemElement.prototype, "commandActive", void 0);
25015
25212
  __decorate([property({ attribute: false })], TabListItemElement.prototype, "registry", void 0);
25016
25213
  __decorate([state()], TabListItemElement.prototype, "_compact", void 0);
25214
+ __decorate([state()], TabListItemElement.prototype, "_hasToolbarContent", void 0);
25017
25215
  TabListItemElement = __decorate([safeCustomElement(`ixfx-tab-list-item`)], TabListItemElement);
25018
25216
  //#endregion
25019
25217
  //#region src/tabs/tab-panel.ts
@@ -25432,6 +25630,7 @@ let TabListElement = class TabListElement extends i {
25432
25630
  this.orientation = `horizontal`;
25433
25631
  this.flip = false;
25434
25632
  this.scrollable = false;
25633
+ this.hideLabels = false;
25435
25634
  this.dragMode = `off`;
25436
25635
  this.#items = [];
25437
25636
  this.#dragState = null;
@@ -25440,6 +25639,7 @@ let TabListElement = class TabListElement extends i {
25440
25639
  this.updateComplete.then(() => {
25441
25640
  this.#items = (this.shadowRoot?.querySelector(`slot`))?.assignedElements({ flatten: true }) ?? [];
25442
25641
  this.#syncIndicatorColors();
25642
+ this.#syncHideLabels();
25443
25643
  });
25444
25644
  };
25445
25645
  this.#onKeyUp = (event) => {
@@ -25581,13 +25781,21 @@ let TabListElement = class TabListElement extends i {
25581
25781
  #onSlotChange;
25582
25782
  firstUpdated() {
25583
25783
  this.updateComplete.then(() => {
25584
- if (this.#items.length > 0) this.#syncIndicatorColors();
25784
+ if (this.#items.length > 0) {
25785
+ this.#syncIndicatorColors();
25786
+ this.#syncHideLabels();
25787
+ }
25585
25788
  });
25586
25789
  }
25587
25790
  updated(changedProperties) {
25588
25791
  super.updated(changedProperties);
25589
25792
  this.classList.toggle(`scrollable`, this.scrollable);
25590
25793
  if (changedProperties.has(`dragMode`)) this.toggleAttribute(`drag-mode`, this.dragMode !== `off`);
25794
+ if (changedProperties.has(`hideLabels`)) this.#syncHideLabels();
25795
+ }
25796
+ #syncHideLabels() {
25797
+ for (const item of this.#items) if (this.hideLabels) item.setAttribute(`hide-labels`, ``);
25798
+ else item.removeAttribute(`hide-labels`);
25591
25799
  }
25592
25800
  #syncIndicatorColors() {
25593
25801
  for (const item of this.#items) {
@@ -25842,6 +26050,10 @@ let TabListElement = class TabListElement extends i {
25842
26050
  :host(.scrollable) {
25843
26051
  max-height: var(--scroll-max-height);
25844
26052
  }
26053
+ :host([hide-labels]) {
26054
+ display: inline-flex;
26055
+ width: auto;
26056
+ }
25845
26057
  text {
25846
26058
  user-select:none;
25847
26059
  }
@@ -25925,6 +26137,10 @@ let TabListElement = class TabListElement extends i {
25925
26137
  __decorate([property({ type: String })], TabListElement.prototype, "orientation", void 0);
25926
26138
  __decorate([property({ type: Boolean })], TabListElement.prototype, "flip", void 0);
25927
26139
  __decorate([property({ type: Boolean })], TabListElement.prototype, "scrollable", void 0);
26140
+ __decorate([property({
26141
+ type: Boolean,
26142
+ attribute: `hide-labels`
26143
+ })], TabListElement.prototype, "hideLabels", void 0);
25928
26144
  __decorate([property({
25929
26145
  type: String,
25930
26146
  attribute: `drag-mode`