@uni-design-system/uni-mcp 11.6.0 → 11.7.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.
@@ -7,16 +7,16 @@ import { z } from "zod";
7
7
  // src/data/uni-index.json
8
8
  var uni_index_default = {
9
9
  meta: {
10
- version: "11.6.0",
11
- builtAt: "2026-10-05T01:16:14.251Z",
10
+ version: "11.7.0",
11
+ builtAt: "2026-10-22T04:29:01.107Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
16
  components: 88,
17
- tokens: 504,
17
+ tokens: 511,
18
18
  themes: 2,
19
- examples: 254,
19
+ examples: 256,
20
20
  utilities: 122
21
21
  }
22
22
  },
@@ -28,7 +28,7 @@ var uni_index_default = {
28
28
  summary: "",
29
29
  description: "",
30
30
  category: "feedback",
31
- version: "11.6.0",
31
+ version: "11.7.0",
32
32
  bindings: {
33
33
  angular: {
34
34
  importPath: "@uni-design-system/uni-angular",
@@ -118,7 +118,7 @@ var uni_index_default = {
118
118
  summary: "Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content.",
119
119
  description: "Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content. Surface, divider, height, typography and spacing all resolve from `appBar` tokens. Place it inside your page's `<header>` landmark.",
120
120
  category: "components",
121
- version: "11.6.0",
121
+ version: "11.7.0",
122
122
  bindings: {
123
123
  angular: {
124
124
  importPath: "@uni-design-system/uni-angular",
@@ -191,7 +191,7 @@ var uni_index_default = {
191
191
  summary: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol.",
192
192
  description: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol. Coloring, radius, typeface and sizes all resolve from `avatar` theme tokens; `variant` picks the container palette.",
193
193
  category: "components",
194
- version: "11.6.0",
194
+ version: "11.7.0",
195
195
  bindings: {
196
196
  angular: {
197
197
  importPath: "@uni-design-system/uni-angular",
@@ -286,7 +286,7 @@ var uni_index_default = {
286
286
  summary: "Overlapping stack of avatars.",
287
287
  description: "Overlapping stack of avatars. `max` collapses the overflow into a themed \u201C+N\u201D chip (itself a `uni-avatar`). Overlap and separator ring resolve from `avatarGroup` theme tokens.",
288
288
  category: "components",
289
- version: "11.6.0",
289
+ version: "11.7.0",
290
290
  bindings: {
291
291
  angular: {
292
292
  importPath: "@uni-design-system/uni-angular",
@@ -335,7 +335,7 @@ var uni_index_default = {
335
335
  summary: "",
336
336
  description: "",
337
337
  category: "primitives",
338
- version: "11.6.0",
338
+ version: "11.7.0",
339
339
  bindings: {
340
340
  angular: {
341
341
  importPath: "@uni-design-system/uni-angular",
@@ -416,7 +416,7 @@ var uni_index_default = {
416
416
  summary: "",
417
417
  description: "",
418
418
  category: "feedback",
419
- version: "11.6.0",
419
+ version: "11.7.0",
420
420
  bindings: {
421
421
  angular: {
422
422
  importPath: "@uni-design-system/uni-angular",
@@ -513,7 +513,7 @@ var uni_index_default = {
513
513
  summary: "",
514
514
  description: "",
515
515
  category: "directives",
516
- version: "11.6.0",
516
+ version: "11.7.0",
517
517
  bindings: {
518
518
  angular: {
519
519
  importPath: "@uni-design-system/uni-angular",
@@ -537,7 +537,7 @@ var uni_index_default = {
537
537
  summary: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`.',
538
538
  description: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`. It is a directive, so it composes freely \u2014 with another layout attribute (`<div stack-layout uni-text="body-1-long">`) and with a component\'s own host element (`<uni-card box-layout padding="lg">`); Angular merges the host `class` bindings rather than letting one win. Sizing convention (height/width/min/max/inset): a **number is px and needs a binding** \u2014 `[height]="420"`; a **plain attribute is a CSS length string** \u2014 `height="420px"`. Spacing/radius/color inputs take theme tokens.',
539
539
  category: "layout",
540
- version: "11.6.0",
540
+ version: "11.7.0",
541
541
  bindings: {
542
542
  angular: {
543
543
  importPath: "@uni-design-system/uni-angular",
@@ -945,7 +945,7 @@ var uni_index_default = {
945
945
  summary: 'WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current="page"`), separators are decorative.',
946
946
  description: 'WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current="page"`), separators are decorative. Items with `href` render as real links; without one they render as link-styled buttons emitting `itemClicked` \u2014 wire that to your router.',
947
947
  category: "components",
948
- version: "11.6.0",
948
+ version: "11.7.0",
949
949
  bindings: {
950
950
  angular: {
951
951
  importPath: "@uni-design-system/uni-angular",
@@ -1030,7 +1030,7 @@ var uni_index_default = {
1030
1030
  summary: "",
1031
1031
  description: "",
1032
1032
  category: "primitives",
1033
- version: "11.6.0",
1033
+ version: "11.7.0",
1034
1034
  bindings: {
1035
1035
  angular: {
1036
1036
  importPath: "@uni-design-system/uni-angular",
@@ -1044,6 +1044,14 @@ var uni_index_default = {
1044
1044
  default: "false, { transform: booleanAttribute }",
1045
1045
  description: ""
1046
1046
  },
1047
+ {
1048
+ name: "disabled",
1049
+ kind: "input",
1050
+ type: "unknown",
1051
+ required: false,
1052
+ default: "false, { transform: booleanAttribute }",
1053
+ description: "The native name, accepted as an alias of `disable`. Every other Uni form control takes `disabled`, so consumers write it here too \u2014 and without this input the binding landed on the DOM property, where the host's own `disabled` attribute binding removed it on the first pass. The button rendered enabled, with no error. Either name now works."
1054
+ },
1047
1055
  {
1048
1056
  name: "loading",
1049
1057
  kind: "input",
@@ -1190,7 +1198,7 @@ var uni_index_default = {
1190
1198
  summary: "",
1191
1199
  description: "",
1192
1200
  category: "primitives",
1193
- version: "11.6.0",
1201
+ version: "11.7.0",
1194
1202
  bindings: {
1195
1203
  angular: {
1196
1204
  importPath: "@uni-design-system/uni-angular",
@@ -1222,7 +1230,7 @@ var uni_index_default = {
1222
1230
  summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
1223
1231
  description: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates. One tab stop with a roving-tabindex `role=\"grid\"`; every day is a real button named with its full date. Values are plain ISO strings (`'YYYY-MM-DD'`), never `Date` objects, so bindings are timezone-free and serializable. Selection and today colours come from the theme's `primary` role pair; geometry and glyphs come from the `calendar` theme entry.",
1224
1232
  category: "forms",
1225
- version: "11.6.0",
1233
+ version: "11.7.0",
1226
1234
  bindings: {
1227
1235
  angular: {
1228
1236
  importPath: "@uni-design-system/uni-angular",
@@ -1463,7 +1471,7 @@ var uni_index_default = {
1463
1471
  summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
1464
1472
  description: 'Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target. Both the scrim and the panel are `popover="manual"` elements shown in order, so they stack deterministically in the top layer above every app z-index, and every scrim piece is CSS-anchor-positioned to the target \u2014 the hole tracks scroll/resize/layout with zero listeners. The panel is a non-modal `role="dialog"` (deliberately no `aria-modal`): focus moves into it on open, Tab runs a "duet loop" over the panel\'s focusables plus the spotlit target while it stays interactive, and on close focus returns to the pre-open element \u2014 unless the user moved into the target, where it stays. Storage-free by rule: `key` and the `dismissed` output are the "don\'t show again" hooks; persistence is the app\'s business (e.g. cdk local-storage).',
1465
1473
  category: "components",
1466
- version: "11.6.0",
1474
+ version: "11.7.0",
1467
1475
  bindings: {
1468
1476
  angular: {
1469
1477
  importPath: "@uni-design-system/uni-angular",
@@ -1683,7 +1691,7 @@ var uni_index_default = {
1683
1691
  summary: "",
1684
1692
  description: "",
1685
1693
  category: "layout",
1686
- version: "11.6.0",
1694
+ version: "11.7.0",
1687
1695
  bindings: {
1688
1696
  angular: {
1689
1697
  importPath: "@uni-design-system/uni-angular",
@@ -1745,7 +1753,7 @@ var uni_index_default = {
1745
1753
  summary: "",
1746
1754
  description: "",
1747
1755
  category: "layout",
1748
- version: "11.6.0",
1756
+ version: "11.7.0",
1749
1757
  bindings: {
1750
1758
  angular: {
1751
1759
  importPath: "@uni-design-system/uni-angular",
@@ -1786,7 +1794,7 @@ var uni_index_default = {
1786
1794
  summary: "",
1787
1795
  description: "",
1788
1796
  category: "layout",
1789
- version: "11.6.0",
1797
+ version: "11.7.0",
1790
1798
  bindings: {
1791
1799
  angular: {
1792
1800
  importPath: "@uni-design-system/uni-angular",
@@ -1843,7 +1851,7 @@ var uni_index_default = {
1843
1851
  summary: "",
1844
1852
  description: "",
1845
1853
  category: "layout",
1846
- version: "11.6.0",
1854
+ version: "11.7.0",
1847
1855
  bindings: {
1848
1856
  angular: {
1849
1857
  importPath: "@uni-design-system/uni-angular",
@@ -1898,7 +1906,7 @@ var uni_index_default = {
1898
1906
  summary: "",
1899
1907
  description: "",
1900
1908
  category: "forms",
1901
- version: "11.6.0",
1909
+ version: "11.7.0",
1902
1910
  bindings: {
1903
1911
  angular: {
1904
1912
  importPath: "@uni-design-system/uni-angular",
@@ -2120,7 +2128,7 @@ var uni_index_default = {
2120
2128
  summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
2121
2129
  description: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select. Typing produces a draft \u2014 a filter, never a value; the value changes only when an option commits, `clear()` runs, or the model is written from outside. Select semantics, not search: a real label, a chevron, no magnifier, nothing submits. For short lists with no need to type, prefer `uni-select` \u2014 the value contract is identical, so swapping is a template-only change.",
2122
2130
  category: "forms",
2123
- version: "11.6.0",
2131
+ version: "11.7.0",
2124
2132
  bindings: {
2125
2133
  angular: {
2126
2134
  importPath: "@uni-design-system/uni-angular",
@@ -2226,6 +2234,14 @@ var uni_index_default = {
2226
2234
  default: "true",
2227
2235
  description: "Show a \u2715 while a value is set; an emptied field on blur also clears."
2228
2236
  },
2237
+ {
2238
+ name: "emptyValue",
2239
+ kind: "input",
2240
+ type: "T | null",
2241
+ required: false,
2242
+ default: "null",
2243
+ description: "What \"nothing selected\" is written as. `null` by default \u2014 the control's contract is `FormValueControl<T | null>` \u2014 but a field bound to a plain `string` schema wants `''`, so a clear does not hand `null` to every reader of a string. A value equal to it reads as empty: no \u2715, no match."
2244
+ },
2229
2245
  {
2230
2246
  name: "commitOnBlur",
2231
2247
  kind: "input",
@@ -2379,7 +2395,7 @@ emptyText="No countries found"
2379
2395
  }
2380
2396
  ],
2381
2397
  guidelines: {
2382
- whenToUse: "The form-bound, **closed-set, single-select** autocomplete: object\n`Options<T>`, `FormValueControl<T | null>`, type-to-filter, commit-on-select.\nTyping produces a *draft* \u2014 a filter, never a value; the value changes only\nwhen an option commits, the field clears, or the model is written from\noutside. Select semantics, not search: a real label, a chevron, no magnifier,\nnothing submits.\nUnder ~10 options and no need to type \u2192 `uni-select`, the native, zero-JS,\nmobile-friendly answer. More options, or users know what they're looking for \u2192\n`uni-combobox`. The value contract is identical (`T | null`, `compareWith`),\nso swapping one for the other as a list grows is a template-only change \u2014 that\nis deliberate. For open sets, where typing *creates* values, use\n`uni-tag-input` (multi) or `uni-search-input` (queries); for closed multi\nsets, `uni-multi-select-dropdown`.",
2398
+ whenToUse: "The form-bound, **closed-set, single-select** autocomplete: object\n`Options<T>`, `FormValueControl<T | null>`, type-to-filter, commit-on-select.\nTyping produces a *draft* \u2014 a filter, never a value; the value changes only\nwhen an option commits, the field clears, or the model is written from\noutside. Select semantics, not search: a real label, a chevron, no magnifier,\nnothing submits.\nUnder ~10 options and no need to type \u2192 `uni-select`, the native, zero-JS,\nmobile-friendly answer. More options, or users know what they're looking for \u2192\n`uni-combobox`. The value contract is identical (`T | null`, `compareWith`),\nso swapping one for the other as a list grows is a template-only change \u2014 that\nis deliberate. A clear writes `null`; a field bound to a plain `string` schema\nsets `emptyValue=\"''\"` so its readers never meet a `null`. For open sets, where typing *creates* values, use\n`uni-tag-input` (multi) or `uni-search-input` (queries); for closed multi\nsets, `uni-multi-select-dropdown`.",
2383
2399
  dos: [],
2384
2400
  donts: [
2385
2401
  "Don't expect free text to commit implicitly \u2014 it never does. Offer creation",
@@ -2414,7 +2430,7 @@ emptyText="No countries found"
2414
2430
  summary: "",
2415
2431
  description: "",
2416
2432
  category: "feedback",
2417
- version: "11.6.0",
2433
+ version: "11.7.0",
2418
2434
  bindings: {
2419
2435
  angular: {
2420
2436
  importPath: "@uni-design-system/uni-angular",
@@ -2461,7 +2477,7 @@ emptyText="No countries found"
2461
2477
  summary: "Recipient field for picking people: removable chips, a text input, and a list of known contacts that opens on focus and narrows as the user types \u2014 each row drawn as a person (avatar, name, address, a trailing note).",
2462
2478
  description: "Recipient field for picking people: removable chips, a text input, and a list of known contacts that opens on focus and narrows as the user types \u2014 each row drawn as a person (avatar, name, address, a trailing note). A thin composition of `uni-tag-input` with a mail client's manners baked in: ArrowDown walks the matches and Enter picks the active one, Backspace in an empty field removes the last person, and text that is neither a known contact nor a valid address stays in the field to be fixed (`rejected` says why). Reach for `uni-tag-input` itself when the tokens are not people.",
2463
2479
  category: "forms",
2464
- version: "11.6.0",
2480
+ version: "11.7.0",
2465
2481
  bindings: {
2466
2482
  angular: {
2467
2483
  importPath: "@uni-design-system/uni-angular",
@@ -2559,6 +2575,14 @@ emptyText="No countries found"
2559
2575
  default: "true",
2560
2576
  description: "Accept a typed value that is not a known contact. On by default \u2014 a typed email address becomes a chip; `false` restricts the field to `contacts`."
2561
2577
  },
2578
+ {
2579
+ name: "chipAvatar",
2580
+ kind: "input",
2581
+ type: "boolean | undefined",
2582
+ required: false,
2583
+ default: "undefined",
2584
+ description: "Draw an initials avatar on each chip. Unbound, the `contactInput` theme entry's `chipAvatar` decides (on by default). Off, a chip is the name alone \u2014 in a narrow row of first names the initials only repeat it."
2585
+ },
2562
2586
  {
2563
2587
  name: "filterLocally",
2564
2588
  kind: "input",
@@ -2710,7 +2734,7 @@ emptyText="No countries found"
2710
2734
  }
2711
2735
  ],
2712
2736
  guidelines: {
2713
- whenToUse: "Recipient field for picking people: removable chips, a text input, and a list\nof known contacts that opens on focus and narrows as the user types. Each row\nis drawn as a person \u2014 avatar, name, address, and an optional note. Reach for\nit for a To line, a share dialog, assignees or mentions; for tokens that are\nnot people, use `uni-tag-input`, which this composes.\nIt behaves like a mail client: ArrowDown walks the matches and Enter picks\nthe active one, Backspace in an empty field removes the last person, and text\nthat is neither a known contact nor a valid address stays in the field to be\nfixed. Set `autoHighlight` to keep the first match active, so Enter or Tab\npicks it without arrowing. The chips come\nfrom the `tag` theme entry, the popup from `tagInput`, the field chrome from\n`input`, and the person row from `contactInput`.",
2737
+ whenToUse: "Recipient field for picking people: removable chips, a text input, and a list\nof known contacts that opens on focus and narrows as the user types. Each row\nis drawn as a person \u2014 avatar, name, address, and an optional note. Reach for\nit for a To line, a share dialog, assignees or mentions; for tokens that are\nnot people, use `uni-tag-input`, which this composes.\nIt behaves like a mail client: ArrowDown walks the matches and Enter picks\nthe active one, Backspace in an empty field removes the last person, and text\nthat is neither a known contact nor a valid address stays in the field to be\nfixed. Set `autoHighlight` to keep the first match active, so Enter or Tab\npicks it without arrowing. A paste splits on commas, semicolons, line breaks\nand whitespace, so a column copied from a spreadsheet becomes one chip per\naddress (`parse` takes over tokenizing when that is wrong). The chips come\nfrom the `tag` theme entry, the popup from `tagInput`, the field chrome from\n`input`, and the person row and chip avatar from `contactInput`.",
2714
2738
  dos: [
2715
2739
  "Order `contacts` most-relevant first; only the first few are shown.",
2716
2740
  "Set `filterLocally` to `false` and refresh `contacts` from `(query)` when",
@@ -2738,7 +2762,7 @@ emptyText="No countries found"
2738
2762
  summary: "",
2739
2763
  description: "",
2740
2764
  category: "forms",
2741
- version: "11.6.0",
2765
+ version: "11.7.0",
2742
2766
  bindings: {
2743
2767
  angular: {
2744
2768
  importPath: "@uni-design-system/uni-angular",
@@ -2837,7 +2861,7 @@ emptyText="No countries found"
2837
2861
  summary: "",
2838
2862
  description: "",
2839
2863
  category: "data",
2840
- version: "11.6.0",
2864
+ version: "11.7.0",
2841
2865
  bindings: {
2842
2866
  angular: {
2843
2867
  importPath: "@uni-design-system/uni-angular",
@@ -3056,6 +3080,23 @@ emptyText="No countries found"
3056
3080
  datasource: new UniRecordDatasource<any>(starWarsCharacters),
3057
3081
  }
3058
3082
  -->`
3083
+ },
3084
+ {
3085
+ title: "Column Options",
3086
+ framework: "angular",
3087
+ code: `<!-- Storybook story: Column Options -->
3088
+ <ng-template #nameCell let-row let-index="index">
3089
+ <div box-layout padding="sm" uni-text="title-small">{{ index + 1 }}. {{ row.name }}</div>
3090
+ </ng-template>
3091
+ <uni-data-table
3092
+ [datasource]="datasource"
3093
+ [useRowClick]="false"
3094
+ [columns]="[
3095
+ { columnDef: 'name', header: 'Name', textAlign: 'left', width: '50%', template: nameCell },
3096
+ base[0],
3097
+ base[1]
3098
+ ]"
3099
+ />`
3059
3100
  }
3060
3101
  ],
3061
3102
  guidelines: {
@@ -3063,7 +3104,7 @@ emptyText="No countries found"
3063
3104
  dos: [],
3064
3105
  donts: [],
3065
3106
  accessibility: [
3066
- 'Column headers use `scope="col"`; sortable headers are real buttons with `aria-sort` on the `<th>`.',
3107
+ 'Column headers use `scope="col"`; sortable headers are real buttons with `aria-sort` on the `<th>`. A `sortable: false` column is a plain heading with neither.',
3067
3108
  'The loading overlay is a `role="status"` region and the table is `aria-busy` while loading.',
3068
3109
  "Collapsed detail rows are `inert`, out of the accessibility tree until expanded."
3069
3110
  ]
@@ -3077,7 +3118,7 @@ emptyText="No countries found"
3077
3118
  summary: "Date field with free-typed parsing and a popup calendar.",
3078
3119
  description: "Date field with free-typed parsing and a popup calendar. Type `aug 20`, `8/20/2026` or `2026-08-20`, or pick from the grid \u2014 the form gets the same canonical `'YYYY-MM-DD'` string either way. Parsing is `Intl`-driven (locale digit order and month names, never hardcoded); unreadable text stays in the field, flagged, with a `rejected` event. The popup is a native popover hosting the same `uni-calendar` an app could render inline.",
3079
3120
  category: "forms",
3080
- version: "11.6.0",
3121
+ version: "11.7.0",
3081
3122
  bindings: {
3082
3123
  angular: {
3083
3124
  importPath: "@uni-design-system/uni-angular",
@@ -3308,7 +3349,7 @@ emptyText="No countries found"
3308
3349
  summary: "One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value.",
3309
3350
  description: "One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value. The value emits only when both parts are set \u2014 a time without a day is not an answer \u2014 and clearing the date clears it. With `slotsFor`, the time part stays disabled until a day is chosen and offers exactly that day's slots: the scheduling flow in one attribute. Two honest tab stops (it is two questions); apps needing a different arrangement compose the primitives directly.",
3310
3351
  category: "forms",
3311
- version: "11.6.0",
3352
+ version: "11.7.0",
3312
3353
  bindings: {
3313
3354
  angular: {
3314
3355
  importPath: "@uni-design-system/uni-angular",
@@ -3501,7 +3542,7 @@ emptyText="No countries found"
3501
3542
  summary: "Text input that emits `change` only after the user pauses typing.",
3502
3543
  description: "Text input that emits `change` only after the user pauses typing. Wears the shared input chrome (themed color, border, typeface, focus ring) via `uni-input-box`; project adornments with the `pre-input` / `post-input` slots, matching `uni-input`'s convention. The ARIA passthrough inputs let a wrapping composite (e.g. SearchInput's combobox) annotate the real input element.",
3503
3544
  category: "forms",
3504
- version: "11.6.0",
3545
+ version: "11.7.0",
3505
3546
  bindings: {
3506
3547
  angular: {
3507
3548
  importPath: "@uni-design-system/uni-angular",
@@ -3649,7 +3690,7 @@ emptyText="No countries found"
3649
3690
  summary: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`.",
3650
3691
  description: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`. **The surface is never the scroll container.** It is a flex column that is `overflow: clip` on both axes; the header and buttons pin while only the body row scrolls. Unlike the drawer, which is deliberately viewport-tall, the dialog stays content-sized: it has no `height`, and grows until it hits `calc(100dvh - 2 x inset)` \u2014 the point at which the body starts to scroll. The theme's `padding` insets all three rows (which is what makes the default header read as a pill floating inside the surface); `bodyPadding` pads the scrolling row alone.",
3651
3692
  category: "feedback",
3652
- version: "11.6.0",
3693
+ version: "11.7.0",
3653
3694
  bindings: {
3654
3695
  angular: {
3655
3696
  importPath: "@uni-design-system/uni-angular",
@@ -3790,6 +3831,7 @@ uni-dialog
3790
3831
  "dialog.behavior.border",
3791
3832
  "dialog.behavior.padding",
3792
3833
  "dialog.behavior.inset",
3834
+ "dialog.behavior.overscroll",
3793
3835
  "dialog.behavior.elevation",
3794
3836
  "dialog.behavior.backdrop",
3795
3837
  "dialog.behavior.motion"
@@ -3802,7 +3844,7 @@ uni-dialog
3802
3844
  summary: "",
3803
3845
  description: "",
3804
3846
  category: "feedback",
3805
- version: "11.6.0",
3847
+ version: "11.7.0",
3806
3848
  bindings: {
3807
3849
  angular: {
3808
3850
  importPath: "@uni-design-system/uni-angular",
@@ -3906,7 +3948,7 @@ uni-dialog
3906
3948
  summary: "",
3907
3949
  description: "",
3908
3950
  category: "feedback",
3909
- version: "11.6.0",
3951
+ version: "11.7.0",
3910
3952
  bindings: {
3911
3953
  angular: {
3912
3954
  importPath: "@uni-design-system/uni-angular",
@@ -3947,7 +3989,7 @@ uni-dialog
3947
3989
  summary: "",
3948
3990
  description: "",
3949
3991
  category: "layout",
3950
- version: "11.6.0",
3992
+ version: "11.7.0",
3951
3993
  bindings: {
3952
3994
  angular: {
3953
3995
  importPath: "@uni-design-system/uni-angular",
@@ -4003,7 +4045,7 @@ uni-dialog
4003
4045
  summary: "",
4004
4046
  description: "",
4005
4047
  category: "directives",
4006
- version: "11.6.0",
4048
+ version: "11.7.0",
4007
4049
  bindings: {
4008
4050
  angular: {
4009
4051
  importPath: "@uni-design-system/uni-angular",
@@ -4035,7 +4077,7 @@ uni-dialog
4035
4077
  summary: "Drawer with two modes sharing one three-row layout: - `side` \u2014 an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page.",
4036
4078
  description: "Drawer with two modes sharing one three-row layout: - `side` \u2014 an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page. - `over` \u2014 a native `<dialog>` in the top layer: focus trap, Escape and scrim backdrop come from the platform (same machinery as `uni-dialog`), sliding in from its edge. **The panel is never the scroll container.** It is a flex column of three rows \u2014 an optional `[uni-drawer-header]`, the projected body, an optional `[uni-drawer-buttons]` \u2014 and only the body scrolls. The panel itself is `overflow: clip` on both axes. That is what lets a header and a save bar pin while a long form scrolls between them, and it is why the theme's `padding` option lands on the body row rather than the panel: padding on a scrolling box scrolls away with its content. Surface, width, divider, elevation, padding, backdrop, scrim and background all resolve from `drawer` theme tokens.",
4037
4079
  category: "components",
4038
- version: "11.6.0",
4080
+ version: "11.7.0",
4039
4081
  bindings: {
4040
4082
  angular: {
4041
4083
  importPath: "@uni-design-system/uni-angular",
@@ -4226,7 +4268,7 @@ initialFocus="input"
4226
4268
  summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
4227
4269
  description: "The drawer's pinned footer action row \u2014 the save bar of an editor panel. Sits outside the scrolling body, so the actions stay reachable however long the form is. Mirrors `[dialog-buttons]`; the difference is posture, which lives in the `drawerButtons` theme options rather than here.",
4228
4270
  category: "primitives",
4229
- version: "11.6.0",
4271
+ version: "11.7.0",
4230
4272
  bindings: {
4231
4273
  angular: {
4232
4274
  importPath: "@uni-design-system/uni-angular",
@@ -4323,7 +4365,7 @@ initialFocus="input"
4323
4365
  summary: "The drawer's pinned header row: a title, and optionally a close button.",
4324
4366
  description: "The drawer's pinned header row: a title, and optionally a close button. Sits outside the scrolling body, so it stays put while the form beneath it moves. Reached either by projecting it \u2014 `<div uni-drawer-header>` \u2014 or implicitly, by giving `uni-drawer` a `headline`, in which case the drawer renders one of these itself.",
4325
4367
  category: "components",
4326
- version: "11.6.0",
4368
+ version: "11.7.0",
4327
4369
  bindings: {
4328
4370
  angular: {
4329
4371
  importPath: "@uni-design-system/uni-angular",
@@ -4371,7 +4413,7 @@ initialFocus="input"
4371
4413
  summary: "",
4372
4414
  description: "",
4373
4415
  category: "components",
4374
- version: "11.6.0",
4416
+ version: "11.7.0",
4375
4417
  bindings: {
4376
4418
  angular: {
4377
4419
  importPath: "@uni-design-system/uni-angular",
@@ -4505,7 +4547,7 @@ initialFocus="input"
4505
4547
  summary: "",
4506
4548
  description: "",
4507
4549
  category: "layout",
4508
- version: "11.6.0",
4550
+ version: "11.7.0",
4509
4551
  bindings: {
4510
4552
  angular: {
4511
4553
  importPath: "@uni-design-system/uni-angular",
@@ -4599,7 +4641,10 @@ initialFocus="input"
4599
4641
  ]
4600
4642
  },
4601
4643
  relatedTokens: [
4602
- "expand.behavior.motion"
4644
+ "expand.behavior.motion",
4645
+ "expand.behavior.textRole",
4646
+ "expand.behavior.sublabelRole",
4647
+ "expand.behavior.sublabelColor"
4603
4648
  ]
4604
4649
  },
4605
4650
  {
@@ -4609,7 +4654,7 @@ initialFocus="input"
4609
4654
  summary: "",
4610
4655
  description: "",
4611
4656
  category: "layout",
4612
- version: "11.6.0",
4657
+ version: "11.7.0",
4613
4658
  bindings: {
4614
4659
  angular: {
4615
4660
  importPath: "@uni-design-system/uni-angular",
@@ -4680,7 +4725,7 @@ initialFocus="input"
4680
4725
  summary: "Trigger for a {@link UniExpandComponent} region.",
4681
4726
  description: "Trigger for a {@link UniExpandComponent} region. Two shapes, chosen by whether `label` is set: - **Icon only** (default) \u2014 the bare chevron, sized for a Card Header. - **Labelled** \u2014 chevron plus a label and optional muted sublabel, as a single full-width button. Most real disclosures need a name for the section, and building that row by hand is the thing this saves; it also makes the label the button's accessible name rather than adjacent text.",
4682
4727
  category: "layout",
4683
- version: "11.6.0",
4728
+ version: "11.7.0",
4684
4729
  bindings: {
4685
4730
  angular: {
4686
4731
  importPath: "@uni-design-system/uni-angular",
@@ -4729,13 +4774,13 @@ initialFocus="input"
4729
4774
  {
4730
4775
  title: "Primary",
4731
4776
  framework: "angular",
4732
- code: '<!-- Storybook story: Primary -->\n<uni-expand-toggle [collapsed]="collapsed" #toggle />\n<div>Collapsed: {{ toggle.collapsed() }}</div>\n<!-- args:\n{\n collapsed: true,\n }\n-->'
4777
+ code: '<!-- Storybook story: Primary -->\n<uni-expand-toggle [collapsed]="collapsed" [label]="label" [sublabel]="sublabel" #toggle />\n<div>Collapsed: {{ toggle.collapsed() }}</div>\n<!-- args:\n{\n collapsed: true,\n }\n-->'
4733
4778
  },
4734
4779
  {
4735
4780
  title: "Labelled",
4736
4781
  framework: "angular",
4737
4782
  code: `<!-- Storybook story: Labelled -->
4738
- <uni-expand-toggle [collapsed]="collapsed" #toggle />
4783
+ <uni-expand-toggle [collapsed]="collapsed" [label]="label" [sublabel]="sublabel" #toggle />
4739
4784
  <div>Collapsed: {{ toggle.collapsed() }}</div>
4740
4785
  <!-- args:
4741
4786
  {
@@ -4765,7 +4810,7 @@ initialFocus="input"
4765
4810
  summary: "",
4766
4811
  description: "",
4767
4812
  category: "forms",
4768
- version: "11.6.0",
4813
+ version: "11.7.0",
4769
4814
  bindings: {
4770
4815
  angular: {
4771
4816
  importPath: "@uni-design-system/uni-angular",
@@ -4923,7 +4968,7 @@ initialFocus="input"
4923
4968
  summary: "",
4924
4969
  description: "",
4925
4970
  category: "layout",
4926
- version: "11.6.0",
4971
+ version: "11.7.0",
4927
4972
  bindings: {
4928
4973
  angular: {
4929
4974
  importPath: "@uni-design-system/uni-angular",
@@ -5020,7 +5065,7 @@ initialFocus="input"
5020
5065
  summary: "",
5021
5066
  description: "",
5022
5067
  category: "layout",
5023
- version: "11.6.0",
5068
+ version: "11.7.0",
5024
5069
  bindings: {
5025
5070
  angular: {
5026
5071
  importPath: "@uni-design-system/uni-angular",
@@ -5052,7 +5097,7 @@ initialFocus="input"
5052
5097
  summary: "",
5053
5098
  description: "",
5054
5099
  category: "primitives",
5055
- version: "11.6.0",
5100
+ version: "11.7.0",
5056
5101
  bindings: {
5057
5102
  angular: {
5058
5103
  importPath: "@uni-design-system/uni-angular",
@@ -5112,7 +5157,7 @@ initialFocus="input"
5112
5157
  summary: "",
5113
5158
  description: "",
5114
5159
  category: "primitives",
5115
- version: "11.6.0",
5160
+ version: "11.7.0",
5116
5161
  bindings: {
5117
5162
  angular: {
5118
5163
  importPath: "@uni-design-system/uni-angular",
@@ -5158,15 +5203,25 @@ initialFocus="input"
5158
5203
  {
5159
5204
  name: "disable",
5160
5205
  kind: "input",
5161
- type: "boolean",
5206
+ type: "unknown",
5162
5207
  required: false,
5163
- description: ""
5208
+ default: "false, { transform: booleanAttribute }",
5209
+ description: "A bare `disable` attribute reads as true, as `uni-button`'s does; `undefined` as false."
5210
+ },
5211
+ {
5212
+ name: "disabled",
5213
+ kind: "input",
5214
+ type: "unknown",
5215
+ required: false,
5216
+ default: "false, { transform: booleanAttribute }",
5217
+ description: "The native name, accepted as an alias of `disable` \u2014 see `uni-button`."
5164
5218
  },
5165
5219
  {
5166
5220
  name: "loading",
5167
5221
  kind: "input",
5168
- type: "boolean",
5222
+ type: "unknown",
5169
5223
  required: false,
5224
+ default: "false, { transform: booleanAttribute }",
5170
5225
  description: ""
5171
5226
  },
5172
5227
  {
@@ -5215,7 +5270,7 @@ initialFocus="input"
5215
5270
  summary: "A button that lives inside a sentence.",
5216
5271
  description: "A button that lives inside a sentence. Every other button in the library owns a box. Even `ghost` is a flex box with a hit area, horizontal padding and a type scale of its own, so dropping one into a sentence takes it out of the run of text entirely. This one inherits that type \u2014 family, size, weight, line height and colour \u2014 and adds no padding, so a paragraph reads as one continuous run with an action in the middle of it. It is always a real `<button>`: it can *look* like a link (`underline`, `link`) without claiming to be navigation, so Enter and Space activate it and assistive tech announces a button rather than an unfollowable link. A glyph may sit alongside the label without disturbing that: it is sized in `em`, so it scales with the type it lands in rather than pinning a px size into someone else's paragraph. One limit comes from the element itself. Browsers blockify a `<button>` to `inline-block` whatever `display` it asks for, so the control is an atomic inline box: its own label wraps inside it, but the run cannot split across a line break the way the words around it do. `display: contents` would buy that at the cost of the button being focusable at all, which is not a trade worth making \u2014 keep labels to a few words, which is what an inline action wants anyway.",
5217
5272
  category: "primitives",
5218
- version: "11.6.0",
5273
+ version: "11.7.0",
5219
5274
  bindings: {
5220
5275
  angular: {
5221
5276
  importPath: "@uni-design-system/uni-angular",
@@ -5330,7 +5385,7 @@ initialFocus="input"
5330
5385
  summary: "",
5331
5386
  description: "",
5332
5387
  category: "forms",
5333
- version: "11.6.0",
5388
+ version: "11.7.0",
5334
5389
  bindings: {
5335
5390
  angular: {
5336
5391
  importPath: "@uni-design-system/uni-angular",
@@ -5535,6 +5590,21 @@ initialFocus="input"
5535
5590
  required: false,
5536
5591
  default: "undefined",
5537
5592
  description: ""
5593
+ },
5594
+ {
5595
+ name: "unframed",
5596
+ kind: "input",
5597
+ type: "unknown",
5598
+ required: false,
5599
+ default: "false, { transform: booleanAttribute }",
5600
+ description: "Drop the field chrome and render the bare input \u2014 see `uni-input-box`."
5601
+ },
5602
+ {
5603
+ name: "align",
5604
+ kind: "input",
5605
+ type: "'start' | 'center' | 'end'",
5606
+ required: false,
5607
+ description: "Text alignment, as `uni-number-input`'s. Default: `start`."
5538
5608
  }
5539
5609
  ]
5540
5610
  }
@@ -5615,7 +5685,7 @@ initialFocus="input"
5615
5685
  summary: "",
5616
5686
  description: "",
5617
5687
  category: "forms",
5618
- version: "11.6.0",
5688
+ version: "11.7.0",
5619
5689
  bindings: {
5620
5690
  angular: {
5621
5691
  importPath: "@uni-design-system/uni-angular",
@@ -5685,6 +5755,14 @@ initialFocus="input"
5685
5755
  default: "false",
5686
5756
  description: "Stop applying the themed leading inset to the inner control, for fields that place it themselves. The inset normally rides the `<input>`, which is right while the text is the field's leading edge. It is wrong the moment an adornment sits in front: a currency prefix would hug the border while the number it belongs to is indented past it. A field with adornments takes the inset over and puts it on whichever element is actually first."
5687
5757
  },
5758
+ {
5759
+ name: "unframed",
5760
+ kind: "input",
5761
+ type: "unknown",
5762
+ required: false,
5763
+ default: "false, { transform: booleanAttribute }",
5764
+ description: "Drop the field chrome \u2014 border, fill, radius, shadow, leading inset and the focus treatment \u2014 and render the bare row. For fields drawn as an email client draws them: unframed lines with a hairline between. The surrounding layout draws any focus cue; the error state is still exposed through `aria-invalid` on the control inside. Same meaning as `uni-tag-input`'s."
5765
+ },
5688
5766
  {
5689
5767
  name: "variant",
5690
5768
  kind: "input",
@@ -5736,7 +5814,7 @@ initialFocus="input"
5736
5814
  summary: "",
5737
5815
  description: "",
5738
5816
  category: "components",
5739
- version: "11.6.0",
5817
+ version: "11.7.0",
5740
5818
  bindings: {
5741
5819
  angular: {
5742
5820
  importPath: "@uni-design-system/uni-angular",
@@ -5806,7 +5884,7 @@ initialFocus="input"
5806
5884
  summary: "",
5807
5885
  description: "",
5808
5886
  category: "layout",
5809
- version: "11.6.0",
5887
+ version: "11.7.0",
5810
5888
  bindings: {
5811
5889
  angular: {
5812
5890
  importPath: "@uni-design-system/uni-angular",
@@ -5910,7 +5988,7 @@ initialFocus="input"
5910
5988
  summary: "",
5911
5989
  description: "",
5912
5990
  category: "layout",
5913
- version: "11.6.0",
5991
+ version: "11.7.0",
5914
5992
  bindings: {
5915
5993
  angular: {
5916
5994
  importPath: "@uni-design-system/uni-angular",
@@ -5992,7 +6070,7 @@ initialFocus="input"
5992
6070
  summary: "",
5993
6071
  description: "",
5994
6072
  category: "forms",
5995
- version: "11.6.0",
6073
+ version: "11.7.0",
5996
6074
  bindings: {
5997
6075
  angular: {
5998
6076
  importPath: "@uni-design-system/uni-angular",
@@ -6086,7 +6164,7 @@ initialFocus="input"
6086
6164
  summary: "",
6087
6165
  description: "",
6088
6166
  category: "forms",
6089
- version: "11.6.0",
6167
+ version: "11.7.0",
6090
6168
  bindings: {
6091
6169
  angular: {
6092
6170
  importPath: "@uni-design-system/uni-angular",
@@ -6265,7 +6343,7 @@ initialFocus="input"
6265
6343
  summary: "",
6266
6344
  description: "",
6267
6345
  category: "feedback",
6268
- version: "11.6.0",
6346
+ version: "11.7.0",
6269
6347
  bindings: {
6270
6348
  angular: {
6271
6349
  importPath: "@uni-design-system/uni-angular",
@@ -6506,7 +6584,7 @@ initialFocus="input"
6506
6584
  }
6507
6585
  ],
6508
6586
  guidelines: {
6509
- whenToUse: 'Attention indicator anchored to whatever it wraps \u2014 an icon button, a nav item, an\navatar. Three shapes: `dot` (something is new), `count` (how many), and `pill`\n(counts that need room); `maxCount` caps the display ("99+"). Position it on any\ncorner of the wrapped content.\nRadius and offset resolve from the `notificationBadge` theme options; the badge\nwears the active `variant` color.',
6587
+ whenToUse: "Attention indicator anchored to whatever it wraps \u2014 an icon button, a nav item, an\navatar. Three shapes: `dot` (something is new), `count` (how many), and `pill`\n(counts that need room); `maxCount` caps the display (\"99+\"). Position it on any\ncorner of the wrapped content.\nRadius, offset and the count's typeface resolve from the `notificationBadge`\ntheme options, and the disc's size from its `sizes` block through the `size`\ninput (a `sm` badge for a 12px nav label, `lg` for an icon button); the badge\nwears the active `variant` color. The wrapper is inline-flex, so it never moves\nthe element it wraps.",
6510
6588
  dos: [],
6511
6589
  donts: [
6512
6590
  "Convey urgency by color alone \u2014 the count/dot shape carries the signal"
@@ -6525,7 +6603,7 @@ initialFocus="input"
6525
6603
  summary: "",
6526
6604
  description: "",
6527
6605
  category: "feedback",
6528
- version: "11.6.0",
6606
+ version: "11.7.0",
6529
6607
  bindings: {
6530
6608
  angular: {
6531
6609
  importPath: "@uni-design-system/uni-angular",
@@ -6549,7 +6627,7 @@ initialFocus="input"
6549
6627
  summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
6550
6628
  description: 'Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat. Not `<input type="number">`, and the first reason is a data-loss bug: per the HTML value sanitization algorithm, a number input whose text is not a valid floating-point number reports `value === \'\'`. Type `12,50` as most of Europe does, or paste `1,234.56` from a spreadsheet, and the app reads an empty field. This is `type="text"` with `role="spinbutton"`, which is the only way to keep the user\'s malformed text on screen and tell them about it. Chrome comes from `uni-input-box`, so error, disabled and focus states match every other field. All arithmetic runs on the cdk\'s exact decimal helpers.',
6551
6629
  category: "forms",
6552
- version: "11.6.0",
6630
+ version: "11.7.0",
6553
6631
  bindings: {
6554
6632
  angular: {
6555
6633
  importPath: "@uni-design-system/uni-angular",
@@ -6742,6 +6820,14 @@ initialFocus="input"
6742
6820
  default: "false",
6743
6821
  description: "Renders without its own input-box chrome, for composers like uni-slider."
6744
6822
  },
6823
+ {
6824
+ name: "unframed",
6825
+ kind: "input",
6826
+ type: "unknown",
6827
+ required: false,
6828
+ default: "false, { transform: booleanAttribute }",
6829
+ description: "Keep the box but drop its chrome \u2014 border, fill, inset, focus treatment \u2014 as `uni-input`'s `unframed` does. Unlike `embedded`, the field still owns its row and its steppers."
6830
+ },
6745
6831
  {
6746
6832
  name: "min",
6747
6833
  kind: "input",
@@ -6975,7 +7061,7 @@ initialFocus="input"
6975
7061
  summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
6976
7062
  description: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances. `start`/`end` deliberately match `UniDateRange`, so the library has one range vocabulary, and they avoid colliding with the `min`/`max` **inputs**, which mean the fence rather than the value. It owns its commit path rather than nesting two `uni-number-input`s, because the two behaviours the spec asks for need *different* bounds: a stepper must be fenced at the other end, while a typed commit must reach the parent un-clamped so a backwards range can be swapped instead of destroyed. A child field applies one bound pair to both. The arithmetic, parsing and formatting are still the cdk's, shared with every other numeric control.",
6977
7063
  category: "forms",
6978
- version: "11.6.0",
7064
+ version: "11.7.0",
6979
7065
  bindings: {
6980
7066
  angular: {
6981
7067
  importPath: "@uni-design-system/uni-angular",
@@ -7266,7 +7352,7 @@ initialFocus="input"
7266
7352
  summary: "",
7267
7353
  description: "",
7268
7354
  category: "data",
7269
- version: "11.6.0",
7355
+ version: "11.7.0",
7270
7356
  bindings: {
7271
7357
  angular: {
7272
7358
  importPath: "@uni-design-system/uni-angular",
@@ -7367,7 +7453,7 @@ initialFocus="input"
7367
7453
  summary: "Anchored, top-layer panel on the native `popover` element \u2014 the browser owns positioning (CSS anchor positioning), stacking, and, in rich mode, light dismissal.",
7368
7454
  description: 'Anchored, top-layer panel on the native `popover` element \u2014 the browser owns positioning (CSS anchor positioning), stacking, and, in rich mode, light dismissal. Two modes share one implementation: - `rich` (default): a click-toggled disclosure. The projected `[trigger]` carries `aria-expanded`/`aria-controls`; with no trigger content the app drives `open` and no element claims controller ARIA. Focus stays on the trigger (APG disclosure) unless the panel marks an `[autofocus]` field, and returns to the trigger on close. - `tooltip`: hover/focus-triggered, `role="tooltip"` + `aria-describedby`, WCAG 1.4.13 dismissable/hoverable/persistent. Content must not contain focusable elements. Anchoring and control are separate: `anchor` re-anchors the panel to any element (or id) while the trigger keeps the disclosure semantics.',
7369
7455
  category: "layout",
7370
- version: "11.6.0",
7456
+ version: "11.7.0",
7371
7457
  bindings: {
7372
7458
  angular: {
7373
7459
  importPath: "@uni-design-system/uni-angular",
@@ -7559,7 +7645,7 @@ initialFocus="input"
7559
7645
  summary: "",
7560
7646
  description: "",
7561
7647
  category: "feedback",
7562
- version: "11.6.0",
7648
+ version: "11.7.0",
7563
7649
  bindings: {
7564
7650
  angular: {
7565
7651
  importPath: "@uni-design-system/uni-angular",
@@ -7623,7 +7709,7 @@ initialFocus="input"
7623
7709
  summary: "",
7624
7710
  description: "",
7625
7711
  category: "feedback",
7626
- version: "11.6.0",
7712
+ version: "11.7.0",
7627
7713
  bindings: {
7628
7714
  angular: {
7629
7715
  importPath: "@uni-design-system/uni-angular",
@@ -7695,7 +7781,7 @@ initialFocus="input"
7695
7781
  summary: "`\u2212 3 +` for cart lines, table cells and seat counts: the numeric core with no field chrome, no label and no room for either.",
7696
7782
  description: '`\u2212 3 +` for cart lines, table cells and seat counts: the numeric core with no field chrome, no label and no room for either. A separate component rather than a `chrome="bare"` flag on `uni-number-input`, because this control is defined by what it does *not* have \u2014 presets, affixes, expressions, four stepper layouts \u2014 and eight inputs are easier to write correctly than forty with a list of which ones to leave alone. The arithmetic, parsing and hold-to-repeat are the cdk\'s, shared with the field, so `1,200` and the keyboard map behave identically in both. The middle stays a real input by default: typing `12` beats tapping `+` eleven times. `editable=false` is for read-mostly tables.',
7697
7783
  category: "forms",
7698
- version: "11.6.0",
7784
+ version: "11.7.0",
7699
7785
  bindings: {
7700
7786
  angular: {
7701
7787
  importPath: "@uni-design-system/uni-angular",
@@ -7898,7 +7984,7 @@ initialFocus="input"
7898
7984
  summary: "",
7899
7985
  description: "",
7900
7986
  category: "forms",
7901
- version: "11.6.0",
7987
+ version: "11.7.0",
7902
7988
  bindings: {
7903
7989
  angular: {
7904
7990
  importPath: "@uni-design-system/uni-angular",
@@ -8127,7 +8213,7 @@ initialFocus="input"
8127
8213
  summary: "Content for each of a radio group's options, in place of the plain label string.",
8128
8214
  description: 'Content for each of a radio group\'s options, in place of the plain label string. A group renders N labels from an `options` array, so it cannot take `<ng-content />` the way `uni-checkbox` and `uni-toggle` do \u2014 there is no single slot to project into. A template is the shape that survives the repetition: it is instantiated once per option and handed that option, so a row can carry a description, a price or a badge and still be part of the `<label>` that drives the input. ```html <uni-radio [options]="plans"> <ng-template uniRadioOption let-option> <span uni-text="body-2-long">{{ option.label }}</span> </ng-template> </uni-radio> ```',
8129
8215
  category: "forms",
8130
- version: "11.6.0",
8216
+ version: "11.7.0",
8131
8217
  bindings: {
8132
8218
  angular: {
8133
8219
  importPath: "@uni-design-system/uni-angular",
@@ -8151,7 +8237,7 @@ initialFocus="input"
8151
8237
  summary: "",
8152
8238
  description: "",
8153
8239
  category: "directives",
8154
- version: "11.6.0",
8240
+ version: "11.7.0",
8155
8241
  bindings: {
8156
8242
  angular: {
8157
8243
  importPath: "@uni-design-system/uni-angular",
@@ -8175,7 +8261,7 @@ initialFocus="input"
8175
8261
  summary: "",
8176
8262
  description: "",
8177
8263
  category: "layout",
8178
- version: "11.6.0",
8264
+ version: "11.7.0",
8179
8265
  bindings: {
8180
8266
  angular: {
8181
8267
  importPath: "@uni-design-system/uni-angular",
@@ -8230,7 +8316,7 @@ initialFocus="input"
8230
8316
  summary: "Native scroll area with theme-driven scrollbar styling.",
8231
8317
  description: "Native scroll area with theme-driven scrollbar styling. Scrollbars are styled entirely through Emotion-generated CSS: `::-webkit-scrollbar` rules cover Chromium/Safari, with a `scrollbar-width`/`scrollbar-color` fallback for Firefox.",
8232
8318
  category: "layout",
8233
- version: "11.6.0",
8319
+ version: "11.7.0",
8234
8320
  bindings: {
8235
8321
  angular: {
8236
8322
  importPath: "@uni-design-system/uni-angular",
@@ -8314,6 +8400,21 @@ initialFocus="input"
8314
8400
  required: false,
8315
8401
  description: ""
8316
8402
  },
8403
+ {
8404
+ name: "maxHeight",
8405
+ kind: "input",
8406
+ type: "OptionalValue",
8407
+ required: false,
8408
+ description: "Grow with the content up to this height, then scroll. The shape a dialog body wants: as tall as the form until it would leave the viewport. With `height` unset the area is otherwise content-sized and never scrolls."
8409
+ },
8410
+ {
8411
+ name: "fill",
8412
+ kind: "input",
8413
+ type: "unknown",
8414
+ required: false,
8415
+ default: "false, { transform: booleanAttribute }",
8416
+ description: "Take the room a flex-column parent leaves (`flex: 1 1 auto; min-height: 0`) and scroll within it \u2014 the body of a dialog or drawer without a wrapper."
8417
+ },
8317
8418
  {
8318
8419
  name: "width",
8319
8420
  kind: "input",
@@ -8360,10 +8461,15 @@ initialFocus="input"
8360
8461
  title: "Primary",
8361
8462
  framework: "angular",
8362
8463
  code: '<!-- Storybook story: Primary -->\n<div scroll-area ${argsToTemplate(props)} #scrollArea>\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_downward" (click)="scrollArea.scrollToBottom()">Scroll to bottom</button>\n ${ngContent}\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_upward" (click)="scrollArea.scrollToTop()">Back to top</button>\n</div>\n<!-- args:\n{\n border: \'quaternary\',\n containerColor: \'tertiary-surface\',\n height: 200,\n ngContent: `\n <span uni-text="headline-medium">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</span>\n <span uni-text="body-1-long">\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quis facere debitis ullam, quae quidem, impedit\n culpa nam\n repellat in voluptatibus esse ab harum, hic? Aliquam nesciunt voluptates repellendus assumenda labore.\n </p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro quos voluptate doloribus. Optio unde\n inventore, tempore\n nemo repellat expedita! Quod, accusamus nobis iure. Aliquam quibusdam, nemo explicabo ipsum provident\n asperiores.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat, qui, rem! Debitis cum maiores iste,\n possimus!\n Obcaecati accusamus eaque expedita quo soluta quis, repudiandae similique, veritatis repellendus facere\n suscipit!\n Et!</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum doloremque repellat praesentium quae et\n consectetur\n iure quos porro, provident voluptates reprehenderit a. Accusamus ut, quaerat asperiores blanditiis\n voluptate, sint\n facilis.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus beatae inventore nobis esse\n temporibus\n exercitationem\n eos illo minima non magnam, provident sit doloribus maiores odio in animi quidem unde. Perferendis.</p>\n\n </span>\n\n\n `,\n }\n-->'
8464
+ },
8465
+ {
8466
+ title: "Max Height",
8467
+ framework: "angular",
8468
+ code: '<!-- Storybook story: Max Height -->\n<div scroll-area ${argsToTemplate(props)} #scrollArea>\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_downward" (click)="scrollArea.scrollToBottom()">Scroll to bottom</button>\n ${ngContent}\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_upward" (click)="scrollArea.scrollToTop()">Back to top</button>\n</div>\n<!-- args:\n{ ...Primary.args, height: undefined, maxHeight: 160 }\n-->'
8363
8469
  }
8364
8470
  ],
8365
8471
  guidelines: {
8366
- whenToUse: "A scroll container with themed, consistent scrollbars across browsers \u2014 thin\nEmotion-styled WebKit scrollbars with a `scrollbar-width`/`scrollbar-color`\nfallback. It detects scrollable state via ResizeObserver (the `scrollable` output)\nand offers `scrollToTop`/`scrollToBottom` for programmatic control.",
8472
+ whenToUse: "A scroll container with themed, consistent scrollbars across browsers \u2014 thin\nEmotion-styled WebKit scrollbars with a `scrollbar-width`/`scrollbar-color`\nfallback. It detects scrollable state via ResizeObserver (the `scrollable` output)\nand offers `scrollToTop`/`scrollToBottom` for programmatic control.\nThree ways to size it: `height` fixes it; `maxHeight` lets it grow with its\ncontent up to a cap, then scroll; `fill` takes the room a flex-column parent\nleaves and scrolls within it \u2014 the body of a dialog without a wrapper. With none\nof them the area is content-sized and never scrolls.",
8367
8473
  dos: [],
8368
8474
  donts: [],
8369
8475
  accessibility: []
@@ -8377,7 +8483,7 @@ initialFocus="input"
8377
8483
  summary: "Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead \u2014 pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox.",
8378
8484
  description: "Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead \u2014 pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox. Escape closes the list first, then clears the query.",
8379
8485
  category: "forms",
8380
- version: "11.6.0",
8486
+ version: "11.7.0",
8381
8487
  bindings: {
8382
8488
  angular: {
8383
8489
  importPath: "@uni-design-system/uni-angular",
@@ -8512,7 +8618,7 @@ initialFocus="input"
8512
8618
  summary: "",
8513
8619
  description: "",
8514
8620
  category: "forms",
8515
- version: "11.6.0",
8621
+ version: "11.7.0",
8516
8622
  bindings: {
8517
8623
  angular: {
8518
8624
  importPath: "@uni-design-system/uni-angular",
@@ -8660,9 +8766,11 @@ initialFocus="input"
8660
8766
  }
8661
8767
  ],
8662
8768
  guidelines: {
8663
- whenToUse: "Single choice from a list, on a native `<select>` \u2014 platform pickers on mobile,\nplatform keyboard behavior everywhere. Options are typed generically\n(`options: T[]` with `optionLabel`/`optionValue` accessors), and the component\nimplements `FormValueControl` for the Signal Forms `[formField]` directive. Errors\nstyle the field only after interaction, matching Input.\nFor choosing several, use Multi Select. When the list outgrows ~10 options, or\nusers know what they're looking for and want to type it, use Combobox \u2014 the\nvalue contract is identical (`T | null`, `compareWith`), so the swap is a\ntemplate-only change.",
8769
+ whenToUse: "Single choice from a list, on a native `<select>` \u2014 platform pickers on mobile,\nplatform keyboard behavior everywhere. Options are typed generically\n(`options: T[]` with `optionLabel`/`optionValue` accessors), and the component\nimplements `FormValueControl` for the Signal Forms `[formField]` directive. Errors\nstyle the field only after interaction, matching Input.\nThe value contract is `T | null`: `null` is \"nothing selected\". A value that no\noption stands for \u2014 `''`, a stale id \u2014 renders as empty too, never as the first\noption, and is reported with a dev-mode warning once the options have loaded.\nFor choosing several, use Multi Select. When the list outgrows ~10 options, or\nusers know what they're looking for and want to type it, use Combobox \u2014 the\nvalue contract is identical (`T | null`, `compareWith`), so the swap is a\ntemplate-only change.",
8664
8770
  dos: [],
8665
- donts: [],
8771
+ donts: [
8772
+ "Bind `''` to mean \"nothing selected\" \u2014 the contract is `null`. The field shows"
8773
+ ],
8666
8774
  accessibility: [
8667
8775
  "Native `<select>`: platform keyboard interaction and mobile pickers for free.",
8668
8776
  "`label` becomes the accessible name; `aria-invalid` reflects the touched error state.",
@@ -8682,7 +8790,7 @@ initialFocus="input"
8682
8790
  summary: "Loading placeholder painted with surface tokens.",
8683
8791
  description: "Loading placeholder painted with surface tokens. `text` renders one or more lines (the last line shortened, as real text would be), `rect` and `circle` render fixed shapes. The shimmer only animates when the user allows motion; it degrades to static blocks under `prefers-reduced-motion`. Color and radius are theme options with per-instance overrides, because one app routinely needs several: skeletons on a card and on the page background want different tints, and a pill placeholder wants a different corner than the text bars beside it.",
8684
8792
  category: "components",
8685
- version: "11.6.0",
8793
+ version: "11.7.0",
8686
8794
  bindings: {
8687
8795
  angular: {
8688
8796
  importPath: "@uni-design-system/uni-angular",
@@ -8833,7 +8941,7 @@ initialFocus="input"
8833
8941
  summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
8834
8942
  description: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters. Custom thumbs rather than `<input type=\"range\">`, which the previous version used: one native range input cannot carry two thumbs, marks or a tooltip, and a second component for the range case would mean two keyboard maps to keep in step. The step model and the keyboard map are the cdk's, shared with the numeric fields, so nothing new is learned moving between them. All arithmetic on values runs through the cdk's exact decimal helpers \u2014 stepping `0.1` never yields `0.30000000000000004`. Only pointer *positions* use floats, and they are snapped to the grid before becoming a value.",
8835
8943
  category: "forms",
8836
- version: "11.6.0",
8944
+ version: "11.7.0",
8837
8945
  bindings: {
8838
8946
  angular: {
8839
8947
  importPath: "@uni-design-system/uni-angular",
@@ -9110,7 +9218,7 @@ initialFocus="input"
9110
9218
  summary: "",
9111
9219
  description: "",
9112
9220
  category: "feedback",
9113
- version: "11.6.0",
9221
+ version: "11.7.0",
9114
9222
  bindings: {
9115
9223
  angular: {
9116
9224
  importPath: "@uni-design-system/uni-angular",
@@ -9222,7 +9330,7 @@ initialFocus="input"
9222
9330
  summary: "",
9223
9331
  description: "",
9224
9332
  category: "data",
9225
- version: "11.6.0",
9333
+ version: "11.7.0",
9226
9334
  bindings: {
9227
9335
  angular: {
9228
9336
  importPath: "@uni-design-system/uni-angular",
@@ -9241,6 +9349,21 @@ initialFocus="input"
9241
9349
  type: "UniDatasource<T>",
9242
9350
  required: false,
9243
9351
  description: ""
9352
+ },
9353
+ {
9354
+ name: "iconName",
9355
+ kind: "input",
9356
+ type: "IconName",
9357
+ required: false,
9358
+ default: "'arrowUp'",
9359
+ description: "The glyph shown while sorted. One icon serves both directions \u2014 it is drawn as given for descending and rotated half a turn for ascending \u2014 so pick an arrow or chevron that reads either way up."
9360
+ },
9361
+ {
9362
+ name: "align",
9363
+ kind: "input",
9364
+ type: "'left' | 'right' | 'center'",
9365
+ required: false,
9366
+ description: "The column's text alignment. The arrow hangs outside the label so the label stays flush with the cells under it; in a right-aligned column it moves to the leading side, where it cannot push past the table's edge."
9244
9367
  }
9245
9368
  ]
9246
9369
  }
@@ -9281,7 +9404,7 @@ initialFocus="input"
9281
9404
  summary: "",
9282
9405
  description: "",
9283
9406
  category: "layout",
9284
- version: "11.6.0",
9407
+ version: "11.7.0",
9285
9408
  bindings: {
9286
9409
  angular: {
9287
9410
  importPath: "@uni-design-system/uni-angular",
@@ -9336,7 +9459,7 @@ initialFocus="input"
9336
9459
  summary: 'KPI stat tile: muted label, large value (numbers auto-compact: 48234 \u2192 "48.2K"), an optional delta whose ink is decided by *direction \xD7 whether up is good* (never direction alone \u2014 churn going down is good news), and an optional decorative sparkline.',
9337
9460
  description: 'KPI stat tile: muted label, large value (numbers auto-compact: 48234 \u2192 "48.2K"), an optional delta whose ink is decided by *direction \xD7 whether up is good* (never direction alone \u2014 churn going down is good news), and an optional decorative sparkline. Frame, typography and inks are all `stat` theme tokens.',
9338
9461
  category: "components",
9339
- version: "11.6.0",
9462
+ version: "11.7.0",
9340
9463
  bindings: {
9341
9464
  angular: {
9342
9465
  importPath: "@uni-design-system/uni-angular",
@@ -9454,7 +9577,7 @@ initialFocus="input"
9454
9577
  summary: "",
9455
9578
  description: "",
9456
9579
  category: "primitives",
9457
- version: "11.6.0",
9580
+ version: "11.7.0",
9458
9581
  bindings: {
9459
9582
  angular: {
9460
9583
  importPath: "@uni-design-system/uni-angular",
@@ -9543,7 +9666,7 @@ initialFocus="input"
9543
9666
  summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
9544
9667
  description: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content. Content is captured in a template and only instantiated while the tab is selected, so inactive panels cost nothing.",
9545
9668
  category: "components",
9546
- version: "11.6.0",
9669
+ version: "11.7.0",
9547
9670
  bindings: {
9548
9671
  angular: {
9549
9672
  importPath: "@uni-design-system/uni-angular",
@@ -9583,7 +9706,7 @@ initialFocus="input"
9583
9706
  summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
9584
9707
  description: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped. Only the selected panel is instantiated. All styling resolves from `tabs` theme option tokens. A tab switch is softened by the `panelMotion` option: the incoming content fades in while the panel animates from the outgoing content's height to its own. The new content is live from the first frame \u2014 nothing waits on the animation.",
9585
9708
  category: "components",
9586
- version: "11.6.0",
9709
+ version: "11.7.0",
9587
9710
  bindings: {
9588
9711
  angular: {
9589
9712
  importPath: "@uni-design-system/uni-angular",
@@ -9671,7 +9794,7 @@ initialFocus="input"
9671
9794
  summary: "Compact chip for categories, states, filters and tokens.",
9672
9795
  description: "Compact chip for categories, states, filters and tokens. Two orthogonal style axes: `variant` picks the colour role and `tone` picks the archetype (soft / solid / outline). Both live in the theme's `tag` entry, so a theme restyles every chip in the app without touching markup. Two state classes ride alongside the tone class for the same reason: `tag-selected` and `tag-interactive` let the theme paint selection and hover beside the colours they belong to, instead of an app swapping `tone` by hand on every chip. Structurally a chip is **body + trailing action as siblings**, never nested buttons: an interactive chip whose body is a `<button>` cannot contain the remove `<button>` (invalid HTML, and the inner control becomes unreachable for keyboard users). Both stay independently operable.",
9673
9796
  category: "data",
9674
- version: "11.6.0",
9797
+ version: "11.7.0",
9675
9798
  bindings: {
9676
9799
  angular: {
9677
9800
  importPath: "@uni-design-system/uni-angular",
@@ -10049,7 +10172,7 @@ initialFocus="input"
10049
10172
  summary: "A row of chips the user picks from: filters, facets, a set of labels.",
10050
10173
  description: "A row of chips the user picks from: filters, facets, a set of labels. The group **renders its own chips** from `items` rather than projecting them. That is what lets it own the things an app was otherwise wiring per chip \u2014 which one is selected, which one holds the tab stop \u2014 since a parent cannot write a projected child's inputs. `uni-tag` is unchanged by this component; `controlTabIndex` was already its hook for a composite that manages focus. Keyboard model is the toolbar pattern: one tab stop for the whole group, and the arrow keys move within it. Twelve filter chips should cost one Tab to pass, not twelve.",
10051
10174
  category: "data",
10052
- version: "11.6.0",
10175
+ version: "11.7.0",
10053
10176
  bindings: {
10054
10177
  angular: {
10055
10178
  importPath: "@uni-design-system/uni-angular",
@@ -10247,7 +10370,7 @@ initialFocus="input"
10247
10370
  summary: "",
10248
10371
  description: "",
10249
10372
  category: "forms",
10250
- version: "11.6.0",
10373
+ version: "11.7.0",
10251
10374
  bindings: {
10252
10375
  angular: {
10253
10376
  importPath: "@uni-design-system/uni-angular",
@@ -10698,7 +10821,7 @@ placeholder="Name or address\u2026"
10698
10821
  summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
10699
10822
  description: 'The typography primitive, applied as an attribute to any element so semantics stay yours. The attribute value is the typeface: `<h1 uni-text="display-small">`, `<span uni-text="caption">`, dynamic via `[uni-text]="role()"`. With no value, the typeface is inferred from the host element (h1 \u2192 headline-large, p \u2192 body-1-long, \u2026), falling back to `title-small`; the `typeface` input remains as an explicit override. It is a directive, so it stacks with anything else on the element \u2014 a layout attribute (`<div stack-layout uni-text="title-small">`) or a component\'s own host \u2014 rather than colliding with it.',
10700
10823
  category: "primitives",
10701
- version: "11.6.0",
10824
+ version: "11.7.0",
10702
10825
  bindings: {
10703
10826
  angular: {
10704
10827
  importPath: "@uni-design-system/uni-angular",
@@ -10808,7 +10931,7 @@ placeholder="Name or address\u2026"
10808
10931
  summary: "",
10809
10932
  description: "",
10810
10933
  category: "forms",
10811
- version: "11.6.0",
10934
+ version: "11.7.0",
10812
10935
  bindings: {
10813
10936
  angular: {
10814
10937
  importPath: "@uni-design-system/uni-angular",
@@ -10968,6 +11091,14 @@ placeholder="Name or address\u2026"
10968
11091
  required: false,
10969
11092
  default: "undefined",
10970
11093
  description: ""
11094
+ },
11095
+ {
11096
+ name: "unframed",
11097
+ kind: "input",
11098
+ type: "unknown",
11099
+ required: false,
11100
+ default: "false, { transform: booleanAttribute }",
11101
+ description: "Drop the field chrome and render the bare textarea \u2014 see `uni-input-box`."
10971
11102
  }
10972
11103
  ]
10973
11104
  }
@@ -11015,7 +11146,7 @@ placeholder="Name or address\u2026"
11015
11146
  summary: "",
11016
11147
  description: "",
11017
11148
  category: "primitives",
11018
- version: "11.6.0",
11149
+ version: "11.7.0",
11019
11150
  bindings: {
11020
11151
  angular: {
11021
11152
  importPath: "@uni-design-system/uni-angular",
@@ -11045,7 +11176,7 @@ placeholder="Name or address\u2026"
11045
11176
  summary: "Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).",
11046
11177
  description: "Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).",
11047
11178
  category: "components",
11048
- version: "11.6.0",
11179
+ version: "11.7.0",
11049
11180
  bindings: {
11050
11181
  angular: {
11051
11182
  importPath: "@uni-design-system/uni-angular",
@@ -11103,7 +11234,7 @@ placeholder="Name or address\u2026"
11103
11234
  summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
11104
11235
  description: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input. Type `3p`, `930` or `15:00`, or pick `3:00 PM` from the list; the form always gets 24-hour `'HH:mm'` (`hour12` affects display only). The list is assistive, not exhaustive: any parseable time commits, unless `slots` pins the choices (a slot picker) \u2014 then a typed time must match one. Unreadable or unavailable text stays in the field, flagged, with a `rejected` event.",
11105
11236
  category: "forms",
11106
- version: "11.6.0",
11237
+ version: "11.7.0",
11107
11238
  bindings: {
11108
11239
  angular: {
11109
11240
  importPath: "@uni-design-system/uni-angular",
@@ -11318,7 +11449,7 @@ placeholder="Name or address\u2026"
11318
11449
  summary: "",
11319
11450
  description: "",
11320
11451
  category: "forms",
11321
- version: "11.6.0",
11452
+ version: "11.7.0",
11322
11453
  bindings: {
11323
11454
  angular: {
11324
11455
  importPath: "@uni-design-system/uni-angular",
@@ -11580,7 +11711,7 @@ placeholder="Name or address\u2026"
11580
11711
  summary: "",
11581
11712
  description: "",
11582
11713
  category: "feedback",
11583
- version: "11.6.0",
11714
+ version: "11.7.0",
11584
11715
  bindings: {
11585
11716
  angular: {
11586
11717
  importPath: "@uni-design-system/uni-angular",
@@ -11668,7 +11799,7 @@ placeholder="Name or address\u2026"
11668
11799
  summary: 'A thin sequencer over one `uni-callout`: steps spotlight their targets, a footer walks Next/Back with dots-or-fraction progress, and `advanceOn` gates a step behind an interaction with its target (auto-advancing for clicks, unlocking Next otherwise \u2014 announced through one `role="status"` region).',
11669
11800
  description: 'A thin sequencer over one `uni-callout`: steps spotlight their targets, a footer walks Next/Back with dots-or-fraction progress, and `advanceOn` gates a step behind an interaction with its target (auto-advancing for clicks, unlocking Next otherwise \u2014 announced through one `role="status"` region). Escape or the close button skips the tour and reports the step. `active` is a two-way model, so a tour is deep-linkable and inspectable; steps whose declared target cannot be resolved are skipped (with a dev warning) in the direction of travel rather than erroring.',
11670
11801
  category: "components",
11671
- version: "11.6.0",
11802
+ version: "11.7.0",
11672
11803
  bindings: {
11673
11804
  angular: {
11674
11805
  importPath: "@uni-design-system/uni-angular",
@@ -11689,6 +11820,13 @@ placeholder="Name or address\u2026"
11689
11820
  default: "null",
11690
11821
  description: "The presented step index, or null when the tour is not running."
11691
11822
  },
11823
+ {
11824
+ name: "progressStyle",
11825
+ kind: "input",
11826
+ type: "'dots' | 'fraction' | 'none'",
11827
+ required: false,
11828
+ description: "Per-instance override of the `progressStyle` theme option, so a one-off pointer can differ from the app's tours without a second theme entry. A one-step tour renders no progress whatever this says \u2014 one dot beside Done counts nothing."
11829
+ },
11692
11830
  {
11693
11831
  name: "nextLabel",
11694
11832
  kind: "input",
@@ -11726,14 +11864,14 @@ placeholder="Name or address\u2026"
11726
11864
  kind: "output",
11727
11865
  type: "void",
11728
11866
  required: false,
11729
- description: ""
11867
+ description: "The first step of a run was presented \u2014 from `start()` or from a write to `active`."
11730
11868
  },
11731
11869
  {
11732
11870
  name: "finished",
11733
11871
  kind: "output",
11734
11872
  type: "void",
11735
11873
  required: false,
11736
- description: ""
11874
+ description: "The run walked past its last step. Never emitted for a run in which no step was presented (empty `steps`, every target missing): a tour that never opened did not finish."
11737
11875
  },
11738
11876
  {
11739
11877
  name: "variant",
@@ -11767,10 +11905,10 @@ placeholder="Name or address\u2026"
11767
11905
  }
11768
11906
  ],
11769
11907
  guidelines: {
11770
- whenToUse: 'Tour sequences one `uni-callout` through a list of steps: spotlight targets,\ndim interludes, and interaction gates. A step with `advanceOn` locks Next\nuntil the user performs the gesture on its target \u2014 clicks auto-advance\n(the gesture is complete), anything else unlocks Next and announces it\nthrough one polite `role="status"` region, so nobody is yanked forward\nmid-typing. Steps whose declared target cannot be found are skipped in the\ndirection of travel with a dev warning, never an error. `active` is a\ntwo-way model, so tours are deep-linkable; Escape or the close button skips\nand reports the step through `skipped`.',
11908
+ whenToUse: 'Tour sequences one `uni-callout` through a list of steps: spotlight targets,\ndim interludes, and interaction gates. A step with `advanceOn` locks Next\nuntil the user performs the gesture on its target \u2014 clicks auto-advance\n(the gesture is complete), anything else unlocks Next and announces it\nthrough one polite `role="status"` region, so nobody is yanked forward\nmid-typing. Steps whose declared target cannot be found are skipped in the\ndirection of travel with a dev warning, never an error. `active` is a\ntwo-way model, so tours are deep-linkable; Escape or the close button skips\nand reports the step through `skipped`.\n`started` fires when the first step of a run is presented \u2014 through `start()`\nor a write to `active` \u2014 and `finished` only for a run that presented at least\none step. A `start()` issued before `steps` are bound waits for them, so a host\nthat loads steps from a service and starts in the same turn still opens on the\nfirst one. A step without a `body` renders its title alone, and a one-step tour\ndraws no progress.',
11771
11909
  dos: [
11772
11910
  "Keep tours short and gate only steps whose gesture teaches something",
11773
- "Handle `skipped`/`finished` and persist them \u2014 the tour holds no storage"
11911
+ "Handle `skipped`/`finished` and persist them \u2014 the tour holds no storage;"
11774
11912
  ],
11775
11913
  donts: [
11776
11914
  "Point steps at elements that may not exist without accepting the skip",
@@ -11795,7 +11933,7 @@ placeholder="Name or address\u2026"
11795
11933
  summary: "",
11796
11934
  description: "",
11797
11935
  category: "layout",
11798
- version: "11.6.0",
11936
+ version: "11.7.0",
11799
11937
  bindings: {
11800
11938
  angular: {
11801
11939
  importPath: "@uni-design-system/uni-angular",
@@ -14217,6 +14355,18 @@ placeholder="Name or address\u2026"
14217
14355
  DarkTheme: "lg"
14218
14356
  }
14219
14357
  },
14358
+ {
14359
+ id: "dialog.behavior.overscroll",
14360
+ value: "contain",
14361
+ type: "string",
14362
+ kind: "behavioral",
14363
+ target: "component-prop",
14364
+ appliesTo: "dialog",
14365
+ themeValues: {
14366
+ LightTheme: "contain",
14367
+ DarkTheme: "contain"
14368
+ }
14369
+ },
14220
14370
  {
14221
14371
  id: "dialog.behavior.elevation",
14222
14372
  value: "dialog",
@@ -14973,6 +15123,42 @@ placeholder="Name or address\u2026"
14973
15123
  DarkTheme: "reveal"
14974
15124
  }
14975
15125
  },
15126
+ {
15127
+ id: "expand.behavior.textRole",
15128
+ value: "label",
15129
+ type: "string",
15130
+ kind: "behavioral",
15131
+ target: "component-prop",
15132
+ appliesTo: "expand",
15133
+ themeValues: {
15134
+ LightTheme: "label",
15135
+ DarkTheme: "label"
15136
+ }
15137
+ },
15138
+ {
15139
+ id: "expand.behavior.sublabelRole",
15140
+ value: "caption",
15141
+ type: "string",
15142
+ kind: "behavioral",
15143
+ target: "component-prop",
15144
+ appliesTo: "expand",
15145
+ themeValues: {
15146
+ LightTheme: "caption",
15147
+ DarkTheme: "caption"
15148
+ }
15149
+ },
15150
+ {
15151
+ id: "expand.behavior.sublabelColor",
15152
+ value: "on-background-variant",
15153
+ type: "string",
15154
+ kind: "behavioral",
15155
+ target: "component-prop",
15156
+ appliesTo: "expand",
15157
+ themeValues: {
15158
+ LightTheme: "on-background-variant",
15159
+ DarkTheme: "on-background-variant"
15160
+ }
15161
+ },
14976
15162
  {
14977
15163
  id: "input.behavior.typeface",
14978
15164
  value: "input",
@@ -16005,6 +16191,18 @@ placeholder="Name or address\u2026"
16005
16191
  DarkTheme: "sm"
16006
16192
  }
16007
16193
  },
16194
+ {
16195
+ id: "contactInput.behavior.chipAvatar",
16196
+ value: true,
16197
+ type: "boolean",
16198
+ kind: "behavioral",
16199
+ target: "component-prop",
16200
+ appliesTo: "contactInput",
16201
+ themeValues: {
16202
+ LightTheme: true,
16203
+ DarkTheme: true
16204
+ }
16205
+ },
16008
16206
  {
16009
16207
  id: "calendar.behavior.dayBorderRadius",
16010
16208
  value: "max",
@@ -16665,6 +16863,18 @@ placeholder="Name or address\u2026"
16665
16863
  DarkTheme: "sm"
16666
16864
  }
16667
16865
  },
16866
+ {
16867
+ id: "dataTable.behavior.sortIcon",
16868
+ value: "arrowUp",
16869
+ type: "string",
16870
+ kind: "behavioral",
16871
+ target: "component-prop",
16872
+ appliesTo: "dataTable",
16873
+ themeValues: {
16874
+ LightTheme: "arrowUp",
16875
+ DarkTheme: "arrowUp"
16876
+ }
16877
+ },
16668
16878
  {
16669
16879
  id: "dataTable.behavior.tdTextRole",
16670
16880
  value: "title-small",
@@ -16809,6 +17019,18 @@ placeholder="Name or address\u2026"
16809
17019
  DarkTheme: -10
16810
17020
  }
16811
17021
  },
17022
+ {
17023
+ id: "notificationBadge.behavior.typeface",
17024
+ value: "overline",
17025
+ type: "string",
17026
+ kind: "behavioral",
17027
+ target: "component-prop",
17028
+ appliesTo: "notificationBadge",
17029
+ themeValues: {
17030
+ LightTheme: "overline",
17031
+ DarkTheme: "overline"
17032
+ }
17033
+ },
16812
17034
  {
16813
17035
  id: "paginator.behavior.gap",
16814
17036
  value: "xs",
@@ -17987,6 +18209,7 @@ placeholder="Name or address\u2026"
17987
18209
  border: "quaternary",
17988
18210
  padding: "sm",
17989
18211
  inset: "lg",
18212
+ overscroll: "contain",
17990
18213
  elevation: "dialog",
17991
18214
  backdrop: "scrim",
17992
18215
  motion: "panel"
@@ -18069,7 +18292,10 @@ placeholder="Name or address\u2026"
18069
18292
  motion: "panel"
18070
18293
  },
18071
18294
  expand: {
18072
- motion: "reveal"
18295
+ motion: "reveal",
18296
+ textRole: "label",
18297
+ sublabelRole: "caption",
18298
+ sublabelColor: "on-background-variant"
18073
18299
  },
18074
18300
  input: {
18075
18301
  typeface: "input",
@@ -18179,7 +18405,8 @@ placeholder="Name or address\u2026"
18179
18405
  avatarVariant: "primary",
18180
18406
  nameTypeface: "body-2-short",
18181
18407
  detailTypeface: "caption",
18182
- rowGap: "sm"
18408
+ rowGap: "sm",
18409
+ chipAvatar: true
18183
18410
  },
18184
18411
  calendar: {
18185
18412
  dayBorderRadius: "max",
@@ -18257,6 +18484,7 @@ placeholder="Name or address\u2026"
18257
18484
  thVerticalBorder: "dotted",
18258
18485
  thHorizontalBorder: "light",
18259
18486
  thPadding: "sm",
18487
+ sortIcon: "arrowUp",
18260
18488
  tdTextRole: "title-small",
18261
18489
  tdColor: "primary-surface",
18262
18490
  tdStickyColor: "primary-container",
@@ -18270,7 +18498,8 @@ placeholder="Name or address\u2026"
18270
18498
  },
18271
18499
  notificationBadge: {
18272
18500
  borderRadius: "sm",
18273
- offset: -10
18501
+ offset: -10,
18502
+ typeface: "overline"
18274
18503
  },
18275
18504
  paginator: {
18276
18505
  gap: "xs",
@@ -18613,6 +18842,7 @@ placeholder="Name or address\u2026"
18613
18842
  border: "quaternary",
18614
18843
  padding: "sm",
18615
18844
  inset: "lg",
18845
+ overscroll: "contain",
18616
18846
  elevation: "dialog",
18617
18847
  backdrop: "scrim",
18618
18848
  motion: "panel"
@@ -18695,7 +18925,10 @@ placeholder="Name or address\u2026"
18695
18925
  motion: "panel"
18696
18926
  },
18697
18927
  expand: {
18698
- motion: "reveal"
18928
+ motion: "reveal",
18929
+ textRole: "label",
18930
+ sublabelRole: "caption",
18931
+ sublabelColor: "on-background-variant"
18699
18932
  },
18700
18933
  input: {
18701
18934
  typeface: "input",
@@ -18805,7 +19038,8 @@ placeholder="Name or address\u2026"
18805
19038
  avatarVariant: "primary",
18806
19039
  nameTypeface: "body-2-short",
18807
19040
  detailTypeface: "caption",
18808
- rowGap: "sm"
19041
+ rowGap: "sm",
19042
+ chipAvatar: true
18809
19043
  },
18810
19044
  calendar: {
18811
19045
  dayBorderRadius: "max",
@@ -18883,6 +19117,7 @@ placeholder="Name or address\u2026"
18883
19117
  thVerticalBorder: "dotted",
18884
19118
  thHorizontalBorder: "light",
18885
19119
  thPadding: "sm",
19120
+ sortIcon: "arrowUp",
18886
19121
  tdTextRole: "title-small",
18887
19122
  tdColor: "primary-surface",
18888
19123
  tdStickyColor: "primary-container",
@@ -18896,7 +19131,8 @@ placeholder="Name or address\u2026"
18896
19131
  },
18897
19132
  notificationBadge: {
18898
19133
  borderRadius: "sm",
18899
- offset: -10
19134
+ offset: -10,
19135
+ typeface: "overline"
18900
19136
  },
18901
19137
  paginator: {
18902
19138
  gap: "xs",
@@ -19004,6 +19240,24 @@ placeholder="Name or address\u2026"
19004
19240
  {
19005
19241
  package: "@uni-design-system/uni-angular",
19006
19242
  releases: [
19243
+ {
19244
+ version: "11.7.0",
19245
+ entries: [
19246
+ {
19247
+ bump: "minor",
19248
+ title: "Data table refinements from the Wellsourced adoption.",
19249
+ body: '- **Phantom scrollbar fixed**: a right-aligned last column no longer grows a horizontal scrollbar. The sort arrow now sits on the leading side of the label in right-aligned columns, and header cells clip the arrow instead of letting it widen the scroll area.\n- **`ColumnDefinition`**: `width` (a preferred column width) and `sortable` (default `true`; `false` renders a plain heading with no sort button or `aria-sort`).\n- **Cell templates** receive the row as `$implicit` and its `index`, alongside the row\'s fields by name, so `let-row` works and existing `let-name="name"` templates are unchanged. The context type is exported as `UniDataTableCellContext<T>`.\n- **`dataTable` theme options**: `thPaddingVertical` / `thPaddingHorizontal` and `tdPaddingVertical` / `tdPaddingHorizontal` override `thPadding` / `tdPadding` per axis; `sortIcon` picks the sort glyph (default `arrowUp`).\n- **`uni-sort-header`**: `iconName` and `align` inputs.',
19250
+ commit: "ffe2080"
19251
+ },
19252
+ {
19253
+ bump: "minor",
19254
+ title: 'Close the first two tiers of the Wellsourced change-request queue: six silent-failure fixes and five "the theme could not reach it" gaps, all additive.',
19255
+ body: "- **`uni-select`**: a value no option stands for \u2014 `''`, a stale id, or `null` with no `placeholder` \u2014 now renders as empty instead of as the first option. A native `<select>` with no selected `<option>` shows its first entry, so the field used to display a choice the model did not hold. A hidden \"nothing selected\" row is rendered whenever the model is unmatched (the placeholder, when there is one), and a dev-mode warning names a bound value that matches no option once the options have loaded.\n- **`uni-button`, `uni-icon-button`**: `disabled` is accepted as an alias of `disable`. The native name \u2014 the one every other Uni control uses \u2014 used to land on the DOM property, where the host's own attribute binding removed it on the first pass, so a button that had to start disabled rendered enabled with no error. `icon-button`'s `disable` and `loading` gain the `booleanAttribute` transform `text-button`'s already had: `<button icon-button disable>` works, and an optional chain (`[disable]=\"x()?.saving\"`) no longer needs a `!!`.\n- **`uni-tour`**: `finished` is only emitted for a run that presented at least one step, and `started` fires when the first step is presented \u2014 from `start()` or from a write to `active` \u2014 rather than at the call. A `start()` issued before `steps` are bound waits for them, so a host that loads steps from a service and starts in the same turn opens on the first one instead of reporting a finish for a tour that never opened. A one-step tour draws no progress, `progressStyle` accepts `'none'` and has a per-instance input, and a step may omit `body`.\n- **`uni-notification-badge`**: the `typeface` option is read (it was declared and never wired), the host is `inline-flex` so it no longer drops a wrapped link under its flex siblings, and the disc takes its size from a new `sizes` block (`sm` 14 / `md` 16 / `lg` 20px, keyed by `size`; `lg` is the default and the 20px it always drew). A count may widen rather than clip inside a fixed square. `offset` documents how it should scale with the wrapped element.\n- **`uni-contact-input`**: forwards `parse`; a `chipAvatar` input and theme option (default `true`) draw the chip as the name alone when the initials would only repeat it. **`uni-tag-input`** under `preset=\"email\"` now splits a paste on whitespace too \u2014 a column copied from a spreadsheet becomes one chip per address \u2014 while keeping the words of `Name <address>` together; and `openOnFocus` opens the list when suggestions arrive _after_ focus, so a field focused while its contacts are still loading shows them the moment they land (unless Escape dismissed the list in between).\n- **`uni-toggle`**: the hidden native input uses the shared `visuallyHidden` recipe \u2014 the last hidden helper in the library still on a private `position: absolute`.\n- **`uni-expand-toggle`**: the labelled trigger's type is themable through the `expand` entry \u2014 `textRole` / `textColor` and `sublabelRole` / `sublabelColor`, defaulting to the `label` / `caption` it hardcoded. The checkbox finding from 11.2.0, closed here.\n- **`uni-input`, `uni-textarea`, `uni-number-input`**: `unframed` drops the field chrome (border, fill, radius, shadow, inset and focus treatment) and renders the bare control, the same meaning it has on `uni-tag-input`; it lives on `uni-input-box` and is forwarded. `uni-input` also gains `align`, as `uni-number-input` has. (`labelHidden` was asked for too: the text fields never draw their `label` \u2014 it is the accessible name only \u2014 so there is nothing to hide.)\n- **`uni-dialog`**: an `overscroll` theme option (`auto` / `contain` / `none`, default `contain`, which is what the body hardcoded) for the scrolling body row.\n- **`uni-scroll-area`**: `maxHeight` lets the area grow with its content up to a cap and then scroll; `fill` takes the room a flex-column parent leaves. Either makes it the body of a dialog without a wrapper. With neither (or `height`) the layout is unchanged.\n- **`uni-combobox`**: `emptyValue` is what a clear writes \u2014 `null` by default, `''` for a field bound to a plain `string` schema, whose readers no longer meet a `null` after the \u2715.\n\nTheme-level additions in uni-core's base theme: `notificationBadge.sizes` and `options.typeface`, `expand.options.textRole` / `sublabelRole` / `sublabelColor`, `dialog.options.overscroll`, `contactInput.options.chipAvatar`. Every default reproduces what the component previously hardcoded.",
19256
+ commit: "9ff14bc"
19257
+ }
19258
+ ],
19259
+ dependencyBumps: []
19260
+ },
19007
19261
  {
19008
19262
  version: "11.6.0",
19009
19263
  entries: [
@@ -19962,6 +20216,24 @@ placeholder="Name or address\u2026"
19962
20216
  {
19963
20217
  package: "@uni-design-system/uni-core",
19964
20218
  releases: [
20219
+ {
20220
+ version: "11.7.0",
20221
+ entries: [
20222
+ {
20223
+ bump: "minor",
20224
+ title: "Data table refinements from the Wellsourced adoption.",
20225
+ body: '- **Phantom scrollbar fixed**: a right-aligned last column no longer grows a horizontal scrollbar. The sort arrow now sits on the leading side of the label in right-aligned columns, and header cells clip the arrow instead of letting it widen the scroll area.\n- **`ColumnDefinition`**: `width` (a preferred column width) and `sortable` (default `true`; `false` renders a plain heading with no sort button or `aria-sort`).\n- **Cell templates** receive the row as `$implicit` and its `index`, alongside the row\'s fields by name, so `let-row` works and existing `let-name="name"` templates are unchanged. The context type is exported as `UniDataTableCellContext<T>`.\n- **`dataTable` theme options**: `thPaddingVertical` / `thPaddingHorizontal` and `tdPaddingVertical` / `tdPaddingHorizontal` override `thPadding` / `tdPadding` per axis; `sortIcon` picks the sort glyph (default `arrowUp`).\n- **`uni-sort-header`**: `iconName` and `align` inputs.',
20226
+ commit: "ffe2080"
20227
+ },
20228
+ {
20229
+ bump: "minor",
20230
+ title: 'Close the first two tiers of the Wellsourced change-request queue: six silent-failure fixes and five "the theme could not reach it" gaps, all additive.',
20231
+ body: "- **`uni-select`**: a value no option stands for \u2014 `''`, a stale id, or `null` with no `placeholder` \u2014 now renders as empty instead of as the first option. A native `<select>` with no selected `<option>` shows its first entry, so the field used to display a choice the model did not hold. A hidden \"nothing selected\" row is rendered whenever the model is unmatched (the placeholder, when there is one), and a dev-mode warning names a bound value that matches no option once the options have loaded.\n- **`uni-button`, `uni-icon-button`**: `disabled` is accepted as an alias of `disable`. The native name \u2014 the one every other Uni control uses \u2014 used to land on the DOM property, where the host's own attribute binding removed it on the first pass, so a button that had to start disabled rendered enabled with no error. `icon-button`'s `disable` and `loading` gain the `booleanAttribute` transform `text-button`'s already had: `<button icon-button disable>` works, and an optional chain (`[disable]=\"x()?.saving\"`) no longer needs a `!!`.\n- **`uni-tour`**: `finished` is only emitted for a run that presented at least one step, and `started` fires when the first step is presented \u2014 from `start()` or from a write to `active` \u2014 rather than at the call. A `start()` issued before `steps` are bound waits for them, so a host that loads steps from a service and starts in the same turn opens on the first one instead of reporting a finish for a tour that never opened. A one-step tour draws no progress, `progressStyle` accepts `'none'` and has a per-instance input, and a step may omit `body`.\n- **`uni-notification-badge`**: the `typeface` option is read (it was declared and never wired), the host is `inline-flex` so it no longer drops a wrapped link under its flex siblings, and the disc takes its size from a new `sizes` block (`sm` 14 / `md` 16 / `lg` 20px, keyed by `size`; `lg` is the default and the 20px it always drew). A count may widen rather than clip inside a fixed square. `offset` documents how it should scale with the wrapped element.\n- **`uni-contact-input`**: forwards `parse`; a `chipAvatar` input and theme option (default `true`) draw the chip as the name alone when the initials would only repeat it. **`uni-tag-input`** under `preset=\"email\"` now splits a paste on whitespace too \u2014 a column copied from a spreadsheet becomes one chip per address \u2014 while keeping the words of `Name <address>` together; and `openOnFocus` opens the list when suggestions arrive _after_ focus, so a field focused while its contacts are still loading shows them the moment they land (unless Escape dismissed the list in between).\n- **`uni-toggle`**: the hidden native input uses the shared `visuallyHidden` recipe \u2014 the last hidden helper in the library still on a private `position: absolute`.\n- **`uni-expand-toggle`**: the labelled trigger's type is themable through the `expand` entry \u2014 `textRole` / `textColor` and `sublabelRole` / `sublabelColor`, defaulting to the `label` / `caption` it hardcoded. The checkbox finding from 11.2.0, closed here.\n- **`uni-input`, `uni-textarea`, `uni-number-input`**: `unframed` drops the field chrome (border, fill, radius, shadow, inset and focus treatment) and renders the bare control, the same meaning it has on `uni-tag-input`; it lives on `uni-input-box` and is forwarded. `uni-input` also gains `align`, as `uni-number-input` has. (`labelHidden` was asked for too: the text fields never draw their `label` \u2014 it is the accessible name only \u2014 so there is nothing to hide.)\n- **`uni-dialog`**: an `overscroll` theme option (`auto` / `contain` / `none`, default `contain`, which is what the body hardcoded) for the scrolling body row.\n- **`uni-scroll-area`**: `maxHeight` lets the area grow with its content up to a cap and then scroll; `fill` takes the room a flex-column parent leaves. Either makes it the body of a dialog without a wrapper. With neither (or `height`) the layout is unchanged.\n- **`uni-combobox`**: `emptyValue` is what a clear writes \u2014 `null` by default, `''` for a field bound to a plain `string` schema, whose readers no longer meet a `null` after the \u2715.\n\nTheme-level additions in uni-core's base theme: `notificationBadge.sizes` and `options.typeface`, `expand.options.textRole` / `sublabelRole` / `sublabelColor`, `dialog.options.overscroll`, `contactInput.options.chipAvatar`. Every default reproduces what the component previously hardcoded.",
20232
+ commit: "9ff14bc"
20233
+ }
20234
+ ],
20235
+ dependencyBumps: []
20236
+ },
19965
20237
  {
19966
20238
  version: "11.6.0",
19967
20239
  entries: [
@@ -20645,6 +20917,11 @@ placeholder="Name or address\u2026"
20645
20917
  {
20646
20918
  package: "@uni-design-system/uni-react",
20647
20919
  releases: [
20920
+ {
20921
+ version: "11.7.0",
20922
+ entries: [],
20923
+ dependencyBumps: []
20924
+ },
20648
20925
  {
20649
20926
  version: "11.6.0",
20650
20927
  entries: [],
@@ -20956,6 +21233,11 @@ placeholder="Name or address\u2026"
20956
21233
  {
20957
21234
  package: "@uni-design-system/uni-mcp",
20958
21235
  releases: [
21236
+ {
21237
+ version: "11.7.0",
21238
+ entries: [],
21239
+ dependencyBumps: []
21240
+ },
20959
21241
  {
20960
21242
  version: "11.6.0",
20961
21243
  entries: [],
@@ -21225,7 +21507,7 @@ placeholder="Name or address\u2026"
21225
21507
  summary: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
21226
21508
  description: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
21227
21509
  members: [],
21228
- version: "11.6.0"
21510
+ version: "11.7.0"
21229
21511
  },
21230
21512
  {
21231
21513
  id: "focusable-selector",
@@ -21237,7 +21519,7 @@ placeholder="Name or address\u2026"
21237
21519
  summary: "Selector matching natively focusable elements.",
21238
21520
  description: "Selector matching natively focusable elements. Used to locate the interactive element inside a projected trigger so ARIA attributes land on the element that actually receives focus.",
21239
21521
  members: [],
21240
- version: "11.6.0"
21522
+ version: "11.7.0"
21241
21523
  },
21242
21524
  {
21243
21525
  id: "resolve-focus-target",
@@ -21249,7 +21531,7 @@ placeholder="Name or address\u2026"
21249
21531
  summary: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
21250
21532
  description: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
21251
21533
  members: [],
21252
- version: "11.6.0"
21534
+ version: "11.7.0"
21253
21535
  },
21254
21536
  {
21255
21537
  id: "visually-hidden",
@@ -21261,7 +21543,7 @@ placeholder="Name or address\u2026"
21261
21543
  summary: "Visually hides content while keeping it available to screen readers.",
21262
21544
  description: "Visually hides content while keeping it available to screen readers. Use for text alternatives (e.g. badge counts, icon-only affordances). `fixed`, not `absolute`, and that is load-bearing. An absolutely positioned box resolves its containing block to the nearest *positioned* ancestor \u2014 which, since the controls emitting these spans are `position: static`, is whatever positioned box happens to be above them in the consumer's layout, often several scroll containers up. The span then skips every intervening `overflow: auto` and lands in that distant ancestor's scrollable overflow, turning 1x1 of invisible text into real scrollable distance in a box that never opted into scrolling. A fixed box's containing block is the viewport, so it joins no ancestor's scrollable overflow at all. Caveat: inside a `transform`ed (or `filter`ed/`contain`ed) ancestor a fixed box re-anchors to that ancestor. Harmless here \u2014 the element is 1x1 and clipped to nothing, so where it lands never matters, only what it overflows.",
21263
21545
  members: [],
21264
- version: "11.6.0"
21546
+ version: "11.7.0"
21265
21547
  },
21266
21548
  {
21267
21549
  id: "motion-safe",
@@ -21273,7 +21555,7 @@ placeholder="Name or address\u2026"
21273
21555
  summary: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
21274
21556
  description: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
21275
21557
  members: [],
21276
- version: "11.6.0"
21558
+ version: "11.7.0"
21277
21559
  },
21278
21560
  {
21279
21561
  id: "announcer",
@@ -21298,7 +21580,7 @@ placeholder="Name or address\u2026"
21298
21580
  description: "Announce `text`, even when it repeats what was just announced."
21299
21581
  }
21300
21582
  ],
21301
- version: "11.6.0"
21583
+ version: "11.7.0"
21302
21584
  },
21303
21585
  {
21304
21586
  id: "create-announcer",
@@ -21310,7 +21592,7 @@ placeholder="Name or address\u2026"
21310
21592
  summary: "A polite live region's text, for the running commentary a form control owes a screen reader: commits, clears, refused entries, result counts \u2014 changes a sighted user sees but that are otherwise silent.",
21311
21593
  description: "A polite live region's text, for the running commentary a form control owes a screen reader: commits, clears, refused entries, result counts \u2014 changes a sighted user sees but that are otherwise silent. Extracted because five controls (`uni-combobox`, `uni-tag-input`, `uni-time-input`, `uni-date-input`, `uni-calendar`) carried byte-identical copies, including the repeat trick below \u2014 the kind of subtlety that is quietly dropped when the sixth control hand-rolls its own. Announcing the same text twice must still be heard: assistive tech reads a live region when its content *changes*, so setting an identical string is a no-op and the second \"No match.\" would be silent. A trailing space breaks the equality without changing a word of what is read. Successive repeats alternate between the padded and unpadded form, so nothing accumulates. Deliberately holds no DOM and no styling: the region belongs to the component's own template, where its placement and visually-hidden class are already the component's business.",
21312
21594
  members: [],
21313
- version: "11.6.0"
21595
+ version: "11.7.0"
21314
21596
  },
21315
21597
  {
21316
21598
  id: "uni-date",
@@ -21322,7 +21604,7 @@ placeholder="Name or address\u2026"
21322
21604
  summary: "A calendar date, `'YYYY-MM-DD'`.",
21323
21605
  description: "A calendar date, `'YYYY-MM-DD'`.",
21324
21606
  members: [],
21325
- version: "11.6.0"
21607
+ version: "11.7.0"
21326
21608
  },
21327
21609
  {
21328
21610
  id: "uni-time",
@@ -21334,7 +21616,7 @@ placeholder="Name or address\u2026"
21334
21616
  summary: "A wall-clock time, `'HH:mm'` (24-hour).",
21335
21617
  description: "A wall-clock time, `'HH:mm'` (24-hour). Display format is separate.",
21336
21618
  members: [],
21337
- version: "11.6.0"
21619
+ version: "11.7.0"
21338
21620
  },
21339
21621
  {
21340
21622
  id: "uni-date-time",
@@ -21346,7 +21628,7 @@ placeholder="Name or address\u2026"
21346
21628
  summary: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
21347
21629
  description: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
21348
21630
  members: [],
21349
- version: "11.6.0"
21631
+ version: "11.7.0"
21350
21632
  },
21351
21633
  {
21352
21634
  id: "uni-date-range",
@@ -21371,7 +21653,7 @@ placeholder="Name or address\u2026"
21371
21653
  description: ""
21372
21654
  }
21373
21655
  ],
21374
- version: "11.6.0"
21656
+ version: "11.7.0"
21375
21657
  },
21376
21658
  {
21377
21659
  id: "iso-date",
@@ -21383,7 +21665,7 @@ placeholder="Name or address\u2026"
21383
21665
  summary: "`(2026, 8, 5)` \u2192 `'2026-08-05'`.",
21384
21666
  description: "`(2026, 8, 5)` \u2192 `'2026-08-05'`. Does not validate \u2014 see `isValidDate`.",
21385
21667
  members: [],
21386
- version: "11.6.0"
21668
+ version: "11.7.0"
21387
21669
  },
21388
21670
  {
21389
21671
  id: "is-valid-date",
@@ -21395,7 +21677,7 @@ placeholder="Name or address\u2026"
21395
21677
  summary: "The ISO date when the parts form a real calendar day, else `null`.",
21396
21678
  description: "The ISO date when the parts form a real calendar day, else `null`.",
21397
21679
  members: [],
21398
- version: "11.6.0"
21680
+ version: "11.7.0"
21399
21681
  },
21400
21682
  {
21401
21683
  id: "days-in-month",
@@ -21407,7 +21689,7 @@ placeholder="Name or address\u2026"
21407
21689
  summary: "Days in a month, leap-year aware.",
21408
21690
  description: "Days in a month, leap-year aware.",
21409
21691
  members: [],
21410
- version: "11.6.0"
21692
+ version: "11.7.0"
21411
21693
  },
21412
21694
  {
21413
21695
  id: "add-days",
@@ -21419,7 +21701,7 @@ placeholder="Name or address\u2026"
21419
21701
  summary: "",
21420
21702
  description: "",
21421
21703
  members: [],
21422
- version: "11.6.0"
21704
+ version: "11.7.0"
21423
21705
  },
21424
21706
  {
21425
21707
  id: "add-months",
@@ -21431,7 +21713,7 @@ placeholder="Name or address\u2026"
21431
21713
  summary: "Same day \xB1 n months, clamping the day to the target month's length.",
21432
21714
  description: "Same day \xB1 n months, clamping the day to the target month's length.",
21433
21715
  members: [],
21434
- version: "11.6.0"
21716
+ version: "11.7.0"
21435
21717
  },
21436
21718
  {
21437
21719
  id: "day-of-week",
@@ -21443,7 +21725,7 @@ placeholder="Name or address\u2026"
21443
21725
  summary: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
21444
21726
  description: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
21445
21727
  members: [],
21446
- version: "11.6.0"
21728
+ version: "11.7.0"
21447
21729
  },
21448
21730
  {
21449
21731
  id: "month-of",
@@ -21455,7 +21737,7 @@ placeholder="Name or address\u2026"
21455
21737
  summary: "`'2026-08-20'` \u2192 `'2026-08'`.",
21456
21738
  description: "`'2026-08-20'` \u2192 `'2026-08'`.",
21457
21739
  members: [],
21458
- version: "11.6.0"
21740
+ version: "11.7.0"
21459
21741
  },
21460
21742
  {
21461
21743
  id: "today-iso",
@@ -21467,7 +21749,7 @@ placeholder="Name or address\u2026"
21467
21749
  summary: "Today as a local-wall-clock ISO date (the one place local time matters).",
21468
21750
  description: "Today as a local-wall-clock ISO date (the one place local time matters).",
21469
21751
  members: [],
21470
- version: "11.6.0"
21752
+ version: "11.7.0"
21471
21753
  },
21472
21754
  {
21473
21755
  id: "inclusive-day-count",
@@ -21479,7 +21761,7 @@ placeholder="Name or address\u2026"
21479
21761
  summary: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
21480
21762
  description: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
21481
21763
  members: [],
21482
- version: "11.6.0"
21764
+ version: "11.7.0"
21483
21765
  },
21484
21766
  {
21485
21767
  id: "uni-month-grid-cell",
@@ -21504,7 +21786,7 @@ placeholder="Name or address\u2026"
21504
21786
  description: "True for leading/trailing cells that belong to the adjacent months."
21505
21787
  }
21506
21788
  ],
21507
- version: "11.6.0"
21789
+ version: "11.7.0"
21508
21790
  },
21509
21791
  {
21510
21792
  id: "build-month-grid",
@@ -21516,7 +21798,7 @@ placeholder="Name or address\u2026"
21516
21798
  summary: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday).",
21517
21799
  description: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday). Outside cells are always present so showing or hiding them is a pure render decision.",
21518
21800
  members: [],
21519
- version: "11.6.0"
21801
+ version: "11.7.0"
21520
21802
  },
21521
21803
  {
21522
21804
  id: "format-date",
@@ -21528,7 +21810,7 @@ placeholder="Name or address\u2026"
21528
21810
  summary: "",
21529
21811
  description: "",
21530
21812
  members: [],
21531
- version: "11.6.0"
21813
+ version: "11.7.0"
21532
21814
  },
21533
21815
  {
21534
21816
  id: "format-month-heading",
@@ -21540,7 +21822,7 @@ placeholder="Name or address\u2026"
21540
21822
  summary: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
21541
21823
  description: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
21542
21824
  members: [],
21543
- version: "11.6.0"
21825
+ version: "11.7.0"
21544
21826
  },
21545
21827
  {
21546
21828
  id: "uni-weekday-name",
@@ -21565,7 +21847,7 @@ placeholder="Name or address\u2026"
21565
21847
  description: "Full weekday name, for the columnheader's `abbr`."
21566
21848
  }
21567
21849
  ],
21568
- version: "11.6.0"
21850
+ version: "11.7.0"
21569
21851
  },
21570
21852
  {
21571
21853
  id: "weekday-names",
@@ -21577,7 +21859,7 @@ placeholder="Name or address\u2026"
21577
21859
  summary: "Weekday header labels starting at `weekStart` (0 = Sunday).",
21578
21860
  description: "Weekday header labels starting at `weekStart` (0 = Sunday).",
21579
21861
  members: [],
21580
- version: "11.6.0"
21862
+ version: "11.7.0"
21581
21863
  },
21582
21864
  {
21583
21865
  id: "format-time",
@@ -21589,7 +21871,7 @@ placeholder="Name or address\u2026"
21589
21871
  summary: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
21590
21872
  description: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
21591
21873
  members: [],
21592
- version: "11.6.0"
21874
+ version: "11.7.0"
21593
21875
  },
21594
21876
  {
21595
21877
  id: "locale-week-start",
@@ -21601,7 +21883,7 @@ placeholder="Name or address\u2026"
21601
21883
  summary: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday.",
21602
21884
  description: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday. Falls back to Sunday where `Intl.Locale` week info is unavailable.",
21603
21885
  members: [],
21604
- version: "11.6.0"
21886
+ version: "11.7.0"
21605
21887
  },
21606
21888
  {
21607
21889
  id: "locale-default-hour12",
@@ -21613,7 +21895,7 @@ placeholder="Name or address\u2026"
21613
21895
  summary: "Whether the locale's default clock is 12-hour.",
21614
21896
  description: "Whether the locale's default clock is 12-hour.",
21615
21897
  members: [],
21616
- version: "11.6.0"
21898
+ version: "11.7.0"
21617
21899
  },
21618
21900
  {
21619
21901
  id: "locale-field-order",
@@ -21625,7 +21907,7 @@ placeholder="Name or address\u2026"
21625
21907
  summary: "The locale's numeric-date field order, e.g.",
21626
21908
  description: "The locale's numeric-date field order, e.g. en-US \u2192 month, day, year.",
21627
21909
  members: [],
21628
- version: "11.6.0"
21910
+ version: "11.7.0"
21629
21911
  },
21630
21912
  {
21631
21913
  id: "locale-month-names",
@@ -21637,7 +21919,7 @@ placeholder="Name or address\u2026"
21637
21919
  summary: "Long + short month names \u2192 month number, lowercased, dots stripped.",
21638
21920
  description: "Long + short month names \u2192 month number, lowercased, dots stripped.",
21639
21921
  members: [],
21640
- version: "11.6.0"
21922
+ version: "11.7.0"
21641
21923
  },
21642
21924
  {
21643
21925
  id: "locale-date-placeholder",
@@ -21649,7 +21931,7 @@ placeholder="Name or address\u2026"
21649
21931
  summary: "The locale's digit pattern as a placeholder, e.g.",
21650
21932
  description: "The locale's digit pattern as a placeholder, e.g. `'MM/DD/YYYY'`.",
21651
21933
  members: [],
21652
- version: "11.6.0"
21934
+ version: "11.7.0"
21653
21935
  },
21654
21936
  {
21655
21937
  id: "parse-date-text",
@@ -21661,7 +21943,7 @@ placeholder="Name or address\u2026"
21661
21943
  summary: "Free-typed date text \u2192 ISO date, or `null` when unreadable.",
21662
21944
  description: "Free-typed date text \u2192 ISO date, or `null` when unreadable. Accepts, in order: ISO (`2026-08-20`), a month name from the locale's own long/short lists (`aug 20`, `20 aug 2026`, `August 20th`), and locale-numeric text (`8/20/2026`, `20.8.2026`, `08-20`) with the digit order taken from `Intl.DateTimeFormat(locale).formatToParts()`. A missing year resolves to the next occurrence; two-digit years are refused rather than guessed.",
21663
21945
  members: [],
21664
- version: "11.6.0"
21946
+ version: "11.7.0"
21665
21947
  },
21666
21948
  {
21667
21949
  id: "parse-time-text",
@@ -21673,7 +21955,7 @@ placeholder="Name or address\u2026"
21673
21955
  summary: "Free-typed time text \u2192 `'HH:mm'`, or `null`.",
21674
21956
  description: "Free-typed time text \u2192 `'HH:mm'`, or `null`. Accepts `9`, `930`, `9:30`, `9.30`, `9 30`, `3p`, `3pm`, `3 PM`, `15:00`. Bare hours 1\u20137 with no meridiem lean PM when `hour12` \u2014 typing `3` into an appointment field means 15:00, not 03:00.",
21675
21957
  members: [],
21676
- version: "11.6.0"
21958
+ version: "11.7.0"
21677
21959
  },
21678
21960
  {
21679
21961
  id: "time-slots",
@@ -21685,7 +21967,7 @@ placeholder="Name or address\u2026"
21685
21967
  summary: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
21686
21968
  description: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
21687
21969
  members: [],
21688
- version: "11.6.0"
21970
+ version: "11.7.0"
21689
21971
  },
21690
21972
  {
21691
21973
  id: "split-date-time",
@@ -21697,7 +21979,7 @@ placeholder="Name or address\u2026"
21697
21979
  summary: "",
21698
21980
  description: "",
21699
21981
  members: [],
21700
- version: "11.6.0"
21982
+ version: "11.7.0"
21701
21983
  },
21702
21984
  {
21703
21985
  id: "join-date-time",
@@ -21709,7 +21991,7 @@ placeholder="Name or address\u2026"
21709
21991
  summary: "One combined value only when both parts are present.",
21710
21992
  description: "One combined value only when both parts are present.",
21711
21993
  members: [],
21712
- version: "11.6.0"
21994
+ version: "11.7.0"
21713
21995
  },
21714
21996
  {
21715
21997
  id: "uni-number-range",
@@ -21734,7 +22016,7 @@ placeholder="Name or address\u2026"
21734
22016
  description: ""
21735
22017
  }
21736
22018
  ],
21737
- version: "11.6.0"
22019
+ version: "11.7.0"
21738
22020
  },
21739
22021
  {
21740
22022
  id: "uni-rounding-mode",
@@ -21746,7 +22028,7 @@ placeholder="Name or address\u2026"
21746
22028
  summary: "How a tie is resolved when rounding to a fraction-digit count.",
21747
22029
  description: "How a tie is resolved when rounding to a fraction-digit count. `half-up` is the invoice default (ties away from zero: `1.15` \u2192 `1.2`); `half-even` is banker's rounding, which removes the upward bias across a column of figures (`1.25` \u2192 `1.2`, `1.35` \u2192 `1.4`).",
21748
22030
  members: [],
21749
- version: "11.6.0"
22031
+ version: "11.7.0"
21750
22032
  },
21751
22033
  {
21752
22034
  id: "uni-number-preset",
@@ -21758,7 +22040,7 @@ placeholder="Name or address\u2026"
21758
22040
  summary: "Format archetype.",
21759
22041
  description: "Format archetype. Supplies decimals, grouping, affix and `inputmode`.",
21760
22042
  members: [],
21761
- version: "11.6.0"
22043
+ version: "11.7.0"
21762
22044
  },
21763
22045
  {
21764
22046
  id: "uni-number-grouping",
@@ -21770,7 +22052,7 @@ placeholder="Name or address\u2026"
21770
22052
  summary: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`.",
21771
22053
  description: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`. `min2` \u2014 the default \u2014 groups only from five integer digits, so a year renders `2026` rather than `2,026` while a price still renders `10,000`.",
21772
22054
  members: [],
21773
- version: "11.6.0"
22055
+ version: "11.7.0"
21774
22056
  },
21775
22057
  {
21776
22058
  id: "uni-number-reject-reason",
@@ -21782,7 +22064,7 @@ placeholder="Name or address\u2026"
21782
22064
  summary: "Why a typed commit was refused.",
21783
22065
  description: "Why a typed commit was refused. The raw text stays in the field.",
21784
22066
  members: [],
21785
- version: "11.6.0"
22067
+ version: "11.7.0"
21786
22068
  },
21787
22069
  {
21788
22070
  id: "uni-number-step-config",
@@ -21825,7 +22107,7 @@ placeholder="Name or address\u2026"
21825
22107
  description: "Cycle past a fence instead of stopping at it \u2014 for genuinely cyclic fields only (23 \u2192 0 hours, 359 \u2192 0 degrees). Needs both `min` and `max`."
21826
22108
  }
21827
22109
  ],
21828
- version: "11.6.0"
22110
+ version: "11.7.0"
21829
22111
  },
21830
22112
  {
21831
22113
  id: "uni-number-clamp",
@@ -21850,7 +22132,7 @@ placeholder="Name or address\u2026"
21850
22132
  description: "Which fence was hit, or `null` when the value was already in range."
21851
22133
  }
21852
22134
  ],
21853
- version: "11.6.0"
22135
+ version: "11.7.0"
21854
22136
  },
21855
22137
  {
21856
22138
  id: "uni-locale-number-parts",
@@ -21893,7 +22175,7 @@ placeholder="Name or address\u2026"
21893
22175
  description: "Fraction digits `Intl` uses for the currency \u2014 JPY 0, USD 2."
21894
22176
  }
21895
22177
  ],
21896
- version: "11.6.0"
22178
+ version: "11.7.0"
21897
22179
  },
21898
22180
  {
21899
22181
  id: "uni-number-format-config",
@@ -21978,7 +22260,7 @@ placeholder="Name or address\u2026"
21978
22260
  description: "Spoken long form of an abbreviated suffix, for `aria-valuetext`."
21979
22261
  }
21980
22262
  ],
21981
- version: "11.6.0"
22263
+ version: "11.7.0"
21982
22264
  },
21983
22265
  {
21984
22266
  id: "uni-resolved-number-format",
@@ -22069,7 +22351,7 @@ placeholder="Name or address\u2026"
22069
22351
  description: ""
22070
22352
  }
22071
22353
  ],
22072
- version: "11.6.0"
22354
+ version: "11.7.0"
22073
22355
  },
22074
22356
  {
22075
22357
  id: "uni-number-parse-result",
@@ -22081,7 +22363,7 @@ placeholder="Name or address\u2026"
22081
22363
  summary: "The outcome of reading a user's text.",
22082
22364
  description: "The outcome of reading a user's text. Refused text is never swallowed: the caller keeps it in the field and flags it, so nobody loses their work to a silently emptied box.",
22083
22365
  members: [],
22084
- version: "11.6.0"
22366
+ version: "11.7.0"
22085
22367
  },
22086
22368
  {
22087
22369
  id: "is-canonical-decimal",
@@ -22093,7 +22375,7 @@ placeholder="Name or address\u2026"
22093
22375
  summary: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
22094
22376
  description: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
22095
22377
  members: [],
22096
- version: "11.6.0"
22378
+ version: "11.7.0"
22097
22379
  },
22098
22380
  {
22099
22381
  id: "decimal-scale",
@@ -22105,7 +22387,7 @@ placeholder="Name or address\u2026"
22105
22387
  summary: "Fraction-digit count.",
22106
22388
  description: "Fraction-digit count. `'1.250'` \u2192 3, `'12'` \u2192 0, `'5.'` \u2192 0.",
22107
22389
  members: [],
22108
- version: "11.6.0"
22390
+ version: "11.7.0"
22109
22391
  },
22110
22392
  {
22111
22393
  id: "to-scaled",
@@ -22117,7 +22399,7 @@ placeholder="Name or address\u2026"
22117
22399
  summary: "Canonical decimal \u2192 integer scaled by `10^scale`.",
22118
22400
  description: "Canonical decimal \u2192 integer scaled by `10^scale`. Fraction digits beyond `scale` are truncated, so callers that must not lose them pass a `scale` at least `decimalScale(value)`.",
22119
22401
  members: [],
22120
- version: "11.6.0"
22402
+ version: "11.7.0"
22121
22403
  },
22122
22404
  {
22123
22405
  id: "from-scaled",
@@ -22129,7 +22411,7 @@ placeholder="Name or address\u2026"
22129
22411
  summary: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
22130
22412
  description: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
22131
22413
  members: [],
22132
- version: "11.6.0"
22414
+ version: "11.7.0"
22133
22415
  },
22134
22416
  {
22135
22417
  id: "normalize-decimal",
@@ -22141,7 +22423,7 @@ placeholder="Name or address\u2026"
22141
22423
  summary: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`.",
22142
22424
  description: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`. Requires a canonical decimal; guard with `isCanonicalDecimal`.",
22143
22425
  members: [],
22144
- version: "11.6.0"
22426
+ version: "11.7.0"
22145
22427
  },
22146
22428
  {
22147
22429
  id: "to-decimal",
@@ -22153,7 +22435,7 @@ placeholder="Name or address\u2026"
22153
22435
  summary: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21.",
22154
22436
  description: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21. A `step` of `1e-7` would otherwise reach the arithmetic as the literal text `'1e-7'`. Throws on text that is not numeric at all \u2014 every caller here passes either a `number` input or text already cleared by the parser.",
22155
22437
  members: [],
22156
- version: "11.6.0"
22438
+ version: "11.7.0"
22157
22439
  },
22158
22440
  {
22159
22441
  id: "compare-decimal",
@@ -22165,7 +22447,7 @@ placeholder="Name or address\u2026"
22165
22447
  summary: "`-1` when `a < b`, `1` when `a > b`, `0` when equal.",
22166
22448
  description: "`-1` when `a < b`, `1` when `a > b`, `0` when equal. `'1.50'` equals `'1.5'`.",
22167
22449
  members: [],
22168
- version: "11.6.0"
22450
+ version: "11.7.0"
22169
22451
  },
22170
22452
  {
22171
22453
  id: "round-decimal",
@@ -22177,7 +22459,7 @@ placeholder="Name or address\u2026"
22177
22459
  summary: "Round to `fractionDigits`, breaking ties per `mode`.",
22178
22460
  description: "Round to `fractionDigits`, breaking ties per `mode`. Exact where `Number.prototype.toFixed` is not \u2014 see the file header.",
22179
22461
  members: [],
22180
- version: "11.6.0"
22462
+ version: "11.7.0"
22181
22463
  },
22182
22464
  {
22183
22465
  id: "shift-decimal",
@@ -22189,7 +22471,7 @@ placeholder="Name or address\u2026"
22189
22471
  summary: "Multiply by `10^places`, exactly.",
22190
22472
  description: "Multiply by `10^places`, exactly. Used for the percent preset's fraction \u21C4 display shift (`0.15` \u21C4 `15`) and for deriving a default large step of `step \xD7 10` without touching a float.",
22191
22473
  members: [],
22192
- version: "11.6.0"
22474
+ version: "11.7.0"
22193
22475
  },
22194
22476
  {
22195
22477
  id: "clamp-decimal",
@@ -22201,7 +22483,7 @@ placeholder="Name or address\u2026"
22201
22483
  summary: "Hold a value inside its fences, reporting which one it hit so the caller can announce it.",
22202
22484
  description: "Hold a value inside its fences, reporting which one it hit so the caller can announce it. Clamping belongs on commit, never per keystroke: a `min=10` field that clamps live can never be typed into, because the `1` becomes `10` before the `5` arrives.",
22203
22485
  members: [],
22204
- version: "11.6.0"
22486
+ version: "11.7.0"
22205
22487
  },
22206
22488
  {
22207
22489
  id: "step-decimal",
@@ -22213,7 +22495,7 @@ placeholder="Name or address\u2026"
22213
22495
  summary: "One step from `current`, in `direction` (`1` up, `-1` down).",
22214
22496
  description: "One step from `current`, in `direction` (`1` up, `-1` down). Steps land on the grid `origin + n \xB7 step`, where `origin` is `min` by default. A value that is *off* the grid snaps to the nearest grid point **in the direction of travel** rather than jumping past it: with `min=5, step=10` the grid is 5, 15, 25, and stepping up from 7 gives 15, not 17. Fences stop the value; they never wrap unless `wrap` is set and both bounds are defined. Returns `current` unchanged when `step` is zero.",
22215
22497
  members: [],
22216
- version: "11.6.0"
22498
+ version: "11.7.0"
22217
22499
  },
22218
22500
  {
22219
22501
  id: "locale-number-parts",
@@ -22225,7 +22507,7 @@ placeholder="Name or address\u2026"
22225
22507
  summary: "Locale separators plus, when a currency is given, its symbol, side and fraction digits.",
22226
22508
  description: "Locale separators plus, when a currency is given, its symbol, side and fraction digits. Memoized: constructing an `Intl.NumberFormat` is expensive and a field re-resolves this on every keystroke.",
22227
22509
  members: [],
22228
- version: "11.6.0"
22510
+ version: "11.7.0"
22229
22511
  },
22230
22512
  {
22231
22513
  id: "to-ascii-digits",
@@ -22237,7 +22519,7 @@ placeholder="Name or address\u2026"
22237
22519
  summary: "Map localized digits and Arabic separators to ASCII, so `\u0661\u0662\u0663\u0664\u066B\u0665` parses in `ar` and `\u0967\u0968\u0969\u096A.\u096B` in `hi`.",
22238
22520
  description: "Map localized digits and Arabic separators to ASCII, so `\u0661\u0662\u0663\u0664\u066B\u0665` parses in `ar` and `\u0967\u0968\u0969\u096A.\u096B` in `hi`.",
22239
22521
  members: [],
22240
- version: "11.6.0"
22522
+ version: "11.7.0"
22241
22523
  },
22242
22524
  {
22243
22525
  id: "evaluate-expression",
@@ -22249,7 +22531,7 @@ placeholder="Name or address\u2026"
22249
22531
  summary: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**.",
22250
22532
  description: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**. Returns a canonical decimal, or `null` when the text is not a well-formed expression. Floats are acceptable here in a way they are not elsewhere: this is a convenience path for spreadsheet muscle memory (`12*3`, `100/4+5`), and the result is settled to ten decimals before re-entering exact arithmetic. Division is the only operation that can produce a non-terminating decimal, and no exact representation would help there either.",
22251
22533
  members: [],
22252
- version: "11.6.0"
22534
+ version: "11.7.0"
22253
22535
  },
22254
22536
  {
22255
22537
  id: "resolve-number-format",
@@ -22261,7 +22543,7 @@ placeholder="Name or address\u2026"
22261
22543
  summary: "Fill in every preset, locale and currency default.",
22262
22544
  description: "Fill in every preset, locale and currency default.",
22263
22545
  members: [],
22264
- version: "11.6.0"
22546
+ version: "11.7.0"
22265
22547
  },
22266
22548
  {
22267
22549
  id: "parse-number",
@@ -22273,7 +22555,7 @@ placeholder="Name or address\u2026"
22273
22555
  summary: "Read a user's text into a canonical decimal in **model units**.",
22274
22556
  description: "Read a user's text into a canonical decimal in **model units**. Accepted, in order: canonical/ASCII (always, whatever the locale \u2014 it is what agents and APIs write), locale-grouped, affixed, localized digits, compact (`1.5k`), accounting negatives (`(1,234.56)` \u2192 `-1234.56`), and expressions when `allowExpressions` is set.",
22275
22557
  members: [],
22276
- version: "11.6.0"
22558
+ version: "11.7.0"
22277
22559
  },
22278
22560
  {
22279
22561
  id: "format-number",
@@ -22285,7 +22567,7 @@ placeholder="Name or address\u2026"
22285
22567
  summary: "Canonical decimal (model units) \u2192 the display number, without affixes.",
22286
22568
  description: "Canonical decimal (model units) \u2192 the display number, without affixes. `min2` grouping \u2014 the default \u2014 starts at five integer digits, so a year renders `2026` rather than `2,026` while a price still renders `10,000`.",
22287
22569
  members: [],
22288
- version: "11.6.0"
22570
+ version: "11.7.0"
22289
22571
  },
22290
22572
  {
22291
22573
  id: "raw-number-text",
@@ -22297,7 +22579,7 @@ placeholder="Name or address\u2026"
22297
22579
  summary: "The plain text the field shows while focused: the display number with no grouping and no affixes, so the caret never has to walk over a separator that appears and vanishes mid-word.",
22298
22580
  description: "The plain text the field shows while focused: the display number with no grouping and no affixes, so the caret never has to walk over a separator that appears and vanishes mid-word.",
22299
22581
  members: [],
22300
- version: "11.6.0"
22582
+ version: "11.7.0"
22301
22583
  },
22302
22584
  {
22303
22585
  id: "settle-number",
@@ -22309,7 +22591,7 @@ placeholder="Name or address\u2026"
22309
22591
  summary: "Round a committed value to the field's precision, in model units.",
22310
22592
  description: "Round a committed value to the field's precision, in model units.",
22311
22593
  members: [],
22312
- version: "11.6.0"
22594
+ version: "11.7.0"
22313
22595
  },
22314
22596
  {
22315
22597
  id: "speak-number",
@@ -22321,7 +22603,7 @@ placeholder="Name or address\u2026"
22321
22603
  summary: "The `aria-valuetext` string: the formatted number with its affixes spoken.",
22322
22604
  description: 'The `aria-valuetext` string: the formatted number with its affixes spoken. `aria-valuenow` alone announces "1234.56", which is the one thing about a money field that is not the point. An empty field says "Empty" per APG.',
22323
22605
  members: [],
22324
- version: "11.6.0"
22606
+ version: "11.7.0"
22325
22607
  },
22326
22608
  {
22327
22609
  id: "to-number",
@@ -22333,7 +22615,7 @@ placeholder="Name or address\u2026"
22333
22615
  summary: "Model-units canonical decimal \u2192 the bound `number`.",
22334
22616
  description: "Model-units canonical decimal \u2192 the bound `number`.",
22335
22617
  members: [],
22336
- version: "11.6.0"
22618
+ version: "11.7.0"
22337
22619
  },
22338
22620
  {
22339
22621
  id: "loses-precision",
@@ -22345,7 +22627,7 @@ placeholder="Name or address\u2026"
22345
22627
  summary: "True when a value cannot survive the trip through `number` \u2014 the reason the components also expose an exact `valueAsString` model, and the trigger for the dev-mode warning.",
22346
22628
  description: "True when a value cannot survive the trip through `number` \u2014 the reason the components also expose an exact `valueAsString` model, and the trigger for the dev-mode warning. Silent precision loss is the whole point of that second model, so it is worth saying out loud once. A `number` can only be checked for magnitude, since it has already lost whatever it was going to lose. A canonical string can be checked properly: `'9007199254740993'` comes back as `'9007199254740992'`.",
22347
22629
  members: [],
22348
- version: "11.6.0"
22630
+ version: "11.7.0"
22349
22631
  },
22350
22632
  {
22351
22633
  id: "press-repeat-timing",
@@ -22382,7 +22664,7 @@ placeholder="Name or address\u2026"
22382
22664
  description: ""
22383
22665
  }
22384
22666
  ],
22385
- version: "11.6.0"
22667
+ version: "11.7.0"
22386
22668
  },
22387
22669
  {
22388
22670
  id: "press-repeat-config",
@@ -22431,7 +22713,7 @@ placeholder="Name or address\u2026"
22431
22713
  description: ""
22432
22714
  }
22433
22715
  ],
22434
- version: "11.6.0"
22716
+ version: "11.7.0"
22435
22717
  },
22436
22718
  {
22437
22719
  id: "press-repeat",
@@ -22468,7 +22750,7 @@ placeholder="Name or address\u2026"
22468
22750
  description: "End a hold without firing `onRelease` \u2014 for `Escape` and `pointercancel`."
22469
22751
  }
22470
22752
  ],
22471
- version: "11.6.0"
22753
+ version: "11.7.0"
22472
22754
  },
22473
22755
  {
22474
22756
  id: "create-press-repeat",
@@ -22480,7 +22762,7 @@ placeholder="Name or address\u2026"
22480
22762
  summary: "",
22481
22763
  description: "",
22482
22764
  members: [],
22483
- version: "11.6.0"
22765
+ version: "11.7.0"
22484
22766
  },
22485
22767
  {
22486
22768
  id: "listbox-navigation-config",
@@ -22523,7 +22805,7 @@ placeholder="Name or address\u2026"
22523
22805
  description: "Let Home/End jump to the ends of the list. Default false. In an editable combobox those keys belong to the caret \u2014 APG reserves them for text editing, and a control that steals them makes the text un-navigable while its list is open. Opt in only where focus is *not* in a text field (uni-multi-select-dropdown, whose focus rides the option checkboxes). Nothing is lost by leaving it off: opening with ArrowUp already lands on the last option, ArrowDown on the first, and navigation wraps at both ends."
22524
22806
  }
22525
22807
  ],
22526
- version: "11.6.0"
22808
+ version: "11.7.0"
22527
22809
  },
22528
22810
  {
22529
22811
  id: "listbox-navigation",
@@ -22596,7 +22878,7 @@ placeholder="Name or address\u2026"
22596
22878
  description: "Close when focus leaves the control entirely (not on internal moves)."
22597
22879
  }
22598
22880
  ],
22599
- version: "11.6.0"
22881
+ version: "11.7.0"
22600
22882
  },
22601
22883
  {
22602
22884
  id: "create-listbox-navigation",
@@ -22608,7 +22890,7 @@ placeholder="Name or address\u2026"
22608
22890
  summary: "Factory mirroring the signal-API style used elsewhere in the CDK.",
22609
22891
  description: "Factory mirroring the signal-API style used elsewhere in the CDK.",
22610
22892
  members: [],
22611
- version: "11.6.0"
22893
+ version: "11.7.0"
22612
22894
  },
22613
22895
  {
22614
22896
  id: "placement",
@@ -22620,7 +22902,7 @@ placeholder="Name or address\u2026"
22620
22902
  summary: "Native CSS Anchor Positioning helpers (Baseline 2026).",
22621
22903
  description: "Native CSS Anchor Positioning helpers (Baseline 2026). These replace the former",
22622
22904
  members: [],
22623
- version: "11.6.0"
22905
+ version: "11.7.0"
22624
22906
  },
22625
22907
  {
22626
22908
  id: "anchor-offset",
@@ -22645,7 +22927,7 @@ placeholder="Name or address\u2026"
22645
22927
  description: "Shift along the cross axis, from the aligned edge."
22646
22928
  }
22647
22929
  ],
22648
- version: "11.6.0"
22930
+ version: "11.7.0"
22649
22931
  },
22650
22932
  {
22651
22933
  id: "new-anchor-name",
@@ -22657,7 +22939,7 @@ placeholder="Name or address\u2026"
22657
22939
  summary: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
22658
22940
  description: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
22659
22941
  members: [],
22660
- version: "11.6.0"
22942
+ version: "11.7.0"
22661
22943
  },
22662
22944
  {
22663
22945
  id: "anchor-styles",
@@ -22669,7 +22951,7 @@ placeholder="Name or address\u2026"
22669
22951
  summary: "Emotion style object anchoring a panel to `anchor` at `placement`.",
22670
22952
  description: "Emotion style object anchoring a panel to `anchor` at `placement`. Spread into the panel's `css()` styles. The trigger element must carry `anchor-name: <anchor>` (see `newAnchorName`).",
22671
22953
  members: [],
22672
- version: "11.6.0"
22954
+ version: "11.7.0"
22673
22955
  },
22674
22956
  {
22675
22957
  id: "anchor-arrow-styles",
@@ -22681,7 +22963,7 @@ placeholder="Name or address\u2026"
22681
22963
  summary: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor.",
22682
22964
  description: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor. Static per placement: if the browser flips the panel via position-try, the arrow stays on the configured side (cosmetic-only degradation, matching the flip-support caveat above). `overlap` (default 0 \u2014 cut exactly on the panel edge) extends the kept half into the panel; see for when that is ever wanted.",
22683
22965
  members: [],
22684
- version: "11.6.0"
22966
+ version: "11.7.0"
22685
22967
  },
22686
22968
  {
22687
22969
  id: "spotlight-options",
@@ -22712,7 +22994,7 @@ placeholder="Name or address\u2026"
22712
22994
  description: "Scrim paint; scheme-invariant by convention, like `::backdrop`."
22713
22995
  }
22714
22996
  ],
22715
- version: "11.6.0"
22997
+ version: "11.7.0"
22716
22998
  },
22717
22999
  {
22718
23000
  id: "spotlight-styles",
@@ -22743,7 +23025,7 @@ placeholder="Name or address\u2026"
22743
23025
  description: "Hole-sized click-blocker, shown when the target must not be interactive."
22744
23026
  }
22745
23027
  ],
22746
- version: "11.6.0"
23028
+ version: "11.7.0"
22747
23029
  },
22748
23030
  {
22749
23031
  id: "anchor-rect",
@@ -22792,7 +23074,7 @@ placeholder="Name or address\u2026"
22792
23074
  description: ""
22793
23075
  }
22794
23076
  ],
22795
- version: "11.6.0"
23077
+ version: "11.7.0"
22796
23078
  },
22797
23079
  {
22798
23080
  id: "transform-origin-for",
@@ -22804,7 +23086,7 @@ placeholder="Name or address\u2026"
22804
23086
  summary: "Transform origin for a panel's open/close scale animation, derived from where the panel **actually** rendered relative to its anchor \u2014 not from the requested placement.",
22805
23087
  description: "Transform origin for a panel's open/close scale animation, derived from where the panel **actually** rendered relative to its anchor \u2014 not from the requested placement. `position-try-fallbacks` lets the browser flip a panel at viewport edges, and a statically mapped origin then animates from the wrong corner (a `bottom-end` picker flipped above its field would still scale from `top right`). Measure after the popover is shown and apply the result as an inline style. Returns keyword pairs like `'top right'` / `'bottom center'`, or `null` when the panel has no box yet (e.g. `display: none`, or jsdom).",
22806
23088
  members: [],
22807
- version: "11.6.0"
23089
+ version: "11.7.0"
22808
23090
  },
22809
23091
  {
22810
23092
  id: "transform-origins",
@@ -22816,7 +23098,7 @@ placeholder="Name or address\u2026"
22816
23098
  summary: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
22817
23099
  description: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
22818
23100
  members: [],
22819
- version: "11.6.0"
23101
+ version: "11.7.0"
22820
23102
  },
22821
23103
  {
22822
23104
  id: "set-anchor-name",
@@ -22828,7 +23110,7 @@ placeholder="Name or address\u2026"
22828
23110
  summary: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
22829
23111
  description: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
22830
23112
  members: [],
22831
- version: "11.6.0"
23113
+ version: "11.7.0"
22832
23114
  },
22833
23115
  {
22834
23116
  id: "clear-anchor-name",
@@ -22840,7 +23122,7 @@ placeholder="Name or address\u2026"
22840
23122
  summary: "",
22841
23123
  description: "",
22842
23124
  members: [],
22843
- version: "11.6.0"
23125
+ version: "11.7.0"
22844
23126
  },
22845
23127
  {
22846
23128
  id: "resolve-element",
@@ -22852,7 +23134,7 @@ placeholder="Name or address\u2026"
22852
23134
  summary: "Resolve an element-or-id reference.",
22853
23135
  description: "Resolve an element-or-id reference. Id strings are looked up at call time \u2014 never cache the result across opens, the element may have been re-rendered. `''` and null-ish mean \"unset\" (falsy guard: an empty string is the only typeable empty for a string-typed input).",
22854
23136
  members: [],
22855
- version: "11.6.0"
23137
+ version: "11.7.0"
22856
23138
  },
22857
23139
  {
22858
23140
  id: "is-toggle-open",
@@ -22864,7 +23146,7 @@ placeholder="Name or address\u2026"
22864
23146
  summary: "True when a native `toggle` event reports the overlay opening.",
22865
23147
  description: "True when a native `toggle` event reports the overlay opening.",
22866
23148
  members: [],
22867
- version: "11.6.0"
23149
+ version: "11.7.0"
22868
23150
  },
22869
23151
  {
22870
23152
  id: "discrete-overlay-transition",
@@ -22876,7 +23158,7 @@ placeholder="Name or address\u2026"
22876
23158
  summary: "The discrete-transition block that animates an element into and out of the top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus `display`/`overlay`, the shown state under `:popover-open`, and `@starting-style` so entry transitions run from the hidden state.",
22877
23159
  description: "The discrete-transition block that animates an element into and out of the top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus `display`/`overlay`, the shown state under `:popover-open`, and `@starting-style` so entry transitions run from the hidden state. `display` and `overlay` must ride along or the element cannot animate into and out of the top layer at all \u2014 it would simply appear and vanish. `timingFunction` is omitted from the output when not given, leaving the CSS initial value (`ease`), so callers that never asked for one are unaffected.",
22878
23160
  members: [],
22879
- version: "11.6.0"
23161
+ version: "11.7.0"
22880
23162
  },
22881
23163
  {
22882
23164
  id: "restore-overlay-focus",
@@ -22888,7 +23170,7 @@ placeholder="Name or address\u2026"
22888
23170
  summary: "Returns focus to `target` when an overlay closes while focus was inside its panel (or was dropped on `<body>` by the top layer closing), so keyboard users are never stranded (WCAG 2.4.3).",
22889
23171
  description: "Returns focus to `target` when an overlay closes while focus was inside its panel (or was dropped on `<body>` by the top layer closing), so keyboard users are never stranded (WCAG 2.4.3). Focus resting anywhere else is left alone.",
22890
23172
  members: [],
22891
- version: "11.6.0"
23173
+ version: "11.7.0"
22892
23174
  },
22893
23175
  {
22894
23176
  id: "focusable-elements",
@@ -22900,7 +23182,7 @@ placeholder="Name or address\u2026"
22900
23182
  summary: "The focusable elements inside `root`, in DOM order.",
22901
23183
  description: "The focusable elements inside `root`, in DOM order. Filters disabled controls, and hidden ones where the environment can tell: jsdom reports `offsetParent` as null for every element, so the visibility filter applies only when the document actually lays out (some element has an offsetParent).",
22902
23184
  members: [],
22903
- version: "11.6.0"
23185
+ version: "11.7.0"
22904
23186
  },
22905
23187
  {
22906
23188
  id: "backdrop-dismiss",
@@ -22925,7 +23207,7 @@ placeholder="Name or address\u2026"
22925
23207
  description: "True only when both the press and the click landed on the dialog itself."
22926
23208
  }
22927
23209
  ],
22928
- version: "11.6.0"
23210
+ version: "11.7.0"
22929
23211
  },
22930
23212
  {
22931
23213
  id: "sort-direction",
@@ -22937,7 +23219,7 @@ placeholder="Name or address\u2026"
22937
23219
  summary: "",
22938
23220
  description: "",
22939
23221
  members: [],
22940
- version: "11.6.0"
23222
+ version: "11.7.0"
22941
23223
  },
22942
23224
  {
22943
23225
  id: "sort",
@@ -22962,7 +23244,7 @@ placeholder="Name or address\u2026"
22962
23244
  description: ""
22963
23245
  }
22964
23246
  ],
22965
- version: "11.6.0"
23247
+ version: "11.7.0"
22966
23248
  },
22967
23249
  {
22968
23250
  id: "uni-base-datasource",
@@ -23131,7 +23413,7 @@ placeholder="Name or address\u2026"
23131
23413
  description: ""
23132
23414
  }
23133
23415
  ],
23134
- version: "11.6.0"
23416
+ version: "11.7.0"
23135
23417
  },
23136
23418
  {
23137
23419
  id: "page-request",
@@ -23174,7 +23456,7 @@ placeholder="Name or address\u2026"
23174
23456
  description: ""
23175
23457
  }
23176
23458
  ],
23177
- version: "11.6.0"
23459
+ version: "11.7.0"
23178
23460
  },
23179
23461
  {
23180
23462
  id: "page-response",
@@ -23211,7 +23493,7 @@ placeholder="Name or address\u2026"
23211
23493
  description: ""
23212
23494
  }
23213
23495
  ],
23214
- version: "11.6.0"
23496
+ version: "11.7.0"
23215
23497
  },
23216
23498
  {
23217
23499
  id: "data-loader",
@@ -23223,7 +23505,7 @@ placeholder="Name or address\u2026"
23223
23505
  summary: "",
23224
23506
  description: "",
23225
23507
  members: [],
23226
- version: "11.6.0"
23508
+ version: "11.7.0"
23227
23509
  },
23228
23510
  {
23229
23511
  id: "uni-server-side-datasource",
@@ -23362,7 +23644,7 @@ placeholder="Name or address\u2026"
23362
23644
  description: ""
23363
23645
  }
23364
23646
  ],
23365
- version: "11.6.0"
23647
+ version: "11.7.0"
23366
23648
  },
23367
23649
  {
23368
23650
  id: "uni-datasource",
@@ -23374,7 +23656,7 @@ placeholder="Name or address\u2026"
23374
23656
  summary: "",
23375
23657
  description: "",
23376
23658
  members: [],
23377
- version: "11.6.0"
23659
+ version: "11.7.0"
23378
23660
  },
23379
23661
  {
23380
23662
  id: "uni-record-datasource",
@@ -23483,7 +23765,7 @@ placeholder="Name or address\u2026"
23483
23765
  description: ""
23484
23766
  }
23485
23767
  ],
23486
- version: "11.6.0"
23768
+ version: "11.7.0"
23487
23769
  },
23488
23770
  {
23489
23771
  id: "local-storage-service",
@@ -23538,7 +23820,7 @@ placeholder="Name or address\u2026"
23538
23820
  description: ""
23539
23821
  }
23540
23822
  ],
23541
- version: "11.6.0"
23823
+ version: "11.7.0"
23542
23824
  },
23543
23825
  {
23544
23826
  id: "alert",
@@ -23593,7 +23875,7 @@ placeholder="Name or address\u2026"
23593
23875
  description: ""
23594
23876
  }
23595
23877
  ],
23596
- version: "11.6.0"
23878
+ version: "11.7.0"
23597
23879
  },
23598
23880
  {
23599
23881
  id: "snackbar",
@@ -23648,7 +23930,7 @@ placeholder="Name or address\u2026"
23648
23930
  description: ""
23649
23931
  }
23650
23932
  ],
23651
- version: "11.6.0"
23933
+ version: "11.7.0"
23652
23934
  },
23653
23935
  {
23654
23936
  id: "confirmation",
@@ -23697,7 +23979,7 @@ placeholder="Name or address\u2026"
23697
23979
  description: ""
23698
23980
  }
23699
23981
  ],
23700
- version: "11.6.0"
23982
+ version: "11.7.0"
23701
23983
  },
23702
23984
  {
23703
23985
  id: "notification-service",
@@ -23764,7 +24046,7 @@ placeholder="Name or address\u2026"
23764
24046
  description: ""
23765
24047
  }
23766
24048
  ],
23767
- version: "11.6.0"
24049
+ version: "11.7.0"
23768
24050
  },
23769
24051
  {
23770
24052
  id: "option",
@@ -23801,7 +24083,7 @@ placeholder="Name or address\u2026"
23801
24083
  description: "Visible and announced, but not committable; listbox navigation skips it."
23802
24084
  }
23803
24085
  ],
23804
- version: "11.6.0"
24086
+ version: "11.7.0"
23805
24087
  },
23806
24088
  {
23807
24089
  id: "options",
@@ -23813,7 +24095,7 @@ placeholder="Name or address\u2026"
23813
24095
  summary: "",
23814
24096
  description: "",
23815
24097
  members: [],
23816
- version: "11.6.0"
24098
+ version: "11.7.0"
23817
24099
  },
23818
24100
  {
23819
24101
  id: "use-timer",
@@ -23825,7 +24107,7 @@ placeholder="Name or address\u2026"
23825
24107
  summary: "",
23826
24108
  description: "",
23827
24109
  members: [],
23828
- version: "11.6.0"
24110
+ version: "11.7.0"
23829
24111
  },
23830
24112
  {
23831
24113
  id: "acceptable-file",
@@ -23837,7 +24119,7 @@ placeholder="Name or address\u2026"
23837
24119
  summary: "",
23838
24120
  description: "",
23839
24121
  members: [],
23840
- version: "11.6.0"
24122
+ version: "11.7.0"
23841
24123
  },
23842
24124
  {
23843
24125
  id: "get-file-extension",
@@ -23849,7 +24131,7 @@ placeholder="Name or address\u2026"
23849
24131
  summary: "",
23850
24132
  description: "",
23851
24133
  members: [],
23852
- version: "11.6.0"
24134
+ version: "11.7.0"
23853
24135
  },
23854
24136
  {
23855
24137
  id: "query-permission",
@@ -23861,7 +24143,7 @@ placeholder="Name or address\u2026"
23861
24143
  summary: "The current state of a browser permission.",
23862
24144
  description: 'The current state of a browser permission. Resolves `unsupported` \u2014 never rejects \u2014 where the Permissions API is missing or does not know the name, which is the norm rather than the exception: Firefox and Safari reject `clipboard-write`, for one. Treat `unsupported` as "can\'t tell", not "no".',
23863
24145
  members: [],
23864
- version: "11.6.0"
24146
+ version: "11.7.0"
23865
24147
  },
23866
24148
  {
23867
24149
  id: "permission-service",
@@ -23886,7 +24168,7 @@ placeholder="Name or address\u2026"
23886
24168
  description: ""
23887
24169
  }
23888
24170
  ],
23889
- version: "11.6.0"
24171
+ version: "11.7.0"
23890
24172
  },
23891
24173
  {
23892
24174
  id: "permission",
@@ -23898,7 +24180,7 @@ placeholder="Name or address\u2026"
23898
24180
  summary: "",
23899
24181
  description: "",
23900
24182
  members: [],
23901
- version: "11.6.0"
24183
+ version: "11.7.0"
23902
24184
  },
23903
24185
  {
23904
24186
  id: "permission-state",
@@ -23910,7 +24192,7 @@ placeholder="Name or address\u2026"
23910
24192
  summary: "",
23911
24193
  description: "",
23912
24194
  members: [],
23913
- version: "11.6.0"
24195
+ version: "11.7.0"
23914
24196
  },
23915
24197
  {
23916
24198
  id: "clipboard-copy-result",
@@ -23922,7 +24204,7 @@ placeholder="Name or address\u2026"
23922
24204
  summary: "How a copy ended: - `copied` \u2014 the content is on the clipboard.",
23923
24205
  description: "How a copy ended: - `copied` \u2014 the content is on the clipboard. - `denied` \u2014 the user or a policy has blocked clipboard access for this site; only a change in the browser's site settings will fix it. - `unsupported` \u2014 no Clipboard API here (an insecure context, a server render, an old browser) or the browser cannot write one of the types. - `failed` \u2014 the browser refused this attempt for another reason, most often a call made outside a user gesture or from an unfocused document.",
23924
24206
  members: [],
23925
- version: "11.6.0"
24207
+ version: "11.7.0"
23926
24208
  },
23927
24209
  {
23928
24210
  id: "clipboard-data",
@@ -23934,7 +24216,7 @@ placeholder="Name or address\u2026"
23934
24216
  summary: "One clipboard representation; a promise lets the data arrive after the gesture.",
23935
24217
  description: "One clipboard representation; a promise lets the data arrive after the gesture.",
23936
24218
  members: [],
23937
- version: "11.6.0"
24219
+ version: "11.7.0"
23938
24220
  },
23939
24221
  {
23940
24222
  id: "clipboard-content",
@@ -23946,7 +24228,7 @@ placeholder="Name or address\u2026"
23946
24228
  summary: "What to copy: a plain string, or one item in several representations keyed by MIME type \u2014 `{ 'text/plain': \u2026, 'text/html': \u2026 }`, `{ 'image/png': blob }`.",
23947
24229
  description: "What to copy: a plain string, or one item in several representations keyed by MIME type \u2014 `{ 'text/plain': \u2026, 'text/html': \u2026 }`, `{ 'image/png': blob }`.",
23948
24230
  members: [],
23949
- version: "11.6.0"
24231
+ version: "11.7.0"
23950
24232
  },
23951
24233
  {
23952
24234
  id: "copy-to-clipboard",
@@ -23958,7 +24240,7 @@ placeholder="Name or address\u2026"
23958
24240
  summary: "Copies text or rich content with the Async Clipboard API.",
23959
24241
  description: "Copies text or rich content with the Async Clipboard API. Never rejects: the result says what happened, so a caller can tell the user why. Call it directly from the click or key handler. The write starts synchronously, before anything is awaited, because browsers only honor it inside the user gesture \u2014 which is also why the `clipboard-write` permission is consulted after a refusal, to explain it, rather than before the attempt. For content that has to be fetched or rendered first, pass a promise as the value instead of awaiting it yourself.",
23960
24242
  members: [],
23961
- version: "11.6.0"
24243
+ version: "11.7.0"
23962
24244
  }
23963
24245
  ],
23964
24246
  utilityDocs: [
@@ -25396,6 +25678,7 @@ var buildComponents = (c) => ({
25396
25678
  padding: "sm",
25397
25679
  bodyPadding: void 0,
25398
25680
  inset: "lg",
25681
+ overscroll: "contain",
25399
25682
  elevation: "dialog",
25400
25683
  backdrop: "scrim",
25401
25684
  motion: "panel"
@@ -25496,7 +25779,12 @@ var buildComponents = (c) => ({
25496
25779
  tooltipCloseDelay: 150,
25497
25780
  motion: "panel"
25498
25781
  } },
25499
- expand: { options: { motion: "reveal" } },
25782
+ expand: { options: {
25783
+ motion: "reveal",
25784
+ textRole: "label",
25785
+ sublabelRole: "caption",
25786
+ sublabelColor: "on-background-variant"
25787
+ } },
25500
25788
  input: { options: {
25501
25789
  typeface: "input",
25502
25790
  color: "primary-surface",
@@ -25686,7 +25974,8 @@ var buildComponents = (c) => ({
25686
25974
  avatarVariant: "primary",
25687
25975
  nameTypeface: "body-2-short",
25688
25976
  detailTypeface: "caption",
25689
- rowGap: "sm"
25977
+ rowGap: "sm",
25978
+ chipAvatar: true
25690
25979
  } },
25691
25980
  calendar: {
25692
25981
  options: {
@@ -26013,6 +26302,7 @@ var buildComponents = (c) => ({
26013
26302
  thVerticalBorder: "dotted",
26014
26303
  thHorizontalBorder: "light",
26015
26304
  thPadding: "sm",
26305
+ sortIcon: "arrowUp",
26016
26306
  tdTextRole: "title-small",
26017
26307
  tdColor: "primary-surface",
26018
26308
  tdStickyColor: "primary-container",
@@ -26024,10 +26314,18 @@ var buildComponents = (c) => ({
26024
26314
  loadingSpinnerColor: "primary",
26025
26315
  loadingSpinnerSize: 40
26026
26316
  } },
26027
- notificationBadge: { options: {
26028
- borderRadius: "sm",
26029
- offset: -10
26030
- } },
26317
+ notificationBadge: {
26318
+ options: {
26319
+ borderRadius: "sm",
26320
+ offset: -10,
26321
+ typeface: "overline"
26322
+ },
26323
+ sizes: {
26324
+ sm: { height: 14 },
26325
+ md: { height: 16 },
26326
+ lg: { height: 20 }
26327
+ }
26328
+ },
26031
26329
  paginator: { options: {
26032
26330
  gap: "xs",
26033
26331
  textRole: "label",
@@ -27582,4 +27880,4 @@ export {
27582
27880
  buildStoredTheme,
27583
27881
  createUniServer
27584
27882
  };
27585
- //# sourceMappingURL=chunk-INTB6KJ7.js.map
27883
+ //# sourceMappingURL=chunk-Y6SCKJEM.js.map