@akcelik/strct 4.14.0 → 4.16.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.
@@ -2113,6 +2113,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
2113
2113
  * <strct-avatar name="Ada Lovelace" status="online" />
2114
2114
  */
2115
2115
  class StrctAvatar {
2116
+ /**
2117
+ * An icon instead of initials — a group, an assistant, a brand mark. An
2118
+ * `src` image still wins.
2119
+ */
2120
+ icon = input('', /* @ts-ignore */
2121
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
2122
+ /** `square` for a thing rather than a person (a group, an app). */
2123
+ shape = input('circle', /* @ts-ignore */
2124
+ ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
2125
+ /** Surface tone. `neutral` keeps the default grey tile. */
2126
+ tone = input('neutral', /* @ts-ignore */
2127
+ ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
2128
+ /** The icon scales with the avatar. */
2129
+ iconSize = computed(() => this.size() === 'lg' ? 22 : this.size() === 'sm' ? 13 : 17, /* @ts-ignore */
2130
+ ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
2116
2131
  /** Image URL. */
2117
2132
  src = input('', /* @ts-ignore */
2118
2133
  ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
@@ -2135,22 +2150,30 @@ class StrctAvatar {
2135
2150
  }, /* @ts-ignore */
2136
2151
  ...(ngDevMode ? [{ debugName: "initials" }] : /* istanbul ignore next */ []));
2137
2152
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
2138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctAvatar, isStandalone: true, selector: "strct-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-av--sm": "size() === 'sm'", "class.strct-av--lg": "size() === 'lg'", "class.strct-av--online": "status() === 'online'", "class.strct-av--busy": "status() === 'busy'", "class.strct-av--offline": "status() === 'offline'", "attr.title": "name() || null" }, classAttribute: "strct-av" }, ngImport: i0, template: `
2153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctAvatar, isStandalone: true, selector: "strct-avatar", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-av--square": "shape() === 'square'", "attr.data-tone": "tone()", "class.strct-av--sm": "size() === 'sm'", "class.strct-av--lg": "size() === 'lg'", "class.strct-av--online": "status() === 'online'", "class.strct-av--busy": "status() === 'busy'", "class.strct-av--offline": "status() === 'offline'", "attr.title": "name() || null" }, classAttribute: "strct-av" }, ngImport: i0, template: `
2139
2154
  @if (src()) {
2140
2155
  <img class="strct-av__img" [src]="src()" [alt]="name()" />
2156
+ } @else if (icon()) {
2157
+ <!-- Not every avatar is a person with initials: a group, an assistant, a
2158
+ brand mark. -->
2159
+ <strct-icon class="strct-av__icon" [name]="icon()" [size]="iconSize()" />
2141
2160
  } @else {
2142
2161
  <span class="strct-av__initials">{{ initials() }}</span>
2143
2162
  }
2144
2163
  @if (status() !== 'none') {
2145
2164
  <span class="strct-av__status"></span>
2146
2165
  }
2147
- `, isInline: true, styles: [".strct-av{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--bg-3);color:var(--t1);overflow:visible;font-size:13px;font-weight:600;-webkit-user-select:none;user-select:none;border:1px solid var(--b2)}.strct-av--sm{width:26px;height:26px;font-size:12px}.strct-av--lg{width:48px;height:48px;font-size:17px}.strct-av__img{width:100%;height:100%;border-radius:50%;object-fit:cover}.strct-av__initials{line-height:1}.strct-av__status{position:absolute;inset-inline-end:-1px;bottom:-1px;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--bg-1);background:var(--t3)}.strct-av--online .strct-av__status{background:var(--success)}.strct-av--busy .strct-av__status{background:var(--critical)}.strct-av--offline .strct-av__status{background:var(--t3)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2166
+ `, isInline: true, styles: [".strct-av{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--bg-3);color:var(--t1);overflow:visible;font-size:13px;font-weight:600;-webkit-user-select:none;user-select:none;border:1px solid var(--b2)}.strct-av--square,.strct-av--square .strct-av__img{border-radius:var(--radius-md)}.strct-av__icon{line-height:0}.strct-av[data-tone=accent]{background:var(--acc);border-color:transparent;color:var(--inv)}.strct-av[data-tone=accent-soft]{background:var(--acc-m);border-color:var(--acc30);color:var(--acc)}.strct-av[data-tone=success]{background:var(--success);border-color:transparent;color:var(--inv)}.strct-av[data-tone=warning]{background:var(--warning);border-color:transparent;color:var(--inv)}.strct-av[data-tone=critical]{background:var(--critical);border-color:transparent;color:var(--inv)}.strct-av--sm{width:26px;height:26px;font-size:12px}.strct-av--lg{width:48px;height:48px;font-size:17px}.strct-av__img{width:100%;height:100%;border-radius:50%;object-fit:cover}.strct-av__initials{line-height:1}.strct-av__status{position:absolute;inset-inline-end:-1px;bottom:-1px;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--bg-1);background:var(--t3)}.strct-av--online .strct-av__status{background:var(--success)}.strct-av--busy .strct-av__status{background:var(--critical)}.strct-av--offline .strct-av__status{background:var(--t3)}\n"], dependencies: [{ kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2148
2167
  }
2149
2168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctAvatar, decorators: [{
2150
2169
  type: Component,
2151
- args: [{ selector: 'strct-avatar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
2170
+ args: [{ selector: 'strct-avatar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [StrctIcon], template: `
2152
2171
  @if (src()) {
2153
2172
  <img class="strct-av__img" [src]="src()" [alt]="name()" />
2173
+ } @else if (icon()) {
2174
+ <!-- Not every avatar is a person with initials: a group, an assistant, a
2175
+ brand mark. -->
2176
+ <strct-icon class="strct-av__icon" [name]="icon()" [size]="iconSize()" />
2154
2177
  } @else {
2155
2178
  <span class="strct-av__initials">{{ initials() }}</span>
2156
2179
  }
@@ -2159,14 +2182,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
2159
2182
  }
2160
2183
  `, host: {
2161
2184
  class: 'strct-av',
2185
+ '[class.strct-av--square]': "shape() === 'square'",
2186
+ '[attr.data-tone]': 'tone()',
2162
2187
  '[class.strct-av--sm]': "size() === 'sm'",
2163
2188
  '[class.strct-av--lg]': "size() === 'lg'",
2164
2189
  '[class.strct-av--online]': "status() === 'online'",
2165
2190
  '[class.strct-av--busy]': "status() === 'busy'",
2166
2191
  '[class.strct-av--offline]': "status() === 'offline'",
2167
2192
  '[attr.title]': 'name() || null',
2168
- }, styles: [".strct-av{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--bg-3);color:var(--t1);overflow:visible;font-size:13px;font-weight:600;-webkit-user-select:none;user-select:none;border:1px solid var(--b2)}.strct-av--sm{width:26px;height:26px;font-size:12px}.strct-av--lg{width:48px;height:48px;font-size:17px}.strct-av__img{width:100%;height:100%;border-radius:50%;object-fit:cover}.strct-av__initials{line-height:1}.strct-av__status{position:absolute;inset-inline-end:-1px;bottom:-1px;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--bg-1);background:var(--t3)}.strct-av--online .strct-av__status{background:var(--success)}.strct-av--busy .strct-av__status{background:var(--critical)}.strct-av--offline .strct-av__status{background:var(--t3)}\n"] }]
2169
- }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }] } });
2193
+ }, styles: [".strct-av{position:relative;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--bg-3);color:var(--t1);overflow:visible;font-size:13px;font-weight:600;-webkit-user-select:none;user-select:none;border:1px solid var(--b2)}.strct-av--square,.strct-av--square .strct-av__img{border-radius:var(--radius-md)}.strct-av__icon{line-height:0}.strct-av[data-tone=accent]{background:var(--acc);border-color:transparent;color:var(--inv)}.strct-av[data-tone=accent-soft]{background:var(--acc-m);border-color:var(--acc30);color:var(--acc)}.strct-av[data-tone=success]{background:var(--success);border-color:transparent;color:var(--inv)}.strct-av[data-tone=warning]{background:var(--warning);border-color:transparent;color:var(--inv)}.strct-av[data-tone=critical]{background:var(--critical);border-color:transparent;color:var(--inv)}.strct-av--sm{width:26px;height:26px;font-size:12px}.strct-av--lg{width:48px;height:48px;font-size:17px}.strct-av__img{width:100%;height:100%;border-radius:50%;object-fit:cover}.strct-av__initials{line-height:1}.strct-av__status{position:absolute;inset-inline-end:-1px;bottom:-1px;width:30%;height:30%;min-width:8px;min-height:8px;border-radius:50%;border:2px solid var(--bg-1);background:var(--t3)}.strct-av--online .strct-av__status{background:var(--success)}.strct-av--busy .strct-av__status{background:var(--critical)}.strct-av--offline .strct-av__status{background:var(--t3)}\n"] }]
2194
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }] } });
2170
2195
 
2171
2196
  /**
2172
2197
  * Horizontal value/usage bar. `<strct-progress [value]="72" status="warning" />`.
@@ -3979,6 +4004,11 @@ class StrctTree {
3979
4004
  */
3980
4005
  density = input('compact', /* @ts-ignore */
3981
4006
  ...(ngDevMode ? [{ debugName: "density" }] : /* istanbul ignore next */ []));
4007
+ /** A bordered surface around the tree — for a picker inside a dialog. */
4008
+ framed = input(false, { ...(ngDevMode ? { debugName: "framed" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
4009
+ /** Caps the height in px; the tree scrolls inside its frame. */
4010
+ maxHeight = input(null, /* @ts-ignore */
4011
+ ...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
3982
4012
  /** Per-node right-click menu resolver. */
3983
4013
  nodeMenu = input(null, /* @ts-ignore */
3984
4014
  ...(ngDevMode ? [{ debugName: "nodeMenu" }] : /* istanbul ignore next */ []));
@@ -4347,7 +4377,7 @@ class StrctTree {
4347
4377
  this.expandedChange.emit([...this.currentSet()]);
4348
4378
  }
4349
4379
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTree, deps: [], target: i0.ɵɵFactoryTarget.Component });
4350
- 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 }, 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'" }, classAttribute: "strct-tree" }, queries: [{ propertyName: "projectedNodes", predicate: StrctTreeNode, isSignal: true }], ngImport: i0, template: `
4380
+ 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: `
4351
4381
  @if (nodes(); as ns) {
4352
4382
  @for (n of ns; track n.id ?? n.label) {
4353
4383
  <strct-tree-node
@@ -4360,7 +4390,7 @@ class StrctTree {
4360
4390
  } @else {
4361
4391
  <ng-content />
4362
4392
  }
4363
- `, isInline: true, styles: [".strct-tree{display:block}.strct-tree--comfortable .strct-tnode__row{gap:7px;padding:6px 10px;border-radius:6px;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"], dependencies: [{ kind: "component", type: StrctTreeNode, selector: "strct-tree-node", inputs: ["node", "label", "icon", "badge", "active", "expanded", "nodeMenu"], outputs: ["expandedChange", "activated", "nodeActivated", "nodeMenuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4393
+ `, isInline: true, 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:6px;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"], dependencies: [{ kind: "component", type: StrctTreeNode, selector: "strct-tree-node", inputs: ["node", "label", "icon", "badge", "active", "expanded", "nodeMenu"], outputs: ["expandedChange", "activated", "nodeActivated", "nodeMenuSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4364
4394
  }
4365
4395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTree, decorators: [{
4366
4396
  type: Component,
@@ -4381,8 +4411,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
4381
4411
  class: 'strct-tree',
4382
4412
  role: 'tree',
4383
4413
  '[class.strct-tree--comfortable]': "density() === 'comfortable'",
4384
- }, styles: [".strct-tree{display:block}.strct-tree--comfortable .strct-tnode__row{gap:7px;padding:6px 10px;border-radius:6px;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"] }]
4385
- }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", 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 }] }] } });
4414
+ '[class.strct-tree--framed]': 'framed()',
4415
+ '[style.max-height.px]': 'maxHeight()',
4416
+ }, 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:6px;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"] }]
4417
+ }], 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 }] }] } });
4386
4418
 
4387
4419
  /**
4388
4420
  * Dev-mode diagnostics for combinations a component accepts but cannot honour.
@@ -12073,6 +12105,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
12073
12105
  args: ['document:keydown.escape', ['$event']]
12074
12106
  }] } });
12075
12107
 
12108
+ /**
12109
+ * Default accessible text per status, used when `label` is not given
12110
+ * (localizable — override via `label`). The canonical `StrctStatus` vocabulary
12111
+ * has no 'ok'/'info': OK maps to 'success', info to 'accent'.
12112
+ */
12113
+ const DEFAULT_LABEL = {
12114
+ neutral: 'Neutral',
12115
+ accent: 'Info',
12116
+ success: 'OK',
12117
+ warning: 'Warning',
12118
+ critical: 'Critical',
12119
+ };
12120
+ /**
12121
+ * Presence/state dot that never relies on colour alone: the tone is painted by
12122
+ * a pure-CSS dot while the state is also rendered as visually-hidden text, so
12123
+ * screen readers (and colour-blind users copying text) get "Warning", not just
12124
+ * a yellow circle. Use it inside avatars, menu rows, metric tiles — anywhere a
12125
+ * bare coloured dot would otherwise carry meaning.
12126
+ *
12127
+ * <strct-status-dot status="success" />
12128
+ * <strct-status-dot status="critical" size="sm" label="Node unreachable" />
12129
+ */
12130
+ class StrctStatusDot {
12131
+ /** Status tone (canonical vocabulary: OK = 'success', info = 'accent'). */
12132
+ status = input('neutral', /* @ts-ignore */
12133
+ ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
12134
+ /**
12135
+ * Accessible text describing the state (localizable). Empty falls back to a
12136
+ * per-status default ("OK", "Warning", …) so the dot is never color-only.
12137
+ */
12138
+ label = input('', /* @ts-ignore */
12139
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
12140
+ /** Dot size: `sm` for dense rows, `md` standalone. */
12141
+ size = input('md', /* @ts-ignore */
12142
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
12143
+ /**
12144
+ * Something happening *now* — a task running, a live chart. The halo pulses
12145
+ * once a second; the dot itself never changes size, so a column of dots does
12146
+ * not jitter. Under `prefers-reduced-motion` the halo is a static ring.
12147
+ */
12148
+ pulse = input(false, { ...(ngDevMode ? { debugName: "pulse" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
12149
+ text = computed(() => this.label() || DEFAULT_LABEL[this.status()], /* @ts-ignore */
12150
+ ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
12151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctStatusDot, deps: [], target: i0.ɵɵFactoryTarget.Component });
12152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: StrctStatusDot, isStandalone: true, selector: "strct-status-dot", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, pulse: { classPropertyName: "pulse", publicName: "pulse", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-dot--accent": "status() === 'accent'", "class.strct-dot--success": "status() === 'success'", "class.strct-dot--warning": "status() === 'warning'", "class.strct-dot--critical": "status() === 'critical'", "class.strct-dot--sm": "size() === 'sm'", "class.strct-dot--pulse": "pulse()" }, classAttribute: "strct-dot" }, ngImport: i0, template: `
12153
+ <span class="strct-dot__dot" aria-hidden="true"></span>
12154
+ <span class="strct-dot__sr">{{ text() }}</span>
12155
+ `, isInline: true, styles: [".strct-dot{display:inline-flex;align-items:center;flex:none;line-height:0}.strct-dot__dot{width:10px;height:10px;border-radius:50%;background:var(--t3)}.strct-dot--sm .strct-dot__dot{width:8px;height:8px}.strct-dot--accent .strct-dot__dot{background:var(--acc)}.strct-dot--success .strct-dot__dot{background:var(--success)}.strct-dot--warning .strct-dot__dot{background:var(--warning)}.strct-dot--critical .strct-dot__dot{background:var(--critical)}.strct-dot--pulse .strct-dot__dot{position:relative}.strct-dot--pulse .strct-dot__dot:after{content:\"\";position:absolute;inset:0;border-radius:50%;background:inherit;animation:strct-dot-pulse 1s ease-out infinite}@keyframes strct-dot-pulse{0%{box-shadow:0 0 0 0 currentColor;opacity:.55}to{box-shadow:0 0 0 5px transparent;opacity:0}}.strct-dot--pulse .strct-dot__dot{color:var(--t3)}.strct-dot--pulse.strct-dot--accent .strct-dot__dot{color:var(--acc)}.strct-dot--pulse.strct-dot--success .strct-dot__dot{color:var(--success)}.strct-dot--pulse.strct-dot--warning .strct-dot__dot{color:var(--warning)}.strct-dot--pulse.strct-dot--critical .strct-dot__dot{color:var(--critical)}@media(prefers-reduced-motion:reduce){.strct-dot--pulse .strct-dot__dot:after{animation:none;box-shadow:0 0 0 3px currentColor;opacity:.25}}.strct-dot__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12156
+ }
12157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctStatusDot, decorators: [{
12158
+ type: Component,
12159
+ args: [{ selector: 'strct-status-dot', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
12160
+ <span class="strct-dot__dot" aria-hidden="true"></span>
12161
+ <span class="strct-dot__sr">{{ text() }}</span>
12162
+ `, host: {
12163
+ class: 'strct-dot',
12164
+ '[class.strct-dot--accent]': "status() === 'accent'",
12165
+ '[class.strct-dot--success]': "status() === 'success'",
12166
+ '[class.strct-dot--warning]': "status() === 'warning'",
12167
+ '[class.strct-dot--critical]': "status() === 'critical'",
12168
+ '[class.strct-dot--sm]': "size() === 'sm'",
12169
+ '[class.strct-dot--pulse]': 'pulse()',
12170
+ }, styles: [".strct-dot{display:inline-flex;align-items:center;flex:none;line-height:0}.strct-dot__dot{width:10px;height:10px;border-radius:50%;background:var(--t3)}.strct-dot--sm .strct-dot__dot{width:8px;height:8px}.strct-dot--accent .strct-dot__dot{background:var(--acc)}.strct-dot--success .strct-dot__dot{background:var(--success)}.strct-dot--warning .strct-dot__dot{background:var(--warning)}.strct-dot--critical .strct-dot__dot{background:var(--critical)}.strct-dot--pulse .strct-dot__dot{position:relative}.strct-dot--pulse .strct-dot__dot:after{content:\"\";position:absolute;inset:0;border-radius:50%;background:inherit;animation:strct-dot-pulse 1s ease-out infinite}@keyframes strct-dot-pulse{0%{box-shadow:0 0 0 0 currentColor;opacity:.55}to{box-shadow:0 0 0 5px transparent;opacity:0}}.strct-dot--pulse .strct-dot__dot{color:var(--t3)}.strct-dot--pulse.strct-dot--accent .strct-dot__dot{color:var(--acc)}.strct-dot--pulse.strct-dot--success .strct-dot__dot{color:var(--success)}.strct-dot--pulse.strct-dot--warning .strct-dot__dot{color:var(--warning)}.strct-dot--pulse.strct-dot--critical .strct-dot__dot{color:var(--critical)}@media(prefers-reduced-motion:reduce){.strct-dot--pulse .strct-dot__dot:after{animation:none;box-shadow:0 0 0 3px currentColor;opacity:.25}}.strct-dot__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n"] }]
12171
+ }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], pulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "pulse", required: false }] }] } });
12172
+
12076
12173
  /**
12077
12174
  * Compact definition list: aligned `label : value` rows with an optional trailing
12078
12175
  * slot. The `inline` variant is the horizontal "stat strip" (label-value pairs in
@@ -12097,8 +12194,11 @@ class StrctDescriptionList {
12097
12194
  /** Value alignment in stacked mode. */
12098
12195
  align = input('between', /* @ts-ignore */
12099
12196
  ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
12197
+ /** Fixes the label column of `align="grid"` (e.g. `'160px'`). */
12198
+ labelWidth = input(null, /* @ts-ignore */
12199
+ ...(ngDevMode ? [{ debugName: "labelWidth" }] : /* istanbul ignore next */ []));
12100
12200
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDescriptionList, deps: [], target: i0.ɵɵFactoryTarget.Component });
12101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctDescriptionList, isStandalone: true, selector: "strct-description-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-dl--inline": "inline()", "class.strct-dl--start": "align() === 'start'" }, classAttribute: "strct-dl" }, ngImport: i0, template: `
12201
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctDescriptionList, isStandalone: true, selector: "strct-description-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-dl--inline": "inline()", "class.strct-dl--start": "align() === 'start'", "class.strct-dl--grid": "align() === 'grid'", "style.--strct-dl-label-w": "labelWidth()" }, classAttribute: "strct-dl" }, ngImport: i0, template: `
12102
12202
  <dl class="strct-dl__list">
12103
12203
  @for (item of items(); track $index) {
12104
12204
  <div
@@ -12112,7 +12212,7 @@ class StrctDescriptionList {
12112
12212
  }
12113
12213
  <ng-content />
12114
12214
  </dl>
12115
- `, isInline: true, styles: [".strct-dl{display:flex;flex-direction:column;min-width:0}.strct-dl__list{display:flex;flex-direction:column;margin:0;padding:0;min-width:0}.strct-dl--inline .strct-dl__list{flex-direction:row;flex-wrap:wrap;gap:var(--space-3) var(--space-5);align-items:flex-start}.strct-desc{display:flex;align-items:baseline;gap:var(--space-3);padding:6px 0;font-size:var(--text-md);min-width:0}.strct-dl:not(.strct-dl--inline) .strct-desc{justify-content:space-between}.strct-dl:not(.strct-dl--inline) .strct-desc+.strct-desc{border-top:1px solid var(--b1)}.strct-dl--start .strct-desc{justify-content:flex-start}.strct-dl--inline .strct-desc{flex-direction:column;align-items:flex-start;gap:3px;padding:0}.strct-desc__label{color:var(--t3);font-size:var(--text-sm);font-weight:500;flex-shrink:0;white-space:nowrap}.strct-desc__value{margin:0;color:var(--t1);min-width:0;text-align:end}.strct-dl--inline .strct-desc__value,.strct-dl--start .strct-desc__value{text-align:start}.strct-desc--mono .strct-desc__value{font-family:var(--mono);font-size:var(--text-sm)}.strct-desc--muted .strct-desc__value{color:var(--t3)}.strct-desc__value:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12215
+ `, isInline: true, styles: [".strct-dl{display:flex;flex-direction:column;min-width:0}.strct-dl__list{display:flex;flex-direction:column;margin:0;padding:0;min-width:0}.strct-dl--inline .strct-dl__list{flex-direction:row;flex-wrap:wrap;gap:var(--space-3) var(--space-5);align-items:flex-start}.strct-desc{display:flex;align-items:baseline;gap:var(--space-3);padding:6px 0;font-size:var(--text-md);min-width:0}.strct-dl:not(.strct-dl--inline) .strct-desc{justify-content:space-between}.strct-dl:not(.strct-dl--inline) .strct-desc+.strct-desc{border-top:1px solid var(--b1)}.strct-dl--start .strct-desc{justify-content:flex-start}.strct-dl--inline .strct-desc{flex-direction:column;align-items:flex-start;gap:3px;padding:0}.strct-desc__label{color:var(--t3);font-size:var(--text-sm);font-weight:500;flex-shrink:0;white-space:nowrap}.strct-desc__value{margin:0;color:var(--t1);min-width:0;text-align:end}.strct-dl--inline .strct-desc__value,.strct-dl--start .strct-desc__value{text-align:start}.strct-desc--mono .strct-desc__value{font-family:var(--mono);font-size:var(--text-sm)}.strct-desc--muted .strct-desc__value{color:var(--t3)}.strct-desc__value:empty{display:none}.strct-dl--grid .strct-dl__list{display:grid;grid-template-columns:var(--strct-dl-label-w, max-content) minmax(0,1fr);column-gap:var(--space-4)}.strct-dl--grid .strct-desc{display:contents}.strct-dl--grid .strct-desc__label,.strct-dl--grid .strct-desc__value{padding:6px 0;text-align:start}.strct-dl--grid .strct-desc+.strct-desc>.strct-desc__label,.strct-dl--grid .strct-desc+.strct-desc>.strct-desc__value{border-top:1px solid var(--b1)}.strct-desc__label{display:inline-flex;align-items:center;gap:6px}.strct-desc__note{display:block;margin-top:1px;font-size:var(--text-sm);color:var(--t3)}.strct-desc__note:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12116
12216
  }
12117
12217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDescriptionList, decorators: [{
12118
12218
  type: Component,
@@ -12134,8 +12234,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
12134
12234
  class: 'strct-dl',
12135
12235
  '[class.strct-dl--inline]': 'inline()',
12136
12236
  '[class.strct-dl--start]': "align() === 'start'",
12137
- }, styles: [".strct-dl{display:flex;flex-direction:column;min-width:0}.strct-dl__list{display:flex;flex-direction:column;margin:0;padding:0;min-width:0}.strct-dl--inline .strct-dl__list{flex-direction:row;flex-wrap:wrap;gap:var(--space-3) var(--space-5);align-items:flex-start}.strct-desc{display:flex;align-items:baseline;gap:var(--space-3);padding:6px 0;font-size:var(--text-md);min-width:0}.strct-dl:not(.strct-dl--inline) .strct-desc{justify-content:space-between}.strct-dl:not(.strct-dl--inline) .strct-desc+.strct-desc{border-top:1px solid var(--b1)}.strct-dl--start .strct-desc{justify-content:flex-start}.strct-dl--inline .strct-desc{flex-direction:column;align-items:flex-start;gap:3px;padding:0}.strct-desc__label{color:var(--t3);font-size:var(--text-sm);font-weight:500;flex-shrink:0;white-space:nowrap}.strct-desc__value{margin:0;color:var(--t1);min-width:0;text-align:end}.strct-dl--inline .strct-desc__value,.strct-dl--start .strct-desc__value{text-align:start}.strct-desc--mono .strct-desc__value{font-family:var(--mono);font-size:var(--text-sm)}.strct-desc--muted .strct-desc__value{color:var(--t3)}.strct-desc__value:empty{display:none}\n"] }]
12138
- }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
12237
+ '[class.strct-dl--grid]': "align() === 'grid'",
12238
+ '[style.--strct-dl-label-w]': 'labelWidth()',
12239
+ }, styles: [".strct-dl{display:flex;flex-direction:column;min-width:0}.strct-dl__list{display:flex;flex-direction:column;margin:0;padding:0;min-width:0}.strct-dl--inline .strct-dl__list{flex-direction:row;flex-wrap:wrap;gap:var(--space-3) var(--space-5);align-items:flex-start}.strct-desc{display:flex;align-items:baseline;gap:var(--space-3);padding:6px 0;font-size:var(--text-md);min-width:0}.strct-dl:not(.strct-dl--inline) .strct-desc{justify-content:space-between}.strct-dl:not(.strct-dl--inline) .strct-desc+.strct-desc{border-top:1px solid var(--b1)}.strct-dl--start .strct-desc{justify-content:flex-start}.strct-dl--inline .strct-desc{flex-direction:column;align-items:flex-start;gap:3px;padding:0}.strct-desc__label{color:var(--t3);font-size:var(--text-sm);font-weight:500;flex-shrink:0;white-space:nowrap}.strct-desc__value{margin:0;color:var(--t1);min-width:0;text-align:end}.strct-dl--inline .strct-desc__value,.strct-dl--start .strct-desc__value{text-align:start}.strct-desc--mono .strct-desc__value{font-family:var(--mono);font-size:var(--text-sm)}.strct-desc--muted .strct-desc__value{color:var(--t3)}.strct-desc__value:empty{display:none}.strct-dl--grid .strct-dl__list{display:grid;grid-template-columns:var(--strct-dl-label-w, max-content) minmax(0,1fr);column-gap:var(--space-4)}.strct-dl--grid .strct-desc{display:contents}.strct-dl--grid .strct-desc__label,.strct-dl--grid .strct-desc__value{padding:6px 0;text-align:start}.strct-dl--grid .strct-desc+.strct-desc>.strct-desc__label,.strct-dl--grid .strct-desc+.strct-desc>.strct-desc__value{border-top:1px solid var(--b1)}.strct-desc__label{display:inline-flex;align-items:center;gap:6px}.strct-desc__note{display:block;margin-top:1px;font-size:var(--text-sm);color:var(--t3)}.strct-desc__note:empty{display:none}\n"] }]
12240
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], labelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelWidth", required: false }] }] } });
12139
12241
  /**
12140
12242
  * One projected `label → value` row inside a `<strct-description-list>`. The
12141
12243
  * value is whatever you project, so it can host a badge, icon or formatted text.
@@ -12148,11 +12250,36 @@ class StrctDesc {
12148
12250
  mono = input(false, { ...(ngDevMode ? { debugName: "mono" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
12149
12251
  /** Dim the projected value. */
12150
12252
  muted = input(false, { ...(ngDevMode ? { debugName: "muted" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
12253
+ /** A status dot before the label — "Agent · connected". */
12254
+ status = input(null, /* @ts-ignore */
12255
+ ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
12256
+ /** Accessible text for that dot; empty falls back to the per-status default. */
12257
+ statusLabel = input('', /* @ts-ignore */
12258
+ ...(ngDevMode ? [{ debugName: "statusLabel" }] : /* istanbul ignore next */ []));
12259
+ /** A leading icon before the label. */
12260
+ icon = input('', /* @ts-ignore */
12261
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
12262
+ /** A quiet second line under the value — "last seen 12 s ago". */
12263
+ note = input('', /* @ts-ignore */
12264
+ ...(ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []));
12151
12265
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDesc, deps: [], target: i0.ɵɵFactoryTarget.Component });
12152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: StrctDesc, isStandalone: true, selector: "strct-desc", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, mono: { classPropertyName: "mono", publicName: "mono", isSignal: true, isRequired: false, transformFunction: null }, muted: { classPropertyName: "muted", publicName: "muted", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-desc--mono": "mono()", "class.strct-desc--muted": "muted()" }, classAttribute: "strct-desc" }, ngImport: i0, template: `
12153
- <dt class="strct-desc__label">{{ label() }}</dt>
12154
- <dd class="strct-desc__value"><ng-content /></dd>
12155
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12266
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctDesc, isStandalone: true, selector: "strct-desc", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, mono: { classPropertyName: "mono", publicName: "mono", isSignal: true, isRequired: false, transformFunction: null }, muted: { classPropertyName: "muted", publicName: "muted", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, statusLabel: { classPropertyName: "statusLabel", publicName: "statusLabel", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, note: { classPropertyName: "note", publicName: "note", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-desc--mono": "mono()", "class.strct-desc--muted": "muted()" }, classAttribute: "strct-desc" }, ngImport: i0, template: `
12267
+ <dt class="strct-desc__label">
12268
+ @if (status()) {
12269
+ <strct-status-dot size="sm" [status]="status()!" [label]="statusLabel()" />
12270
+ }
12271
+ @if (icon()) {
12272
+ <strct-icon [name]="icon()" [size]="14" />
12273
+ }
12274
+ {{ label() }}
12275
+ </dt>
12276
+ <dd class="strct-desc__value">
12277
+ <ng-content />
12278
+ @if (note()) {
12279
+ <span class="strct-desc__note">{{ note() }}</span>
12280
+ }
12281
+ </dd>
12282
+ `, isInline: true, dependencies: [{ kind: "component", type: StrctIcon, selector: "strct-icon", inputs: ["name", "strictName", "size", "strokeWidth", "badge", "ariaLabel", "count", "countMax", "countStatus", "countLabel"] }, { kind: "component", type: StrctStatusDot, selector: "strct-status-dot", inputs: ["status", "label", "size", "pulse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12156
12283
  }
12157
12284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDesc, decorators: [{
12158
12285
  type: Component,
@@ -12160,9 +12287,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
12160
12287
  selector: 'strct-desc',
12161
12288
  changeDetection: ChangeDetectionStrategy.OnPush,
12162
12289
  encapsulation: ViewEncapsulation.None,
12290
+ imports: [StrctIcon, StrctStatusDot],
12163
12291
  template: `
12164
- <dt class="strct-desc__label">{{ label() }}</dt>
12165
- <dd class="strct-desc__value"><ng-content /></dd>
12292
+ <dt class="strct-desc__label">
12293
+ @if (status()) {
12294
+ <strct-status-dot size="sm" [status]="status()!" [label]="statusLabel()" />
12295
+ }
12296
+ @if (icon()) {
12297
+ <strct-icon [name]="icon()" [size]="14" />
12298
+ }
12299
+ {{ label() }}
12300
+ </dt>
12301
+ <dd class="strct-desc__value">
12302
+ <ng-content />
12303
+ @if (note()) {
12304
+ <span class="strct-desc__note">{{ note() }}</span>
12305
+ }
12306
+ </dd>
12166
12307
  `,
12167
12308
  host: {
12168
12309
  class: 'strct-desc',
@@ -12170,7 +12311,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
12170
12311
  '[class.strct-desc--muted]': 'muted()',
12171
12312
  },
12172
12313
  }]
12173
- }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], mono: [{ type: i0.Input, args: [{ isSignal: true, alias: "mono", required: false }] }], muted: [{ type: i0.Input, args: [{ isSignal: true, alias: "muted", required: false }] }] } });
12314
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], mono: [{ type: i0.Input, args: [{ isSignal: true, alias: "mono", required: false }] }], muted: [{ type: i0.Input, args: [{ isSignal: true, alias: "muted", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusLabel", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], note: [{ type: i0.Input, args: [{ isSignal: true, alias: "note", required: false }] }] } });
12174
12315
 
12175
12316
  /**
12176
12317
  * Per-column cell template for `strct-table` / `strct-datagrid`. The column key
@@ -17439,6 +17580,14 @@ class StrctDonut {
17439
17580
  ...(ngDevMode ? [{ debugName: "centerLabel" }] : /* istanbul ignore next */ []));
17440
17581
  /** Show a legend (color · label · value · %) beside the ring. */
17441
17582
  legend = input(false, { ...(ngDevMode ? { debugName: "legend" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
17583
+ /** Where the legend sits: beside the ring, or under it. */
17584
+ legendPosition = input('side', /* @ts-ignore */
17585
+ ...(ngDevMode ? [{ debugName: "legendPosition" }] : /* istanbul ignore next */ []));
17586
+ /**
17587
+ * A zero-value category keeps its legend row, muted — "0 failed" is
17588
+ * information. Set it false to drop those rows instead.
17589
+ */
17590
+ keepEmpty = input(true, { ...(ngDevMode ? { debugName: "keepEmpty" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
17442
17591
  /** Gap between slices, in degrees. */
17443
17592
  gap = input(3, /* @ts-ignore */
17444
17593
  ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
@@ -17477,6 +17626,12 @@ class StrctDonut {
17477
17626
  });
17478
17627
  }, /* @ts-ignore */
17479
17628
  ...(ngDevMode ? [{ debugName: "arcs" }] : /* istanbul ignore next */ []));
17629
+ /** The rows the legend shows — every arc, or only the non-empty ones. */
17630
+ legendArcs = computed(() => {
17631
+ const rows = this.arcs().map((arc, index) => ({ ...arc, index }));
17632
+ return this.keepEmpty() ? rows : rows.filter((r) => r.value !== 0);
17633
+ }, /* @ts-ignore */
17634
+ ...(ngDevMode ? [{ debugName: "legendArcs" }] : /* istanbul ignore next */ []));
17480
17635
  centerMain = computed(() => {
17481
17636
  const h = this.hovered();
17482
17637
  if (h !== null)
@@ -17512,7 +17667,7 @@ class StrctDonut {
17512
17667
  this.hovered.set(null);
17513
17668
  }
17514
17669
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDonut, deps: [], target: i0.ɵɵFactoryTarget.Component });
17515
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctDonut, isStandalone: true, selector: "strct-donut", inputs: { segments: { classPropertyName: "segments", publicName: "segments", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null }, centerValue: { classPropertyName: "centerValue", publicName: "centerValue", isSignal: true, isRequired: false, transformFunction: null }, centerLabel: { classPropertyName: "centerLabel", publicName: "centerLabel", isSignal: true, isRequired: false, transformFunction: null }, legend: { classPropertyName: "legend", publicName: "legend", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "strct-donut" }, ngImport: i0, template: `
17670
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctDonut, isStandalone: true, selector: "strct-donut", inputs: { segments: { classPropertyName: "segments", publicName: "segments", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null }, centerValue: { classPropertyName: "centerValue", publicName: "centerValue", isSignal: true, isRequired: false, transformFunction: null }, centerLabel: { classPropertyName: "centerLabel", publicName: "centerLabel", isSignal: true, isRequired: false, transformFunction: null }, legend: { classPropertyName: "legend", publicName: "legend", isSignal: true, isRequired: false, transformFunction: null }, legendPosition: { classPropertyName: "legendPosition", publicName: "legendPosition", isSignal: true, isRequired: false, transformFunction: null }, keepEmpty: { classPropertyName: "keepEmpty", publicName: "keepEmpty", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-donut--legend-below": "legendPosition() === 'below'" }, classAttribute: "strct-donut" }, ngImport: i0, template: `
17516
17671
  <div class="strct-donut__layout">
17517
17672
  <div class="strct-donut__wrap" [style.width.px]="size()" [style.height.px]="size()">
17518
17673
  <svg
@@ -17561,12 +17716,13 @@ class StrctDonut {
17561
17716
 
17562
17717
  @if (legend()) {
17563
17718
  <ul class="strct-donut__legend">
17564
- @for (arc of arcs(); track $index) {
17719
+ @for (arc of legendArcs(); track arc.index) {
17565
17720
  <li
17566
17721
  class="strct-donut__leg"
17567
- [class.is-active]="hovered() === $index"
17568
- [class.is-dim]="hovered() !== null && hovered() !== $index"
17569
- (pointerenter)="enter($index)"
17722
+ [class.is-active]="hovered() === arc.index"
17723
+ [class.is-dim]="hovered() !== null && hovered() !== arc.index"
17724
+ [class.is-empty]="arc.value === 0"
17725
+ (pointerenter)="enter(arc.index)"
17570
17726
  (pointerleave)="leave()"
17571
17727
  >
17572
17728
  <span class="strct-donut__swatch" [style.background]="arc.color"></span>
@@ -17578,7 +17734,7 @@ class StrctDonut {
17578
17734
  </ul>
17579
17735
  }
17580
17736
  </div>
17581
- `, isInline: true, styles: [".strct-donut{display:inline-block}.strct-donut__layout{display:inline-flex;align-items:center;gap:20px}.strct-donut__wrap{position:relative;flex-shrink:0}.strct-donut__track{stroke:var(--bg-3)}.strct-donut__arc{cursor:pointer;transition:stroke-width .16s ease,opacity .16s ease}.strct-donut__arc.is-dim{opacity:.32}.strct-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.strct-donut__value{font-size:var(--text-2xl);font-weight:650;color:var(--t1);line-height:1;font-variant-numeric:tabular-nums;transition:color .16s ease}.strct-donut__label{font-size:12px;color:var(--t2);margin-top:3px}.strct-donut__legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.strct-donut__leg{display:flex;align-items:center;gap:8px;padding:3px 6px;border-radius:var(--radius-sm);font-size:12px;color:var(--t2);transition:background .14s ease,opacity .14s ease}.strct-donut__leg.is-active{background:var(--bg-2);color:var(--t1)}.strct-donut__leg.is-dim{opacity:.45}.strct-donut__swatch{width:9px;height:9px;border-radius:2px;flex-shrink:0}.strct-donut__leg-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-donut__leg-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--t1)}.strct-donut__leg-pct{font-variant-numeric:tabular-nums;color:var(--t3);min-width:34px;text-align:end}@media(prefers-reduced-motion:no-preference){.strct-donut__svg{transform-origin:center;animation:strct-donut-in .6s cubic-bezier(.22,1,.36,1) both}}@keyframes strct-donut-in{0%{opacity:0;transform:rotate(-16deg) scale(.94)}to{opacity:1;transform:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
17737
+ `, isInline: true, styles: [".strct-donut{display:inline-block}.strct-donut__layout{display:inline-flex;align-items:center;gap:20px}.strct-donut--legend-below .strct-donut__layout{flex-direction:column;align-items:center;gap:12px}.strct-donut__leg.is-empty{opacity:.55}.strct-donut__wrap{position:relative;flex-shrink:0}.strct-donut__track{stroke:var(--bg-3)}.strct-donut__arc{cursor:pointer;transition:stroke-width .16s ease,opacity .16s ease}.strct-donut__arc.is-dim{opacity:.32}.strct-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.strct-donut__value{font-size:var(--text-2xl);font-weight:650;color:var(--t1);line-height:1;font-variant-numeric:tabular-nums;transition:color .16s ease}.strct-donut__label{font-size:12px;color:var(--t2);margin-top:3px}.strct-donut__legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.strct-donut__leg{display:flex;align-items:center;gap:8px;padding:3px 6px;border-radius:var(--radius-sm);font-size:12px;color:var(--t2);transition:background .14s ease,opacity .14s ease}.strct-donut__leg.is-active{background:var(--bg-2);color:var(--t1)}.strct-donut__leg.is-dim{opacity:.45}.strct-donut__swatch{width:9px;height:9px;border-radius:2px;flex-shrink:0}.strct-donut__leg-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-donut__leg-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--t1)}.strct-donut__leg-pct{font-variant-numeric:tabular-nums;color:var(--t3);min-width:34px;text-align:end}@media(prefers-reduced-motion:no-preference){.strct-donut__svg{transform-origin:center;animation:strct-donut-in .6s cubic-bezier(.22,1,.36,1) both}}@keyframes strct-donut-in{0%{opacity:0;transform:rotate(-16deg) scale(.94)}to{opacity:1;transform:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
17582
17738
  }
17583
17739
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctDonut, decorators: [{
17584
17740
  type: Component,
@@ -17631,12 +17787,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
17631
17787
 
17632
17788
  @if (legend()) {
17633
17789
  <ul class="strct-donut__legend">
17634
- @for (arc of arcs(); track $index) {
17790
+ @for (arc of legendArcs(); track arc.index) {
17635
17791
  <li
17636
17792
  class="strct-donut__leg"
17637
- [class.is-active]="hovered() === $index"
17638
- [class.is-dim]="hovered() !== null && hovered() !== $index"
17639
- (pointerenter)="enter($index)"
17793
+ [class.is-active]="hovered() === arc.index"
17794
+ [class.is-dim]="hovered() !== null && hovered() !== arc.index"
17795
+ [class.is-empty]="arc.value === 0"
17796
+ (pointerenter)="enter(arc.index)"
17640
17797
  (pointerleave)="leave()"
17641
17798
  >
17642
17799
  <span class="strct-donut__swatch" [style.background]="arc.color"></span>
@@ -17648,8 +17805,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
17648
17805
  </ul>
17649
17806
  }
17650
17807
  </div>
17651
- `, host: { class: 'strct-donut' }, styles: [".strct-donut{display:inline-block}.strct-donut__layout{display:inline-flex;align-items:center;gap:20px}.strct-donut__wrap{position:relative;flex-shrink:0}.strct-donut__track{stroke:var(--bg-3)}.strct-donut__arc{cursor:pointer;transition:stroke-width .16s ease,opacity .16s ease}.strct-donut__arc.is-dim{opacity:.32}.strct-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.strct-donut__value{font-size:var(--text-2xl);font-weight:650;color:var(--t1);line-height:1;font-variant-numeric:tabular-nums;transition:color .16s ease}.strct-donut__label{font-size:12px;color:var(--t2);margin-top:3px}.strct-donut__legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.strct-donut__leg{display:flex;align-items:center;gap:8px;padding:3px 6px;border-radius:var(--radius-sm);font-size:12px;color:var(--t2);transition:background .14s ease,opacity .14s ease}.strct-donut__leg.is-active{background:var(--bg-2);color:var(--t1)}.strct-donut__leg.is-dim{opacity:.45}.strct-donut__swatch{width:9px;height:9px;border-radius:2px;flex-shrink:0}.strct-donut__leg-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-donut__leg-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--t1)}.strct-donut__leg-pct{font-variant-numeric:tabular-nums;color:var(--t3);min-width:34px;text-align:end}@media(prefers-reduced-motion:no-preference){.strct-donut__svg{transform-origin:center;animation:strct-donut-in .6s cubic-bezier(.22,1,.36,1) both}}@keyframes strct-donut-in{0%{opacity:0;transform:rotate(-16deg) scale(.94)}to{opacity:1;transform:none}}\n"] }]
17652
- }], propDecorators: { segments: [{ type: i0.Input, args: [{ isSignal: true, alias: "segments", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], thickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "thickness", required: false }] }], centerValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerValue", required: false }] }], centerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerLabel", required: false }] }], legend: [{ type: i0.Input, args: [{ isSignal: true, alias: "legend", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }] } });
17808
+ `, host: {
17809
+ class: 'strct-donut',
17810
+ '[class.strct-donut--legend-below]': "legendPosition() === 'below'",
17811
+ }, styles: [".strct-donut{display:inline-block}.strct-donut__layout{display:inline-flex;align-items:center;gap:20px}.strct-donut--legend-below .strct-donut__layout{flex-direction:column;align-items:center;gap:12px}.strct-donut__leg.is-empty{opacity:.55}.strct-donut__wrap{position:relative;flex-shrink:0}.strct-donut__track{stroke:var(--bg-3)}.strct-donut__arc{cursor:pointer;transition:stroke-width .16s ease,opacity .16s ease}.strct-donut__arc.is-dim{opacity:.32}.strct-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.strct-donut__value{font-size:var(--text-2xl);font-weight:650;color:var(--t1);line-height:1;font-variant-numeric:tabular-nums;transition:color .16s ease}.strct-donut__label{font-size:12px;color:var(--t2);margin-top:3px}.strct-donut__legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.strct-donut__leg{display:flex;align-items:center;gap:8px;padding:3px 6px;border-radius:var(--radius-sm);font-size:12px;color:var(--t2);transition:background .14s ease,opacity .14s ease}.strct-donut__leg.is-active{background:var(--bg-2);color:var(--t1)}.strct-donut__leg.is-dim{opacity:.45}.strct-donut__swatch{width:9px;height:9px;border-radius:2px;flex-shrink:0}.strct-donut__leg-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.strct-donut__leg-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--t1)}.strct-donut__leg-pct{font-variant-numeric:tabular-nums;color:var(--t3);min-width:34px;text-align:end}@media(prefers-reduced-motion:no-preference){.strct-donut__svg{transform-origin:center;animation:strct-donut-in .6s cubic-bezier(.22,1,.36,1) both}}@keyframes strct-donut-in{0%{opacity:0;transform:rotate(-16deg) scale(.94)}to{opacity:1;transform:none}}\n"] }]
17812
+ }], propDecorators: { segments: [{ type: i0.Input, args: [{ isSignal: true, alias: "segments", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], thickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "thickness", required: false }] }], centerValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerValue", required: false }] }], centerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerLabel", required: false }] }], legend: [{ type: i0.Input, args: [{ isSignal: true, alias: "legend", required: false }] }], legendPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "legendPosition", required: false }] }], keepEmpty: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepEmpty", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }] } });
17653
17813
 
17654
17814
  const COLOR$1 = {
17655
17815
  accent: 'var(--acc)',
@@ -21893,71 +22053,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
21893
22053
  args: ['keydown', ['$event']]
21894
22054
  }] } });
21895
22055
 
21896
- /**
21897
- * Default accessible text per status, used when `label` is not given
21898
- * (localizable — override via `label`). The canonical `StrctStatus` vocabulary
21899
- * has no 'ok'/'info': OK maps to 'success', info to 'accent'.
21900
- */
21901
- const DEFAULT_LABEL = {
21902
- neutral: 'Neutral',
21903
- accent: 'Info',
21904
- success: 'OK',
21905
- warning: 'Warning',
21906
- critical: 'Critical',
21907
- };
21908
- /**
21909
- * Presence/state dot that never relies on colour alone: the tone is painted by
21910
- * a pure-CSS dot while the state is also rendered as visually-hidden text, so
21911
- * screen readers (and colour-blind users copying text) get "Warning", not just
21912
- * a yellow circle. Use it inside avatars, menu rows, metric tiles — anywhere a
21913
- * bare coloured dot would otherwise carry meaning.
21914
- *
21915
- * <strct-status-dot status="success" />
21916
- * <strct-status-dot status="critical" size="sm" label="Node unreachable" />
21917
- */
21918
- class StrctStatusDot {
21919
- /** Status tone (canonical vocabulary: OK = 'success', info = 'accent'). */
21920
- status = input('neutral', /* @ts-ignore */
21921
- ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
21922
- /**
21923
- * Accessible text describing the state (localizable). Empty falls back to a
21924
- * per-status default ("OK", "Warning", …) so the dot is never color-only.
21925
- */
21926
- label = input('', /* @ts-ignore */
21927
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
21928
- /** Dot size: `sm` for dense rows, `md` standalone. */
21929
- size = input('md', /* @ts-ignore */
21930
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
21931
- /**
21932
- * Something happening *now* — a task running, a live chart. The halo pulses
21933
- * once a second; the dot itself never changes size, so a column of dots does
21934
- * not jitter. Under `prefers-reduced-motion` the halo is a static ring.
21935
- */
21936
- pulse = input(false, { ...(ngDevMode ? { debugName: "pulse" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
21937
- text = computed(() => this.label() || DEFAULT_LABEL[this.status()], /* @ts-ignore */
21938
- ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
21939
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctStatusDot, deps: [], target: i0.ɵɵFactoryTarget.Component });
21940
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: StrctStatusDot, isStandalone: true, selector: "strct-status-dot", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, pulse: { classPropertyName: "pulse", publicName: "pulse", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.strct-dot--accent": "status() === 'accent'", "class.strct-dot--success": "status() === 'success'", "class.strct-dot--warning": "status() === 'warning'", "class.strct-dot--critical": "status() === 'critical'", "class.strct-dot--sm": "size() === 'sm'", "class.strct-dot--pulse": "pulse()" }, classAttribute: "strct-dot" }, ngImport: i0, template: `
21941
- <span class="strct-dot__dot" aria-hidden="true"></span>
21942
- <span class="strct-dot__sr">{{ text() }}</span>
21943
- `, isInline: true, styles: [".strct-dot{display:inline-flex;align-items:center;flex:none;line-height:0}.strct-dot__dot{width:10px;height:10px;border-radius:50%;background:var(--t3)}.strct-dot--sm .strct-dot__dot{width:8px;height:8px}.strct-dot--accent .strct-dot__dot{background:var(--acc)}.strct-dot--success .strct-dot__dot{background:var(--success)}.strct-dot--warning .strct-dot__dot{background:var(--warning)}.strct-dot--critical .strct-dot__dot{background:var(--critical)}.strct-dot--pulse .strct-dot__dot{position:relative}.strct-dot--pulse .strct-dot__dot:after{content:\"\";position:absolute;inset:0;border-radius:50%;background:inherit;animation:strct-dot-pulse 1s ease-out infinite}@keyframes strct-dot-pulse{0%{box-shadow:0 0 0 0 currentColor;opacity:.55}to{box-shadow:0 0 0 5px transparent;opacity:0}}.strct-dot--pulse .strct-dot__dot{color:var(--t3)}.strct-dot--pulse.strct-dot--accent .strct-dot__dot{color:var(--acc)}.strct-dot--pulse.strct-dot--success .strct-dot__dot{color:var(--success)}.strct-dot--pulse.strct-dot--warning .strct-dot__dot{color:var(--warning)}.strct-dot--pulse.strct-dot--critical .strct-dot__dot{color:var(--critical)}@media(prefers-reduced-motion:reduce){.strct-dot--pulse .strct-dot__dot:after{animation:none;box-shadow:0 0 0 3px currentColor;opacity:.25}}.strct-dot__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
21944
- }
21945
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctStatusDot, decorators: [{
21946
- type: Component,
21947
- args: [{ selector: 'strct-status-dot', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
21948
- <span class="strct-dot__dot" aria-hidden="true"></span>
21949
- <span class="strct-dot__sr">{{ text() }}</span>
21950
- `, host: {
21951
- class: 'strct-dot',
21952
- '[class.strct-dot--accent]': "status() === 'accent'",
21953
- '[class.strct-dot--success]': "status() === 'success'",
21954
- '[class.strct-dot--warning]': "status() === 'warning'",
21955
- '[class.strct-dot--critical]': "status() === 'critical'",
21956
- '[class.strct-dot--sm]': "size() === 'sm'",
21957
- '[class.strct-dot--pulse]': 'pulse()',
21958
- }, styles: [".strct-dot{display:inline-flex;align-items:center;flex:none;line-height:0}.strct-dot__dot{width:10px;height:10px;border-radius:50%;background:var(--t3)}.strct-dot--sm .strct-dot__dot{width:8px;height:8px}.strct-dot--accent .strct-dot__dot{background:var(--acc)}.strct-dot--success .strct-dot__dot{background:var(--success)}.strct-dot--warning .strct-dot__dot{background:var(--warning)}.strct-dot--critical .strct-dot__dot{background:var(--critical)}.strct-dot--pulse .strct-dot__dot{position:relative}.strct-dot--pulse .strct-dot__dot:after{content:\"\";position:absolute;inset:0;border-radius:50%;background:inherit;animation:strct-dot-pulse 1s ease-out infinite}@keyframes strct-dot-pulse{0%{box-shadow:0 0 0 0 currentColor;opacity:.55}to{box-shadow:0 0 0 5px transparent;opacity:0}}.strct-dot--pulse .strct-dot__dot{color:var(--t3)}.strct-dot--pulse.strct-dot--accent .strct-dot__dot{color:var(--acc)}.strct-dot--pulse.strct-dot--success .strct-dot__dot{color:var(--success)}.strct-dot--pulse.strct-dot--warning .strct-dot__dot{color:var(--warning)}.strct-dot--pulse.strct-dot--critical .strct-dot__dot{color:var(--critical)}@media(prefers-reduced-motion:reduce){.strct-dot--pulse .strct-dot__dot:after{animation:none;box-shadow:0 0 0 3px currentColor;opacity:.25}}.strct-dot__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n"] }]
21959
- }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], pulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "pulse", required: false }] }] } });
21960
-
21961
22056
  const DEFAULT_LABELS = {
21962
22057
  live: 'Live',
21963
22058
  liveEvery: (s) => `Live · updates every ${s} s`,
@@ -22064,6 +22159,120 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
22064
22159
  }, styles: [".strct-live{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-sm);color:var(--t3)}.strct-live[data-state=reconnecting] .strct-live__text,.strct-live[data-state=stale] .strct-live__text{color:var(--warning)}.strct-live .strct-dot__sr{display:none}\n"] }]
22065
22160
  }], ctorParameters: () => [], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], updatedAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "updatedAt", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }] } });
22066
22161
 
22162
+ /**
22163
+ * A chart's key is a component. The same swatch · label · value rows serve a
22164
+ * line chart's series picker, a diagram's edge styles and a donut's categories
22165
+ * — instead of 9px squares with inline backgrounds written per screen.
22166
+ *
22167
+ * <strct-legend [items]="series" orientation="vertical" />
22168
+ * <strct-legend [items]="edges" interactive (itemToggle)="toggle($event)" />
22169
+ *
22170
+ * A category with zero items still belongs in the key: pass it `muted`, because
22171
+ * "0 failed" is information.
22172
+ */
22173
+ class StrctLegend {
22174
+ /** The rows of the key. */
22175
+ items = input.required(/* @ts-ignore */
22176
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
22177
+ /** `vertical` stacks the rows and aligns their values. */
22178
+ orientation = input('horizontal', /* @ts-ignore */
22179
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
22180
+ /** Rows become toggle buttons carrying `aria-pressed`. */
22181
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
22182
+ /** The label of the row that was toggled. */
22183
+ itemToggle = output();
22184
+ /** The status vocabulary's own tokens — 'accent' is `--acc`, not `--accent`. */
22185
+ static TONE = {
22186
+ neutral: 'var(--t3)',
22187
+ accent: 'var(--acc)',
22188
+ success: 'var(--success)',
22189
+ warning: 'var(--warning)',
22190
+ critical: 'var(--critical)',
22191
+ };
22192
+ swatchColor(item) {
22193
+ return item.color ?? StrctLegend.TONE[item.status ?? 'accent'];
22194
+ }
22195
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctLegend, deps: [], target: i0.ɵɵFactoryTarget.Component });
22196
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: StrctLegend, isStandalone: true, selector: "strct-legend", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemToggle: "itemToggle" }, host: { properties: { "class.strct-legend--vertical": "orientation() === 'vertical'" }, classAttribute: "strct-legend" }, ngImport: i0, template: `
22197
+ <ul class="strct-legend__list" role="list">
22198
+ @for (item of items(); track item.label) {
22199
+ <li class="strct-legend__row" [class.strct-legend__row--muted]="item.muted">
22200
+ @if (interactive()) {
22201
+ <button
22202
+ type="button"
22203
+ class="strct-legend__hit"
22204
+ [attr.aria-pressed]="!item.off"
22205
+ (click)="itemToggle.emit(item.label)"
22206
+ >
22207
+ <span
22208
+ class="strct-legend__swatch strct-legend__swatch--{{ item.shape ?? 'square' }}"
22209
+ [style.--strct-legend-color]="swatchColor(item)"
22210
+ aria-hidden="true"
22211
+ ></span>
22212
+ <span class="strct-legend__label">{{ item.label }}</span>
22213
+ @if (item.value !== undefined) {
22214
+ <span class="strct-legend__value">{{ item.value }}</span>
22215
+ }
22216
+ </button>
22217
+ } @else {
22218
+ <span
22219
+ class="strct-legend__swatch strct-legend__swatch--{{ item.shape ?? 'square' }}"
22220
+ [style.--strct-legend-color]="swatchColor(item)"
22221
+ aria-hidden="true"
22222
+ ></span>
22223
+ <span class="strct-legend__label">{{ item.label }}</span>
22224
+ @if (item.value !== undefined) {
22225
+ <span class="strct-legend__value">{{ item.value }}</span>
22226
+ }
22227
+ }
22228
+ </li>
22229
+ }
22230
+ </ul>
22231
+ `, isInline: true, styles: [".strct-legend{display:block;font-size:var(--text-sm);color:var(--t2)}.strct-legend__list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 14px}.strct-legend--vertical .strct-legend__list{flex-direction:column;flex-wrap:nowrap;gap:2px}.strct-legend__row{display:flex;align-items:center;gap:7px;min-width:0}.strct-legend__row--muted{opacity:.55}.strct-legend__hit{display:flex;align-items:center;gap:7px;min-width:0;padding:2px 4px;margin:-2px -4px;border:0;border-radius:var(--radius-sm);background:none;font:inherit;color:inherit;cursor:pointer}.strct-legend__hit:hover{background:var(--bg-3)}.strct-legend__hit:focus-visible{outline:2px solid var(--acc50);outline-offset:1px}.strct-legend__hit[aria-pressed=false]{opacity:.45}.strct-legend__hit[aria-pressed=false] .strct-legend__label{text-decoration:line-through}.strct-legend__swatch{flex:none;background:var(--strct-legend-color, var(--t3))}.strct-legend__swatch--square{width:9px;height:9px;border-radius:2px}.strct-legend__swatch--dot{width:9px;height:9px;border-radius:50%}.strct-legend__swatch--line{width:14px;height:2px;border-radius:1px}.strct-legend__swatch--dash{width:14px;height:2px;background:repeating-linear-gradient(to right,var(--strct-legend-color, var(--t3)) 0 4px,transparent 4px 7px)}.strct-legend__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.strct-legend__value{margin-inline-start:auto;padding-inline-start:8px;color:var(--t3);font-variant-numeric:tabular-nums}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
22232
+ }
22233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctLegend, decorators: [{
22234
+ type: Component,
22235
+ args: [{ selector: 'strct-legend', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
22236
+ <ul class="strct-legend__list" role="list">
22237
+ @for (item of items(); track item.label) {
22238
+ <li class="strct-legend__row" [class.strct-legend__row--muted]="item.muted">
22239
+ @if (interactive()) {
22240
+ <button
22241
+ type="button"
22242
+ class="strct-legend__hit"
22243
+ [attr.aria-pressed]="!item.off"
22244
+ (click)="itemToggle.emit(item.label)"
22245
+ >
22246
+ <span
22247
+ class="strct-legend__swatch strct-legend__swatch--{{ item.shape ?? 'square' }}"
22248
+ [style.--strct-legend-color]="swatchColor(item)"
22249
+ aria-hidden="true"
22250
+ ></span>
22251
+ <span class="strct-legend__label">{{ item.label }}</span>
22252
+ @if (item.value !== undefined) {
22253
+ <span class="strct-legend__value">{{ item.value }}</span>
22254
+ }
22255
+ </button>
22256
+ } @else {
22257
+ <span
22258
+ class="strct-legend__swatch strct-legend__swatch--{{ item.shape ?? 'square' }}"
22259
+ [style.--strct-legend-color]="swatchColor(item)"
22260
+ aria-hidden="true"
22261
+ ></span>
22262
+ <span class="strct-legend__label">{{ item.label }}</span>
22263
+ @if (item.value !== undefined) {
22264
+ <span class="strct-legend__value">{{ item.value }}</span>
22265
+ }
22266
+ }
22267
+ </li>
22268
+ }
22269
+ </ul>
22270
+ `, host: {
22271
+ class: 'strct-legend',
22272
+ '[class.strct-legend--vertical]': "orientation() === 'vertical'",
22273
+ }, styles: [".strct-legend{display:block;font-size:var(--text-sm);color:var(--t2)}.strct-legend__list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 14px}.strct-legend--vertical .strct-legend__list{flex-direction:column;flex-wrap:nowrap;gap:2px}.strct-legend__row{display:flex;align-items:center;gap:7px;min-width:0}.strct-legend__row--muted{opacity:.55}.strct-legend__hit{display:flex;align-items:center;gap:7px;min-width:0;padding:2px 4px;margin:-2px -4px;border:0;border-radius:var(--radius-sm);background:none;font:inherit;color:inherit;cursor:pointer}.strct-legend__hit:hover{background:var(--bg-3)}.strct-legend__hit:focus-visible{outline:2px solid var(--acc50);outline-offset:1px}.strct-legend__hit[aria-pressed=false]{opacity:.45}.strct-legend__hit[aria-pressed=false] .strct-legend__label{text-decoration:line-through}.strct-legend__swatch{flex:none;background:var(--strct-legend-color, var(--t3))}.strct-legend__swatch--square{width:9px;height:9px;border-radius:2px}.strct-legend__swatch--dot{width:9px;height:9px;border-radius:50%}.strct-legend__swatch--line{width:14px;height:2px;border-radius:1px}.strct-legend__swatch--dash{width:14px;height:2px;background:repeating-linear-gradient(to right,var(--strct-legend-color, var(--t3)) 0 4px,transparent 4px 7px)}.strct-legend__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.strct-legend__value{margin-inline-start:auto;padding-inline-start:8px;color:var(--t3);font-variant-numeric:tabular-nums}\n"] }]
22274
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], itemToggle: [{ type: i0.Output, args: ["itemToggle"] }] } });
22275
+
22067
22276
  /**
22068
22277
  * A generic anchored overlay panel for arbitrary projected content — the
22069
22278
  * public primitive behind menus, signposts and rich pickers:
@@ -22624,7 +22833,7 @@ class StrctTreeSelect {
22624
22833
  }
22625
22834
  </div>
22626
22835
  }
22627
- `, 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", "nodeMenu", "canDrag", "canDrop", "dragExpandDelay", "chevronAriaLabel", "expandedIds"], outputs: ["nodeDrop", "nodeActivated", "nodeMenuSelect", "expandedIdsChange", "expandedChange", "nodeToggled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
22836
+ `, 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 });
22628
22837
  }
22629
22838
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: StrctTreeSelect, decorators: [{
22630
22839
  type: Component,
@@ -23930,5 +24139,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
23930
24139
  * Generated bundle index. Do not edit.
23931
24140
  */
23932
24141
 
23933
- export { FOCUSABLE_SELECTOR, STRCT_DP_DOW, STRCT_DP_DOW_FULL, STRCT_DP_MONTHS, STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_ICON_NAMES, STRCT_MASKS, STRCT_NOTIFICATION_HISTORY_LIMIT, STRCT_PALETTES, STRCT_RAW_ICONS, STRCT_TIME_RANGE_PRESETS, STRCT_WIZARD_DEFAULTS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAnnouncer, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctBytesPipe, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCardHeaderActions, StrctCardHeaderMeta, StrctCardHeaderNote, StrctCascadeColumn, StrctCascadeHost, StrctCascadeSelect, StrctCellDef, StrctCellStatus, StrctChart, StrctCheckbox, StrctChips, StrctCode, StrctCodeInline, StrctColorPicker, StrctCombobox, StrctCommandPalette, StrctConfirmOutlet, StrctConfirmService, StrctContextMenu, StrctContextMenuTrigger, StrctControlDescription, StrctCopy, StrctDatagrid, StrctDatagridActionBar, StrctDatagridActionBarCaption, StrctDatepicker, StrctDatetimePicker, StrctDesc, StrctDescriptionList, StrctDiff, StrctDivider, StrctDonut, StrctDrawer, StrctDrawerFooter, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctDropdownItemAction, StrctDropdownTrigger, StrctDurationPipe, StrctEmptyState, StrctField, StrctFieldGroup, StrctFieldHint, StrctFieldPrefix, StrctFieldSuffix, StrctFile, StrctFilterBar, StrctFlow, StrctFooter, StrctGauge, StrctHeader, StrctHeatmap, StrctHero, StrctHotkeysHelp, StrctHotkeysService, StrctIcon, StrctInlineEdit, StrctInput, StrctInputMask, StrctInputOtp, StrctKbd, StrctKnob, StrctList, StrctListItem, StrctListItemDescription, StrctListItemLeading, StrctListItemMeta, StrctListItemTrailing, StrctLiveIndicator, StrctLogViewer, StrctLogin, StrctMenuPanel, StrctMenuService, StrctMenubar, StrctMetricTile, StrctModal, StrctModalContent, StrctNav, StrctNavItem, StrctNotificationCenter, StrctNumber, StrctOverlay, StrctPageHeader, StrctPageHeaderActions, StrctPageHeaderCrumbs, StrctPageHeaderTitleMeta, StrctPagination, StrctPassword, StrctPopover, StrctPopoverTrigger, StrctProgress, StrctRadio, StrctRadioGroup, StrctRail, StrctRange, StrctRatePipe, StrctRating, StrctReorder, StrctReorderItem, StrctRowDetailDef, StrctSearchbox, StrctSectionHeader, StrctSectionHeaderActions, StrctSectionHeaderMeta, StrctSectionMenu, StrctSegmented, StrctSelect, StrctShell, StrctShellService, StrctSiPipe, StrctSignpost, StrctSignpostTrigger, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctSplitButton, StrctSplitter, StrctStack, StrctStackItem, StrctStatusDot, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctTagLeading, StrctThemeService, StrctThemeSwitcher, StrctTimeRangePicker, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctToolbar, StrctToolbarCaption, StrctToolbarSpacer, StrctTooltip, StrctTour, StrctTransfer, StrctTree, StrctTreeNode, StrctTreeSelect, StrctVerticalNav, StrctWatermark, StrctWizard, StrctWizardAside, focusFirstIn, keepTabInside, lockBodyScroll, parseAnsi, provideStrctWizardDefaults, registerStrctIcon, restoreFocus, saveFocusedElement, strctComputeDiff, strctDpPad, strctFormatBytes, strctFormatDuration, strctFormatRate, strctFormatSi, strctValidationIcon, strctValidationTone, unlockBodyScroll };
24142
+ export { FOCUSABLE_SELECTOR, STRCT_DP_DOW, STRCT_DP_DOW_FULL, STRCT_DP_MONTHS, STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_ICON_NAMES, STRCT_MASKS, STRCT_NOTIFICATION_HISTORY_LIMIT, STRCT_PALETTES, STRCT_RAW_ICONS, STRCT_TIME_RANGE_PRESETS, STRCT_WIZARD_DEFAULTS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAnnouncer, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctBytesPipe, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCardHeaderActions, StrctCardHeaderMeta, StrctCardHeaderNote, StrctCascadeColumn, StrctCascadeHost, StrctCascadeSelect, StrctCellDef, StrctCellStatus, StrctChart, StrctCheckbox, StrctChips, StrctCode, StrctCodeInline, StrctColorPicker, StrctCombobox, StrctCommandPalette, StrctConfirmOutlet, StrctConfirmService, StrctContextMenu, StrctContextMenuTrigger, StrctControlDescription, StrctCopy, StrctDatagrid, StrctDatagridActionBar, StrctDatagridActionBarCaption, StrctDatepicker, StrctDatetimePicker, StrctDesc, StrctDescriptionList, StrctDiff, StrctDivider, StrctDonut, StrctDrawer, StrctDrawerFooter, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctDropdownItemAction, StrctDropdownTrigger, StrctDurationPipe, StrctEmptyState, StrctField, StrctFieldGroup, StrctFieldHint, StrctFieldPrefix, StrctFieldSuffix, StrctFile, StrctFilterBar, StrctFlow, StrctFooter, StrctGauge, StrctHeader, StrctHeatmap, StrctHero, StrctHotkeysHelp, StrctHotkeysService, StrctIcon, StrctInlineEdit, StrctInput, StrctInputMask, StrctInputOtp, StrctKbd, StrctKnob, StrctLegend, StrctList, StrctListItem, StrctListItemDescription, StrctListItemLeading, StrctListItemMeta, StrctListItemTrailing, StrctLiveIndicator, StrctLogViewer, StrctLogin, StrctMenuPanel, StrctMenuService, StrctMenubar, StrctMetricTile, StrctModal, StrctModalContent, StrctNav, StrctNavItem, StrctNotificationCenter, StrctNumber, StrctOverlay, StrctPageHeader, StrctPageHeaderActions, StrctPageHeaderCrumbs, StrctPageHeaderTitleMeta, StrctPagination, StrctPassword, StrctPopover, StrctPopoverTrigger, StrctProgress, StrctRadio, StrctRadioGroup, StrctRail, StrctRange, StrctRatePipe, StrctRating, StrctReorder, StrctReorderItem, StrctRowDetailDef, StrctSearchbox, StrctSectionHeader, StrctSectionHeaderActions, StrctSectionHeaderMeta, StrctSectionMenu, StrctSegmented, StrctSelect, StrctShell, StrctShellService, StrctSiPipe, StrctSignpost, StrctSignpostTrigger, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctSplitButton, StrctSplitter, StrctStack, StrctStackItem, StrctStatusDot, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctTagLeading, StrctThemeService, StrctThemeSwitcher, StrctTimeRangePicker, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctToolbar, StrctToolbarCaption, StrctToolbarSpacer, StrctTooltip, StrctTour, StrctTransfer, StrctTree, StrctTreeNode, StrctTreeSelect, StrctVerticalNav, StrctWatermark, StrctWizard, StrctWizardAside, focusFirstIn, keepTabInside, lockBodyScroll, parseAnsi, provideStrctWizardDefaults, registerStrctIcon, restoreFocus, saveFocusedElement, strctComputeDiff, strctDpPad, strctFormatBytes, strctFormatDuration, strctFormatRate, strctFormatSi, strctValidationIcon, strctValidationTone, unlockBodyScroll };
23934
24143
  //# sourceMappingURL=akcelik-strct.mjs.map