twico-ui 1.46.0 → 1.48.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/CHANGELOG.md +14 -0
- package/dist/icons.d.cts +2 -1
- package/dist/icons.d.ts +2 -1
- package/dist/index.cjs +220 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +433 -1
- package/dist/index.d.ts +433 -1
- package/dist/index.mjs +220 -14
- package/dist/index.mjs.map +1 -1
- package/llms.txt +16 -0
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1636,6 +1636,34 @@ interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "o
|
|
|
1636
1636
|
label?: React.ReactNode;
|
|
1637
1637
|
/** Helper text shown below when there is no error. */
|
|
1638
1638
|
hint?: React.ReactNode;
|
|
1639
|
+
/**
|
|
1640
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
1641
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
1642
|
+
*
|
|
1643
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
1644
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
1645
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
1646
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
1647
|
+
*
|
|
1648
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
1649
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
1650
|
+
* misalignment straight back:
|
|
1651
|
+
*
|
|
1652
|
+
* ```jsx
|
|
1653
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
1654
|
+
* <Select label="Filter" … />
|
|
1655
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
1656
|
+
* <Input label="Value" … />
|
|
1657
|
+
* </Stack>
|
|
1658
|
+
* ```
|
|
1659
|
+
*
|
|
1660
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
1661
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
1662
|
+
* It adds no text to the accessibility tree.
|
|
1663
|
+
*
|
|
1664
|
+
* @default false
|
|
1665
|
+
*/
|
|
1666
|
+
reserveFooter?: boolean;
|
|
1639
1667
|
/** Error message — turns the field red and replaces the hint. */
|
|
1640
1668
|
error?: React.ReactNode;
|
|
1641
1669
|
/** Marks the field required (adds an asterisk to the label). @default false */
|
|
@@ -1696,6 +1724,34 @@ interface OptionGroup {
|
|
|
1696
1724
|
interface ComboboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "value" | "defaultValue" | "onChange"> {
|
|
1697
1725
|
label?: React.ReactNode;
|
|
1698
1726
|
hint?: React.ReactNode;
|
|
1727
|
+
/**
|
|
1728
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
1729
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
1730
|
+
*
|
|
1731
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
1732
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
1733
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
1734
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
1735
|
+
*
|
|
1736
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
1737
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
1738
|
+
* misalignment straight back:
|
|
1739
|
+
*
|
|
1740
|
+
* ```jsx
|
|
1741
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
1742
|
+
* <Select label="Filter" … />
|
|
1743
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
1744
|
+
* <Input label="Value" … />
|
|
1745
|
+
* </Stack>
|
|
1746
|
+
* ```
|
|
1747
|
+
*
|
|
1748
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
1749
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
1750
|
+
* It adds no text to the accessibility tree.
|
|
1751
|
+
*
|
|
1752
|
+
* @default false
|
|
1753
|
+
*/
|
|
1754
|
+
reserveFooter?: boolean;
|
|
1699
1755
|
error?: React.ReactNode;
|
|
1700
1756
|
required?: boolean;
|
|
1701
1757
|
size?: "sm" | "md" | "lg";
|
|
@@ -1825,6 +1881,34 @@ interface CurrencyProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>
|
|
|
1825
1881
|
label?: React.ReactNode;
|
|
1826
1882
|
/** Helper text below the field; linked to the input via aria-describedby. */
|
|
1827
1883
|
hint?: React.ReactNode;
|
|
1884
|
+
/**
|
|
1885
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
1886
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
1887
|
+
*
|
|
1888
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
1889
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
1890
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
1891
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
1892
|
+
*
|
|
1893
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
1894
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
1895
|
+
* misalignment straight back:
|
|
1896
|
+
*
|
|
1897
|
+
* ```jsx
|
|
1898
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
1899
|
+
* <Select label="Filter" … />
|
|
1900
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
1901
|
+
* <Input label="Value" … />
|
|
1902
|
+
* </Stack>
|
|
1903
|
+
* ```
|
|
1904
|
+
*
|
|
1905
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
1906
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
1907
|
+
* It adds no text to the accessibility tree.
|
|
1908
|
+
*
|
|
1909
|
+
* @default false
|
|
1910
|
+
*/
|
|
1911
|
+
reserveFooter?: boolean;
|
|
1828
1912
|
/** Error text below the field; sets aria-invalid and is linked via aria-describedby (takes precedence over hint). */
|
|
1829
1913
|
error?: React.ReactNode;
|
|
1830
1914
|
/** Intercepted to render the label asterisk, and forwarded to the native input as `required`. @default false */
|
|
@@ -1865,6 +1949,34 @@ interface CurrencyFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputEle
|
|
|
1865
1949
|
label?: React.ReactNode;
|
|
1866
1950
|
/** Helper text below the field; linked to the input via aria-describedby. */
|
|
1867
1951
|
hint?: React.ReactNode;
|
|
1952
|
+
/**
|
|
1953
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
1954
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
1955
|
+
*
|
|
1956
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
1957
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
1958
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
1959
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
1960
|
+
*
|
|
1961
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
1962
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
1963
|
+
* misalignment straight back:
|
|
1964
|
+
*
|
|
1965
|
+
* ```jsx
|
|
1966
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
1967
|
+
* <Select label="Filter" … />
|
|
1968
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
1969
|
+
* <Input label="Value" … />
|
|
1970
|
+
* </Stack>
|
|
1971
|
+
* ```
|
|
1972
|
+
*
|
|
1973
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
1974
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
1975
|
+
* It adds no text to the accessibility tree.
|
|
1976
|
+
*
|
|
1977
|
+
* @default false
|
|
1978
|
+
*/
|
|
1979
|
+
reserveFooter?: boolean;
|
|
1868
1980
|
/** Error text below the field; sets aria-invalid and is linked via aria-describedby (takes precedence over hint). */
|
|
1869
1981
|
error?: React.ReactNode;
|
|
1870
1982
|
/** Intercepted to render the label asterisk, and forwarded to the native input as `required`. @default false */
|
|
@@ -2038,6 +2150,31 @@ interface DatatableProps<T = any> extends Omit<React.HTMLAttributes<HTMLDivEleme
|
|
|
2038
2150
|
* `tr.twc-dt__row.my-row .twc-dt__td`. You are then choosing to cover the hover cue on those rows.
|
|
2039
2151
|
*/
|
|
2040
2152
|
getRowClassName?: (row: T, index: number) => string | undefined;
|
|
2153
|
+
/**
|
|
2154
|
+
* Default vertical alignment for every body cell, as `data-valign`. Only visible once rows vary
|
|
2155
|
+
* in height - a `wrapText` column, a multi-line `renderCell`, or a drag-resized row; with
|
|
2156
|
+
* single-line rows every value looks the same.
|
|
2157
|
+
*
|
|
2158
|
+
* **Precedence, lowest first: this → {@link getRowVerticalAlign} → the column's
|
|
2159
|
+
* `verticalAlign`.** It is resolved in one place and emitted as a single `data-valign` on the
|
|
2160
|
+
* cell, rather than as three competing CSS rules, so the order is readable in the code and an
|
|
2161
|
+
* unrelated stylesheet edit cannot reorder it.
|
|
2162
|
+
*
|
|
2163
|
+
* @default unset — cells keep the browser's `middle`, except `wrapText` cells, which sit `top`
|
|
2164
|
+
*/
|
|
2165
|
+
verticalAlign?: "top" | "middle" | "bottom";
|
|
2166
|
+
/**
|
|
2167
|
+
* Vertical alignment for one row's cells, called `(row, index)` like {@link getRowStyle}. Return
|
|
2168
|
+
* `undefined` to leave a row on the table default.
|
|
2169
|
+
*
|
|
2170
|
+
* Overrides {@link verticalAlign} but **not** a column's own `verticalAlign`: an explicit column
|
|
2171
|
+
* value is a property of that column's content type and is almost always a deliberate exemption
|
|
2172
|
+
* (the actions column stays centred while the rest of the row moves). If you need a row to move
|
|
2173
|
+
* every cell, leave the columns' values unset.
|
|
2174
|
+
*
|
|
2175
|
+
* `index` is page-relative, the same as {@link getRowStyle}.
|
|
2176
|
+
*/
|
|
2177
|
+
getRowVerticalAlign?: (row: T, index: number) => "top" | "middle" | "bottom" | undefined;
|
|
2041
2178
|
/** Restrict the toolbar quick-search to these column `field`s (client mode); defaults to every
|
|
2042
2179
|
* visible column. Mirrors `runDatatableQuery`'s `options.searchFields`. */
|
|
2043
2180
|
searchFields?: string[];
|
|
@@ -2557,6 +2694,20 @@ interface DatatableColumn<T = any> {
|
|
|
2557
2694
|
align?: "left" | "center" | "right";
|
|
2558
2695
|
/** Header-cell alignment, when it should differ from the body `align`. @default the column's `align` */
|
|
2559
2696
|
headerAlign?: "left" | "center" | "right";
|
|
2697
|
+
/**
|
|
2698
|
+
* Vertical alignment of this column's body cells, as `data-valign`. The transpose of `align`:
|
|
2699
|
+
* `align` decides where content sits across the column's width, this decides where it sits down
|
|
2700
|
+
* the row's height. Only visible once rows vary in height - a `wrapText` column, a multi-line
|
|
2701
|
+
* `renderCell`, or a drag-resized row.
|
|
2702
|
+
*
|
|
2703
|
+
* **Wins over the row and table values.** A per-column setting is a statement about this column's
|
|
2704
|
+
* content type - an actions column or a status badge that should stay centred however tall the
|
|
2705
|
+
* row gets - so it survives a row-level or table-wide sweep. To move a whole row including this
|
|
2706
|
+
* column, leave the column's value unset.
|
|
2707
|
+
*
|
|
2708
|
+
* @default `"top"` for `wrapText` columns, otherwise the table's `verticalAlign`
|
|
2709
|
+
*/
|
|
2710
|
+
verticalAlign?: "top" | "middle" | "bottom";
|
|
2560
2711
|
/** Allow sorting this column. @default true */
|
|
2561
2712
|
sortable?: boolean;
|
|
2562
2713
|
/** Allow filtering this column. @default true */
|
|
@@ -3053,6 +3204,34 @@ interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "on
|
|
|
3053
3204
|
label?: React.ReactNode;
|
|
3054
3205
|
/** Helper text shown below when there is no error. */
|
|
3055
3206
|
hint?: React.ReactNode;
|
|
3207
|
+
/**
|
|
3208
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3209
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3210
|
+
*
|
|
3211
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3212
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3213
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3214
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3215
|
+
*
|
|
3216
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3217
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3218
|
+
* misalignment straight back:
|
|
3219
|
+
*
|
|
3220
|
+
* ```jsx
|
|
3221
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3222
|
+
* <Select label="Filter" … />
|
|
3223
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3224
|
+
* <Input label="Value" … />
|
|
3225
|
+
* </Stack>
|
|
3226
|
+
* ```
|
|
3227
|
+
*
|
|
3228
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3229
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3230
|
+
* It adds no text to the accessibility tree.
|
|
3231
|
+
*
|
|
3232
|
+
* @default false
|
|
3233
|
+
*/
|
|
3234
|
+
reserveFooter?: boolean;
|
|
3056
3235
|
/** Error message — turns the field red and replaces the hint. */
|
|
3057
3236
|
error?: React.ReactNode;
|
|
3058
3237
|
/** Marks the field required (adds an asterisk to the label). @default false */
|
|
@@ -3106,6 +3285,34 @@ interface DateRangePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>
|
|
|
3106
3285
|
label?: React.ReactNode;
|
|
3107
3286
|
/** Helper text shown below when there is no error. */
|
|
3108
3287
|
hint?: React.ReactNode;
|
|
3288
|
+
/**
|
|
3289
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3290
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3291
|
+
*
|
|
3292
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3293
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3294
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3295
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3296
|
+
*
|
|
3297
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3298
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3299
|
+
* misalignment straight back:
|
|
3300
|
+
*
|
|
3301
|
+
* ```jsx
|
|
3302
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3303
|
+
* <Select label="Filter" … />
|
|
3304
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3305
|
+
* <Input label="Value" … />
|
|
3306
|
+
* </Stack>
|
|
3307
|
+
* ```
|
|
3308
|
+
*
|
|
3309
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3310
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3311
|
+
* It adds no text to the accessibility tree.
|
|
3312
|
+
*
|
|
3313
|
+
* @default false
|
|
3314
|
+
*/
|
|
3315
|
+
reserveFooter?: boolean;
|
|
3109
3316
|
/** Error message — turns the field red and replaces the hint. */
|
|
3110
3317
|
error?: React.ReactNode;
|
|
3111
3318
|
/** Marks the field required (adds an asterisk to the label). @default false */
|
|
@@ -3163,6 +3370,34 @@ interface TimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "on
|
|
|
3163
3370
|
label?: React.ReactNode;
|
|
3164
3371
|
/** Helper text shown below when there is no error. */
|
|
3165
3372
|
hint?: React.ReactNode;
|
|
3373
|
+
/**
|
|
3374
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3375
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3376
|
+
*
|
|
3377
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3378
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3379
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3380
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3381
|
+
*
|
|
3382
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3383
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3384
|
+
* misalignment straight back:
|
|
3385
|
+
*
|
|
3386
|
+
* ```jsx
|
|
3387
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3388
|
+
* <Select label="Filter" … />
|
|
3389
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3390
|
+
* <Input label="Value" … />
|
|
3391
|
+
* </Stack>
|
|
3392
|
+
* ```
|
|
3393
|
+
*
|
|
3394
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3395
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3396
|
+
* It adds no text to the accessibility tree.
|
|
3397
|
+
*
|
|
3398
|
+
* @default false
|
|
3399
|
+
*/
|
|
3400
|
+
reserveFooter?: boolean;
|
|
3166
3401
|
/** Error message — turns the field red and replaces the hint. */
|
|
3167
3402
|
error?: React.ReactNode;
|
|
3168
3403
|
/** Marks the field required (adds an asterisk to the label). @default false */
|
|
@@ -3218,6 +3453,34 @@ interface DateTimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
|
|
|
3218
3453
|
label?: React.ReactNode;
|
|
3219
3454
|
/** Helper text shown below when there is no error. */
|
|
3220
3455
|
hint?: React.ReactNode;
|
|
3456
|
+
/**
|
|
3457
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3458
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3459
|
+
*
|
|
3460
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3461
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3462
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3463
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3464
|
+
*
|
|
3465
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3466
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3467
|
+
* misalignment straight back:
|
|
3468
|
+
*
|
|
3469
|
+
* ```jsx
|
|
3470
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3471
|
+
* <Select label="Filter" … />
|
|
3472
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3473
|
+
* <Input label="Value" … />
|
|
3474
|
+
* </Stack>
|
|
3475
|
+
* ```
|
|
3476
|
+
*
|
|
3477
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3478
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3479
|
+
* It adds no text to the accessibility tree.
|
|
3480
|
+
*
|
|
3481
|
+
* @default false
|
|
3482
|
+
*/
|
|
3483
|
+
reserveFooter?: boolean;
|
|
3221
3484
|
/** Error message — recolors both controls and replaces the hint. */
|
|
3222
3485
|
error?: React.ReactNode;
|
|
3223
3486
|
/** Marks the field required (adds an asterisk to the label). @default false */
|
|
@@ -3275,6 +3538,34 @@ declare function DateTimePicker(props: DateTimePickerProps): React.JSX.Element;
|
|
|
3275
3538
|
interface MultiSelectProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "value" | "defaultValue" | "onChange"> {
|
|
3276
3539
|
label?: React.ReactNode;
|
|
3277
3540
|
hint?: React.ReactNode;
|
|
3541
|
+
/**
|
|
3542
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3543
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3544
|
+
*
|
|
3545
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3546
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3547
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3548
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3549
|
+
*
|
|
3550
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3551
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3552
|
+
* misalignment straight back:
|
|
3553
|
+
*
|
|
3554
|
+
* ```jsx
|
|
3555
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3556
|
+
* <Select label="Filter" … />
|
|
3557
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3558
|
+
* <Input label="Value" … />
|
|
3559
|
+
* </Stack>
|
|
3560
|
+
* ```
|
|
3561
|
+
*
|
|
3562
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3563
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3564
|
+
* It adds no text to the accessibility tree.
|
|
3565
|
+
*
|
|
3566
|
+
* @default false
|
|
3567
|
+
*/
|
|
3568
|
+
reserveFooter?: boolean;
|
|
3278
3569
|
error?: React.ReactNode;
|
|
3279
3570
|
required?: boolean;
|
|
3280
3571
|
/** Control height preset, matching Select/Combobox. @default "md" */
|
|
@@ -3540,6 +3831,34 @@ interface FieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "id"> {
|
|
|
3540
3831
|
label?: React.ReactNode;
|
|
3541
3832
|
/** Helper text shown below when there is no error. */
|
|
3542
3833
|
hint?: React.ReactNode;
|
|
3834
|
+
/**
|
|
3835
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
3836
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
3837
|
+
*
|
|
3838
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
3839
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
3840
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
3841
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
3842
|
+
*
|
|
3843
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
3844
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
3845
|
+
* misalignment straight back:
|
|
3846
|
+
*
|
|
3847
|
+
* ```jsx
|
|
3848
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
3849
|
+
* <Select label="Filter" … />
|
|
3850
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
3851
|
+
* <Input label="Value" … />
|
|
3852
|
+
* </Stack>
|
|
3853
|
+
* ```
|
|
3854
|
+
*
|
|
3855
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
3856
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
3857
|
+
* It adds no text to the accessibility tree.
|
|
3858
|
+
*
|
|
3859
|
+
* @default false
|
|
3860
|
+
*/
|
|
3861
|
+
reserveFooter?: boolean;
|
|
3543
3862
|
/** Error message — replaces the hint and renders in the danger color. */
|
|
3544
3863
|
error?: React.ReactNode;
|
|
3545
3864
|
/** Marks the field required (adds an asterisk after the label). @default false */
|
|
@@ -3728,6 +4047,34 @@ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "
|
|
|
3728
4047
|
label?: React.ReactNode;
|
|
3729
4048
|
/** Helper text shown below when there is no error. */
|
|
3730
4049
|
hint?: React.ReactNode;
|
|
4050
|
+
/**
|
|
4051
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
4052
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
4053
|
+
*
|
|
4054
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
4055
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
4056
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
4057
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
4058
|
+
*
|
|
4059
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
4060
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
4061
|
+
* misalignment straight back:
|
|
4062
|
+
*
|
|
4063
|
+
* ```jsx
|
|
4064
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
4065
|
+
* <Select label="Filter" … />
|
|
4066
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
4067
|
+
* <Input label="Value" … />
|
|
4068
|
+
* </Stack>
|
|
4069
|
+
* ```
|
|
4070
|
+
*
|
|
4071
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
4072
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
4073
|
+
* It adds no text to the accessibility tree.
|
|
4074
|
+
*
|
|
4075
|
+
* @default false
|
|
4076
|
+
*/
|
|
4077
|
+
reserveFooter?: boolean;
|
|
3731
4078
|
/** Error message — turns the field red and replaces the hint. */
|
|
3732
4079
|
error?: React.ReactNode;
|
|
3733
4080
|
/** Marks the field required (adds an asterisk and forwards to the native input). */
|
|
@@ -4036,6 +4383,34 @@ interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "on
|
|
|
4036
4383
|
label?: React.ReactNode;
|
|
4037
4384
|
/** Helper text below the group. */
|
|
4038
4385
|
hint?: React.ReactNode;
|
|
4386
|
+
/**
|
|
4387
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
4388
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
4389
|
+
*
|
|
4390
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
4391
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
4392
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
4393
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
4394
|
+
*
|
|
4395
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
4396
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
4397
|
+
* misalignment straight back:
|
|
4398
|
+
*
|
|
4399
|
+
* ```jsx
|
|
4400
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
4401
|
+
* <Select label="Filter" … />
|
|
4402
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
4403
|
+
* <Input label="Value" … />
|
|
4404
|
+
* </Stack>
|
|
4405
|
+
* ```
|
|
4406
|
+
*
|
|
4407
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
4408
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
4409
|
+
* It adds no text to the accessibility tree.
|
|
4410
|
+
*
|
|
4411
|
+
* @default false
|
|
4412
|
+
*/
|
|
4413
|
+
reserveFooter?: boolean;
|
|
4039
4414
|
/** Error text below the group; sets `aria-invalid` and is announced once for the whole group. */
|
|
4040
4415
|
error?: React.ReactNode;
|
|
4041
4416
|
/** Lay the radios in a column or a wrapping row. @default "vertical" */
|
|
@@ -4098,6 +4473,34 @@ declare function Rating(props: RatingProps): React.JSX.Element;
|
|
|
4098
4473
|
interface SelectProps extends Omit<React.HTMLAttributes<HTMLButtonElement>, "onChange" | "defaultValue"> {
|
|
4099
4474
|
label?: React.ReactNode;
|
|
4100
4475
|
hint?: React.ReactNode;
|
|
4476
|
+
/**
|
|
4477
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
4478
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
4479
|
+
*
|
|
4480
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
4481
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
4482
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
4483
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
4484
|
+
*
|
|
4485
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
4486
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
4487
|
+
* misalignment straight back:
|
|
4488
|
+
*
|
|
4489
|
+
* ```jsx
|
|
4490
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
4491
|
+
* <Select label="Filter" … />
|
|
4492
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
4493
|
+
* <Input label="Value" … />
|
|
4494
|
+
* </Stack>
|
|
4495
|
+
* ```
|
|
4496
|
+
*
|
|
4497
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
4498
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
4499
|
+
* It adds no text to the accessibility tree.
|
|
4500
|
+
*
|
|
4501
|
+
* @default false
|
|
4502
|
+
*/
|
|
4503
|
+
reserveFooter?: boolean;
|
|
4101
4504
|
error?: React.ReactNode;
|
|
4102
4505
|
required?: boolean;
|
|
4103
4506
|
size?: "sm" | "md" | "lg";
|
|
@@ -4535,6 +4938,34 @@ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement
|
|
|
4535
4938
|
label?: React.ReactNode;
|
|
4536
4939
|
/** Helper text shown below when there is no error. */
|
|
4537
4940
|
hint?: React.ReactNode;
|
|
4941
|
+
/**
|
|
4942
|
+
* #494: always render the footer lane, empty when there is nothing to say, so this field is the
|
|
4943
|
+
* same height as one that has a `hint`, an `error` or a counter.
|
|
4944
|
+
*
|
|
4945
|
+
* A row of fields aligned with `align="flex-end"` splits onto two lines the moment ONE of them
|
|
4946
|
+
* has a hint: that field grows a footer, the others do not, and the caption ends up moving a
|
|
4947
|
+
* *different* control. `align` cannot fix it - `flex-start` lines up the labels instead, so the
|
|
4948
|
+
* controls part company as soon as one label wraps at a narrow width.
|
|
4949
|
+
*
|
|
4950
|
+
* Set it per field, or once on any ancestor for everything inside, which is the safer habit in a
|
|
4951
|
+
* row - with a per-field prop alone, adding a field later and forgetting it brings the
|
|
4952
|
+
* misalignment straight back:
|
|
4953
|
+
*
|
|
4954
|
+
* ```jsx
|
|
4955
|
+
* <Stack direction="row" align="flex-end" data-reserve-footer>
|
|
4956
|
+
* <Select label="Filter" … />
|
|
4957
|
+
* <Select label="Comparison" hint="Matches the whole value." … />
|
|
4958
|
+
* <Input label="Value" … />
|
|
4959
|
+
* </Stack>
|
|
4960
|
+
* ```
|
|
4961
|
+
*
|
|
4962
|
+
* The lane is held open by generated content, so it matches the real footer by construction -
|
|
4963
|
+
* same font metrics, same flex gap - rather than by a height that drifts when a token changes.
|
|
4964
|
+
* It adds no text to the accessibility tree.
|
|
4965
|
+
*
|
|
4966
|
+
* @default false
|
|
4967
|
+
*/
|
|
4968
|
+
reserveFooter?: boolean;
|
|
4538
4969
|
/** Error message — turns the field red and replaces the hint. */
|
|
4539
4970
|
error?: React.ReactNode;
|
|
4540
4971
|
/** Marks the field required (adds an asterisk and forwards to the native textarea). */
|
|
@@ -5251,4 +5682,5 @@ declare function useFilePicker(options?: UseFilePickerOptions): {
|
|
|
5251
5682
|
getInputProps: () => React.InputHTMLAttributes<HTMLInputElement> & { ref: React.RefObject<HTMLInputElement | null> };
|
|
5252
5683
|
};
|
|
5253
5684
|
|
|
5254
|
-
export { Accordion,
|
|
5685
|
+
export { Accordion, Alert, Anchor, AppShell, Avatar, AvatarMenu, Badge, Box, Boxplot, Breadcrumb, BubbleChart, Button, Candlestick, Card, CardGrid, Carousel, Chart, Checkbox, Code, ColorPicker, ColorSchemeScript, Combobox, CommandPalette, Container, Currency, CurrencyField, Datatable, DatePicker, DateRangePicker, DateTimePicker, Dialog, DiffTable, Divider, DonutChart, Drawer, EmptyState, Field, FileUpload, FilterBar, Form, FunnelChart, Gauge, Grid, Heading, Heatmap, IconButton, Image, ImageViewer, Input, Kanban, Kbd, Label, List, Menu, MultiSelect, Navbar, Pagination, PieChart, PolarAreaChart, Popover, Portal, Pre, Progress, RadarChart, Radio, RadioGroup, RangeChart, Rating, ScatterChart, Select, Sidebar, Skeleton, Slider, Sparkline, Spinner, Stack, Stat, Stepper, Switch, Table, Tabs, Tag, Text, Textarea, ThemeProvider, TimePicker, Timeline, Toast, ToastProvider, ToastViewport, ToggleGroup, Tooltip, TreeView, Treemap, TwicoProvider, VisuallyHidden, createTheme, getColorSchemeScript, runDatatableQuery, useClickOutside, useColorScheme, useControllableState, useCopyToClipboard, useDebouncedCallback, useDebouncedValue, useDisclosure, useEventListener, useFilePicker, useFocusTrap, useHover, useId, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyPress, useLocalStorage, useMediaQuery, useMounted, usePortal, usePrefersReducedMotion, usePrevious, useScrollLock, useTimeout, useToast, useToggle, useWindowSize };
|
|
5686
|
+
export type { AccordionItem, AccordionProps, ActionTone, AlertProps, AnchorProps, AppShellProps, AvatarMenuProps, AvatarProps, BadgeProps, BarTone, BoxOwnProps, BoxProps, BoxplotDatum, BoxplotProps, BreadcrumbItem, BreadcrumbProps, BubbleChartProps, ButtonProps, CandlestickDatum, CandlestickProps, CardGridBatchAction, CardGridBatchActionContext, CardGridFilter, CardGridProps, CardGridQuery, CardGridSort, CardGridSortOption, CardProps, CarouselProps, ChartDatum, ChartProps, CheckboxProps, CodeProps, ColorPickerProps, ColorSchemeScriptOptions, ColorSchemeScriptProps, ComboboxGroup, ComboboxOption, ComboboxProps, Command, CommandPaletteProps, ContainerOwnProps, ContainerProps, CurrencyFieldProps, CurrencyOption, CurrencyProps, DatatableBatchAction, DatatableBatchActionContext, DatatableBatchUpdateDetail, DatatableColumn, DatatableFilter, DatatableFilterOp, DatatableNumberOp, DatatableProps, DatatableQuery, DatatableRowAction, DatatableState, DatatableStringOp, DatePickerProps, DateRange, DateRangePickerProps, DateTimePickerProps, DialogProps, DiffOp, DiffTableColumn, DiffTableProps, DividerProps, DonutChartDatum, DonutChartProps, DrawerProps, EmptyStateProps, FieldProps, FileUploadProps, FilterBarProps, FilterClause, FilterField, FilterFieldType, FilterValues, FormProps, FunnelChartProps, FunnelDatum, GaugeProps, GaugeSeries, GridOwnProps, GridProps, HeadingOwnProps, HeadingProps, HeadingSize, HeatmapDatum, HeatmapProps, IconButtonProps, ImageProps, ImageViewerControlsApi, ImageViewerProps, ImageViewerState, InputProps, KanbanCard, KanbanColumn, KanbanProps, KbdProps, LabelProps, ListItemData, ListProps, MenuItemDef, MenuProps, MultiSelectGroup, MultiSelectOption, MultiSelectProps, NavbarLink, NavbarProps, Option, OptionGroup, PaginationProps, PieChartDatum, PieChartProps, PolarAreaChartProps, PolarAreaDatum, PolymorphicAs, PolymorphicComponent, PolymorphicProps, PolymorphicPropsWithRef, PolymorphicRef, PopoverProps, PortalProps, PreProps, ProgressProps, RadarChartProps, RadarDatum, RadioGroupOption, RadioGroupProps, RadioProps, RangeChartProps, RangeDatum, RatingProps, ResponsiveColumns, ScatterChartProps, ScatterPoint, ScatterSeries, SelectGroup, SelectOption, SelectProps, SidebarItem, SidebarProps, SkeletonProps, SliderProps, SparklineDatum, SparklineProps, SpinnerProps, StackOwnProps, StackProps, StatProps, Step, StepperProps, SwitchProps, Sx, TabItem, TableColumn, TableProps, TabsProps, TagProps, TextOwnProps, TextProps, TextTone, TextareaProps, Theme, ThemeProviderProps, ThemeTokens, TimePickerProps, TimelineItem, TimelineProps, ToastApi, ToastOptions, ToastProps, ToastProviderProps, ToastTone, ToastViewportProps, ToggleGroupItem, ToggleGroupProps, Tone, TooltipProps, TreeNode, TreeViewProps, TreemapDatum, TreemapProps, TwicoProviderProps, UseColorSchemeOptions, UseFilePickerOptions, UseFocusTrapOptions, UseKeyPressOptions, UseLocalStorageOptions, UseMediaQueryOptions, UseWindowSizeOptions, VisuallyHiddenProps, WithSx };
|