@akcelik/strct 5.22.0 → 5.23.0
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/fesm2022/akcelik-strct.mjs +211 -51
- package/fesm2022/akcelik-strct.mjs.map +1 -1
- package/package.json +1 -1
- package/types/akcelik-strct.d.ts +37 -2
|
@@ -2299,6 +2299,7 @@ class StrctRail {
|
|
|
2299
2299
|
class="strct-rail__item"
|
|
2300
2300
|
[routerLink]="item.routerLink"
|
|
2301
2301
|
routerLinkActive
|
|
2302
|
+
ariaCurrentWhenActive="page"
|
|
2302
2303
|
#rla="routerLinkActive"
|
|
2303
2304
|
[class.strct-rail__item--active]="isActive(item, rla.isActive)"
|
|
2304
2305
|
[attr.aria-current]="isActive(item, rla.isActive) ? 'page' : null"
|
|
@@ -2402,6 +2403,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
2402
2403
|
class="strct-rail__item"
|
|
2403
2404
|
[routerLink]="item.routerLink"
|
|
2404
2405
|
routerLinkActive
|
|
2406
|
+
ariaCurrentWhenActive="page"
|
|
2405
2407
|
#rla="routerLinkActive"
|
|
2406
2408
|
[class.strct-rail__item--active]="isActive(item, rla.isActive)"
|
|
2407
2409
|
[attr.aria-current]="isActive(item, rla.isActive) ? 'page' : null"
|
|
@@ -5276,6 +5278,9 @@ class StrctTreeNode {
|
|
|
5276
5278
|
/** Roving tabindex: inside a tree only the active row is tabbable. */
|
|
5277
5279
|
rowTabindex = computed(() => this.tree ? (this.tree.isRovingActive(this) ? 0 : -1) : 0, /* @ts-ignore */
|
|
5278
5280
|
...(ngDevMode ? [{ debugName: "rowTabindex" }] : /* istanbul ignore next */ []));
|
|
5281
|
+
/** Wording of the "children are being read" row (from the owning tree). */
|
|
5282
|
+
loadingLabel = computed(() => this.tree?.loadingLabel() ?? 'Loading…', /* @ts-ignore */
|
|
5283
|
+
...(ngDevMode ? [{ debugName: "loadingLabel" }] : /* istanbul ignore next */ []));
|
|
5279
5284
|
/** Accessible label of the chevron toggle (factory from the owning tree). */
|
|
5280
5285
|
chevronAriaLabel = computed(() => (this.tree?.chevronAriaLabel() ?? defaultChevronAriaLabel)(this.isOpen(), this.displayLabel()), /* @ts-ignore */
|
|
5281
5286
|
...(ngDevMode ? [{ debugName: "chevronAriaLabel" }] : /* istanbul ignore next */ []));
|
|
@@ -5305,7 +5310,13 @@ class StrctTreeNode {
|
|
|
5305
5310
|
}
|
|
5306
5311
|
hasChildren = computed(() => {
|
|
5307
5312
|
const n = this.node();
|
|
5308
|
-
|
|
5313
|
+
if (!n)
|
|
5314
|
+
return this.childNodes().length > 0;
|
|
5315
|
+
// A folder whose listing has not been asked for still opens: without
|
|
5316
|
+
// this it had no chevron and no aria-expanded, so it could not be.
|
|
5317
|
+
if (n.hasChildren !== undefined)
|
|
5318
|
+
return n.hasChildren || (n.children?.length ?? 0) > 0;
|
|
5319
|
+
return (n.children?.length ?? 0) > 0;
|
|
5309
5320
|
}, /* @ts-ignore */
|
|
5310
5321
|
...(ngDevMode ? [{ debugName: "hasChildren" }] : /* istanbul ignore next */ []));
|
|
5311
5322
|
isOpen = computed(() => {
|
|
@@ -5357,6 +5368,7 @@ class StrctTreeNode {
|
|
|
5357
5368
|
[attr.aria-posinset]="posInSet()"
|
|
5358
5369
|
[attr.aria-selected]="displayActive()"
|
|
5359
5370
|
[attr.aria-expanded]="hasChildren() ? isOpen() : null"
|
|
5371
|
+
[attr.aria-busy]="node()?.loading ? true : null"
|
|
5360
5372
|
[attr.aria-owns]="hasChildren() && isOpen() ? groupId : null"
|
|
5361
5373
|
[attr.draggable]="isDraggable() ? 'true' : null"
|
|
5362
5374
|
[class.strct-tnode__row--dragging]="isDragSource()"
|
|
@@ -5401,10 +5413,24 @@ class StrctTreeNode {
|
|
|
5401
5413
|
/>
|
|
5402
5414
|
}
|
|
5403
5415
|
<span class="strct-tnode__label">{{ displayLabel() }}</span>
|
|
5416
|
+
@if (node()?.tag; as tag) {
|
|
5417
|
+
<strct-badge class="strct-tnode__tag" [status]="tag.status ?? 'neutral'">{{
|
|
5418
|
+
tag.label
|
|
5419
|
+
}}</strct-badge>
|
|
5420
|
+
}
|
|
5421
|
+
@if (node()?.meta; as meta) {
|
|
5422
|
+
<span class="strct-tnode__meta">{{ meta }}</span>
|
|
5423
|
+
}
|
|
5404
5424
|
<ng-content select="[strctTreeTrailing]" />
|
|
5405
5425
|
</div>
|
|
5406
5426
|
@if (hasChildren() && isOpen()) {
|
|
5407
5427
|
<div class="strct-tnode__children" role="group" [id]="groupId">
|
|
5428
|
+
@if (node()?.loading) {
|
|
5429
|
+
<div class="strct-tnode__loading">
|
|
5430
|
+
<span class="strct-tnode__spacer"></span>
|
|
5431
|
+
<strct-spinner size="sm" [caption]="loadingLabel()" />
|
|
5432
|
+
</div>
|
|
5433
|
+
}
|
|
5408
5434
|
@if (node()) {
|
|
5409
5435
|
@for (child of node()!.children ?? []; track child.id ?? child.label) {
|
|
5410
5436
|
<strct-tree-node
|
|
@@ -5419,11 +5445,11 @@ class StrctTreeNode {
|
|
|
5419
5445
|
}
|
|
5420
5446
|
</div>
|
|
5421
5447
|
}
|
|
5422
|
-
`, isInline: true, styles: [".strct-tnode{display:block}.strct-tnode__row{display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:2px;cursor:pointer;font-size:13px;color:var(--t1);-webkit-user-select:none;user-select:none}.strct-tnode__row:hover{background:var(--bg-3)}.strct-tnode__row--dragging{opacity:.45}.strct-tnode__row--droptarget,.strct-tnode__row--droptarget:hover{background:var(--acc-s);outline:1px solid var(--acc);outline-offset:-1px}.strct-tnode__row:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--acc50)}.strct-tnode__row--active{background:var(--acc-m);color:var(--t1);font-weight:600}.strct-tnode__row--active .strct-tnode__icon,.strct-tnode__row--active .strct-tnode__chevron{color:var(--acc)}.strct-tnode__chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--t3);transition:transform .15s ease;width:24px;height:24px;margin:-5px;margin-inline-end:-10px;flex-shrink:0}.strct-tnode__chevron--open{transform:rotate(90deg)}[dir=rtl] .strct-tnode__chevron:not(.strct-tnode__chevron--open){transform:rotate(180deg)}.strct-tnode__spacer{width:14px;flex-shrink:0}@media(prefers-reduced-motion:reduce){.strct-tnode__chevron{transition:none}}.strct-tnode__icon{color:var(--t2);flex-shrink:0}.strct-tnode__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tnode__children{margin-inline-start:16px}\n"], dependencies: [{ kind: "component", type: StrctTreeNode, selector: "strct-tree-node", inputs: ["node", "label", "icon", "badge", "active", "expanded", "nodeMenu"], outputs: ["expandedChange", "activated", "nodeActivated", "nodeMenuSelect"] }, { kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }, { kind: "directive", type: StrctContextMenuTrigger, selector: "[strctContextMenu]", inputs: ["strctContextMenu", "strctContextMenuData"], outputs: ["menuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
5448
|
+
`, isInline: true, styles: [".strct-tnode{display:block}.strct-tnode__row{display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:2px;cursor:pointer;font-size:13px;color:var(--t1);-webkit-user-select:none;user-select:none}.strct-tnode__row:hover{background:var(--bg-3)}.strct-tnode__row--dragging{opacity:.45}.strct-tnode__row--droptarget,.strct-tnode__row--droptarget:hover{background:var(--acc-s);outline:1px solid var(--acc);outline-offset:-1px}.strct-tnode__row:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--acc50)}.strct-tnode__row--active{background:var(--acc-m);color:var(--t1);font-weight:600}.strct-tnode__row--active .strct-tnode__icon,.strct-tnode__row--active .strct-tnode__chevron{color:var(--acc)}.strct-tnode__chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--t3);transition:transform .15s ease;width:24px;height:24px;margin:-5px;margin-inline-end:-10px;flex-shrink:0}.strct-tnode__chevron--open{transform:rotate(90deg)}[dir=rtl] .strct-tnode__chevron:not(.strct-tnode__chevron--open){transform:rotate(180deg)}.strct-tnode__spacer{width:14px;flex-shrink:0}@media(prefers-reduced-motion:reduce){.strct-tnode__chevron{transition:none}}.strct-tnode__icon{color:var(--t2);flex-shrink:0}.strct-tnode__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tnode__tag,.strct-tnode__meta{flex-shrink:0}.strct-tnode__meta{font-size:11px;color:var(--t3);font-variant-numeric:tabular-nums}.strct-tnode__row--active .strct-tnode__meta{font-weight:400}.strct-tnode__children{margin-inline-start:16px}.strct-tnode__loading{display:flex;align-items:center;gap:6px;padding:4px 9px;font-size:13px;color:var(--t3)}\n"], dependencies: [{ kind: "component", type: StrctTreeNode, selector: "strct-tree-node", inputs: ["node", "label", "icon", "badge", "active", "expanded", "nodeMenu"], outputs: ["expandedChange", "activated", "nodeActivated", "nodeMenuSelect"] }, { kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }, { kind: "directive", type: StrctContextMenuTrigger, selector: "[strctContextMenu]", inputs: ["strctContextMenu", "strctContextMenuData"], outputs: ["menuSelect"] }, { kind: "component", type: StrctBadge, selector: "strct-badge", inputs: ["status", "tone", "solid"] }, { kind: "component", type: StrctSpinner, selector: "strct-spinner", inputs: ["size", "label", "caption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
5423
5449
|
}
|
|
5424
5450
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTreeNode, decorators: [{
|
|
5425
5451
|
type: Component,
|
|
5426
|
-
args: [{ selector: 'strct-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [StrctIcon, StrctContextMenuTrigger], template: `
|
|
5452
|
+
args: [{ selector: 'strct-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [StrctIcon, StrctContextMenuTrigger, StrctBadge, StrctSpinner], template: `
|
|
5427
5453
|
<div
|
|
5428
5454
|
class="strct-tnode__row"
|
|
5429
5455
|
[class.strct-tnode__row--active]="displayActive()"
|
|
@@ -5434,6 +5460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
5434
5460
|
[attr.aria-posinset]="posInSet()"
|
|
5435
5461
|
[attr.aria-selected]="displayActive()"
|
|
5436
5462
|
[attr.aria-expanded]="hasChildren() ? isOpen() : null"
|
|
5463
|
+
[attr.aria-busy]="node()?.loading ? true : null"
|
|
5437
5464
|
[attr.aria-owns]="hasChildren() && isOpen() ? groupId : null"
|
|
5438
5465
|
[attr.draggable]="isDraggable() ? 'true' : null"
|
|
5439
5466
|
[class.strct-tnode__row--dragging]="isDragSource()"
|
|
@@ -5478,10 +5505,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
5478
5505
|
/>
|
|
5479
5506
|
}
|
|
5480
5507
|
<span class="strct-tnode__label">{{ displayLabel() }}</span>
|
|
5508
|
+
@if (node()?.tag; as tag) {
|
|
5509
|
+
<strct-badge class="strct-tnode__tag" [status]="tag.status ?? 'neutral'">{{
|
|
5510
|
+
tag.label
|
|
5511
|
+
}}</strct-badge>
|
|
5512
|
+
}
|
|
5513
|
+
@if (node()?.meta; as meta) {
|
|
5514
|
+
<span class="strct-tnode__meta">{{ meta }}</span>
|
|
5515
|
+
}
|
|
5481
5516
|
<ng-content select="[strctTreeTrailing]" />
|
|
5482
5517
|
</div>
|
|
5483
5518
|
@if (hasChildren() && isOpen()) {
|
|
5484
5519
|
<div class="strct-tnode__children" role="group" [id]="groupId">
|
|
5520
|
+
@if (node()?.loading) {
|
|
5521
|
+
<div class="strct-tnode__loading">
|
|
5522
|
+
<span class="strct-tnode__spacer"></span>
|
|
5523
|
+
<strct-spinner size="sm" [caption]="loadingLabel()" />
|
|
5524
|
+
</div>
|
|
5525
|
+
}
|
|
5485
5526
|
@if (node()) {
|
|
5486
5527
|
@for (child of node()!.children ?? []; track child.id ?? child.label) {
|
|
5487
5528
|
<strct-tree-node
|
|
@@ -5502,7 +5543,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
5502
5543
|
// siblings in the DOM, so the host must not appear in the a11y tree.
|
|
5503
5544
|
role: 'none',
|
|
5504
5545
|
'[attr.data-node-id]': 'node()?.id ?? null',
|
|
5505
|
-
}, styles: [".strct-tnode{display:block}.strct-tnode__row{display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:2px;cursor:pointer;font-size:13px;color:var(--t1);-webkit-user-select:none;user-select:none}.strct-tnode__row:hover{background:var(--bg-3)}.strct-tnode__row--dragging{opacity:.45}.strct-tnode__row--droptarget,.strct-tnode__row--droptarget:hover{background:var(--acc-s);outline:1px solid var(--acc);outline-offset:-1px}.strct-tnode__row:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--acc50)}.strct-tnode__row--active{background:var(--acc-m);color:var(--t1);font-weight:600}.strct-tnode__row--active .strct-tnode__icon,.strct-tnode__row--active .strct-tnode__chevron{color:var(--acc)}.strct-tnode__chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--t3);transition:transform .15s ease;width:24px;height:24px;margin:-5px;margin-inline-end:-10px;flex-shrink:0}.strct-tnode__chevron--open{transform:rotate(90deg)}[dir=rtl] .strct-tnode__chevron:not(.strct-tnode__chevron--open){transform:rotate(180deg)}.strct-tnode__spacer{width:14px;flex-shrink:0}@media(prefers-reduced-motion:reduce){.strct-tnode__chevron{transition:none}}.strct-tnode__icon{color:var(--t2);flex-shrink:0}.strct-tnode__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tnode__children{margin-inline-start:16px}\n"] }]
|
|
5546
|
+
}, styles: [".strct-tnode{display:block}.strct-tnode__row{display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:2px;cursor:pointer;font-size:13px;color:var(--t1);-webkit-user-select:none;user-select:none}.strct-tnode__row:hover{background:var(--bg-3)}.strct-tnode__row--dragging{opacity:.45}.strct-tnode__row--droptarget,.strct-tnode__row--droptarget:hover{background:var(--acc-s);outline:1px solid var(--acc);outline-offset:-1px}.strct-tnode__row:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--acc50)}.strct-tnode__row--active{background:var(--acc-m);color:var(--t1);font-weight:600}.strct-tnode__row--active .strct-tnode__icon,.strct-tnode__row--active .strct-tnode__chevron{color:var(--acc)}.strct-tnode__chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--t3);transition:transform .15s ease;width:24px;height:24px;margin:-5px;margin-inline-end:-10px;flex-shrink:0}.strct-tnode__chevron--open{transform:rotate(90deg)}[dir=rtl] .strct-tnode__chevron:not(.strct-tnode__chevron--open){transform:rotate(180deg)}.strct-tnode__spacer{width:14px;flex-shrink:0}@media(prefers-reduced-motion:reduce){.strct-tnode__chevron{transition:none}}.strct-tnode__icon{color:var(--t2);flex-shrink:0}.strct-tnode__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tnode__tag,.strct-tnode__meta{flex-shrink:0}.strct-tnode__meta{font-size:11px;color:var(--t3);font-variant-numeric:tabular-nums}.strct-tnode__row--active .strct-tnode__meta{font-weight:400}.strct-tnode__children{margin-inline-start:16px}.strct-tnode__loading{display:flex;align-items:center;gap:6px;padding:4px 9px;font-size:13px;color:var(--t3)}\n"] }]
|
|
5506
5547
|
}], ctorParameters: () => [], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }], nodeMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeMenu", required: false }] }], activated: [{ type: i0.Output, args: ["activated"] }], nodeActivated: [{ type: i0.Output, args: ["nodeActivated"] }], nodeMenuSelect: [{ type: i0.Output, args: ["nodeMenuSelect"] }], childNodes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrctTreeNode), { isSignal: true }] }], directChildNodes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrctTreeNode), { ...{ descendants: false }, isSignal: true }] }] } });
|
|
5507
5548
|
/**
|
|
5508
5549
|
* Root container for a tree. Either project `<strct-tree-node>` children, or
|
|
@@ -5551,6 +5592,9 @@ class StrctTree {
|
|
|
5551
5592
|
...(ngDevMode ? [{ debugName: "dragExpandDelay" }] : /* istanbul ignore next */ []));
|
|
5552
5593
|
/** Emitted for an accepted drop only. */
|
|
5553
5594
|
nodeDrop = output();
|
|
5595
|
+
/** Wording of the row shown under a node whose children are being read (`node.loading`). */
|
|
5596
|
+
loadingLabel = input('Loading…', /* @ts-ignore */
|
|
5597
|
+
...(ngDevMode ? [{ debugName: "loadingLabel" }] : /* istanbul ignore next */ []));
|
|
5554
5598
|
/** Accessible label of each node's chevron toggle; receives the expanded state and the node label. */
|
|
5555
5599
|
chevronAriaLabel = input(defaultChevronAriaLabel, /* @ts-ignore */
|
|
5556
5600
|
...(ngDevMode ? [{ debugName: "chevronAriaLabel" }] : /* istanbul ignore next */ []));
|
|
@@ -5893,7 +5937,7 @@ class StrctTree {
|
|
|
5893
5937
|
this.expandedChange.emit([...this.currentSet()]);
|
|
5894
5938
|
}
|
|
5895
5939
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTree, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5896
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctTree, isStandalone: true, selector: "strct-tree", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, framed: { classPropertyName: "framed", publicName: "framed", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, nodeMenu: { classPropertyName: "nodeMenu", publicName: "nodeMenu", isSignal: true, isRequired: false, transformFunction: null }, canDrag: { classPropertyName: "canDrag", publicName: "canDrag", isSignal: true, isRequired: false, transformFunction: null }, canDrop: { classPropertyName: "canDrop", publicName: "canDrop", isSignal: true, isRequired: false, transformFunction: null }, dragExpandDelay: { classPropertyName: "dragExpandDelay", publicName: "dragExpandDelay", isSignal: true, isRequired: false, transformFunction: null }, chevronAriaLabel: { classPropertyName: "chevronAriaLabel", publicName: "chevronAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeDrop: "nodeDrop", nodeActivated: "nodeActivated", nodeMenuSelect: "nodeMenuSelect", expandedIds: "expandedIdsChange", expandedChange: "expandedChange", nodeToggled: "nodeToggled" }, host: { attributes: { "role": "tree" }, properties: { "class.strct-tree--comfortable": "density() === 'comfortable'", "class.strct-tree--framed": "framed()", "style.max-height.px": "maxHeight()" }, classAttribute: "strct-tree" }, queries: [{ propertyName: "projectedNodes", predicate: StrctTreeNode, isSignal: true }], ngImport: i0, template: `
|
|
5940
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctTree, isStandalone: true, selector: "strct-tree", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, framed: { classPropertyName: "framed", publicName: "framed", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, nodeMenu: { classPropertyName: "nodeMenu", publicName: "nodeMenu", isSignal: true, isRequired: false, transformFunction: null }, canDrag: { classPropertyName: "canDrag", publicName: "canDrag", isSignal: true, isRequired: false, transformFunction: null }, canDrop: { classPropertyName: "canDrop", publicName: "canDrop", isSignal: true, isRequired: false, transformFunction: null }, dragExpandDelay: { classPropertyName: "dragExpandDelay", publicName: "dragExpandDelay", isSignal: true, isRequired: false, transformFunction: null }, loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null }, chevronAriaLabel: { classPropertyName: "chevronAriaLabel", publicName: "chevronAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeDrop: "nodeDrop", nodeActivated: "nodeActivated", nodeMenuSelect: "nodeMenuSelect", expandedIds: "expandedIdsChange", expandedChange: "expandedChange", nodeToggled: "nodeToggled" }, host: { attributes: { "role": "tree" }, properties: { "class.strct-tree--comfortable": "density() === 'comfortable'", "class.strct-tree--framed": "framed()", "style.max-height.px": "maxHeight()" }, classAttribute: "strct-tree" }, queries: [{ propertyName: "projectedNodes", predicate: StrctTreeNode, isSignal: true }], ngImport: i0, template: `
|
|
5897
5941
|
@if (nodes(); as ns) {
|
|
5898
5942
|
@for (n of ns; track n.id ?? n.label) {
|
|
5899
5943
|
<strct-tree-node
|
|
@@ -5930,7 +5974,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
5930
5974
|
'[class.strct-tree--framed]': 'framed()',
|
|
5931
5975
|
'[style.max-height.px]': 'maxHeight()',
|
|
5932
5976
|
}, styles: [".strct-tree{display:block}.strct-tree--framed{border:1px solid var(--b2);border-radius:var(--radius-md);background:var(--bg-1);padding:var(--space-1)}.strct-tree[style*=max-height]{overflow:auto}.strct-tree--comfortable .strct-tnode__row{gap:7px;padding:6px 10px;border-radius:3px;font-size:14px}.strct-tree--comfortable .strct-tnode__chevron{margin:-4px;margin-inline-end:-9px}.strct-tree--comfortable .strct-tnode__spacer{width:16px}.strct-tree--comfortable .strct-tnode__children{margin-inline-start:19px}\n"] }]
|
|
5933
|
-
}], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], framed: [{ type: i0.Input, args: [{ isSignal: true, alias: "framed", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], nodeMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeMenu", required: false }] }], canDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDrag", required: false }] }], canDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDrop", required: false }] }], dragExpandDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragExpandDelay", required: false }] }], nodeDrop: [{ type: i0.Output, args: ["nodeDrop"] }], chevronAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "chevronAriaLabel", required: false }] }], nodeActivated: [{ type: i0.Output, args: ["nodeActivated"] }], nodeMenuSelect: [{ type: i0.Output, args: ["nodeMenuSelect"] }], expandedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedIds", required: false }] }, { type: i0.Output, args: ["expandedIdsChange"] }], expandedChange: [{ type: i0.Output, args: ["expandedChange"] }], nodeToggled: [{ type: i0.Output, args: ["nodeToggled"] }], projectedNodes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrctTreeNode), { ...{ descendants: false }, isSignal: true }] }] } });
|
|
5977
|
+
}], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], framed: [{ type: i0.Input, args: [{ isSignal: true, alias: "framed", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], nodeMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeMenu", required: false }] }], canDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDrag", required: false }] }], canDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDrop", required: false }] }], dragExpandDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragExpandDelay", required: false }] }], nodeDrop: [{ type: i0.Output, args: ["nodeDrop"] }], loadingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingLabel", required: false }] }], chevronAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "chevronAriaLabel", required: false }] }], nodeActivated: [{ type: i0.Output, args: ["nodeActivated"] }], nodeMenuSelect: [{ type: i0.Output, args: ["nodeMenuSelect"] }], expandedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedIds", required: false }] }, { type: i0.Output, args: ["expandedIdsChange"] }], expandedChange: [{ type: i0.Output, args: ["expandedChange"] }], nodeToggled: [{ type: i0.Output, args: ["nodeToggled"] }], projectedNodes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrctTreeNode), { ...{ descendants: false }, isSignal: true }] }] } });
|
|
5934
5978
|
|
|
5935
5979
|
/**
|
|
5936
5980
|
* Refcounted body scroll-lock shared across any number of simultaneously
|
|
@@ -6123,10 +6167,25 @@ class StrctModal {
|
|
|
6123
6167
|
this.close();
|
|
6124
6168
|
}
|
|
6125
6169
|
onEscape(event) {
|
|
6126
|
-
// A control that used Escape first keeps it:
|
|
6127
|
-
//
|
|
6170
|
+
// A control that used Escape first keeps it: a searchbox that clears
|
|
6171
|
+
// marks the event handled (it did not, until 5.23.0).
|
|
6128
6172
|
if (event?.defaultPrevented)
|
|
6129
6173
|
return;
|
|
6174
|
+
// An IME composition ends on Escape, and the keystroke is the composer's.
|
|
6175
|
+
if (event?.isComposing)
|
|
6176
|
+
return;
|
|
6177
|
+
// An Escape raised inside another surface on top — a command palette
|
|
6178
|
+
// opened over this modal, a menu, a listbox — belongs to that surface.
|
|
6179
|
+
// isTopmostModal only knows about modals, so the palette's Escape used to
|
|
6180
|
+
// close the palette AND the modal. An Escape with the focus on nothing in
|
|
6181
|
+
// particular is still ours.
|
|
6182
|
+
const target = event?.target;
|
|
6183
|
+
const surface = target instanceof Element
|
|
6184
|
+
? target.closest('[role="dialog"], [role="menu"], [role="listbox"], [role="tree"]')
|
|
6185
|
+
: null;
|
|
6186
|
+
const dialog = this.elementRef.nativeElement.querySelector('.strct-modal__dialog');
|
|
6187
|
+
if (surface && dialog && surface !== dialog && !dialog.contains(surface))
|
|
6188
|
+
return;
|
|
6130
6189
|
// With several modals open, only the topmost one reacts to Escape.
|
|
6131
6190
|
const allowed = this.closeOnEscape() ?? this.dismissible();
|
|
6132
6191
|
if (this.open() && allowed && isTopmostModal(this))
|
|
@@ -7736,6 +7795,7 @@ class StrctSectionMenu {
|
|
|
7736
7795
|
class="strct-sm__item"
|
|
7737
7796
|
[routerLink]="item.routerLink"
|
|
7738
7797
|
routerLinkActive
|
|
7798
|
+
ariaCurrentWhenActive="page"
|
|
7739
7799
|
#rla="routerLinkActive"
|
|
7740
7800
|
[class.strct-sm__item--active]="isActive(item, rla.isActive)"
|
|
7741
7801
|
[attr.aria-current]="isActive(item, rla.isActive) ? 'page' : null"
|
|
@@ -7846,6 +7906,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
7846
7906
|
class="strct-sm__item"
|
|
7847
7907
|
[routerLink]="item.routerLink"
|
|
7848
7908
|
routerLinkActive
|
|
7909
|
+
ariaCurrentWhenActive="page"
|
|
7849
7910
|
#rla="routerLinkActive"
|
|
7850
7911
|
[class.strct-sm__item--active]="isActive(item, rla.isActive)"
|
|
7851
7912
|
[attr.aria-current]="isActive(item, rla.isActive) ? 'page' : null"
|
|
@@ -8402,6 +8463,16 @@ class StrctSearchbox {
|
|
|
8402
8463
|
this.onChange(next);
|
|
8403
8464
|
}
|
|
8404
8465
|
/** Clear the text (Escape / the × button). */
|
|
8466
|
+
/**
|
|
8467
|
+
* An Escape that clears a value is used: a modal around this box takes an
|
|
8468
|
+
* unhandled Escape as "close me", and the same keystroke did both.
|
|
8469
|
+
*/
|
|
8470
|
+
onEscape(event) {
|
|
8471
|
+
if (!this.value())
|
|
8472
|
+
return;
|
|
8473
|
+
event.preventDefault();
|
|
8474
|
+
this.clear();
|
|
8475
|
+
}
|
|
8405
8476
|
clear() {
|
|
8406
8477
|
if (!this.value())
|
|
8407
8478
|
return;
|
|
@@ -8456,7 +8527,7 @@ class StrctSearchbox {
|
|
|
8456
8527
|
[value]="value()"
|
|
8457
8528
|
(input)="onInput($event)"
|
|
8458
8529
|
(keydown.enter)="search.emit(value())"
|
|
8459
|
-
(keydown.escape)="
|
|
8530
|
+
(keydown.escape)="onEscape($event)"
|
|
8460
8531
|
(focus)="focused.set(true)"
|
|
8461
8532
|
(blur)="focused.set(false); onTouched()"
|
|
8462
8533
|
/>
|
|
@@ -8509,7 +8580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
8509
8580
|
[value]="value()"
|
|
8510
8581
|
(input)="onInput($event)"
|
|
8511
8582
|
(keydown.enter)="search.emit(value())"
|
|
8512
|
-
(keydown.escape)="
|
|
8583
|
+
(keydown.escape)="onEscape($event)"
|
|
8513
8584
|
(focus)="focused.set(true)"
|
|
8514
8585
|
(blur)="focused.set(false); onTouched()"
|
|
8515
8586
|
/>
|
|
@@ -28428,7 +28499,7 @@ class StrctTreeSelect {
|
|
|
28428
28499
|
}
|
|
28429
28500
|
</div>
|
|
28430
28501
|
}
|
|
28431
|
-
`, isInline: true, styles: [".strct-tsel{position:relative;display:block;width:100%}.strct-tsel__field{position:relative}.strct-tsel__trigger{display:flex;align-items:center;gap:8px;padding-inline-end:30px;text-align:start;cursor:pointer}.strct-tsel__trigger--clearable{padding-inline-end:48px}.strct-tsel__trigger:disabled{cursor:not-allowed}.strct-tsel__value{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tsel__value--empty{color:var(--t3)}.strct-tsel__caret{position:absolute;inset-inline-end:9px;top:50%;transform:translateY(-50%);color:var(--t3);pointer-events:none}.strct-tsel__clear{position:absolute;inset-inline-end:26px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;padding:2px;color:var(--t3);background:none;border:none;border-radius:var(--radius-sm);cursor:pointer}.strct-tsel__clear:hover{color:var(--t1)}.strct-tsel__panel{z-index:var(--z-dropdown);max-height:260px;overflow-y:auto;padding:var(--space-1);background:var(--bg-1);border:1px solid var(--b2);border-radius:var(--radius-lg);box-shadow:var(--shh)}.strct-tsel__empty{padding:9px 10px;font-size:13px;color:var(--t3)}\n"], dependencies: [{ kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }, { kind: "directive", type: StrctOverlay, selector: "[strctOverlay]", inputs: ["strctOverlay", "strctOverlayPlacement", "strctOverlayMatchWidth", "strctOverlayGap"] }, { kind: "component", type: StrctTree, selector: "strct-tree", inputs: ["nodes", "density", "framed", "maxHeight", "nodeMenu", "canDrag", "canDrop", "dragExpandDelay", "chevronAriaLabel", "expandedIds"], outputs: ["nodeDrop", "nodeActivated", "nodeMenuSelect", "expandedIdsChange", "expandedChange", "nodeToggled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
28502
|
+
`, isInline: true, styles: [".strct-tsel{position:relative;display:block;width:100%}.strct-tsel__field{position:relative}.strct-tsel__trigger{display:flex;align-items:center;gap:8px;padding-inline-end:30px;text-align:start;cursor:pointer}.strct-tsel__trigger--clearable{padding-inline-end:48px}.strct-tsel__trigger:disabled{cursor:not-allowed}.strct-tsel__value{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-tsel__value--empty{color:var(--t3)}.strct-tsel__caret{position:absolute;inset-inline-end:9px;top:50%;transform:translateY(-50%);color:var(--t3);pointer-events:none}.strct-tsel__clear{position:absolute;inset-inline-end:26px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;padding:2px;color:var(--t3);background:none;border:none;border-radius:var(--radius-sm);cursor:pointer}.strct-tsel__clear:hover{color:var(--t1)}.strct-tsel__panel{z-index:var(--z-dropdown);max-height:260px;overflow-y:auto;padding:var(--space-1);background:var(--bg-1);border:1px solid var(--b2);border-radius:var(--radius-lg);box-shadow:var(--shh)}.strct-tsel__empty{padding:9px 10px;font-size:13px;color:var(--t3)}\n"], dependencies: [{ kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }, { kind: "directive", type: StrctOverlay, selector: "[strctOverlay]", inputs: ["strctOverlay", "strctOverlayPlacement", "strctOverlayMatchWidth", "strctOverlayGap"] }, { kind: "component", type: StrctTree, selector: "strct-tree", inputs: ["nodes", "density", "framed", "maxHeight", "nodeMenu", "canDrag", "canDrop", "dragExpandDelay", "loadingLabel", "chevronAriaLabel", "expandedIds"], outputs: ["nodeDrop", "nodeActivated", "nodeMenuSelect", "expandedIdsChange", "expandedChange", "nodeToggled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
28432
28503
|
}
|
|
28433
28504
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTreeSelect, decorators: [{
|
|
28434
28505
|
type: Component,
|
|
@@ -28717,6 +28788,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
28717
28788
|
type: Directive,
|
|
28718
28789
|
args: [{ selector: '[strctToolbarCaption]' }]
|
|
28719
28790
|
}] });
|
|
28791
|
+
/** A control whose own keyboard is the caret's. */
|
|
28792
|
+
function isTextEntry(el) {
|
|
28793
|
+
if (!el)
|
|
28794
|
+
return false;
|
|
28795
|
+
// `isContentEditable` is a rendering-time property: jsdom does not implement
|
|
28796
|
+
// it, so the attribute is read too — a consumer's own test sees the same
|
|
28797
|
+
// behaviour as a browser.
|
|
28798
|
+
if (el.isContentEditable)
|
|
28799
|
+
return true;
|
|
28800
|
+
const editable = el.closest('[contenteditable]')?.getAttribute('contenteditable');
|
|
28801
|
+
if (editable !== null && editable !== undefined && editable !== 'false')
|
|
28802
|
+
return true;
|
|
28803
|
+
const tag = el.tagName;
|
|
28804
|
+
if (tag === 'TEXTAREA')
|
|
28805
|
+
return true;
|
|
28806
|
+
if (tag !== 'INPUT')
|
|
28807
|
+
return false;
|
|
28808
|
+
const type = el.type;
|
|
28809
|
+
return !['button', 'submit', 'reset', 'checkbox', 'radio', 'range', 'color', 'file'].includes(type);
|
|
28810
|
+
}
|
|
28720
28811
|
class StrctToolbar {
|
|
28721
28812
|
host = inject(ElementRef);
|
|
28722
28813
|
/** Accessible name of the toolbar (localizable). */
|
|
@@ -28753,6 +28844,11 @@ class StrctToolbar {
|
|
|
28753
28844
|
const target = event.target;
|
|
28754
28845
|
if (target?.closest('[role=listbox], [role=menu], [role=dialog], [role=tree], [role=grid]'))
|
|
28755
28846
|
return;
|
|
28847
|
+
// A text field keeps its arrows for the caret — APG's toolbar says so, and
|
|
28848
|
+
// ArrowLeft inside a searchbox in the bar used to jump to the button
|
|
28849
|
+
// before it instead of moving one character.
|
|
28850
|
+
if (isTextEntry(target))
|
|
28851
|
+
return;
|
|
28756
28852
|
const vertical = this.orientation() === 'vertical';
|
|
28757
28853
|
const prevKey = vertical ? 'ArrowUp' : 'ArrowLeft';
|
|
28758
28854
|
const nextKey = vertical ? 'ArrowDown' : 'ArrowRight';
|
|
@@ -30946,22 +31042,6 @@ class StrctProductSwitcher {
|
|
|
30946
31042
|
}
|
|
30947
31043
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctProductSwitcher, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30948
31044
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctProductSwitcher, isStandalone: true, selector: "strct-product-switcher", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, footerItems: { classPropertyName: "footerItems", publicName: "footerItems", isSignal: true, isRequired: false, transformFunction: null }, current: { classPropertyName: "current", publicName: "current", isSignal: true, isRequired: false, transformFunction: null }, switchLabel: { classPropertyName: "switchLabel", publicName: "switchLabel", isSignal: true, isRequired: false, transformFunction: null }, shortLabelWidth: { classPropertyName: "shortLabelWidth", publicName: "shortLabelWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { current: "currentChange", opened: "opened", select: "select" }, host: { classAttribute: "strct-ps" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
30949
|
-
<!-- What a row holds, whichever element carries it. -->
|
|
30950
|
-
<ng-template #rowBody let-item>
|
|
30951
|
-
@if (item.icon) {
|
|
30952
|
-
<strct-icon strctDropdownItemIcon [tone]="item.tone ?? ''" [name]="item.icon" [size]="16" />
|
|
30953
|
-
}
|
|
30954
|
-
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
30955
|
-
@if (item.description) {
|
|
30956
|
-
<span strctDropdownItemDescription>
|
|
30957
|
-
@if (item.status) {
|
|
30958
|
-
<strct-status-dot [status]="item.status" />
|
|
30959
|
-
}
|
|
30960
|
-
{{ item.description }}
|
|
30961
|
-
</span>
|
|
30962
|
-
}
|
|
30963
|
-
</ng-template>
|
|
30964
|
-
|
|
30965
31045
|
<!-- A row is a link where the product has an address, so it can be opened
|
|
30966
31046
|
in a new tab — and a menuitemradio either way, checked on the one you
|
|
30967
31047
|
are in. -->
|
|
@@ -30973,7 +31053,23 @@ class StrctProductSwitcher {
|
|
|
30973
31053
|
[selected]="item.id === current()"
|
|
30974
31054
|
(click)="pick(item, $event)"
|
|
30975
31055
|
>
|
|
30976
|
-
|
|
31056
|
+
@if (item.icon) {
|
|
31057
|
+
<strct-icon
|
|
31058
|
+
strctDropdownItemIcon
|
|
31059
|
+
[tone]="item.tone ?? ''"
|
|
31060
|
+
[name]="item.icon"
|
|
31061
|
+
[size]="16"
|
|
31062
|
+
/>
|
|
31063
|
+
}
|
|
31064
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31065
|
+
@if (item.description) {
|
|
31066
|
+
<span strctDropdownItemDescription>
|
|
31067
|
+
@if (item.status) {
|
|
31068
|
+
<strct-status-dot [status]="item.status" />
|
|
31069
|
+
}
|
|
31070
|
+
{{ item.description }}
|
|
31071
|
+
</span>
|
|
31072
|
+
}
|
|
30977
31073
|
</a>
|
|
30978
31074
|
} @else if (item.href && !item.disabled) {
|
|
30979
31075
|
<a
|
|
@@ -30982,7 +31078,23 @@ class StrctProductSwitcher {
|
|
|
30982
31078
|
[selected]="item.id === current()"
|
|
30983
31079
|
(click)="pick(item, $event)"
|
|
30984
31080
|
>
|
|
30985
|
-
|
|
31081
|
+
@if (item.icon) {
|
|
31082
|
+
<strct-icon
|
|
31083
|
+
strctDropdownItemIcon
|
|
31084
|
+
[tone]="item.tone ?? ''"
|
|
31085
|
+
[name]="item.icon"
|
|
31086
|
+
[size]="16"
|
|
31087
|
+
/>
|
|
31088
|
+
}
|
|
31089
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31090
|
+
@if (item.description) {
|
|
31091
|
+
<span strctDropdownItemDescription>
|
|
31092
|
+
@if (item.status) {
|
|
31093
|
+
<strct-status-dot [status]="item.status" />
|
|
31094
|
+
}
|
|
31095
|
+
{{ item.description }}
|
|
31096
|
+
</span>
|
|
31097
|
+
}
|
|
30986
31098
|
</a>
|
|
30987
31099
|
} @else {
|
|
30988
31100
|
<strct-dropdown-item
|
|
@@ -30990,7 +31102,23 @@ class StrctProductSwitcher {
|
|
|
30990
31102
|
[disabled]="!!item.disabled"
|
|
30991
31103
|
(click)="pick(item)"
|
|
30992
31104
|
>
|
|
30993
|
-
|
|
31105
|
+
@if (item.icon) {
|
|
31106
|
+
<strct-icon
|
|
31107
|
+
strctDropdownItemIcon
|
|
31108
|
+
[tone]="item.tone ?? ''"
|
|
31109
|
+
[name]="item.icon"
|
|
31110
|
+
[size]="16"
|
|
31111
|
+
/>
|
|
31112
|
+
}
|
|
31113
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31114
|
+
@if (item.description) {
|
|
31115
|
+
<span strctDropdownItemDescription>
|
|
31116
|
+
@if (item.status) {
|
|
31117
|
+
<strct-status-dot [status]="item.status" />
|
|
31118
|
+
}
|
|
31119
|
+
{{ item.description }}
|
|
31120
|
+
</span>
|
|
31121
|
+
}
|
|
30994
31122
|
</strct-dropdown-item>
|
|
30995
31123
|
}
|
|
30996
31124
|
</ng-template>
|
|
@@ -31030,7 +31158,7 @@ class StrctProductSwitcher {
|
|
|
31030
31158
|
class="strct-ps__icon"
|
|
31031
31159
|
[name]="item.icon"
|
|
31032
31160
|
[size]="16"
|
|
31033
|
-
[style.color]="item.tone || null"
|
|
31161
|
+
[style.color]="item.headerTone || item.tone || null"
|
|
31034
31162
|
/>
|
|
31035
31163
|
}
|
|
31036
31164
|
<span class="strct-ps__label">{{ chipText() }}</span>
|
|
@@ -31053,22 +31181,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
31053
31181
|
StrctDropdownItemDescription,
|
|
31054
31182
|
StrctDropdownDivider,
|
|
31055
31183
|
], template: `
|
|
31056
|
-
<!-- What a row holds, whichever element carries it. -->
|
|
31057
|
-
<ng-template #rowBody let-item>
|
|
31058
|
-
@if (item.icon) {
|
|
31059
|
-
<strct-icon strctDropdownItemIcon [tone]="item.tone ?? ''" [name]="item.icon" [size]="16" />
|
|
31060
|
-
}
|
|
31061
|
-
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31062
|
-
@if (item.description) {
|
|
31063
|
-
<span strctDropdownItemDescription>
|
|
31064
|
-
@if (item.status) {
|
|
31065
|
-
<strct-status-dot [status]="item.status" />
|
|
31066
|
-
}
|
|
31067
|
-
{{ item.description }}
|
|
31068
|
-
</span>
|
|
31069
|
-
}
|
|
31070
|
-
</ng-template>
|
|
31071
|
-
|
|
31072
31184
|
<!-- A row is a link where the product has an address, so it can be opened
|
|
31073
31185
|
in a new tab — and a menuitemradio either way, checked on the one you
|
|
31074
31186
|
are in. -->
|
|
@@ -31080,7 +31192,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
31080
31192
|
[selected]="item.id === current()"
|
|
31081
31193
|
(click)="pick(item, $event)"
|
|
31082
31194
|
>
|
|
31083
|
-
|
|
31195
|
+
@if (item.icon) {
|
|
31196
|
+
<strct-icon
|
|
31197
|
+
strctDropdownItemIcon
|
|
31198
|
+
[tone]="item.tone ?? ''"
|
|
31199
|
+
[name]="item.icon"
|
|
31200
|
+
[size]="16"
|
|
31201
|
+
/>
|
|
31202
|
+
}
|
|
31203
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31204
|
+
@if (item.description) {
|
|
31205
|
+
<span strctDropdownItemDescription>
|
|
31206
|
+
@if (item.status) {
|
|
31207
|
+
<strct-status-dot [status]="item.status" />
|
|
31208
|
+
}
|
|
31209
|
+
{{ item.description }}
|
|
31210
|
+
</span>
|
|
31211
|
+
}
|
|
31084
31212
|
</a>
|
|
31085
31213
|
} @else if (item.href && !item.disabled) {
|
|
31086
31214
|
<a
|
|
@@ -31089,7 +31217,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
31089
31217
|
[selected]="item.id === current()"
|
|
31090
31218
|
(click)="pick(item, $event)"
|
|
31091
31219
|
>
|
|
31092
|
-
|
|
31220
|
+
@if (item.icon) {
|
|
31221
|
+
<strct-icon
|
|
31222
|
+
strctDropdownItemIcon
|
|
31223
|
+
[tone]="item.tone ?? ''"
|
|
31224
|
+
[name]="item.icon"
|
|
31225
|
+
[size]="16"
|
|
31226
|
+
/>
|
|
31227
|
+
}
|
|
31228
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31229
|
+
@if (item.description) {
|
|
31230
|
+
<span strctDropdownItemDescription>
|
|
31231
|
+
@if (item.status) {
|
|
31232
|
+
<strct-status-dot [status]="item.status" />
|
|
31233
|
+
}
|
|
31234
|
+
{{ item.description }}
|
|
31235
|
+
</span>
|
|
31236
|
+
}
|
|
31093
31237
|
</a>
|
|
31094
31238
|
} @else {
|
|
31095
31239
|
<strct-dropdown-item
|
|
@@ -31097,7 +31241,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
31097
31241
|
[disabled]="!!item.disabled"
|
|
31098
31242
|
(click)="pick(item)"
|
|
31099
31243
|
>
|
|
31100
|
-
|
|
31244
|
+
@if (item.icon) {
|
|
31245
|
+
<strct-icon
|
|
31246
|
+
strctDropdownItemIcon
|
|
31247
|
+
[tone]="item.tone ?? ''"
|
|
31248
|
+
[name]="item.icon"
|
|
31249
|
+
[size]="16"
|
|
31250
|
+
/>
|
|
31251
|
+
}
|
|
31252
|
+
<span strctDropdownItemLabel>{{ item.name }}</span>
|
|
31253
|
+
@if (item.description) {
|
|
31254
|
+
<span strctDropdownItemDescription>
|
|
31255
|
+
@if (item.status) {
|
|
31256
|
+
<strct-status-dot [status]="item.status" />
|
|
31257
|
+
}
|
|
31258
|
+
{{ item.description }}
|
|
31259
|
+
</span>
|
|
31260
|
+
}
|
|
31101
31261
|
</strct-dropdown-item>
|
|
31102
31262
|
}
|
|
31103
31263
|
</ng-template>
|
|
@@ -31137,7 +31297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
31137
31297
|
class="strct-ps__icon"
|
|
31138
31298
|
[name]="item.icon"
|
|
31139
31299
|
[size]="16"
|
|
31140
|
-
[style.color]="item.tone || null"
|
|
31300
|
+
[style.color]="item.headerTone || item.tone || null"
|
|
31141
31301
|
/>
|
|
31142
31302
|
}
|
|
31143
31303
|
<span class="strct-ps__label">{{ chipText() }}</span>
|