@akcelik/strct 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akcelik/strct",
3
- "version": "6.1.0",
3
+ "version": "6.3.0",
4
4
  "description": "UIStruct — a standalone Angular component library with a tokenised, multi-palette theme system, built for datacenter / infrastructure management UIs.",
5
5
  "author": "Serkan Akcelik <serkan.akcelik@gmail.com>",
6
6
  "license": "MIT",
@@ -2,6 +2,22 @@
2
2
  // (which simply applies the `.strct-control` class). Kept in the theme layer so
3
3
  // inputs / selects / textareas share one definition.
4
4
 
5
+ /* One height per size, for every single-line control.
6
+ *
7
+ * Each control used to work its own height out from its padding, its
8
+ * line-height and whatever it held: measured in Chrome, a field stood 34.9px
9
+ * (13px over a 1.3 line, plus 8+8 of padding and the border) beside a small
10
+ * button's 22px, a searchbox's 28px and a segmented control's 31px. Nothing
11
+ * could make them agree, because there was no height to agree on, and only
12
+ * two controls even had a `size` (FR-63-01). Now the height is the token,
13
+ * the box is border-box and the vertical padding is zero, so what a control
14
+ * holds — an icon, a spinner, a longer word — cannot change how tall it is.
15
+ *
16
+ * `--control-h` is what a control without a size uses; `size` and
17
+ * `[strctControlSize]` set it to one of the three below. A whole application
18
+ * changes density by overriding the tokens in one place.
19
+ *
20
+ * A textarea is not a single-line control and keeps its own height. */
5
21
  .strct-control {
6
22
  display: block;
7
23
  width: 100%;
@@ -66,6 +82,19 @@ select.strct-control {
66
82
  background-position: right 9px center;
67
83
  }
68
84
 
85
+ .strct-control:not(textarea) {
86
+ box-sizing: border-box;
87
+ height: var(--control-h);
88
+ padding-block: 0;
89
+ }
90
+ /* The ones that are a box around a control rather than the control itself —
91
+ a select's trigger, a number's field with its steppers — centre what they
92
+ hold in that height instead of stretching to it. */
93
+ .strct-control:not(textarea, input, select) {
94
+ display: flex;
95
+ align-items: center;
96
+ }
97
+
69
98
  textarea.strct-control {
70
99
  min-height: 76px;
71
100
  resize: vertical;
@@ -99,6 +99,16 @@
99
99
  --space-4: 16px;
100
100
  --space-5: 24px;
101
101
  --space-6: 32px;
102
+ /* One height per size, for every single-line control (see _forms.scss). */
103
+ --control-h-sm: 26px;
104
+ --control-h-md: 32px;
105
+ --control-h-lg: 38px;
106
+ --control-h: var(--control-h-md);
107
+ /* The icon that sits in a control of that size (see icon.ts). */
108
+ --icon-size-sm: 14px;
109
+ --icon-size-md: 16px;
110
+ --icon-size-lg: 18px;
111
+ --icon-size: var(--icon-size-md);
102
112
  --radius-sm: 2px;
103
113
  --radius-md: 3px;
104
114
  --radius-lg: 4px;
@@ -164,6 +174,16 @@
164
174
  --space-4: 16px;
165
175
  --space-5: 24px;
166
176
  --space-6: 32px;
177
+ /* One height per size, for every single-line control (see _forms.scss). */
178
+ --control-h-sm: 26px;
179
+ --control-h-md: 32px;
180
+ --control-h-lg: 38px;
181
+ --control-h: var(--control-h-md);
182
+ /* The icon that sits in a control of that size (see icon.ts). */
183
+ --icon-size-sm: 14px;
184
+ --icon-size-md: 16px;
185
+ --icon-size-lg: 18px;
186
+ --icon-size: var(--icon-size-md);
167
187
  --radius-sm: 2px;
168
188
  --radius-md: 3px;
169
189
  --radius-lg: 4px;
@@ -229,6 +249,16 @@
229
249
  --space-4: 16px;
230
250
  --space-5: 24px;
231
251
  --space-6: 32px;
252
+ /* One height per size, for every single-line control (see _forms.scss). */
253
+ --control-h-sm: 26px;
254
+ --control-h-md: 32px;
255
+ --control-h-lg: 38px;
256
+ --control-h: var(--control-h-md);
257
+ /* The icon that sits in a control of that size (see icon.ts). */
258
+ --icon-size-sm: 14px;
259
+ --icon-size-md: 16px;
260
+ --icon-size-lg: 18px;
261
+ --icon-size: var(--icon-size-md);
232
262
  --radius-sm: 2px;
233
263
  --radius-md: 3px;
234
264
  --radius-lg: 4px;
@@ -294,6 +324,16 @@
294
324
  --space-4: 16px;
295
325
  --space-5: 24px;
296
326
  --space-6: 32px;
327
+ /* One height per size, for every single-line control (see _forms.scss). */
328
+ --control-h-sm: 26px;
329
+ --control-h-md: 32px;
330
+ --control-h-lg: 38px;
331
+ --control-h: var(--control-h-md);
332
+ /* The icon that sits in a control of that size (see icon.ts). */
333
+ --icon-size-sm: 14px;
334
+ --icon-size-md: 16px;
335
+ --icon-size-lg: 18px;
336
+ --icon-size: var(--icon-size-md);
297
337
  --radius-sm: 2px;
298
338
  --radius-md: 3px;
299
339
  --radius-lg: 4px;
@@ -359,6 +399,16 @@
359
399
  --space-4: 16px;
360
400
  --space-5: 24px;
361
401
  --space-6: 32px;
402
+ /* One height per size, for every single-line control (see _forms.scss). */
403
+ --control-h-sm: 26px;
404
+ --control-h-md: 32px;
405
+ --control-h-lg: 38px;
406
+ --control-h: var(--control-h-md);
407
+ /* The icon that sits in a control of that size (see icon.ts). */
408
+ --icon-size-sm: 14px;
409
+ --icon-size-md: 16px;
410
+ --icon-size-lg: 18px;
411
+ --icon-size: var(--icon-size-md);
362
412
  --radius-sm: 2px;
363
413
  --radius-md: 3px;
364
414
  --radius-lg: 4px;
@@ -424,6 +474,16 @@
424
474
  --space-4: 16px;
425
475
  --space-5: 24px;
426
476
  --space-6: 32px;
477
+ /* One height per size, for every single-line control (see _forms.scss). */
478
+ --control-h-sm: 26px;
479
+ --control-h-md: 32px;
480
+ --control-h-lg: 38px;
481
+ --control-h: var(--control-h-md);
482
+ /* The icon that sits in a control of that size (see icon.ts). */
483
+ --icon-size-sm: 14px;
484
+ --icon-size-md: 16px;
485
+ --icon-size-lg: 18px;
486
+ --icon-size: var(--icon-size-md);
427
487
  --radius-sm: 2px;
428
488
  --radius-md: 3px;
429
489
  --radius-lg: 4px;
@@ -95,6 +95,53 @@ export interface StrctThresholds {
95
95
  warning?: number;
96
96
  critical?: number;
97
97
  }
98
+ /**
99
+ * The one size scale every single-line control shares — a field, a button, a
100
+ * select's trigger, a searchbox, a segmented track.
101
+ *
102
+ * Each size is a height token (`--control-h-sm` / `-md` / `-lg`, see
103
+ * `_forms.scss`), so controls of one size are exactly as tall as each other
104
+ * whatever they hold. Before 6.2.0 only `strct-button` and `strct-segmented`
105
+ * had a size at all, and a `size="sm"` button stood 13px shorter than the
106
+ * field beside it with nothing able to close the gap (FR-63-02).
107
+ */
108
+ export type StrctControlSize = 'sm' | 'md' | 'lg';
109
+ /** The custom property a size sets, for a host binding. */
110
+ export declare function strctControlHeight(size: StrctControlSize): string;
111
+ /**
112
+ * The icon size that goes with a control size — 14px at sm, 16px at md, 18px
113
+ * at lg. A control sets this beside its height so an icon inside it needs no
114
+ * size of its own; an icon that states one still wins (FR-64-01).
115
+ */
116
+ export declare function strctIconSize(size: StrctControlSize): string;
117
+ /**
118
+ * Sets the control size for everything inside it.
119
+ *
120
+ * ```html
121
+ * <div strctControlSize="sm">
122
+ * <input strctInput /> <strct-select /> <button strct-button>Apply</button>
123
+ * </div>
124
+ * ```
125
+ *
126
+ * It sets `--control-h`, which every control reads, so a row of them agrees
127
+ * without each one being told. A control that states its own `size` wins,
128
+ * because that sets the same property on itself and the nearer declaration
129
+ * is the one that applies.
130
+ */
131
+ export declare class StrctControlSizeDirective {
132
+ /** The size for the controls inside. */
133
+ readonly strctControlSize: import("@angular/core").InputSignal<StrctControlSize>;
134
+ protected readonly height: import("@angular/core").Signal<string>;
135
+ protected readonly iconSize: import("@angular/core").Signal<string>;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<StrctControlSizeDirective, never>;
137
+ static ɵdir: i0.ɵɵDirectiveDeclaration<StrctControlSizeDirective, "[strctControlSize]", never, {
138
+ "strctControlSize": {
139
+ "alias": "strctControlSize";
140
+ "required": false;
141
+ "isSignal": true;
142
+ };
143
+ }, {}, never, never, true, never>;
144
+ }
98
145
  /**
99
146
  * Inner markup (path/shape contents) for each icon, drawn on a 0 0 16 16
100
147
  * viewBox with `currentColor` stroke. Keep strokes at 1.3–1.5 for crispness.
@@ -374,8 +421,17 @@ export declare class StrctIcon {
374
421
  * are set. Use `name` for runtime-registered custom icons.
375
422
  */
376
423
  readonly strictName: import("@angular/core").InputSignal<StrctIconName | null>;
377
- /** Icon size in pixels. */
378
- readonly size: import("@angular/core").InputSignal<number>;
424
+ /**
425
+ * Icon size in pixels.
426
+ *
427
+ * Left unset, the icon is the size its surroundings ask for: a control
428
+ * sets `--icon-size` beside its `--control-h`, so an icon in a small
429
+ * button is 14px and the same icon in a large one is 18px without either
430
+ * call site saying so. With no control around it the icon is 16px, as it
431
+ * always was. Setting this still wins — it writes the same property on the
432
+ * icon itself, which is nearer than anything enclosing it (FR-64-01).
433
+ */
434
+ readonly size: import("@angular/core").InputSignal<number | undefined>;
379
435
  /** Stroke width for outline icons. */
380
436
  readonly strokeWidth: import("@angular/core").InputSignal<number>;
381
437
  /** Optional status dot overlaid on the glyph (object state). */
@@ -407,7 +463,6 @@ export declare class StrctIcon {
407
463
  /** The badge's text, or null when there is nothing to say. */
408
464
  protected readonly countText: import("@angular/core").Signal<string | null>;
409
465
  /** 1.2em of the icon size, floored at 14px, as the badge's box. */
410
- protected readonly countFontSize: import("@angular/core").Signal<number>;
411
466
  /** The mode as drawn. */
412
467
  readonly shownMode: import("@angular/core").Signal<StrctIconMode>;
413
468
  /** The badge as drawn. */
@@ -1369,8 +1424,12 @@ export declare class StrctTooltip implements OnDestroy {
1369
1424
  }
1370
1425
  /** Button visual variants. */
1371
1426
  export type StrctButtonVariant = 'primary' | 'critical' | 'outline' | 'flat' | 'neutral' | 'link';
1372
- /** Button size variants. */
1373
- export type StrctButtonSize = 'md' | 'sm' | 'mini';
1427
+ /**
1428
+ * The shared control sizes, plus the button's own `mini` — a 22px chip for a
1429
+ * toolbar's corner, below the scale on purpose and the one size that does not
1430
+ * line up with a field.
1431
+ */
1432
+ export type StrctButtonSize = StrctControlSize | 'mini';
1374
1433
  /**
1375
1434
  * Styles a native `<button>` / `<a>` so it stays fully accessible and form-aware.
1376
1435
  *
@@ -4168,6 +4227,16 @@ export declare class StrctKbd {
4168
4227
  * <strct-searchbox trigger hint="⌘K" (activated)="palette.open.set(true)" />
4169
4228
  */
4170
4229
  export declare class StrctSearchbox implements ControlValueAccessor {
4230
+ /**
4231
+ * Control size — the shared scale, so this lines up with the buttons and
4232
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
4233
+ * or the default height when there is none.
4234
+ */
4235
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
4236
+ /** The height its size asks for; nothing while it states no size. */
4237
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
4238
+ /** And the icon size that goes with it, for the icons it holds. */
4239
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
4171
4240
  private readonly host;
4172
4241
  /** Placeholder text (and the trigger mode's label). */
4173
4242
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -4217,6 +4286,11 @@ export declare class StrctSearchbox implements ControlValueAccessor {
4217
4286
  setDisabledState(isDisabled: boolean): void;
4218
4287
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctSearchbox, never>;
4219
4288
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctSearchbox, "strct-searchbox", never, {
4289
+ "size": {
4290
+ "alias": "size";
4291
+ "required": false;
4292
+ "isSignal": true;
4293
+ };
4220
4294
  "placeholder": {
4221
4295
  "alias": "placeholder";
4222
4296
  "required": false;
@@ -4809,10 +4883,25 @@ export declare class StrctField {
4809
4883
  * identifier — the three things consumers were restyling by hand.
4810
4884
  */
4811
4885
  export declare class StrctInput {
4886
+ /**
4887
+ * Control size — the shared scale, so this lines up with the buttons and
4888
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
4889
+ * or the default height when there is none.
4890
+ */
4891
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
4892
+ /** The height its size asks for; nothing while it states no size. */
4893
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
4894
+ /** And the icon size that goes with it, for the icons it holds. */
4895
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
4812
4896
  /** Monospace text with tabular figures — a PEM block, an id, a mapping. */
4813
4897
  readonly mono: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4814
4898
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctInput, never>;
4815
4899
  static ɵdir: i0.ɵɵDirectiveDeclaration<StrctInput, "input[strctInput], textarea[strctInput], select[strctInput], input[strct-input], textarea[strct-input], select[strct-input]", never, {
4900
+ "size": {
4901
+ "alias": "size";
4902
+ "required": false;
4903
+ "isSignal": true;
4904
+ };
4816
4905
  "mono": {
4817
4906
  "alias": "mono";
4818
4907
  "required": false;
@@ -5070,7 +5159,8 @@ export interface StrctSegmentedOption {
5070
5159
  countLabel?: (count: number) => string;
5071
5160
  }
5072
5161
  /** Segment size. */
5073
- export type StrctSegmentedSize = 'sm' | 'md';
5162
+ /** The shared control scale, so a segmented track lines up with the row. */
5163
+ export type StrctSegmentedSize = StrctControlSize;
5074
5164
  /**
5075
5165
  * One-of-N selection rendered as a joined segmented control with managed
5076
5166
  * selected state — distinct from `StrctTabs` (panel switching) and
@@ -5085,7 +5175,7 @@ export declare class StrctSegmented implements ControlValueAccessor {
5085
5175
  /** The selectable segments. */
5086
5176
  readonly options: import("@angular/core").InputSignal<StrctSegmentedOption[]>;
5087
5177
  /** Segment size. */
5088
- readonly size: import("@angular/core").InputSignal<StrctSegmentedSize>;
5178
+ readonly size: import("@angular/core").InputSignal<StrctControlSize>;
5089
5179
  /** Stretch to the full width of the container. */
5090
5180
  readonly block: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
5091
5181
  /** Static disable; forms' setDisabledState also drives the disabled state. */
@@ -5204,6 +5294,16 @@ export declare class StrctRange implements ControlValueAccessor {
5204
5294
  * <strct-password [(ngModel)]="pw" meter />
5205
5295
  */
5206
5296
  export declare class StrctPassword implements ControlValueAccessor {
5297
+ /**
5298
+ * Control size — the shared scale, so this lines up with the buttons and
5299
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5300
+ * or the default height when there is none.
5301
+ */
5302
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5303
+ /** The height its size asks for; nothing while it states no size. */
5304
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5305
+ /** And the icon size that goes with it, for the icons it holds. */
5306
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
5207
5307
  /** Placeholder text when empty. */
5208
5308
  readonly placeholder: import("@angular/core").InputSignal<string>;
5209
5309
  /** Show a strength meter. */
@@ -5235,6 +5335,11 @@ export declare class StrctPassword implements ControlValueAccessor {
5235
5335
  setDisabledState(isDisabled: boolean): void;
5236
5336
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctPassword, never>;
5237
5337
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctPassword, "strct-password", never, {
5338
+ "size": {
5339
+ "alias": "size";
5340
+ "required": false;
5341
+ "isSignal": true;
5342
+ };
5238
5343
  "placeholder": {
5239
5344
  "alias": "placeholder";
5240
5345
  "required": false;
@@ -5634,6 +5739,16 @@ export declare const STRCT_MASKS: {
5634
5739
  * <strct-input-mask mask="HH:HH:HH:HH:HH:HH" uppercase [(ngModel)]="mac" />
5635
5740
  */
5636
5741
  export declare class StrctInputMask implements ControlValueAccessor {
5742
+ /**
5743
+ * Control size — the shared scale, so this lines up with the buttons and
5744
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5745
+ * or the default height when there is none.
5746
+ */
5747
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5748
+ /** The height its size asks for; nothing while it states no size. */
5749
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5750
+ /** And the icon size that goes with it, for the icons it holds. */
5751
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
5637
5752
  /** Mask pattern (9=digit, A=letter, H=hex, *=alnum). */
5638
5753
  readonly mask: import("@angular/core").InputSignal<string>;
5639
5754
  /** Placeholder text when empty. */
@@ -5654,6 +5769,11 @@ export declare class StrctInputMask implements ControlValueAccessor {
5654
5769
  setDisabledState(isDisabled: boolean): void;
5655
5770
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctInputMask, never>;
5656
5771
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctInputMask, "strct-input-mask", never, {
5772
+ "size": {
5773
+ "alias": "size";
5774
+ "required": false;
5775
+ "isSignal": true;
5776
+ };
5657
5777
  "mask": {
5658
5778
  "alias": "mask";
5659
5779
  "required": true;
@@ -5710,6 +5830,16 @@ interface CbxRow {
5710
5830
  * text itself can be committed as a free-form value.
5711
5831
  */
5712
5832
  export declare class StrctCombobox implements ControlValueAccessor {
5833
+ /**
5834
+ * Control size — the shared scale, so this lines up with the buttons and
5835
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5836
+ * or the default height when there is none.
5837
+ */
5838
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5839
+ /** The height its size asks for; nothing while it states no size. */
5840
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5841
+ /** And the icon size that goes with it, for the icons it holds. */
5842
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
5713
5843
  private readonly host;
5714
5844
  private readonly inputEl;
5715
5845
  protected readonly listId: string;
@@ -5812,6 +5942,11 @@ export declare class StrctCombobox implements ControlValueAccessor {
5812
5942
  setDisabledState(isDisabled: boolean): void;
5813
5943
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctCombobox, never>;
5814
5944
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctCombobox, "strct-combobox", never, {
5945
+ "size": {
5946
+ "alias": "size";
5947
+ "required": false;
5948
+ "isSignal": true;
5949
+ };
5815
5950
  "options": {
5816
5951
  "alias": "options";
5817
5952
  "required": false;
@@ -5893,6 +6028,16 @@ export declare class StrctCombobox implements ControlValueAccessor {
5893
6028
  * [selected]`.
5894
6029
  */
5895
6030
  export declare class StrctSelect implements ControlValueAccessor {
6031
+ /**
6032
+ * Control size — the shared scale, so this lines up with the buttons and
6033
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6034
+ * or the default height when there is none.
6035
+ */
6036
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6037
+ /** The height its size asks for; nothing while it states no size. */
6038
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6039
+ /** And the icon size that goes with it, for the icons it holds. */
6040
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
5896
6041
  private readonly host;
5897
6042
  protected readonly listId: string;
5898
6043
  /** Available options (set `disabled: true` on an option to gray it out). */
@@ -5952,6 +6097,11 @@ export declare class StrctSelect implements ControlValueAccessor {
5952
6097
  setDisabledState(isDisabled: boolean): void;
5953
6098
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctSelect, never>;
5954
6099
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctSelect, "strct-select", never, {
6100
+ "size": {
6101
+ "alias": "size";
6102
+ "required": false;
6103
+ "isSignal": true;
6104
+ };
5955
6105
  "options": {
5956
6106
  "alias": "options";
5957
6107
  "required": false;
@@ -6007,6 +6157,16 @@ export declare const strctDpPad: (n: number) => string;
6007
6157
  * <strct-datepicker [(ngModel)]="date" />
6008
6158
  */
6009
6159
  export declare class StrctDatepicker implements ControlValueAccessor {
6160
+ /**
6161
+ * Control size — the shared scale, so this lines up with the buttons and
6162
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6163
+ * or the default height when there is none.
6164
+ */
6165
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6166
+ /** The height its size asks for; nothing while it states no size. */
6167
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6168
+ /** And the icon size that goes with it, for the icons it holds. */
6169
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
6010
6170
  private readonly host;
6011
6171
  /** Placeholder text when empty. */
6012
6172
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -6065,6 +6225,11 @@ export declare class StrctDatepicker implements ControlValueAccessor {
6065
6225
  setDisabledState(isDisabled: boolean): void;
6066
6226
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctDatepicker, never>;
6067
6227
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctDatepicker, "strct-datepicker", never, {
6228
+ "size": {
6229
+ "alias": "size";
6230
+ "required": false;
6231
+ "isSignal": true;
6232
+ };
6068
6233
  "placeholder": {
6069
6234
  "alias": "placeholder";
6070
6235
  "required": false;
@@ -6112,6 +6277,16 @@ export declare class StrctDatepicker implements ControlValueAccessor {
6112
6277
  * <strct-color-picker [(ngModel)]="color" />
6113
6278
  */
6114
6279
  export declare class StrctColorPicker implements ControlValueAccessor {
6280
+ /**
6281
+ * Control size — the shared scale, so this lines up with the buttons and
6282
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6283
+ * or the default height when there is none.
6284
+ */
6285
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6286
+ /** The height its size asks for; nothing while it states no size. */
6287
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6288
+ /** And the icon size that goes with it, for the icons it holds. */
6289
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
6115
6290
  private readonly host;
6116
6291
  /** Custom palette swatches. */
6117
6292
  readonly swatches: import("@angular/core").InputSignal<string[]>;
@@ -6140,6 +6315,11 @@ export declare class StrctColorPicker implements ControlValueAccessor {
6140
6315
  setDisabledState(isDisabled: boolean): void;
6141
6316
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctColorPicker, never>;
6142
6317
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctColorPicker, "strct-color-picker", never, {
6318
+ "size": {
6319
+ "alias": "size";
6320
+ "required": false;
6321
+ "isSignal": true;
6322
+ };
6143
6323
  "swatches": {
6144
6324
  "alias": "swatches";
6145
6325
  "required": false;
@@ -6231,6 +6411,16 @@ export declare class StrctCascadeColumn {
6231
6411
  * the trigger on close.
6232
6412
  */
6233
6413
  export declare class StrctCascadeSelect extends StrctCascadeHost implements ControlValueAccessor {
6414
+ /**
6415
+ * Control size — the shared scale, so this lines up with the buttons and
6416
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6417
+ * or the default height when there is none.
6418
+ */
6419
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6420
+ /** The height its size asks for; nothing while it states no size. */
6421
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6422
+ /** And the icon size that goes with it, for the icons it holds. */
6423
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
6234
6424
  private readonly elementRef;
6235
6425
  /** Available options. */
6236
6426
  readonly options: import("@angular/core").InputSignal<StrctCascadeOption[]>;
@@ -6273,6 +6463,11 @@ export declare class StrctCascadeSelect extends StrctCascadeHost implements Cont
6273
6463
  setDisabledState(isDisabled: boolean): void;
6274
6464
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctCascadeSelect, never>;
6275
6465
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctCascadeSelect, "strct-cascade-select", never, {
6466
+ "size": {
6467
+ "alias": "size";
6468
+ "required": false;
6469
+ "isSignal": true;
6470
+ };
6276
6471
  "options": {
6277
6472
  "alias": "options";
6278
6473
  "required": false;
@@ -9056,7 +9251,7 @@ export declare class StrctMetricTile {
9056
9251
  * `sm` is the verdict-band size: six counters beside a one-line verdict at
9057
9252
  * 1440px, where the dashboard size fits three.
9058
9253
  */
9059
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9254
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9060
9255
  /**
9061
9256
  * What a plain click on an `href` tile does. `browser` follows the link, as
9062
9257
  * today. `app` belongs to a single-page app: the click is prevented and
@@ -9500,7 +9695,7 @@ export declare class StrctEmptyState {
9500
9695
  * `sm` is the inline row a 240px frame wants: a 16px icon with the title and
9501
9696
  * description on one line. A page-sized empty state stays `md`.
9502
9697
  */
9503
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9698
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9504
9699
  readonly description: import("@angular/core").InputSignal<string>;
9505
9700
  protected readonly resolvedIcon: import("@angular/core").Signal<string>;
9506
9701
  protected readonly toneClass: import("@angular/core").Signal<string>;
@@ -9627,7 +9822,7 @@ export declare class StrctTimeRangePicker {
9627
9822
  /** Popover alignment, as in strct-dropdown. */
9628
9823
  readonly align: import("@angular/core").InputSignal<"end" | "start">;
9629
9824
  /** Trigger size — match it to the toolbar's buttons (sm strips). */
9630
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9825
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9631
9826
  /** Localizable strings. */
9632
9827
  readonly dialogLabel: import("@angular/core").InputSignal<string>;
9633
9828
  readonly quickLabel: import("@angular/core").InputSignal<string>;
@@ -12033,6 +12228,16 @@ export declare class StrctChange {
12033
12228
  * aria-valuemin/max/now so assistive tech announces it as a number control.
12034
12229
  */
12035
12230
  export declare class StrctNumber implements ControlValueAccessor {
12231
+ /**
12232
+ * Control size — the shared scale, so this lines up with the buttons and
12233
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12234
+ * or the default height when there is none.
12235
+ */
12236
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12237
+ /** The height its size asks for; nothing while it states no size. */
12238
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12239
+ /** And the icon size that goes with it, for the icons it holds. */
12240
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
12036
12241
  /** Minimum allowed value; null = unbounded. */
12037
12242
  readonly min: import("@angular/core").InputSignal<number | null>;
12038
12243
  /** Maximum allowed value; null = unbounded. */
@@ -12080,6 +12285,11 @@ export declare class StrctNumber implements ControlValueAccessor {
12080
12285
  setDisabledState(isDisabled: boolean): void;
12081
12286
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctNumber, never>;
12082
12287
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctNumber, "strct-number", never, {
12288
+ "size": {
12289
+ "alias": "size";
12290
+ "required": false;
12291
+ "isSignal": true;
12292
+ };
12083
12293
  "min": {
12084
12294
  "alias": "min";
12085
12295
  "required": false;
@@ -12301,6 +12511,16 @@ export declare class StrctConfirmOutlet {
12301
12511
  * modal/drawer stays open); focus returns to the trigger on close.
12302
12512
  */
12303
12513
  export declare class StrctTreeSelect implements ControlValueAccessor {
12514
+ /**
12515
+ * Control size — the shared scale, so this lines up with the buttons and
12516
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12517
+ * or the default height when there is none.
12518
+ */
12519
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12520
+ /** The height its size asks for; nothing while it states no size. */
12521
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12522
+ /** And the icon size that goes with it, for the icons it holds. */
12523
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
12304
12524
  private readonly host;
12305
12525
  /** Root nodes rendered by the embedded `<strct-tree>` (data-driven mode). */
12306
12526
  readonly nodes: import("@angular/core").InputSignal<StrctTreeNodeData[]>;
@@ -12360,6 +12580,11 @@ export declare class StrctTreeSelect implements ControlValueAccessor {
12360
12580
  setDisabledState(isDisabled: boolean): void;
12361
12581
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctTreeSelect, never>;
12362
12582
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctTreeSelect, "strct-tree-select", never, {
12583
+ "size": {
12584
+ "alias": "size";
12585
+ "required": false;
12586
+ "isSignal": true;
12587
+ };
12363
12588
  "nodes": {
12364
12589
  "alias": "nodes";
12365
12590
  "required": false;
@@ -12407,6 +12632,16 @@ export declare class StrctTreeSelect implements ControlValueAccessor {
12407
12632
  * date keeps the value empty until a date is picked.
12408
12633
  */
12409
12634
  export declare class StrctDatetimePicker implements ControlValueAccessor {
12635
+ /**
12636
+ * Control size — the shared scale, so this lines up with the buttons and
12637
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12638
+ * or the default height when there is none.
12639
+ */
12640
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12641
+ /** The height its size asks for; nothing while it states no size. */
12642
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12643
+ /** And the icon size that goes with it, for the icons it holds. */
12644
+ protected readonly controlIconSize: import("@angular/core").Signal<string | null>;
12410
12645
  /** Placeholder text of the date input when empty (localizable). */
12411
12646
  readonly placeholder: import("@angular/core").InputSignal<string>;
12412
12647
  /** Minute granularity of the minute select (1 = every minute). */
@@ -12451,6 +12686,11 @@ export declare class StrctDatetimePicker implements ControlValueAccessor {
12451
12686
  setDisabledState(isDisabled: boolean): void;
12452
12687
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctDatetimePicker, never>;
12453
12688
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctDatetimePicker, "strct-datetime-picker", never, {
12689
+ "size": {
12690
+ "alias": "size";
12691
+ "required": false;
12692
+ "isSignal": true;
12693
+ };
12454
12694
  "placeholder": {
12455
12695
  "alias": "placeholder";
12456
12696
  "required": false;