@akcelik/strct 6.1.0 → 6.2.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.2.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,11 @@
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);
102
107
  --radius-sm: 2px;
103
108
  --radius-md: 3px;
104
109
  --radius-lg: 4px;
@@ -164,6 +169,11 @@
164
169
  --space-4: 16px;
165
170
  --space-5: 24px;
166
171
  --space-6: 32px;
172
+ /* One height per size, for every single-line control (see _forms.scss). */
173
+ --control-h-sm: 26px;
174
+ --control-h-md: 32px;
175
+ --control-h-lg: 38px;
176
+ --control-h: var(--control-h-md);
167
177
  --radius-sm: 2px;
168
178
  --radius-md: 3px;
169
179
  --radius-lg: 4px;
@@ -229,6 +239,11 @@
229
239
  --space-4: 16px;
230
240
  --space-5: 24px;
231
241
  --space-6: 32px;
242
+ /* One height per size, for every single-line control (see _forms.scss). */
243
+ --control-h-sm: 26px;
244
+ --control-h-md: 32px;
245
+ --control-h-lg: 38px;
246
+ --control-h: var(--control-h-md);
232
247
  --radius-sm: 2px;
233
248
  --radius-md: 3px;
234
249
  --radius-lg: 4px;
@@ -294,6 +309,11 @@
294
309
  --space-4: 16px;
295
310
  --space-5: 24px;
296
311
  --space-6: 32px;
312
+ /* One height per size, for every single-line control (see _forms.scss). */
313
+ --control-h-sm: 26px;
314
+ --control-h-md: 32px;
315
+ --control-h-lg: 38px;
316
+ --control-h: var(--control-h-md);
297
317
  --radius-sm: 2px;
298
318
  --radius-md: 3px;
299
319
  --radius-lg: 4px;
@@ -359,6 +379,11 @@
359
379
  --space-4: 16px;
360
380
  --space-5: 24px;
361
381
  --space-6: 32px;
382
+ /* One height per size, for every single-line control (see _forms.scss). */
383
+ --control-h-sm: 26px;
384
+ --control-h-md: 32px;
385
+ --control-h-lg: 38px;
386
+ --control-h: var(--control-h-md);
362
387
  --radius-sm: 2px;
363
388
  --radius-md: 3px;
364
389
  --radius-lg: 4px;
@@ -424,6 +449,11 @@
424
449
  --space-4: 16px;
425
450
  --space-5: 24px;
426
451
  --space-6: 32px;
452
+ /* One height per size, for every single-line control (see _forms.scss). */
453
+ --control-h-sm: 26px;
454
+ --control-h-md: 32px;
455
+ --control-h-lg: 38px;
456
+ --control-h: var(--control-h-md);
427
457
  --radius-sm: 2px;
428
458
  --radius-md: 3px;
429
459
  --radius-lg: 4px;
@@ -95,6 +95,46 @@ 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
+ * Sets the control size for everything inside it.
113
+ *
114
+ * ```html
115
+ * <div strctControlSize="sm">
116
+ * <input strctInput /> <strct-select /> <button strct-button>Apply</button>
117
+ * </div>
118
+ * ```
119
+ *
120
+ * It sets `--control-h`, which every control reads, so a row of them agrees
121
+ * without each one being told. A control that states its own `size` wins,
122
+ * because that sets the same property on itself and the nearer declaration
123
+ * is the one that applies.
124
+ */
125
+ export declare class StrctControlSizeDirective {
126
+ /** The size for the controls inside. */
127
+ readonly strctControlSize: import("@angular/core").InputSignal<StrctControlSize>;
128
+ protected readonly height: import("@angular/core").Signal<string>;
129
+ static ɵfac: i0.ɵɵFactoryDeclaration<StrctControlSizeDirective, never>;
130
+ static ɵdir: i0.ɵɵDirectiveDeclaration<StrctControlSizeDirective, "[strctControlSize]", never, {
131
+ "strctControlSize": {
132
+ "alias": "strctControlSize";
133
+ "required": false;
134
+ "isSignal": true;
135
+ };
136
+ }, {}, never, never, true, never>;
137
+ }
98
138
  /**
99
139
  * Inner markup (path/shape contents) for each icon, drawn on a 0 0 16 16
100
140
  * viewBox with `currentColor` stroke. Keep strokes at 1.3–1.5 for crispness.
@@ -1369,8 +1409,12 @@ export declare class StrctTooltip implements OnDestroy {
1369
1409
  }
1370
1410
  /** Button visual variants. */
1371
1411
  export type StrctButtonVariant = 'primary' | 'critical' | 'outline' | 'flat' | 'neutral' | 'link';
1372
- /** Button size variants. */
1373
- export type StrctButtonSize = 'md' | 'sm' | 'mini';
1412
+ /**
1413
+ * The shared control sizes, plus the button's own `mini` — a 22px chip for a
1414
+ * toolbar's corner, below the scale on purpose and the one size that does not
1415
+ * line up with a field.
1416
+ */
1417
+ export type StrctButtonSize = StrctControlSize | 'mini';
1374
1418
  /**
1375
1419
  * Styles a native `<button>` / `<a>` so it stays fully accessible and form-aware.
1376
1420
  *
@@ -4168,6 +4212,14 @@ export declare class StrctKbd {
4168
4212
  * <strct-searchbox trigger hint="⌘K" (activated)="palette.open.set(true)" />
4169
4213
  */
4170
4214
  export declare class StrctSearchbox implements ControlValueAccessor {
4215
+ /**
4216
+ * Control size — the shared scale, so this lines up with the buttons and
4217
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
4218
+ * or the default height when there is none.
4219
+ */
4220
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
4221
+ /** The height its size asks for; nothing while it states no size. */
4222
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
4171
4223
  private readonly host;
4172
4224
  /** Placeholder text (and the trigger mode's label). */
4173
4225
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -4217,6 +4269,11 @@ export declare class StrctSearchbox implements ControlValueAccessor {
4217
4269
  setDisabledState(isDisabled: boolean): void;
4218
4270
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctSearchbox, never>;
4219
4271
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctSearchbox, "strct-searchbox", never, {
4272
+ "size": {
4273
+ "alias": "size";
4274
+ "required": false;
4275
+ "isSignal": true;
4276
+ };
4220
4277
  "placeholder": {
4221
4278
  "alias": "placeholder";
4222
4279
  "required": false;
@@ -4809,10 +4866,23 @@ export declare class StrctField {
4809
4866
  * identifier — the three things consumers were restyling by hand.
4810
4867
  */
4811
4868
  export declare class StrctInput {
4869
+ /**
4870
+ * Control size — the shared scale, so this lines up with the buttons and
4871
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
4872
+ * or the default height when there is none.
4873
+ */
4874
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
4875
+ /** The height its size asks for; nothing while it states no size. */
4876
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
4812
4877
  /** Monospace text with tabular figures — a PEM block, an id, a mapping. */
4813
4878
  readonly mono: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4814
4879
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctInput, never>;
4815
4880
  static ɵdir: i0.ɵɵDirectiveDeclaration<StrctInput, "input[strctInput], textarea[strctInput], select[strctInput], input[strct-input], textarea[strct-input], select[strct-input]", never, {
4881
+ "size": {
4882
+ "alias": "size";
4883
+ "required": false;
4884
+ "isSignal": true;
4885
+ };
4816
4886
  "mono": {
4817
4887
  "alias": "mono";
4818
4888
  "required": false;
@@ -5070,7 +5140,8 @@ export interface StrctSegmentedOption {
5070
5140
  countLabel?: (count: number) => string;
5071
5141
  }
5072
5142
  /** Segment size. */
5073
- export type StrctSegmentedSize = 'sm' | 'md';
5143
+ /** The shared control scale, so a segmented track lines up with the row. */
5144
+ export type StrctSegmentedSize = StrctControlSize;
5074
5145
  /**
5075
5146
  * One-of-N selection rendered as a joined segmented control with managed
5076
5147
  * selected state — distinct from `StrctTabs` (panel switching) and
@@ -5085,7 +5156,7 @@ export declare class StrctSegmented implements ControlValueAccessor {
5085
5156
  /** The selectable segments. */
5086
5157
  readonly options: import("@angular/core").InputSignal<StrctSegmentedOption[]>;
5087
5158
  /** Segment size. */
5088
- readonly size: import("@angular/core").InputSignal<StrctSegmentedSize>;
5159
+ readonly size: import("@angular/core").InputSignal<StrctControlSize>;
5089
5160
  /** Stretch to the full width of the container. */
5090
5161
  readonly block: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
5091
5162
  /** Static disable; forms' setDisabledState also drives the disabled state. */
@@ -5204,6 +5275,14 @@ export declare class StrctRange implements ControlValueAccessor {
5204
5275
  * <strct-password [(ngModel)]="pw" meter />
5205
5276
  */
5206
5277
  export declare class StrctPassword implements ControlValueAccessor {
5278
+ /**
5279
+ * Control size — the shared scale, so this lines up with the buttons and
5280
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5281
+ * or the default height when there is none.
5282
+ */
5283
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5284
+ /** The height its size asks for; nothing while it states no size. */
5285
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5207
5286
  /** Placeholder text when empty. */
5208
5287
  readonly placeholder: import("@angular/core").InputSignal<string>;
5209
5288
  /** Show a strength meter. */
@@ -5235,6 +5314,11 @@ export declare class StrctPassword implements ControlValueAccessor {
5235
5314
  setDisabledState(isDisabled: boolean): void;
5236
5315
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctPassword, never>;
5237
5316
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctPassword, "strct-password", never, {
5317
+ "size": {
5318
+ "alias": "size";
5319
+ "required": false;
5320
+ "isSignal": true;
5321
+ };
5238
5322
  "placeholder": {
5239
5323
  "alias": "placeholder";
5240
5324
  "required": false;
@@ -5634,6 +5718,14 @@ export declare const STRCT_MASKS: {
5634
5718
  * <strct-input-mask mask="HH:HH:HH:HH:HH:HH" uppercase [(ngModel)]="mac" />
5635
5719
  */
5636
5720
  export declare class StrctInputMask implements ControlValueAccessor {
5721
+ /**
5722
+ * Control size — the shared scale, so this lines up with the buttons and
5723
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5724
+ * or the default height when there is none.
5725
+ */
5726
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5727
+ /** The height its size asks for; nothing while it states no size. */
5728
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5637
5729
  /** Mask pattern (9=digit, A=letter, H=hex, *=alnum). */
5638
5730
  readonly mask: import("@angular/core").InputSignal<string>;
5639
5731
  /** Placeholder text when empty. */
@@ -5654,6 +5746,11 @@ export declare class StrctInputMask implements ControlValueAccessor {
5654
5746
  setDisabledState(isDisabled: boolean): void;
5655
5747
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctInputMask, never>;
5656
5748
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctInputMask, "strct-input-mask", never, {
5749
+ "size": {
5750
+ "alias": "size";
5751
+ "required": false;
5752
+ "isSignal": true;
5753
+ };
5657
5754
  "mask": {
5658
5755
  "alias": "mask";
5659
5756
  "required": true;
@@ -5710,6 +5807,14 @@ interface CbxRow {
5710
5807
  * text itself can be committed as a free-form value.
5711
5808
  */
5712
5809
  export declare class StrctCombobox implements ControlValueAccessor {
5810
+ /**
5811
+ * Control size — the shared scale, so this lines up with the buttons and
5812
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
5813
+ * or the default height when there is none.
5814
+ */
5815
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
5816
+ /** The height its size asks for; nothing while it states no size. */
5817
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5713
5818
  private readonly host;
5714
5819
  private readonly inputEl;
5715
5820
  protected readonly listId: string;
@@ -5812,6 +5917,11 @@ export declare class StrctCombobox implements ControlValueAccessor {
5812
5917
  setDisabledState(isDisabled: boolean): void;
5813
5918
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctCombobox, never>;
5814
5919
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctCombobox, "strct-combobox", never, {
5920
+ "size": {
5921
+ "alias": "size";
5922
+ "required": false;
5923
+ "isSignal": true;
5924
+ };
5815
5925
  "options": {
5816
5926
  "alias": "options";
5817
5927
  "required": false;
@@ -5893,6 +6003,14 @@ export declare class StrctCombobox implements ControlValueAccessor {
5893
6003
  * [selected]`.
5894
6004
  */
5895
6005
  export declare class StrctSelect implements ControlValueAccessor {
6006
+ /**
6007
+ * Control size — the shared scale, so this lines up with the buttons and
6008
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6009
+ * or the default height when there is none.
6010
+ */
6011
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6012
+ /** The height its size asks for; nothing while it states no size. */
6013
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
5896
6014
  private readonly host;
5897
6015
  protected readonly listId: string;
5898
6016
  /** Available options (set `disabled: true` on an option to gray it out). */
@@ -5952,6 +6070,11 @@ export declare class StrctSelect implements ControlValueAccessor {
5952
6070
  setDisabledState(isDisabled: boolean): void;
5953
6071
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctSelect, never>;
5954
6072
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctSelect, "strct-select", never, {
6073
+ "size": {
6074
+ "alias": "size";
6075
+ "required": false;
6076
+ "isSignal": true;
6077
+ };
5955
6078
  "options": {
5956
6079
  "alias": "options";
5957
6080
  "required": false;
@@ -6007,6 +6130,14 @@ export declare const strctDpPad: (n: number) => string;
6007
6130
  * <strct-datepicker [(ngModel)]="date" />
6008
6131
  */
6009
6132
  export declare class StrctDatepicker implements ControlValueAccessor {
6133
+ /**
6134
+ * Control size — the shared scale, so this lines up with the buttons and
6135
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6136
+ * or the default height when there is none.
6137
+ */
6138
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6139
+ /** The height its size asks for; nothing while it states no size. */
6140
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6010
6141
  private readonly host;
6011
6142
  /** Placeholder text when empty. */
6012
6143
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -6065,6 +6196,11 @@ export declare class StrctDatepicker implements ControlValueAccessor {
6065
6196
  setDisabledState(isDisabled: boolean): void;
6066
6197
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctDatepicker, never>;
6067
6198
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctDatepicker, "strct-datepicker", never, {
6199
+ "size": {
6200
+ "alias": "size";
6201
+ "required": false;
6202
+ "isSignal": true;
6203
+ };
6068
6204
  "placeholder": {
6069
6205
  "alias": "placeholder";
6070
6206
  "required": false;
@@ -6112,6 +6248,14 @@ export declare class StrctDatepicker implements ControlValueAccessor {
6112
6248
  * <strct-color-picker [(ngModel)]="color" />
6113
6249
  */
6114
6250
  export declare class StrctColorPicker implements ControlValueAccessor {
6251
+ /**
6252
+ * Control size — the shared scale, so this lines up with the buttons and
6253
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6254
+ * or the default height when there is none.
6255
+ */
6256
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6257
+ /** The height its size asks for; nothing while it states no size. */
6258
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6115
6259
  private readonly host;
6116
6260
  /** Custom palette swatches. */
6117
6261
  readonly swatches: import("@angular/core").InputSignal<string[]>;
@@ -6140,6 +6284,11 @@ export declare class StrctColorPicker implements ControlValueAccessor {
6140
6284
  setDisabledState(isDisabled: boolean): void;
6141
6285
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctColorPicker, never>;
6142
6286
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctColorPicker, "strct-color-picker", never, {
6287
+ "size": {
6288
+ "alias": "size";
6289
+ "required": false;
6290
+ "isSignal": true;
6291
+ };
6143
6292
  "swatches": {
6144
6293
  "alias": "swatches";
6145
6294
  "required": false;
@@ -6231,6 +6380,14 @@ export declare class StrctCascadeColumn {
6231
6380
  * the trigger on close.
6232
6381
  */
6233
6382
  export declare class StrctCascadeSelect extends StrctCascadeHost implements ControlValueAccessor {
6383
+ /**
6384
+ * Control size — the shared scale, so this lines up with the buttons and
6385
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
6386
+ * or the default height when there is none.
6387
+ */
6388
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
6389
+ /** The height its size asks for; nothing while it states no size. */
6390
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
6234
6391
  private readonly elementRef;
6235
6392
  /** Available options. */
6236
6393
  readonly options: import("@angular/core").InputSignal<StrctCascadeOption[]>;
@@ -6273,6 +6430,11 @@ export declare class StrctCascadeSelect extends StrctCascadeHost implements Cont
6273
6430
  setDisabledState(isDisabled: boolean): void;
6274
6431
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctCascadeSelect, never>;
6275
6432
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctCascadeSelect, "strct-cascade-select", never, {
6433
+ "size": {
6434
+ "alias": "size";
6435
+ "required": false;
6436
+ "isSignal": true;
6437
+ };
6276
6438
  "options": {
6277
6439
  "alias": "options";
6278
6440
  "required": false;
@@ -9056,7 +9218,7 @@ export declare class StrctMetricTile {
9056
9218
  * `sm` is the verdict-band size: six counters beside a one-line verdict at
9057
9219
  * 1440px, where the dashboard size fits three.
9058
9220
  */
9059
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9221
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9060
9222
  /**
9061
9223
  * What a plain click on an `href` tile does. `browser` follows the link, as
9062
9224
  * today. `app` belongs to a single-page app: the click is prevented and
@@ -9500,7 +9662,7 @@ export declare class StrctEmptyState {
9500
9662
  * `sm` is the inline row a 240px frame wants: a 16px icon with the title and
9501
9663
  * description on one line. A page-sized empty state stays `md`.
9502
9664
  */
9503
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9665
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9504
9666
  readonly description: import("@angular/core").InputSignal<string>;
9505
9667
  protected readonly resolvedIcon: import("@angular/core").Signal<string>;
9506
9668
  protected readonly toneClass: import("@angular/core").Signal<string>;
@@ -9627,7 +9789,7 @@ export declare class StrctTimeRangePicker {
9627
9789
  /** Popover alignment, as in strct-dropdown. */
9628
9790
  readonly align: import("@angular/core").InputSignal<"end" | "start">;
9629
9791
  /** Trigger size — match it to the toolbar's buttons (sm strips). */
9630
- readonly size: import("@angular/core").InputSignal<"md" | "sm">;
9792
+ readonly size: import("@angular/core").InputSignal<"sm" | "md">;
9631
9793
  /** Localizable strings. */
9632
9794
  readonly dialogLabel: import("@angular/core").InputSignal<string>;
9633
9795
  readonly quickLabel: import("@angular/core").InputSignal<string>;
@@ -12033,6 +12195,14 @@ export declare class StrctChange {
12033
12195
  * aria-valuemin/max/now so assistive tech announces it as a number control.
12034
12196
  */
12035
12197
  export declare class StrctNumber implements ControlValueAccessor {
12198
+ /**
12199
+ * Control size — the shared scale, so this lines up with the buttons and
12200
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12201
+ * or the default height when there is none.
12202
+ */
12203
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12204
+ /** The height its size asks for; nothing while it states no size. */
12205
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12036
12206
  /** Minimum allowed value; null = unbounded. */
12037
12207
  readonly min: import("@angular/core").InputSignal<number | null>;
12038
12208
  /** Maximum allowed value; null = unbounded. */
@@ -12080,6 +12250,11 @@ export declare class StrctNumber implements ControlValueAccessor {
12080
12250
  setDisabledState(isDisabled: boolean): void;
12081
12251
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctNumber, never>;
12082
12252
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctNumber, "strct-number", never, {
12253
+ "size": {
12254
+ "alias": "size";
12255
+ "required": false;
12256
+ "isSignal": true;
12257
+ };
12083
12258
  "min": {
12084
12259
  "alias": "min";
12085
12260
  "required": false;
@@ -12301,6 +12476,14 @@ export declare class StrctConfirmOutlet {
12301
12476
  * modal/drawer stays open); focus returns to the trigger on close.
12302
12477
  */
12303
12478
  export declare class StrctTreeSelect implements ControlValueAccessor {
12479
+ /**
12480
+ * Control size — the shared scale, so this lines up with the buttons and
12481
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12482
+ * or the default height when there is none.
12483
+ */
12484
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12485
+ /** The height its size asks for; nothing while it states no size. */
12486
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12304
12487
  private readonly host;
12305
12488
  /** Root nodes rendered by the embedded `<strct-tree>` (data-driven mode). */
12306
12489
  readonly nodes: import("@angular/core").InputSignal<StrctTreeNodeData[]>;
@@ -12360,6 +12543,11 @@ export declare class StrctTreeSelect implements ControlValueAccessor {
12360
12543
  setDisabledState(isDisabled: boolean): void;
12361
12544
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctTreeSelect, never>;
12362
12545
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctTreeSelect, "strct-tree-select", never, {
12546
+ "size": {
12547
+ "alias": "size";
12548
+ "required": false;
12549
+ "isSignal": true;
12550
+ };
12363
12551
  "nodes": {
12364
12552
  "alias": "nodes";
12365
12553
  "required": false;
@@ -12407,6 +12595,14 @@ export declare class StrctTreeSelect implements ControlValueAccessor {
12407
12595
  * date keeps the value empty until a date is picked.
12408
12596
  */
12409
12597
  export declare class StrctDatetimePicker implements ControlValueAccessor {
12598
+ /**
12599
+ * Control size — the shared scale, so this lines up with the buttons and
12600
+ * fields beside it. Left unset it follows an enclosing [strctControlSize],
12601
+ * or the default height when there is none.
12602
+ */
12603
+ readonly size: import("@angular/core").InputSignal<StrctControlSize | undefined>;
12604
+ /** The height its size asks for; nothing while it states no size. */
12605
+ protected readonly controlHeight: import("@angular/core").Signal<string | null>;
12410
12606
  /** Placeholder text of the date input when empty (localizable). */
12411
12607
  readonly placeholder: import("@angular/core").InputSignal<string>;
12412
12608
  /** Minute granularity of the minute select (1 = every minute). */
@@ -12451,6 +12647,11 @@ export declare class StrctDatetimePicker implements ControlValueAccessor {
12451
12647
  setDisabledState(isDisabled: boolean): void;
12452
12648
  static ɵfac: i0.ɵɵFactoryDeclaration<StrctDatetimePicker, never>;
12453
12649
  static ɵcmp: i0.ɵɵComponentDeclaration<StrctDatetimePicker, "strct-datetime-picker", never, {
12650
+ "size": {
12651
+ "alias": "size";
12652
+ "required": false;
12653
+ "isSignal": true;
12654
+ };
12454
12655
  "placeholder": {
12455
12656
  "alias": "placeholder";
12456
12657
  "required": false;