@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.
- package/bundle/index.d.ts +22 -7
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +252 -36
- package/bundle/index.js.map +1 -1
- package/bundle/style.css +4 -2
- package/dist/button.d.ts +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/{colour-picker-DbypcEp6.js → colour-picker-37NyVenk.js} +2 -2
- package/dist/{colour-picker-DbypcEp6.js.map → colour-picker-37NyVenk.js.map} +1 -1
- package/dist/colour-picker.js +1 -1
- package/dist/{crumb-navigation-DTwJ8468.js → crumb-navigation-BrB0r14u.js} +116 -19
- package/dist/crumb-navigation-BrB0r14u.js.map +1 -0
- package/dist/crumbs.d.ts +2 -0
- package/dist/crumbs.d.ts.map +1 -1
- package/dist/crumbs.js +1 -1
- package/dist/{defaults-DcE8RQJc.js → defaults-BkWCPJFL.js} +7 -1
- package/dist/{defaults-DcE8RQJc.js.map → defaults-BkWCPJFL.js.map} +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -1
- package/dist/split-layout.d.ts +7 -1
- package/dist/split-layout.d.ts.map +1 -1
- package/dist/split-layout.js +84 -14
- package/dist/split-layout.js.map +1 -1
- package/dist/style.css +4 -2
- package/dist/{tab-list-CLqlPnX-.d.ts → tab-list-Beuh2nom.d.ts} +9 -2
- package/dist/tab-list-Beuh2nom.d.ts.map +1 -0
- package/dist/{tab-list-6W5CgXix.js → tab-list-mAoD6L0e.js} +20 -2
- package/dist/tab-list-mAoD6L0e.js.map +1 -0
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.js +1 -1
- package/docs-user/crumbs.md +4 -0
- package/docs-user/split-layout.md +29 -7
- package/package.json +3 -1
- package/dist/crumb-navigation-DTwJ8468.js.map +0 -1
- package/dist/tab-list-6W5CgXix.js.map +0 -1
- 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
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
|
|
7793
|
-
|
|
7794
|
-
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
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
|
-
|
|
7821
|
-
|
|
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
|
-
|
|
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:
|
|
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(`.
|
|
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="
|
|
24491
|
-
|
|
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:
|
|
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
|
-
.
|
|
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
|
-
.
|
|
24704
|
+
.split-bar {
|
|
24536
24705
|
background-color: var(--handle-active-colour);
|
|
24706
|
+
transition: none;
|
|
24707
|
+
animation: none !important;
|
|
24537
24708
|
}
|
|
24538
24709
|
}
|
|
24539
|
-
|
|
24540
|
-
|
|
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
|
-
.
|
|
24560
|
-
|
|
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
|
-
.
|
|
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.
|
|
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
|
-
|
|
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)
|
|
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`
|