@uni-design-system/uni-mcp 11.7.0 → 11.8.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.7.0",
11
- builtAt: "2026-10-22T04:29:01.107Z",
10
+ version: "11.8.0",
11
+ builtAt: "2026-10-22T14:39:12.220Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 88,
17
- tokens: 511,
16
+ components: 89,
17
+ tokens: 512,
18
18
  themes: 2,
19
- examples: 256,
19
+ examples: 261,
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.7.0",
31
+ version: "11.8.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.7.0",
121
+ version: "11.8.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.7.0",
194
+ version: "11.8.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.7.0",
289
+ version: "11.8.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.7.0",
338
+ version: "11.8.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.7.0",
419
+ version: "11.8.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.7.0",
516
+ version: "11.8.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.7.0",
540
+ version: "11.8.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.7.0",
948
+ version: "11.8.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.7.0",
1033
+ version: "11.8.0",
1034
1034
  bindings: {
1035
1035
  angular: {
1036
1036
  importPath: "@uni-design-system/uni-angular",
@@ -1198,7 +1198,7 @@ var uni_index_default = {
1198
1198
  summary: "",
1199
1199
  description: "",
1200
1200
  category: "primitives",
1201
- version: "11.7.0",
1201
+ version: "11.8.0",
1202
1202
  bindings: {
1203
1203
  angular: {
1204
1204
  importPath: "@uni-design-system/uni-angular",
@@ -1230,7 +1230,7 @@ var uni_index_default = {
1230
1230
  summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
1231
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.",
1232
1232
  category: "forms",
1233
- version: "11.7.0",
1233
+ version: "11.8.0",
1234
1234
  bindings: {
1235
1235
  angular: {
1236
1236
  importPath: "@uni-design-system/uni-angular",
@@ -1471,7 +1471,7 @@ var uni_index_default = {
1471
1471
  summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
1472
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).',
1473
1473
  category: "components",
1474
- version: "11.7.0",
1474
+ version: "11.8.0",
1475
1475
  bindings: {
1476
1476
  angular: {
1477
1477
  importPath: "@uni-design-system/uni-angular",
@@ -1691,7 +1691,7 @@ var uni_index_default = {
1691
1691
  summary: "",
1692
1692
  description: "",
1693
1693
  category: "layout",
1694
- version: "11.7.0",
1694
+ version: "11.8.0",
1695
1695
  bindings: {
1696
1696
  angular: {
1697
1697
  importPath: "@uni-design-system/uni-angular",
@@ -1753,7 +1753,7 @@ var uni_index_default = {
1753
1753
  summary: "",
1754
1754
  description: "",
1755
1755
  category: "layout",
1756
- version: "11.7.0",
1756
+ version: "11.8.0",
1757
1757
  bindings: {
1758
1758
  angular: {
1759
1759
  importPath: "@uni-design-system/uni-angular",
@@ -1794,7 +1794,7 @@ var uni_index_default = {
1794
1794
  summary: "",
1795
1795
  description: "",
1796
1796
  category: "layout",
1797
- version: "11.7.0",
1797
+ version: "11.8.0",
1798
1798
  bindings: {
1799
1799
  angular: {
1800
1800
  importPath: "@uni-design-system/uni-angular",
@@ -1851,7 +1851,7 @@ var uni_index_default = {
1851
1851
  summary: "",
1852
1852
  description: "",
1853
1853
  category: "layout",
1854
- version: "11.7.0",
1854
+ version: "11.8.0",
1855
1855
  bindings: {
1856
1856
  angular: {
1857
1857
  importPath: "@uni-design-system/uni-angular",
@@ -1906,7 +1906,7 @@ var uni_index_default = {
1906
1906
  summary: "",
1907
1907
  description: "",
1908
1908
  category: "forms",
1909
- version: "11.7.0",
1909
+ version: "11.8.0",
1910
1910
  bindings: {
1911
1911
  angular: {
1912
1912
  importPath: "@uni-design-system/uni-angular",
@@ -2128,7 +2128,7 @@ var uni_index_default = {
2128
2128
  summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
2129
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.",
2130
2130
  category: "forms",
2131
- version: "11.7.0",
2131
+ version: "11.8.0",
2132
2132
  bindings: {
2133
2133
  angular: {
2134
2134
  importPath: "@uni-design-system/uni-angular",
@@ -2430,7 +2430,7 @@ emptyText="No countries found"
2430
2430
  summary: "",
2431
2431
  description: "",
2432
2432
  category: "feedback",
2433
- version: "11.7.0",
2433
+ version: "11.8.0",
2434
2434
  bindings: {
2435
2435
  angular: {
2436
2436
  importPath: "@uni-design-system/uni-angular",
@@ -2477,7 +2477,7 @@ emptyText="No countries found"
2477
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).",
2478
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.",
2479
2479
  category: "forms",
2480
- version: "11.7.0",
2480
+ version: "11.8.0",
2481
2481
  bindings: {
2482
2482
  angular: {
2483
2483
  importPath: "@uni-design-system/uni-angular",
@@ -2762,7 +2762,7 @@ emptyText="No countries found"
2762
2762
  summary: "",
2763
2763
  description: "",
2764
2764
  category: "forms",
2765
- version: "11.7.0",
2765
+ version: "11.8.0",
2766
2766
  bindings: {
2767
2767
  angular: {
2768
2768
  importPath: "@uni-design-system/uni-angular",
@@ -2861,7 +2861,7 @@ emptyText="No countries found"
2861
2861
  summary: "",
2862
2862
  description: "",
2863
2863
  category: "data",
2864
- version: "11.7.0",
2864
+ version: "11.8.0",
2865
2865
  bindings: {
2866
2866
  angular: {
2867
2867
  importPath: "@uni-design-system/uni-angular",
@@ -3118,7 +3118,7 @@ emptyText="No countries found"
3118
3118
  summary: "Date field with free-typed parsing and a popup calendar.",
3119
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.",
3120
3120
  category: "forms",
3121
- version: "11.7.0",
3121
+ version: "11.8.0",
3122
3122
  bindings: {
3123
3123
  angular: {
3124
3124
  importPath: "@uni-design-system/uni-angular",
@@ -3349,7 +3349,7 @@ emptyText="No countries found"
3349
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.",
3350
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.",
3351
3351
  category: "forms",
3352
- version: "11.7.0",
3352
+ version: "11.8.0",
3353
3353
  bindings: {
3354
3354
  angular: {
3355
3355
  importPath: "@uni-design-system/uni-angular",
@@ -3542,7 +3542,7 @@ emptyText="No countries found"
3542
3542
  summary: "Text input that emits `change` only after the user pauses typing.",
3543
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.",
3544
3544
  category: "forms",
3545
- version: "11.7.0",
3545
+ version: "11.8.0",
3546
3546
  bindings: {
3547
3547
  angular: {
3548
3548
  importPath: "@uni-design-system/uni-angular",
@@ -3690,7 +3690,7 @@ emptyText="No countries found"
3690
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]`.",
3691
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.",
3692
3692
  category: "feedback",
3693
- version: "11.7.0",
3693
+ version: "11.8.0",
3694
3694
  bindings: {
3695
3695
  angular: {
3696
3696
  importPath: "@uni-design-system/uni-angular",
@@ -3813,6 +3813,21 @@ uni-dialog
3813
3813
  </div>
3814
3814
  <footer dialog-buttons confirmButtonText="Save" cancelButtonText="Cancel"></footer>
3815
3815
  </dialog>`
3816
+ },
3817
+ {
3818
+ title: "Rich Head",
3819
+ framework: "angular",
3820
+ code: '<!-- Storybook story: Rich Head -->\n<button text-button variant="primary" (click)="show = true">Open dialog</button>\n<dialog uni-dialog [(show)]="show">\n<header dialog-header rich>\n <span uni-text="label" display="block" color="on-surface-variant">Custom work</span>\n <h2 uni-text="headline-small" dialog-title>Add custom work</h2>\n <span uni-text="body-2-long" display="block" color="on-surface-variant">\n Describe the piece, who it is for, and when it is needed.\n </span>\n</header>\n<div stack-layout gap="md" padding="md" [width]="420">\n <uni-input label="Piece" placeholder="What is being made" />\n <uni-input label="Client" placeholder="Who it is for" />\n</div>\n<footer dialog-buttons confirmButtonText="Add" cancelButtonText="Cancel"></footer>\n</dialog>'
3821
+ },
3822
+ {
3823
+ title: "Custom Footer",
3824
+ framework: "angular",
3825
+ code: '<!-- Storybook story: Custom Footer -->\n<button text-button variant="primary" (click)="show = true">Open dialog</button>\n<dialog uni-dialog [(show)]="show" #dialog>\n<header dialog-header>Confirm purchase order</header>\n<div box-layout padding="md" [width]="420">\n <span uni-text="body-1-long">Three line items, one vendor, delivery in two weeks.</span>\n</div>\n<footer dialog-buttons [closeOnConfirm]="false" [loading]="saving" (confirmed)="save(dialog)">\n <span dialog-footnote uni-text="caption" color="on-surface-variant">The order opens for your review.</span>\n</footer>\n</dialog>'
3826
+ },
3827
+ {
3828
+ title: "Projected Actions",
3829
+ framework: "angular",
3830
+ code: '<!-- Storybook story: Projected Actions -->\n<button text-button variant="primary" (click)="show = true">Open dialog</button>\n<dialog uni-dialog [(show)]="show" #dialog>\n<header dialog-header>Unsaved changes</header>\n<div box-layout padding="md" [width]="420">\n <span uni-text="body-1-long">Keep the draft, use the saved version, or discard both?</span>\n</div>\n<footer dialog-buttons justifyContent="flex-end">\n <button text-button variant="warn" (click)="dialog.close()">Discard</button>\n <button text-button variant="secondary" (click)="dialog.close()">Use saved</button>\n <button text-button variant="primary" (click)="dialog.close()">Keep draft</button>\n</footer>\n</dialog>'
3816
3831
  }
3817
3832
  ],
3818
3833
  guidelines: {
@@ -3822,7 +3837,8 @@ uni-dialog
3822
3837
  accessibility: [
3823
3838
  "Focus trapping and keyboard navigation (Tab, Escape, Enter)",
3824
3839
  "Screen reader announcements",
3825
- "Semantic dialog roles"
3840
+ "Semantic dialog roles",
3841
+ "A `[dialog-header]` labels the dialog; in a `rich` head, mark the headline"
3826
3842
  ]
3827
3843
  },
3828
3844
  relatedTokens: [
@@ -3841,10 +3857,10 @@ uni-dialog
3841
3857
  id: "dialog-buttons",
3842
3858
  name: "DialogButtons",
3843
3859
  status: "stable",
3844
- summary: "",
3845
- description: "",
3860
+ summary: "The dialog's pinned footer action row.",
3861
+ description: "The dialog's pinned footer action row. Empty, it renders a Confirm/Cancel pair wired to the dialog. Project your own buttons and they replace the pair while keeping the row's chrome \u2014 padding, gap, justification, divider, `stretch` and `reverseOrder`. A `[dialog-footnote]` projects on the leading edge, pushing the actions to the trailing one.",
3846
3862
  category: "feedback",
3847
- version: "11.7.0",
3863
+ version: "11.8.0",
3848
3864
  bindings: {
3849
3865
  angular: {
3850
3866
  importPath: "@uni-design-system/uni-angular",
@@ -3885,6 +3901,22 @@ uni-dialog
3885
3901
  required: false,
3886
3902
  description: ""
3887
3903
  },
3904
+ {
3905
+ name: "closeOnConfirm",
3906
+ kind: "input",
3907
+ type: "unknown",
3908
+ required: false,
3909
+ default: "true, { transform: booleanAttribute }",
3910
+ description: "Whether Confirm closes the dialog as it emits `confirmed`. On by default. Off, the caller closes when its save resolves \u2014 a dialog that confirms asynchronously stays open with its error when the save fails."
3911
+ },
3912
+ {
3913
+ name: "loading",
3914
+ kind: "input",
3915
+ type: "unknown",
3916
+ required: false,
3917
+ default: "false, { transform: booleanAttribute }",
3918
+ description: "Passed to the Confirm button: a spinner, and no second click."
3919
+ },
3888
3920
  {
3889
3921
  name: "padding",
3890
3922
  kind: "input",
@@ -3945,15 +3977,23 @@ uni-dialog
3945
3977
  id: "dialog-header",
3946
3978
  name: "DialogHeader",
3947
3979
  status: "stable",
3948
- summary: "",
3949
- description: "",
3980
+ summary: "The dialog's pinned header row, in one of two shapes: - **Title bar** (default): one line of text, set in the theme's `textRole` and aligned by `textAlign`, beside a close button.",
3981
+ description: "The dialog's pinned header row, in one of two shapes: - **Title bar** (default): one line of text, set in the theme's `textRole` and aligned by `textAlign`, beside a close button. - **Rich** (`rich`): the projection is rendered as a block \u2014 an eyebrow, a headline, a blurb \u2014 beside the close button, in its own `richColor` and `richPadding`. Mark the headline `[dialog-title]` so it alone names the dialog.",
3950
3982
  category: "feedback",
3951
- version: "11.7.0",
3983
+ version: "11.8.0",
3952
3984
  bindings: {
3953
3985
  angular: {
3954
3986
  importPath: "@uni-design-system/uni-angular",
3955
3987
  selectorOrTag: "[uni-dialog-header], [dialog-header]",
3956
3988
  api: [
3989
+ {
3990
+ name: "rich",
3991
+ kind: "input",
3992
+ type: "unknown",
3993
+ required: false,
3994
+ default: "false, { transform: booleanAttribute }",
3995
+ description: "Render the projection as a block rather than one line of text. A sheet's head \u2014 eyebrow, headline, blurb \u2014 has nowhere to go in a title bar."
3996
+ },
3957
3997
  {
3958
3998
  name: "variant",
3959
3999
  kind: "input",
@@ -3982,6 +4022,30 @@ uni-dialog
3982
4022
  },
3983
4023
  relatedTokens: []
3984
4024
  },
4025
+ {
4026
+ id: "dialog-title",
4027
+ name: "DialogTitle",
4028
+ status: "stable",
4029
+ summary: "Marks the element that names the dialog inside a rich `[dialog-header]`.",
4030
+ description: "Marks the element that names the dialog inside a rich `[dialog-header]`. A rich head projects an eyebrow, a headline and a blurb; the dialog should be labelled by the headline alone, not read all three as its name. Put this on the headline and it carries the id the dialog's `aria-labelledby` points at. Without one, the whole projected block is the label.",
4031
+ category: "feedback",
4032
+ version: "11.8.0",
4033
+ bindings: {
4034
+ angular: {
4035
+ importPath: "@uni-design-system/uni-angular",
4036
+ selectorOrTag: "[uni-dialog-title], [dialog-title]",
4037
+ api: []
4038
+ }
4039
+ },
4040
+ examples: [],
4041
+ guidelines: {
4042
+ whenToUse: "",
4043
+ dos: [],
4044
+ donts: [],
4045
+ accessibility: []
4046
+ },
4047
+ relatedTokens: []
4048
+ },
3985
4049
  {
3986
4050
  id: "divider",
3987
4051
  name: "Divider",
@@ -3989,7 +4053,7 @@ uni-dialog
3989
4053
  summary: "",
3990
4054
  description: "",
3991
4055
  category: "layout",
3992
- version: "11.7.0",
4056
+ version: "11.8.0",
3993
4057
  bindings: {
3994
4058
  angular: {
3995
4059
  importPath: "@uni-design-system/uni-angular",
@@ -4045,7 +4109,7 @@ uni-dialog
4045
4109
  summary: "",
4046
4110
  description: "",
4047
4111
  category: "directives",
4048
- version: "11.7.0",
4112
+ version: "11.8.0",
4049
4113
  bindings: {
4050
4114
  angular: {
4051
4115
  importPath: "@uni-design-system/uni-angular",
@@ -4075,9 +4139,9 @@ uni-dialog
4075
4139
  name: "Drawer",
4076
4140
  status: "stable",
4077
4141
  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.",
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.",
4142
+ 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. With `modal` off it is shown as a `popover="manual"` instead: still the top layer, but no focus trap, no inert page and no backdrop \u2014 a workbench beside a live document. **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.',
4079
4143
  category: "components",
4080
- version: "11.7.0",
4144
+ version: "11.8.0",
4081
4145
  bindings: {
4082
4146
  angular: {
4083
4147
  importPath: "@uni-design-system/uni-angular",
@@ -4107,6 +4171,22 @@ uni-dialog
4107
4171
  default: "'start'",
4108
4172
  description: ""
4109
4173
  },
4174
+ {
4175
+ name: "modal",
4176
+ kind: "input",
4177
+ type: "unknown",
4178
+ required: false,
4179
+ default: "true, { transform: booleanAttribute }",
4180
+ description: 'Whether `over` mode is modal. On by default: `showModal()`, a focus trap, an inert page and a scrim. Off, the panel is a `popover="manual"` \u2014 in the top layer, so nothing can clip or cover it, but the page behind stays live: a settings panel beside the canvas it changes. Escape still asks to close through `closeRequest`; `scrim` has no backdrop to paint and is ignored; see `closeOnOutsideClick` for clicks beyond the panel.'
4181
+ },
4182
+ {
4183
+ name: "closeOnOutsideClick",
4184
+ kind: "input",
4185
+ type: "unknown",
4186
+ required: false,
4187
+ default: "false, { transform: booleanAttribute }",
4188
+ description: "Non-modal only: ask to close (`reason: 'outside'`) on a click beyond the panel. Off by default \u2014 for a workbench the canvas *is* the outside."
4189
+ },
4110
4190
  {
4111
4191
  name: "ariaLabel",
4112
4192
  kind: "input",
@@ -4235,10 +4315,32 @@ initialFocus="input"
4235
4315
  title: "Overlay",
4236
4316
  framework: "angular",
4237
4317
  code: '<!-- Storybook story: Overlay -->\n<button text-button variant="primary" size="md" (click)="open = true">Open drawer</button>\n<uni-drawer mode="over" position="start" [(open)]="open" ariaLabel="Main navigation">\n<span uni-text="title-small" display="block">Dashboard</span>\n<span uni-text="title-small" display="block">Reports</span>\n<span uni-text="title-small" display="block">Settings</span>\n<button text-button variant="secondary" size="sm" (click)="open = false">Close</button>\n</uni-drawer>'
4318
+ },
4319
+ {
4320
+ title: "Non Modal",
4321
+ framework: "angular",
4322
+ code: '<!-- Storybook story: Non Modal -->\n<div box-layout padding="md">\n<h2 uni-text="headline-small">Presentation preview</h2>\n<span uni-text="body-1-long" display="block">\n Change a setting in the panel and judge the result here, without closing it.\n</span>\n<div row-layout gap="sm" alignItems="center">\n <button text-button variant="secondary" size="md" (click)="clicks = clicks + 1">\n Still clickable\n </button>\n <span uni-text="body-2">Clicked {{ clicks }} times</span>\n</div>\n<button text-button variant="primary" size="md" (click)="open = true">Open settings</button>\n</div>\n<uni-drawer\nmode="over"\nposition="end"\n[modal]="false"\n[width]="360"\nheadline="Settings"\ninitialFocus="input"\n[(open)]="open"\n>\n<div stack-layout gap="md">\n <uni-input label="Cover title" placeholder="Spring collection" />\n <uni-input label="Subtitle" placeholder="For the Hartley residence" />\n</div>\n<div drawer-buttons confirmButtonText="Apply"></div>\n</uni-drawer>'
4323
+ },
4324
+ {
4325
+ title: "Custom Footer",
4326
+ framework: "angular",
4327
+ code: `<!-- Storybook story: Custom Footer -->
4328
+ <button text-button variant="primary" size="md" (click)="open = true">Edit quote</button>
4329
+ <uni-drawer mode="over" position="end" [width]="480" headline="Edit quote" [(open)]="open" #drawer>
4330
+ <div stack-layout gap="md">
4331
+ <uni-input label="Line" placeholder="Describe the line" />
4332
+ <uni-number-input label="Unit price" [value]="24.5" />
4333
+ </div>
4334
+ <div drawer-buttons>
4335
+ <span drawer-footnote uni-text="label">Total 1,204.00 USD</span>
4336
+ <button text-button variant="warn" size="md" (click)="drawer.requestClose('close-button')">Discard</button>
4337
+ <button text-button variant="primary" size="md" (click)="open = false">Save</button>
4338
+ </div>
4339
+ </uni-drawer>`
4238
4340
  }
4239
4341
  ],
4240
4342
  guidelines: {
4241
- whenToUse: "A panel attached to an edge of the page, in one of two modes:\n- **`side`** renders an in-flow `<aside>` that pushes page content \u2014 the classic\n dashboard sidenav. Opening and closing animates its width; a divider border primitive\n separates it from the content, and it is hidden from assistive tech while closed.\n- **`over`** renders a native `<dialog>` in the top layer: focus trapping, Escape, and\n the scrim backdrop come from the platform, and the panel slides in from its edge\n (`position`: `start` or `end`).\n`[(open)]` is two-way; Escape and backdrop clicks keep it in sync.",
4343
+ whenToUse: 'A panel attached to an edge of the page, in one of two modes:\n- **`side`** renders an in-flow `<aside>` that pushes page content \u2014 the classic\n dashboard sidenav. Opening and closing animates its width; a divider border primitive\n separates it from the content, and it is hidden from assistive tech while closed.\n- **`over`** renders a native `<dialog>` in the top layer: focus trapping, Escape, and\n the scrim backdrop come from the platform, and the panel slides in from its edge\n (`position`: `start` or `end`). With `modal` off it is a `popover="manual"`\n instead \u2014 still the top layer, but the page behind stays live.\n`[(open)]` is two-way; Escape and backdrop clicks keep it in sync.',
4242
4344
  dos: [],
4243
4345
  donts: [],
4244
4346
  accessibility: [
@@ -4246,6 +4348,7 @@ initialFocus="input"
4246
4348
  'A drawer with a header is labelled by that header\'s title via `aria-labelledby`. Without one, give it an `ariaLabel`. There is deliberately no default: a panel that inherited the name "Navigation" would announce itself as something it is not, and a wrong accessible name is worse than a missing one.',
4247
4349
  "`initialFocus` matters more here than in a dialog. The platform focuses the first focusable element, which in a panel with a header is the close button; point it at the first field instead.",
4248
4350
  "`scrim: false` keeps the drawer modal \u2014 focus is still trapped, the page behind is still inert \u2014 while leaving the backdrop transparent. Do not read a missing scrim as a non-modal drawer.",
4351
+ '`modal: false` is the non-modal drawer: a `popover="manual"` `<dialog>` with no `aria-modal`, no focus trap and a live page behind it. Escape asks to close only while focus is inside the panel; nothing else dismisses it unless `closeOnOutsideClick` is set.',
4249
4352
  "A closed side drawer is `aria-hidden`, so its links leave the accessibility tree."
4250
4353
  ]
4251
4354
  },
@@ -4266,9 +4369,9 @@ initialFocus="input"
4266
4369
  name: "DrawerButtons",
4267
4370
  status: "stable",
4268
4371
  summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
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.",
4372
+ 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. Empty, it renders a Cancel/Save pair wired to the drawer. Project your own buttons and they replace the pair while keeping the row's chrome; a `[drawer-footnote]` projects on the leading edge.",
4270
4373
  category: "primitives",
4271
- version: "11.7.0",
4374
+ version: "11.8.0",
4272
4375
  bindings: {
4273
4376
  angular: {
4274
4377
  importPath: "@uni-design-system/uni-angular",
@@ -4309,6 +4412,14 @@ initialFocus="input"
4309
4412
  required: false,
4310
4413
  description: ""
4311
4414
  },
4415
+ {
4416
+ name: "loading",
4417
+ kind: "input",
4418
+ type: "unknown",
4419
+ required: false,
4420
+ default: "false, { transform: booleanAttribute }",
4421
+ description: "Passed to the Save button: a spinner, and no second click."
4422
+ },
4312
4423
  {
4313
4424
  name: "padding",
4314
4425
  kind: "input",
@@ -4365,7 +4476,7 @@ initialFocus="input"
4365
4476
  summary: "The drawer's pinned header row: a title, and optionally a close button.",
4366
4477
  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.",
4367
4478
  category: "components",
4368
- version: "11.7.0",
4479
+ version: "11.8.0",
4369
4480
  bindings: {
4370
4481
  angular: {
4371
4482
  importPath: "@uni-design-system/uni-angular",
@@ -4413,7 +4524,7 @@ initialFocus="input"
4413
4524
  summary: "",
4414
4525
  description: "",
4415
4526
  category: "components",
4416
- version: "11.7.0",
4527
+ version: "11.8.0",
4417
4528
  bindings: {
4418
4529
  angular: {
4419
4530
  importPath: "@uni-design-system/uni-angular",
@@ -4547,7 +4658,7 @@ initialFocus="input"
4547
4658
  summary: "",
4548
4659
  description: "",
4549
4660
  category: "layout",
4550
- version: "11.7.0",
4661
+ version: "11.8.0",
4551
4662
  bindings: {
4552
4663
  angular: {
4553
4664
  importPath: "@uni-design-system/uni-angular",
@@ -4654,7 +4765,7 @@ initialFocus="input"
4654
4765
  summary: "",
4655
4766
  description: "",
4656
4767
  category: "layout",
4657
- version: "11.7.0",
4768
+ version: "11.8.0",
4658
4769
  bindings: {
4659
4770
  angular: {
4660
4771
  importPath: "@uni-design-system/uni-angular",
@@ -4725,7 +4836,7 @@ initialFocus="input"
4725
4836
  summary: "Trigger for a {@link UniExpandComponent} region.",
4726
4837
  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.",
4727
4838
  category: "layout",
4728
- version: "11.7.0",
4839
+ version: "11.8.0",
4729
4840
  bindings: {
4730
4841
  angular: {
4731
4842
  importPath: "@uni-design-system/uni-angular",
@@ -4810,7 +4921,7 @@ initialFocus="input"
4810
4921
  summary: "",
4811
4922
  description: "",
4812
4923
  category: "forms",
4813
- version: "11.7.0",
4924
+ version: "11.8.0",
4814
4925
  bindings: {
4815
4926
  angular: {
4816
4927
  importPath: "@uni-design-system/uni-angular",
@@ -4968,7 +5079,7 @@ initialFocus="input"
4968
5079
  summary: "",
4969
5080
  description: "",
4970
5081
  category: "layout",
4971
- version: "11.7.0",
5082
+ version: "11.8.0",
4972
5083
  bindings: {
4973
5084
  angular: {
4974
5085
  importPath: "@uni-design-system/uni-angular",
@@ -5065,7 +5176,7 @@ initialFocus="input"
5065
5176
  summary: "",
5066
5177
  description: "",
5067
5178
  category: "layout",
5068
- version: "11.7.0",
5179
+ version: "11.8.0",
5069
5180
  bindings: {
5070
5181
  angular: {
5071
5182
  importPath: "@uni-design-system/uni-angular",
@@ -5097,7 +5208,7 @@ initialFocus="input"
5097
5208
  summary: "",
5098
5209
  description: "",
5099
5210
  category: "primitives",
5100
- version: "11.7.0",
5211
+ version: "11.8.0",
5101
5212
  bindings: {
5102
5213
  angular: {
5103
5214
  importPath: "@uni-design-system/uni-angular",
@@ -5157,7 +5268,7 @@ initialFocus="input"
5157
5268
  summary: "",
5158
5269
  description: "",
5159
5270
  category: "primitives",
5160
- version: "11.7.0",
5271
+ version: "11.8.0",
5161
5272
  bindings: {
5162
5273
  angular: {
5163
5274
  importPath: "@uni-design-system/uni-angular",
@@ -5270,7 +5381,7 @@ initialFocus="input"
5270
5381
  summary: "A button that lives inside a sentence.",
5271
5382
  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.",
5272
5383
  category: "primitives",
5273
- version: "11.7.0",
5384
+ version: "11.8.0",
5274
5385
  bindings: {
5275
5386
  angular: {
5276
5387
  importPath: "@uni-design-system/uni-angular",
@@ -5385,7 +5496,7 @@ initialFocus="input"
5385
5496
  summary: "",
5386
5497
  description: "",
5387
5498
  category: "forms",
5388
- version: "11.7.0",
5499
+ version: "11.8.0",
5389
5500
  bindings: {
5390
5501
  angular: {
5391
5502
  importPath: "@uni-design-system/uni-angular",
@@ -5685,7 +5796,7 @@ initialFocus="input"
5685
5796
  summary: "",
5686
5797
  description: "",
5687
5798
  category: "forms",
5688
- version: "11.7.0",
5799
+ version: "11.8.0",
5689
5800
  bindings: {
5690
5801
  angular: {
5691
5802
  importPath: "@uni-design-system/uni-angular",
@@ -5814,7 +5925,7 @@ initialFocus="input"
5814
5925
  summary: "",
5815
5926
  description: "",
5816
5927
  category: "components",
5817
- version: "11.7.0",
5928
+ version: "11.8.0",
5818
5929
  bindings: {
5819
5930
  angular: {
5820
5931
  importPath: "@uni-design-system/uni-angular",
@@ -5884,7 +5995,7 @@ initialFocus="input"
5884
5995
  summary: "",
5885
5996
  description: "",
5886
5997
  category: "layout",
5887
- version: "11.7.0",
5998
+ version: "11.8.0",
5888
5999
  bindings: {
5889
6000
  angular: {
5890
6001
  importPath: "@uni-design-system/uni-angular",
@@ -5988,7 +6099,7 @@ initialFocus="input"
5988
6099
  summary: "",
5989
6100
  description: "",
5990
6101
  category: "layout",
5991
- version: "11.7.0",
6102
+ version: "11.8.0",
5992
6103
  bindings: {
5993
6104
  angular: {
5994
6105
  importPath: "@uni-design-system/uni-angular",
@@ -6070,7 +6181,7 @@ initialFocus="input"
6070
6181
  summary: "",
6071
6182
  description: "",
6072
6183
  category: "forms",
6073
- version: "11.7.0",
6184
+ version: "11.8.0",
6074
6185
  bindings: {
6075
6186
  angular: {
6076
6187
  importPath: "@uni-design-system/uni-angular",
@@ -6164,7 +6275,7 @@ initialFocus="input"
6164
6275
  summary: "",
6165
6276
  description: "",
6166
6277
  category: "forms",
6167
- version: "11.7.0",
6278
+ version: "11.8.0",
6168
6279
  bindings: {
6169
6280
  angular: {
6170
6281
  importPath: "@uni-design-system/uni-angular",
@@ -6343,7 +6454,7 @@ initialFocus="input"
6343
6454
  summary: "",
6344
6455
  description: "",
6345
6456
  category: "feedback",
6346
- version: "11.7.0",
6457
+ version: "11.8.0",
6347
6458
  bindings: {
6348
6459
  angular: {
6349
6460
  importPath: "@uni-design-system/uni-angular",
@@ -6603,7 +6714,7 @@ initialFocus="input"
6603
6714
  summary: "",
6604
6715
  description: "",
6605
6716
  category: "feedback",
6606
- version: "11.7.0",
6717
+ version: "11.8.0",
6607
6718
  bindings: {
6608
6719
  angular: {
6609
6720
  importPath: "@uni-design-system/uni-angular",
@@ -6627,7 +6738,7 @@ initialFocus="input"
6627
6738
  summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
6628
6739
  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.',
6629
6740
  category: "forms",
6630
- version: "11.7.0",
6741
+ version: "11.8.0",
6631
6742
  bindings: {
6632
6743
  angular: {
6633
6744
  importPath: "@uni-design-system/uni-angular",
@@ -7061,7 +7172,7 @@ initialFocus="input"
7061
7172
  summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
7062
7173
  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.",
7063
7174
  category: "forms",
7064
- version: "11.7.0",
7175
+ version: "11.8.0",
7065
7176
  bindings: {
7066
7177
  angular: {
7067
7178
  importPath: "@uni-design-system/uni-angular",
@@ -7352,7 +7463,7 @@ initialFocus="input"
7352
7463
  summary: "",
7353
7464
  description: "",
7354
7465
  category: "data",
7355
- version: "11.7.0",
7466
+ version: "11.8.0",
7356
7467
  bindings: {
7357
7468
  angular: {
7358
7469
  importPath: "@uni-design-system/uni-angular",
@@ -7453,7 +7564,7 @@ initialFocus="input"
7453
7564
  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.",
7454
7565
  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.',
7455
7566
  category: "layout",
7456
- version: "11.7.0",
7567
+ version: "11.8.0",
7457
7568
  bindings: {
7458
7569
  angular: {
7459
7570
  importPath: "@uni-design-system/uni-angular",
@@ -7645,7 +7756,7 @@ initialFocus="input"
7645
7756
  summary: "",
7646
7757
  description: "",
7647
7758
  category: "feedback",
7648
- version: "11.7.0",
7759
+ version: "11.8.0",
7649
7760
  bindings: {
7650
7761
  angular: {
7651
7762
  importPath: "@uni-design-system/uni-angular",
@@ -7709,7 +7820,7 @@ initialFocus="input"
7709
7820
  summary: "",
7710
7821
  description: "",
7711
7822
  category: "feedback",
7712
- version: "11.7.0",
7823
+ version: "11.8.0",
7713
7824
  bindings: {
7714
7825
  angular: {
7715
7826
  importPath: "@uni-design-system/uni-angular",
@@ -7781,7 +7892,7 @@ initialFocus="input"
7781
7892
  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.",
7782
7893
  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.',
7783
7894
  category: "forms",
7784
- version: "11.7.0",
7895
+ version: "11.8.0",
7785
7896
  bindings: {
7786
7897
  angular: {
7787
7898
  importPath: "@uni-design-system/uni-angular",
@@ -7984,7 +8095,7 @@ initialFocus="input"
7984
8095
  summary: "",
7985
8096
  description: "",
7986
8097
  category: "forms",
7987
- version: "11.7.0",
8098
+ version: "11.8.0",
7988
8099
  bindings: {
7989
8100
  angular: {
7990
8101
  importPath: "@uni-design-system/uni-angular",
@@ -8213,7 +8324,7 @@ initialFocus="input"
8213
8324
  summary: "Content for each of a radio group's options, in place of the plain label string.",
8214
8325
  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> ```',
8215
8326
  category: "forms",
8216
- version: "11.7.0",
8327
+ version: "11.8.0",
8217
8328
  bindings: {
8218
8329
  angular: {
8219
8330
  importPath: "@uni-design-system/uni-angular",
@@ -8237,7 +8348,7 @@ initialFocus="input"
8237
8348
  summary: "",
8238
8349
  description: "",
8239
8350
  category: "directives",
8240
- version: "11.7.0",
8351
+ version: "11.8.0",
8241
8352
  bindings: {
8242
8353
  angular: {
8243
8354
  importPath: "@uni-design-system/uni-angular",
@@ -8261,7 +8372,7 @@ initialFocus="input"
8261
8372
  summary: "",
8262
8373
  description: "",
8263
8374
  category: "layout",
8264
- version: "11.7.0",
8375
+ version: "11.8.0",
8265
8376
  bindings: {
8266
8377
  angular: {
8267
8378
  importPath: "@uni-design-system/uni-angular",
@@ -8316,7 +8427,7 @@ initialFocus="input"
8316
8427
  summary: "Native scroll area with theme-driven scrollbar styling.",
8317
8428
  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.",
8318
8429
  category: "layout",
8319
- version: "11.7.0",
8430
+ version: "11.8.0",
8320
8431
  bindings: {
8321
8432
  angular: {
8322
8433
  importPath: "@uni-design-system/uni-angular",
@@ -8483,7 +8594,7 @@ initialFocus="input"
8483
8594
  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.",
8484
8595
  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.",
8485
8596
  category: "forms",
8486
- version: "11.7.0",
8597
+ version: "11.8.0",
8487
8598
  bindings: {
8488
8599
  angular: {
8489
8600
  importPath: "@uni-design-system/uni-angular",
@@ -8618,7 +8729,7 @@ initialFocus="input"
8618
8729
  summary: "",
8619
8730
  description: "",
8620
8731
  category: "forms",
8621
- version: "11.7.0",
8732
+ version: "11.8.0",
8622
8733
  bindings: {
8623
8734
  angular: {
8624
8735
  importPath: "@uni-design-system/uni-angular",
@@ -8790,7 +8901,7 @@ initialFocus="input"
8790
8901
  summary: "Loading placeholder painted with surface tokens.",
8791
8902
  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.",
8792
8903
  category: "components",
8793
- version: "11.7.0",
8904
+ version: "11.8.0",
8794
8905
  bindings: {
8795
8906
  angular: {
8796
8907
  importPath: "@uni-design-system/uni-angular",
@@ -8941,7 +9052,7 @@ initialFocus="input"
8941
9052
  summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
8942
9053
  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.",
8943
9054
  category: "forms",
8944
- version: "11.7.0",
9055
+ version: "11.8.0",
8945
9056
  bindings: {
8946
9057
  angular: {
8947
9058
  importPath: "@uni-design-system/uni-angular",
@@ -9218,7 +9329,7 @@ initialFocus="input"
9218
9329
  summary: "",
9219
9330
  description: "",
9220
9331
  category: "feedback",
9221
- version: "11.7.0",
9332
+ version: "11.8.0",
9222
9333
  bindings: {
9223
9334
  angular: {
9224
9335
  importPath: "@uni-design-system/uni-angular",
@@ -9330,7 +9441,7 @@ initialFocus="input"
9330
9441
  summary: "",
9331
9442
  description: "",
9332
9443
  category: "data",
9333
- version: "11.7.0",
9444
+ version: "11.8.0",
9334
9445
  bindings: {
9335
9446
  angular: {
9336
9447
  importPath: "@uni-design-system/uni-angular",
@@ -9404,7 +9515,7 @@ initialFocus="input"
9404
9515
  summary: "",
9405
9516
  description: "",
9406
9517
  category: "layout",
9407
- version: "11.7.0",
9518
+ version: "11.8.0",
9408
9519
  bindings: {
9409
9520
  angular: {
9410
9521
  importPath: "@uni-design-system/uni-angular",
@@ -9459,7 +9570,7 @@ initialFocus="input"
9459
9570
  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.',
9460
9571
  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.',
9461
9572
  category: "components",
9462
- version: "11.7.0",
9573
+ version: "11.8.0",
9463
9574
  bindings: {
9464
9575
  angular: {
9465
9576
  importPath: "@uni-design-system/uni-angular",
@@ -9577,7 +9688,7 @@ initialFocus="input"
9577
9688
  summary: "",
9578
9689
  description: "",
9579
9690
  category: "primitives",
9580
- version: "11.7.0",
9691
+ version: "11.8.0",
9581
9692
  bindings: {
9582
9693
  angular: {
9583
9694
  importPath: "@uni-design-system/uni-angular",
@@ -9666,7 +9777,7 @@ initialFocus="input"
9666
9777
  summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
9667
9778
  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.",
9668
9779
  category: "components",
9669
- version: "11.7.0",
9780
+ version: "11.8.0",
9670
9781
  bindings: {
9671
9782
  angular: {
9672
9783
  importPath: "@uni-design-system/uni-angular",
@@ -9706,7 +9817,7 @@ initialFocus="input"
9706
9817
  summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
9707
9818
  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.",
9708
9819
  category: "components",
9709
- version: "11.7.0",
9820
+ version: "11.8.0",
9710
9821
  bindings: {
9711
9822
  angular: {
9712
9823
  importPath: "@uni-design-system/uni-angular",
@@ -9794,7 +9905,7 @@ initialFocus="input"
9794
9905
  summary: "Compact chip for categories, states, filters and tokens.",
9795
9906
  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.",
9796
9907
  category: "data",
9797
- version: "11.7.0",
9908
+ version: "11.8.0",
9798
9909
  bindings: {
9799
9910
  angular: {
9800
9911
  importPath: "@uni-design-system/uni-angular",
@@ -10172,7 +10283,7 @@ initialFocus="input"
10172
10283
  summary: "A row of chips the user picks from: filters, facets, a set of labels.",
10173
10284
  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.",
10174
10285
  category: "data",
10175
- version: "11.7.0",
10286
+ version: "11.8.0",
10176
10287
  bindings: {
10177
10288
  angular: {
10178
10289
  importPath: "@uni-design-system/uni-angular",
@@ -10370,7 +10481,7 @@ initialFocus="input"
10370
10481
  summary: "",
10371
10482
  description: "",
10372
10483
  category: "forms",
10373
- version: "11.7.0",
10484
+ version: "11.8.0",
10374
10485
  bindings: {
10375
10486
  angular: {
10376
10487
  importPath: "@uni-design-system/uni-angular",
@@ -10821,7 +10932,7 @@ placeholder="Name or address\u2026"
10821
10932
  summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
10822
10933
  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.',
10823
10934
  category: "primitives",
10824
- version: "11.7.0",
10935
+ version: "11.8.0",
10825
10936
  bindings: {
10826
10937
  angular: {
10827
10938
  importPath: "@uni-design-system/uni-angular",
@@ -10931,7 +11042,7 @@ placeholder="Name or address\u2026"
10931
11042
  summary: "",
10932
11043
  description: "",
10933
11044
  category: "forms",
10934
- version: "11.7.0",
11045
+ version: "11.8.0",
10935
11046
  bindings: {
10936
11047
  angular: {
10937
11048
  importPath: "@uni-design-system/uni-angular",
@@ -11146,7 +11257,7 @@ placeholder="Name or address\u2026"
11146
11257
  summary: "",
11147
11258
  description: "",
11148
11259
  category: "primitives",
11149
- version: "11.7.0",
11260
+ version: "11.8.0",
11150
11261
  bindings: {
11151
11262
  angular: {
11152
11263
  importPath: "@uni-design-system/uni-angular",
@@ -11176,7 +11287,7 @@ placeholder="Name or address\u2026"
11176
11287
  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).",
11177
11288
  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).",
11178
11289
  category: "components",
11179
- version: "11.7.0",
11290
+ version: "11.8.0",
11180
11291
  bindings: {
11181
11292
  angular: {
11182
11293
  importPath: "@uni-design-system/uni-angular",
@@ -11234,7 +11345,7 @@ placeholder="Name or address\u2026"
11234
11345
  summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
11235
11346
  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.",
11236
11347
  category: "forms",
11237
- version: "11.7.0",
11348
+ version: "11.8.0",
11238
11349
  bindings: {
11239
11350
  angular: {
11240
11351
  importPath: "@uni-design-system/uni-angular",
@@ -11449,7 +11560,7 @@ placeholder="Name or address\u2026"
11449
11560
  summary: "",
11450
11561
  description: "",
11451
11562
  category: "forms",
11452
- version: "11.7.0",
11563
+ version: "11.8.0",
11453
11564
  bindings: {
11454
11565
  angular: {
11455
11566
  importPath: "@uni-design-system/uni-angular",
@@ -11711,7 +11822,7 @@ placeholder="Name or address\u2026"
11711
11822
  summary: "",
11712
11823
  description: "",
11713
11824
  category: "feedback",
11714
- version: "11.7.0",
11825
+ version: "11.8.0",
11715
11826
  bindings: {
11716
11827
  angular: {
11717
11828
  importPath: "@uni-design-system/uni-angular",
@@ -11799,7 +11910,7 @@ placeholder="Name or address\u2026"
11799
11910
  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).',
11800
11911
  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.',
11801
11912
  category: "components",
11802
- version: "11.7.0",
11913
+ version: "11.8.0",
11803
11914
  bindings: {
11804
11915
  angular: {
11805
11916
  importPath: "@uni-design-system/uni-angular",
@@ -11933,7 +12044,7 @@ placeholder="Name or address\u2026"
11933
12044
  summary: "",
11934
12045
  description: "",
11935
12046
  category: "layout",
11936
- version: "11.7.0",
12047
+ version: "11.8.0",
11937
12048
  bindings: {
11938
12049
  angular: {
11939
12050
  importPath: "@uni-design-system/uni-angular",
@@ -14595,6 +14706,18 @@ placeholder="Name or address\u2026"
14595
14706
  DarkTheme: "md"
14596
14707
  }
14597
14708
  },
14709
+ {
14710
+ id: "dialogHeader.behavior.richPadding",
14711
+ value: "md",
14712
+ type: "string",
14713
+ kind: "behavioral",
14714
+ target: "component-prop",
14715
+ appliesTo: "dialogHeader",
14716
+ themeValues: {
14717
+ LightTheme: "md",
14718
+ DarkTheme: "md"
14719
+ }
14720
+ },
14598
14721
  {
14599
14722
  id: "select.behavior.toggleIcon",
14600
14723
  value: "chevronDown",
@@ -18232,7 +18355,8 @@ placeholder="Name or address\u2026"
18232
18355
  textRole: "title-large",
18233
18356
  textAlign: "center",
18234
18357
  closeButtonIcon: "close",
18235
- closeButtonSize: "md"
18358
+ closeButtonSize: "md",
18359
+ richPadding: "md"
18236
18360
  },
18237
18361
  select: {
18238
18362
  toggleIcon: "chevronDown",
@@ -18865,7 +18989,8 @@ placeholder="Name or address\u2026"
18865
18989
  textRole: "title-large",
18866
18990
  textAlign: "center",
18867
18991
  closeButtonIcon: "close",
18868
- closeButtonSize: "md"
18992
+ closeButtonSize: "md",
18993
+ richPadding: "md"
18869
18994
  },
18870
18995
  select: {
18871
18996
  toggleIcon: "chevronDown",
@@ -19240,6 +19365,18 @@ placeholder="Name or address\u2026"
19240
19365
  {
19241
19366
  package: "@uni-design-system/uni-angular",
19242
19367
  releases: [
19368
+ {
19369
+ version: "11.8.0",
19370
+ entries: [
19371
+ {
19372
+ bump: "minor",
19373
+ title: "The dialog and drawer release: footers that take your own actions, a rich dialog head, and a non-modal overlay drawer.",
19374
+ body: "- **`[dialog-buttons]`, `[drawer-buttons]`**: an `<ng-content>` inside the row. Empty, each renders its pair (Confirm/Cancel, Cancel/Save) as before; project your own buttons and they replace the pair while keeping the row's chrome \u2014 padding, gap, `justifyContent`, the divider, `stretch`, `reverseOrder`. Until now importing either component silently discarded whatever a consumer projected, which is why apps carried the slot attribute _without_ the import to keep a real footer. A `[dialog-footnote]` / `[drawer-footnote]` projects on the leading edge and pushes the actions to the trailing one. `loading` puts the spinner on the confirm button; on the dialog, `closeOnConfirm` (default `true`) can be turned off so an asynchronous save closes the dialog itself \u2014 and a failed one leaves it open with its error.\n- **`[dialog-header]`**: a `rich` input renders the projection as a block beside the close button \u2014 an eyebrow, a headline, a blurb \u2014 instead of one centred line. Two `dialogHeader` theme options dress it: `richColor` (unset by default: the head is part of the sheet, not a pill on it) and `richPadding` (`md`). The new **`[dialog-title]`** directive marks the headline inside a rich head so it alone is the dialog's accessible name; without one the whole block is. The title bar is unchanged.\n- **`uni-drawer`**: `modal` (default `true`) on `over` mode. Off, the panel is shown as a `popover=\"manual\"` \u2014 still the top layer, where nothing can clip or cover it, but no focus trap, no inert page and no backdrop: a workbench beside the live document it changes, and the reason a toast's Undo stays clickable while a panel is open. Escape still asks to close through `closeRequest` (while focus is inside the panel), so `disableAutoClose` vetoes it as in modal mode; `scrim` is ignored with a dev-mode warning; and `closeOnOutsideClick` (default `false`, reason `'outside'`) opts into dismissal on a click beyond the panel. `DrawerCloseReason` gains `'outside'`.\n- **`uni-callout`** (and so `uni-tour`): every retarget re-shows the scrim and panel, so a panel opened by the previous step's click \u2014 which entered the top layer after them and covered them \u2014 ends up beneath them again, and the next step can point inside it. The panel has to be non-modal for that: a `showModal()` dialog makes everything outside it inert, which no stacking undoes. That is what `modal: false` on the drawer is for.\n\nBase theme: `dialogHeader.options.richColor` (undefined) and `richPadding` (`md`).",
19375
+ commit: "fa02607"
19376
+ }
19377
+ ],
19378
+ dependencyBumps: []
19379
+ },
19243
19380
  {
19244
19381
  version: "11.7.0",
19245
19382
  entries: [
@@ -20216,6 +20353,18 @@ placeholder="Name or address\u2026"
20216
20353
  {
20217
20354
  package: "@uni-design-system/uni-core",
20218
20355
  releases: [
20356
+ {
20357
+ version: "11.8.0",
20358
+ entries: [
20359
+ {
20360
+ bump: "minor",
20361
+ title: "The dialog and drawer release: footers that take your own actions, a rich dialog head, and a non-modal overlay drawer.",
20362
+ body: "- **`[dialog-buttons]`, `[drawer-buttons]`**: an `<ng-content>` inside the row. Empty, each renders its pair (Confirm/Cancel, Cancel/Save) as before; project your own buttons and they replace the pair while keeping the row's chrome \u2014 padding, gap, `justifyContent`, the divider, `stretch`, `reverseOrder`. Until now importing either component silently discarded whatever a consumer projected, which is why apps carried the slot attribute _without_ the import to keep a real footer. A `[dialog-footnote]` / `[drawer-footnote]` projects on the leading edge and pushes the actions to the trailing one. `loading` puts the spinner on the confirm button; on the dialog, `closeOnConfirm` (default `true`) can be turned off so an asynchronous save closes the dialog itself \u2014 and a failed one leaves it open with its error.\n- **`[dialog-header]`**: a `rich` input renders the projection as a block beside the close button \u2014 an eyebrow, a headline, a blurb \u2014 instead of one centred line. Two `dialogHeader` theme options dress it: `richColor` (unset by default: the head is part of the sheet, not a pill on it) and `richPadding` (`md`). The new **`[dialog-title]`** directive marks the headline inside a rich head so it alone is the dialog's accessible name; without one the whole block is. The title bar is unchanged.\n- **`uni-drawer`**: `modal` (default `true`) on `over` mode. Off, the panel is shown as a `popover=\"manual\"` \u2014 still the top layer, where nothing can clip or cover it, but no focus trap, no inert page and no backdrop: a workbench beside the live document it changes, and the reason a toast's Undo stays clickable while a panel is open. Escape still asks to close through `closeRequest` (while focus is inside the panel), so `disableAutoClose` vetoes it as in modal mode; `scrim` is ignored with a dev-mode warning; and `closeOnOutsideClick` (default `false`, reason `'outside'`) opts into dismissal on a click beyond the panel. `DrawerCloseReason` gains `'outside'`.\n- **`uni-callout`** (and so `uni-tour`): every retarget re-shows the scrim and panel, so a panel opened by the previous step's click \u2014 which entered the top layer after them and covered them \u2014 ends up beneath them again, and the next step can point inside it. The panel has to be non-modal for that: a `showModal()` dialog makes everything outside it inert, which no stacking undoes. That is what `modal: false` on the drawer is for.\n\nBase theme: `dialogHeader.options.richColor` (undefined) and `richPadding` (`md`).",
20363
+ commit: "fa02607"
20364
+ }
20365
+ ],
20366
+ dependencyBumps: []
20367
+ },
20219
20368
  {
20220
20369
  version: "11.7.0",
20221
20370
  entries: [
@@ -20917,6 +21066,11 @@ placeholder="Name or address\u2026"
20917
21066
  {
20918
21067
  package: "@uni-design-system/uni-react",
20919
21068
  releases: [
21069
+ {
21070
+ version: "11.8.0",
21071
+ entries: [],
21072
+ dependencyBumps: []
21073
+ },
20920
21074
  {
20921
21075
  version: "11.7.0",
20922
21076
  entries: [],
@@ -21233,6 +21387,11 @@ placeholder="Name or address\u2026"
21233
21387
  {
21234
21388
  package: "@uni-design-system/uni-mcp",
21235
21389
  releases: [
21390
+ {
21391
+ version: "11.8.0",
21392
+ entries: [],
21393
+ dependencyBumps: []
21394
+ },
21236
21395
  {
21237
21396
  version: "11.7.0",
21238
21397
  entries: [],
@@ -21507,7 +21666,7 @@ placeholder="Name or address\u2026"
21507
21666
  summary: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
21508
21667
  description: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
21509
21668
  members: [],
21510
- version: "11.7.0"
21669
+ version: "11.8.0"
21511
21670
  },
21512
21671
  {
21513
21672
  id: "focusable-selector",
@@ -21519,7 +21678,7 @@ placeholder="Name or address\u2026"
21519
21678
  summary: "Selector matching natively focusable elements.",
21520
21679
  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.",
21521
21680
  members: [],
21522
- version: "11.7.0"
21681
+ version: "11.8.0"
21523
21682
  },
21524
21683
  {
21525
21684
  id: "resolve-focus-target",
@@ -21531,7 +21690,7 @@ placeholder="Name or address\u2026"
21531
21690
  summary: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
21532
21691
  description: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
21533
21692
  members: [],
21534
- version: "11.7.0"
21693
+ version: "11.8.0"
21535
21694
  },
21536
21695
  {
21537
21696
  id: "visually-hidden",
@@ -21543,7 +21702,7 @@ placeholder="Name or address\u2026"
21543
21702
  summary: "Visually hides content while keeping it available to screen readers.",
21544
21703
  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.",
21545
21704
  members: [],
21546
- version: "11.7.0"
21705
+ version: "11.8.0"
21547
21706
  },
21548
21707
  {
21549
21708
  id: "motion-safe",
@@ -21555,7 +21714,7 @@ placeholder="Name or address\u2026"
21555
21714
  summary: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
21556
21715
  description: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
21557
21716
  members: [],
21558
- version: "11.7.0"
21717
+ version: "11.8.0"
21559
21718
  },
21560
21719
  {
21561
21720
  id: "announcer",
@@ -21580,7 +21739,7 @@ placeholder="Name or address\u2026"
21580
21739
  description: "Announce `text`, even when it repeats what was just announced."
21581
21740
  }
21582
21741
  ],
21583
- version: "11.7.0"
21742
+ version: "11.8.0"
21584
21743
  },
21585
21744
  {
21586
21745
  id: "create-announcer",
@@ -21592,7 +21751,7 @@ placeholder="Name or address\u2026"
21592
21751
  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.",
21593
21752
  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.",
21594
21753
  members: [],
21595
- version: "11.7.0"
21754
+ version: "11.8.0"
21596
21755
  },
21597
21756
  {
21598
21757
  id: "uni-date",
@@ -21604,7 +21763,7 @@ placeholder="Name or address\u2026"
21604
21763
  summary: "A calendar date, `'YYYY-MM-DD'`.",
21605
21764
  description: "A calendar date, `'YYYY-MM-DD'`.",
21606
21765
  members: [],
21607
- version: "11.7.0"
21766
+ version: "11.8.0"
21608
21767
  },
21609
21768
  {
21610
21769
  id: "uni-time",
@@ -21616,7 +21775,7 @@ placeholder="Name or address\u2026"
21616
21775
  summary: "A wall-clock time, `'HH:mm'` (24-hour).",
21617
21776
  description: "A wall-clock time, `'HH:mm'` (24-hour). Display format is separate.",
21618
21777
  members: [],
21619
- version: "11.7.0"
21778
+ version: "11.8.0"
21620
21779
  },
21621
21780
  {
21622
21781
  id: "uni-date-time",
@@ -21628,7 +21787,7 @@ placeholder="Name or address\u2026"
21628
21787
  summary: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
21629
21788
  description: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
21630
21789
  members: [],
21631
- version: "11.7.0"
21790
+ version: "11.8.0"
21632
21791
  },
21633
21792
  {
21634
21793
  id: "uni-date-range",
@@ -21653,7 +21812,7 @@ placeholder="Name or address\u2026"
21653
21812
  description: ""
21654
21813
  }
21655
21814
  ],
21656
- version: "11.7.0"
21815
+ version: "11.8.0"
21657
21816
  },
21658
21817
  {
21659
21818
  id: "iso-date",
@@ -21665,7 +21824,7 @@ placeholder="Name or address\u2026"
21665
21824
  summary: "`(2026, 8, 5)` \u2192 `'2026-08-05'`.",
21666
21825
  description: "`(2026, 8, 5)` \u2192 `'2026-08-05'`. Does not validate \u2014 see `isValidDate`.",
21667
21826
  members: [],
21668
- version: "11.7.0"
21827
+ version: "11.8.0"
21669
21828
  },
21670
21829
  {
21671
21830
  id: "is-valid-date",
@@ -21677,7 +21836,7 @@ placeholder="Name or address\u2026"
21677
21836
  summary: "The ISO date when the parts form a real calendar day, else `null`.",
21678
21837
  description: "The ISO date when the parts form a real calendar day, else `null`.",
21679
21838
  members: [],
21680
- version: "11.7.0"
21839
+ version: "11.8.0"
21681
21840
  },
21682
21841
  {
21683
21842
  id: "days-in-month",
@@ -21689,7 +21848,7 @@ placeholder="Name or address\u2026"
21689
21848
  summary: "Days in a month, leap-year aware.",
21690
21849
  description: "Days in a month, leap-year aware.",
21691
21850
  members: [],
21692
- version: "11.7.0"
21851
+ version: "11.8.0"
21693
21852
  },
21694
21853
  {
21695
21854
  id: "add-days",
@@ -21701,7 +21860,7 @@ placeholder="Name or address\u2026"
21701
21860
  summary: "",
21702
21861
  description: "",
21703
21862
  members: [],
21704
- version: "11.7.0"
21863
+ version: "11.8.0"
21705
21864
  },
21706
21865
  {
21707
21866
  id: "add-months",
@@ -21713,7 +21872,7 @@ placeholder="Name or address\u2026"
21713
21872
  summary: "Same day \xB1 n months, clamping the day to the target month's length.",
21714
21873
  description: "Same day \xB1 n months, clamping the day to the target month's length.",
21715
21874
  members: [],
21716
- version: "11.7.0"
21875
+ version: "11.8.0"
21717
21876
  },
21718
21877
  {
21719
21878
  id: "day-of-week",
@@ -21725,7 +21884,7 @@ placeholder="Name or address\u2026"
21725
21884
  summary: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
21726
21885
  description: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
21727
21886
  members: [],
21728
- version: "11.7.0"
21887
+ version: "11.8.0"
21729
21888
  },
21730
21889
  {
21731
21890
  id: "month-of",
@@ -21737,7 +21896,7 @@ placeholder="Name or address\u2026"
21737
21896
  summary: "`'2026-08-20'` \u2192 `'2026-08'`.",
21738
21897
  description: "`'2026-08-20'` \u2192 `'2026-08'`.",
21739
21898
  members: [],
21740
- version: "11.7.0"
21899
+ version: "11.8.0"
21741
21900
  },
21742
21901
  {
21743
21902
  id: "today-iso",
@@ -21749,7 +21908,7 @@ placeholder="Name or address\u2026"
21749
21908
  summary: "Today as a local-wall-clock ISO date (the one place local time matters).",
21750
21909
  description: "Today as a local-wall-clock ISO date (the one place local time matters).",
21751
21910
  members: [],
21752
- version: "11.7.0"
21911
+ version: "11.8.0"
21753
21912
  },
21754
21913
  {
21755
21914
  id: "inclusive-day-count",
@@ -21761,7 +21920,7 @@ placeholder="Name or address\u2026"
21761
21920
  summary: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
21762
21921
  description: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
21763
21922
  members: [],
21764
- version: "11.7.0"
21923
+ version: "11.8.0"
21765
21924
  },
21766
21925
  {
21767
21926
  id: "uni-month-grid-cell",
@@ -21786,7 +21945,7 @@ placeholder="Name or address\u2026"
21786
21945
  description: "True for leading/trailing cells that belong to the adjacent months."
21787
21946
  }
21788
21947
  ],
21789
- version: "11.7.0"
21948
+ version: "11.8.0"
21790
21949
  },
21791
21950
  {
21792
21951
  id: "build-month-grid",
@@ -21798,7 +21957,7 @@ placeholder="Name or address\u2026"
21798
21957
  summary: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday).",
21799
21958
  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.",
21800
21959
  members: [],
21801
- version: "11.7.0"
21960
+ version: "11.8.0"
21802
21961
  },
21803
21962
  {
21804
21963
  id: "format-date",
@@ -21810,7 +21969,7 @@ placeholder="Name or address\u2026"
21810
21969
  summary: "",
21811
21970
  description: "",
21812
21971
  members: [],
21813
- version: "11.7.0"
21972
+ version: "11.8.0"
21814
21973
  },
21815
21974
  {
21816
21975
  id: "format-month-heading",
@@ -21822,7 +21981,7 @@ placeholder="Name or address\u2026"
21822
21981
  summary: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
21823
21982
  description: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
21824
21983
  members: [],
21825
- version: "11.7.0"
21984
+ version: "11.8.0"
21826
21985
  },
21827
21986
  {
21828
21987
  id: "uni-weekday-name",
@@ -21847,7 +22006,7 @@ placeholder="Name or address\u2026"
21847
22006
  description: "Full weekday name, for the columnheader's `abbr`."
21848
22007
  }
21849
22008
  ],
21850
- version: "11.7.0"
22009
+ version: "11.8.0"
21851
22010
  },
21852
22011
  {
21853
22012
  id: "weekday-names",
@@ -21859,7 +22018,7 @@ placeholder="Name or address\u2026"
21859
22018
  summary: "Weekday header labels starting at `weekStart` (0 = Sunday).",
21860
22019
  description: "Weekday header labels starting at `weekStart` (0 = Sunday).",
21861
22020
  members: [],
21862
- version: "11.7.0"
22021
+ version: "11.8.0"
21863
22022
  },
21864
22023
  {
21865
22024
  id: "format-time",
@@ -21871,7 +22030,7 @@ placeholder="Name or address\u2026"
21871
22030
  summary: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
21872
22031
  description: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
21873
22032
  members: [],
21874
- version: "11.7.0"
22033
+ version: "11.8.0"
21875
22034
  },
21876
22035
  {
21877
22036
  id: "locale-week-start",
@@ -21883,7 +22042,7 @@ placeholder="Name or address\u2026"
21883
22042
  summary: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday.",
21884
22043
  description: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday. Falls back to Sunday where `Intl.Locale` week info is unavailable.",
21885
22044
  members: [],
21886
- version: "11.7.0"
22045
+ version: "11.8.0"
21887
22046
  },
21888
22047
  {
21889
22048
  id: "locale-default-hour12",
@@ -21895,7 +22054,7 @@ placeholder="Name or address\u2026"
21895
22054
  summary: "Whether the locale's default clock is 12-hour.",
21896
22055
  description: "Whether the locale's default clock is 12-hour.",
21897
22056
  members: [],
21898
- version: "11.7.0"
22057
+ version: "11.8.0"
21899
22058
  },
21900
22059
  {
21901
22060
  id: "locale-field-order",
@@ -21907,7 +22066,7 @@ placeholder="Name or address\u2026"
21907
22066
  summary: "The locale's numeric-date field order, e.g.",
21908
22067
  description: "The locale's numeric-date field order, e.g. en-US \u2192 month, day, year.",
21909
22068
  members: [],
21910
- version: "11.7.0"
22069
+ version: "11.8.0"
21911
22070
  },
21912
22071
  {
21913
22072
  id: "locale-month-names",
@@ -21919,7 +22078,7 @@ placeholder="Name or address\u2026"
21919
22078
  summary: "Long + short month names \u2192 month number, lowercased, dots stripped.",
21920
22079
  description: "Long + short month names \u2192 month number, lowercased, dots stripped.",
21921
22080
  members: [],
21922
- version: "11.7.0"
22081
+ version: "11.8.0"
21923
22082
  },
21924
22083
  {
21925
22084
  id: "locale-date-placeholder",
@@ -21931,7 +22090,7 @@ placeholder="Name or address\u2026"
21931
22090
  summary: "The locale's digit pattern as a placeholder, e.g.",
21932
22091
  description: "The locale's digit pattern as a placeholder, e.g. `'MM/DD/YYYY'`.",
21933
22092
  members: [],
21934
- version: "11.7.0"
22093
+ version: "11.8.0"
21935
22094
  },
21936
22095
  {
21937
22096
  id: "parse-date-text",
@@ -21943,7 +22102,7 @@ placeholder="Name or address\u2026"
21943
22102
  summary: "Free-typed date text \u2192 ISO date, or `null` when unreadable.",
21944
22103
  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.",
21945
22104
  members: [],
21946
- version: "11.7.0"
22105
+ version: "11.8.0"
21947
22106
  },
21948
22107
  {
21949
22108
  id: "parse-time-text",
@@ -21955,7 +22114,7 @@ placeholder="Name or address\u2026"
21955
22114
  summary: "Free-typed time text \u2192 `'HH:mm'`, or `null`.",
21956
22115
  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.",
21957
22116
  members: [],
21958
- version: "11.7.0"
22117
+ version: "11.8.0"
21959
22118
  },
21960
22119
  {
21961
22120
  id: "time-slots",
@@ -21967,7 +22126,7 @@ placeholder="Name or address\u2026"
21967
22126
  summary: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
21968
22127
  description: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
21969
22128
  members: [],
21970
- version: "11.7.0"
22129
+ version: "11.8.0"
21971
22130
  },
21972
22131
  {
21973
22132
  id: "split-date-time",
@@ -21979,7 +22138,7 @@ placeholder="Name or address\u2026"
21979
22138
  summary: "",
21980
22139
  description: "",
21981
22140
  members: [],
21982
- version: "11.7.0"
22141
+ version: "11.8.0"
21983
22142
  },
21984
22143
  {
21985
22144
  id: "join-date-time",
@@ -21991,7 +22150,7 @@ placeholder="Name or address\u2026"
21991
22150
  summary: "One combined value only when both parts are present.",
21992
22151
  description: "One combined value only when both parts are present.",
21993
22152
  members: [],
21994
- version: "11.7.0"
22153
+ version: "11.8.0"
21995
22154
  },
21996
22155
  {
21997
22156
  id: "uni-number-range",
@@ -22016,7 +22175,7 @@ placeholder="Name or address\u2026"
22016
22175
  description: ""
22017
22176
  }
22018
22177
  ],
22019
- version: "11.7.0"
22178
+ version: "11.8.0"
22020
22179
  },
22021
22180
  {
22022
22181
  id: "uni-rounding-mode",
@@ -22028,7 +22187,7 @@ placeholder="Name or address\u2026"
22028
22187
  summary: "How a tie is resolved when rounding to a fraction-digit count.",
22029
22188
  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`).",
22030
22189
  members: [],
22031
- version: "11.7.0"
22190
+ version: "11.8.0"
22032
22191
  },
22033
22192
  {
22034
22193
  id: "uni-number-preset",
@@ -22040,7 +22199,7 @@ placeholder="Name or address\u2026"
22040
22199
  summary: "Format archetype.",
22041
22200
  description: "Format archetype. Supplies decimals, grouping, affix and `inputmode`.",
22042
22201
  members: [],
22043
- version: "11.7.0"
22202
+ version: "11.8.0"
22044
22203
  },
22045
22204
  {
22046
22205
  id: "uni-number-grouping",
@@ -22052,7 +22211,7 @@ placeholder="Name or address\u2026"
22052
22211
  summary: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`.",
22053
22212
  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`.",
22054
22213
  members: [],
22055
- version: "11.7.0"
22214
+ version: "11.8.0"
22056
22215
  },
22057
22216
  {
22058
22217
  id: "uni-number-reject-reason",
@@ -22064,7 +22223,7 @@ placeholder="Name or address\u2026"
22064
22223
  summary: "Why a typed commit was refused.",
22065
22224
  description: "Why a typed commit was refused. The raw text stays in the field.",
22066
22225
  members: [],
22067
- version: "11.7.0"
22226
+ version: "11.8.0"
22068
22227
  },
22069
22228
  {
22070
22229
  id: "uni-number-step-config",
@@ -22107,7 +22266,7 @@ placeholder="Name or address\u2026"
22107
22266
  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`."
22108
22267
  }
22109
22268
  ],
22110
- version: "11.7.0"
22269
+ version: "11.8.0"
22111
22270
  },
22112
22271
  {
22113
22272
  id: "uni-number-clamp",
@@ -22132,7 +22291,7 @@ placeholder="Name or address\u2026"
22132
22291
  description: "Which fence was hit, or `null` when the value was already in range."
22133
22292
  }
22134
22293
  ],
22135
- version: "11.7.0"
22294
+ version: "11.8.0"
22136
22295
  },
22137
22296
  {
22138
22297
  id: "uni-locale-number-parts",
@@ -22175,7 +22334,7 @@ placeholder="Name or address\u2026"
22175
22334
  description: "Fraction digits `Intl` uses for the currency \u2014 JPY 0, USD 2."
22176
22335
  }
22177
22336
  ],
22178
- version: "11.7.0"
22337
+ version: "11.8.0"
22179
22338
  },
22180
22339
  {
22181
22340
  id: "uni-number-format-config",
@@ -22260,7 +22419,7 @@ placeholder="Name or address\u2026"
22260
22419
  description: "Spoken long form of an abbreviated suffix, for `aria-valuetext`."
22261
22420
  }
22262
22421
  ],
22263
- version: "11.7.0"
22422
+ version: "11.8.0"
22264
22423
  },
22265
22424
  {
22266
22425
  id: "uni-resolved-number-format",
@@ -22351,7 +22510,7 @@ placeholder="Name or address\u2026"
22351
22510
  description: ""
22352
22511
  }
22353
22512
  ],
22354
- version: "11.7.0"
22513
+ version: "11.8.0"
22355
22514
  },
22356
22515
  {
22357
22516
  id: "uni-number-parse-result",
@@ -22363,7 +22522,7 @@ placeholder="Name or address\u2026"
22363
22522
  summary: "The outcome of reading a user's text.",
22364
22523
  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.",
22365
22524
  members: [],
22366
- version: "11.7.0"
22525
+ version: "11.8.0"
22367
22526
  },
22368
22527
  {
22369
22528
  id: "is-canonical-decimal",
@@ -22375,7 +22534,7 @@ placeholder="Name or address\u2026"
22375
22534
  summary: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
22376
22535
  description: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
22377
22536
  members: [],
22378
- version: "11.7.0"
22537
+ version: "11.8.0"
22379
22538
  },
22380
22539
  {
22381
22540
  id: "decimal-scale",
@@ -22387,7 +22546,7 @@ placeholder="Name or address\u2026"
22387
22546
  summary: "Fraction-digit count.",
22388
22547
  description: "Fraction-digit count. `'1.250'` \u2192 3, `'12'` \u2192 0, `'5.'` \u2192 0.",
22389
22548
  members: [],
22390
- version: "11.7.0"
22549
+ version: "11.8.0"
22391
22550
  },
22392
22551
  {
22393
22552
  id: "to-scaled",
@@ -22399,7 +22558,7 @@ placeholder="Name or address\u2026"
22399
22558
  summary: "Canonical decimal \u2192 integer scaled by `10^scale`.",
22400
22559
  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)`.",
22401
22560
  members: [],
22402
- version: "11.7.0"
22561
+ version: "11.8.0"
22403
22562
  },
22404
22563
  {
22405
22564
  id: "from-scaled",
@@ -22411,7 +22570,7 @@ placeholder="Name or address\u2026"
22411
22570
  summary: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
22412
22571
  description: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
22413
22572
  members: [],
22414
- version: "11.7.0"
22573
+ version: "11.8.0"
22415
22574
  },
22416
22575
  {
22417
22576
  id: "normalize-decimal",
@@ -22423,7 +22582,7 @@ placeholder="Name or address\u2026"
22423
22582
  summary: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`.",
22424
22583
  description: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`. Requires a canonical decimal; guard with `isCanonicalDecimal`.",
22425
22584
  members: [],
22426
- version: "11.7.0"
22585
+ version: "11.8.0"
22427
22586
  },
22428
22587
  {
22429
22588
  id: "to-decimal",
@@ -22435,7 +22594,7 @@ placeholder="Name or address\u2026"
22435
22594
  summary: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21.",
22436
22595
  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.",
22437
22596
  members: [],
22438
- version: "11.7.0"
22597
+ version: "11.8.0"
22439
22598
  },
22440
22599
  {
22441
22600
  id: "compare-decimal",
@@ -22447,7 +22606,7 @@ placeholder="Name or address\u2026"
22447
22606
  summary: "`-1` when `a < b`, `1` when `a > b`, `0` when equal.",
22448
22607
  description: "`-1` when `a < b`, `1` when `a > b`, `0` when equal. `'1.50'` equals `'1.5'`.",
22449
22608
  members: [],
22450
- version: "11.7.0"
22609
+ version: "11.8.0"
22451
22610
  },
22452
22611
  {
22453
22612
  id: "round-decimal",
@@ -22459,7 +22618,7 @@ placeholder="Name or address\u2026"
22459
22618
  summary: "Round to `fractionDigits`, breaking ties per `mode`.",
22460
22619
  description: "Round to `fractionDigits`, breaking ties per `mode`. Exact where `Number.prototype.toFixed` is not \u2014 see the file header.",
22461
22620
  members: [],
22462
- version: "11.7.0"
22621
+ version: "11.8.0"
22463
22622
  },
22464
22623
  {
22465
22624
  id: "shift-decimal",
@@ -22471,7 +22630,7 @@ placeholder="Name or address\u2026"
22471
22630
  summary: "Multiply by `10^places`, exactly.",
22472
22631
  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.",
22473
22632
  members: [],
22474
- version: "11.7.0"
22633
+ version: "11.8.0"
22475
22634
  },
22476
22635
  {
22477
22636
  id: "clamp-decimal",
@@ -22483,7 +22642,7 @@ placeholder="Name or address\u2026"
22483
22642
  summary: "Hold a value inside its fences, reporting which one it hit so the caller can announce it.",
22484
22643
  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.",
22485
22644
  members: [],
22486
- version: "11.7.0"
22645
+ version: "11.8.0"
22487
22646
  },
22488
22647
  {
22489
22648
  id: "step-decimal",
@@ -22495,7 +22654,7 @@ placeholder="Name or address\u2026"
22495
22654
  summary: "One step from `current`, in `direction` (`1` up, `-1` down).",
22496
22655
  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.",
22497
22656
  members: [],
22498
- version: "11.7.0"
22657
+ version: "11.8.0"
22499
22658
  },
22500
22659
  {
22501
22660
  id: "locale-number-parts",
@@ -22507,7 +22666,7 @@ placeholder="Name or address\u2026"
22507
22666
  summary: "Locale separators plus, when a currency is given, its symbol, side and fraction digits.",
22508
22667
  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.",
22509
22668
  members: [],
22510
- version: "11.7.0"
22669
+ version: "11.8.0"
22511
22670
  },
22512
22671
  {
22513
22672
  id: "to-ascii-digits",
@@ -22519,7 +22678,7 @@ placeholder="Name or address\u2026"
22519
22678
  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`.",
22520
22679
  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`.",
22521
22680
  members: [],
22522
- version: "11.7.0"
22681
+ version: "11.8.0"
22523
22682
  },
22524
22683
  {
22525
22684
  id: "evaluate-expression",
@@ -22531,7 +22690,7 @@ placeholder="Name or address\u2026"
22531
22690
  summary: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**.",
22532
22691
  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.",
22533
22692
  members: [],
22534
- version: "11.7.0"
22693
+ version: "11.8.0"
22535
22694
  },
22536
22695
  {
22537
22696
  id: "resolve-number-format",
@@ -22543,7 +22702,7 @@ placeholder="Name or address\u2026"
22543
22702
  summary: "Fill in every preset, locale and currency default.",
22544
22703
  description: "Fill in every preset, locale and currency default.",
22545
22704
  members: [],
22546
- version: "11.7.0"
22705
+ version: "11.8.0"
22547
22706
  },
22548
22707
  {
22549
22708
  id: "parse-number",
@@ -22555,7 +22714,7 @@ placeholder="Name or address\u2026"
22555
22714
  summary: "Read a user's text into a canonical decimal in **model units**.",
22556
22715
  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.",
22557
22716
  members: [],
22558
- version: "11.7.0"
22717
+ version: "11.8.0"
22559
22718
  },
22560
22719
  {
22561
22720
  id: "format-number",
@@ -22567,7 +22726,7 @@ placeholder="Name or address\u2026"
22567
22726
  summary: "Canonical decimal (model units) \u2192 the display number, without affixes.",
22568
22727
  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`.",
22569
22728
  members: [],
22570
- version: "11.7.0"
22729
+ version: "11.8.0"
22571
22730
  },
22572
22731
  {
22573
22732
  id: "raw-number-text",
@@ -22579,7 +22738,7 @@ placeholder="Name or address\u2026"
22579
22738
  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.",
22580
22739
  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.",
22581
22740
  members: [],
22582
- version: "11.7.0"
22741
+ version: "11.8.0"
22583
22742
  },
22584
22743
  {
22585
22744
  id: "settle-number",
@@ -22591,7 +22750,7 @@ placeholder="Name or address\u2026"
22591
22750
  summary: "Round a committed value to the field's precision, in model units.",
22592
22751
  description: "Round a committed value to the field's precision, in model units.",
22593
22752
  members: [],
22594
- version: "11.7.0"
22753
+ version: "11.8.0"
22595
22754
  },
22596
22755
  {
22597
22756
  id: "speak-number",
@@ -22603,7 +22762,7 @@ placeholder="Name or address\u2026"
22603
22762
  summary: "The `aria-valuetext` string: the formatted number with its affixes spoken.",
22604
22763
  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.',
22605
22764
  members: [],
22606
- version: "11.7.0"
22765
+ version: "11.8.0"
22607
22766
  },
22608
22767
  {
22609
22768
  id: "to-number",
@@ -22615,7 +22774,7 @@ placeholder="Name or address\u2026"
22615
22774
  summary: "Model-units canonical decimal \u2192 the bound `number`.",
22616
22775
  description: "Model-units canonical decimal \u2192 the bound `number`.",
22617
22776
  members: [],
22618
- version: "11.7.0"
22777
+ version: "11.8.0"
22619
22778
  },
22620
22779
  {
22621
22780
  id: "loses-precision",
@@ -22627,7 +22786,7 @@ placeholder="Name or address\u2026"
22627
22786
  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.",
22628
22787
  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'`.",
22629
22788
  members: [],
22630
- version: "11.7.0"
22789
+ version: "11.8.0"
22631
22790
  },
22632
22791
  {
22633
22792
  id: "press-repeat-timing",
@@ -22664,7 +22823,7 @@ placeholder="Name or address\u2026"
22664
22823
  description: ""
22665
22824
  }
22666
22825
  ],
22667
- version: "11.7.0"
22826
+ version: "11.8.0"
22668
22827
  },
22669
22828
  {
22670
22829
  id: "press-repeat-config",
@@ -22713,7 +22872,7 @@ placeholder="Name or address\u2026"
22713
22872
  description: ""
22714
22873
  }
22715
22874
  ],
22716
- version: "11.7.0"
22875
+ version: "11.8.0"
22717
22876
  },
22718
22877
  {
22719
22878
  id: "press-repeat",
@@ -22750,7 +22909,7 @@ placeholder="Name or address\u2026"
22750
22909
  description: "End a hold without firing `onRelease` \u2014 for `Escape` and `pointercancel`."
22751
22910
  }
22752
22911
  ],
22753
- version: "11.7.0"
22912
+ version: "11.8.0"
22754
22913
  },
22755
22914
  {
22756
22915
  id: "create-press-repeat",
@@ -22762,7 +22921,7 @@ placeholder="Name or address\u2026"
22762
22921
  summary: "",
22763
22922
  description: "",
22764
22923
  members: [],
22765
- version: "11.7.0"
22924
+ version: "11.8.0"
22766
22925
  },
22767
22926
  {
22768
22927
  id: "listbox-navigation-config",
@@ -22805,7 +22964,7 @@ placeholder="Name or address\u2026"
22805
22964
  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."
22806
22965
  }
22807
22966
  ],
22808
- version: "11.7.0"
22967
+ version: "11.8.0"
22809
22968
  },
22810
22969
  {
22811
22970
  id: "listbox-navigation",
@@ -22878,7 +23037,7 @@ placeholder="Name or address\u2026"
22878
23037
  description: "Close when focus leaves the control entirely (not on internal moves)."
22879
23038
  }
22880
23039
  ],
22881
- version: "11.7.0"
23040
+ version: "11.8.0"
22882
23041
  },
22883
23042
  {
22884
23043
  id: "create-listbox-navigation",
@@ -22890,7 +23049,7 @@ placeholder="Name or address\u2026"
22890
23049
  summary: "Factory mirroring the signal-API style used elsewhere in the CDK.",
22891
23050
  description: "Factory mirroring the signal-API style used elsewhere in the CDK.",
22892
23051
  members: [],
22893
- version: "11.7.0"
23052
+ version: "11.8.0"
22894
23053
  },
22895
23054
  {
22896
23055
  id: "placement",
@@ -22902,7 +23061,7 @@ placeholder="Name or address\u2026"
22902
23061
  summary: "Native CSS Anchor Positioning helpers (Baseline 2026).",
22903
23062
  description: "Native CSS Anchor Positioning helpers (Baseline 2026). These replace the former",
22904
23063
  members: [],
22905
- version: "11.7.0"
23064
+ version: "11.8.0"
22906
23065
  },
22907
23066
  {
22908
23067
  id: "anchor-offset",
@@ -22927,7 +23086,7 @@ placeholder="Name or address\u2026"
22927
23086
  description: "Shift along the cross axis, from the aligned edge."
22928
23087
  }
22929
23088
  ],
22930
- version: "11.7.0"
23089
+ version: "11.8.0"
22931
23090
  },
22932
23091
  {
22933
23092
  id: "new-anchor-name",
@@ -22939,7 +23098,7 @@ placeholder="Name or address\u2026"
22939
23098
  summary: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
22940
23099
  description: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
22941
23100
  members: [],
22942
- version: "11.7.0"
23101
+ version: "11.8.0"
22943
23102
  },
22944
23103
  {
22945
23104
  id: "anchor-styles",
@@ -22951,7 +23110,7 @@ placeholder="Name or address\u2026"
22951
23110
  summary: "Emotion style object anchoring a panel to `anchor` at `placement`.",
22952
23111
  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`).",
22953
23112
  members: [],
22954
- version: "11.7.0"
23113
+ version: "11.8.0"
22955
23114
  },
22956
23115
  {
22957
23116
  id: "anchor-arrow-styles",
@@ -22963,7 +23122,7 @@ placeholder="Name or address\u2026"
22963
23122
  summary: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor.",
22964
23123
  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.",
22965
23124
  members: [],
22966
- version: "11.7.0"
23125
+ version: "11.8.0"
22967
23126
  },
22968
23127
  {
22969
23128
  id: "spotlight-options",
@@ -22994,7 +23153,7 @@ placeholder="Name or address\u2026"
22994
23153
  description: "Scrim paint; scheme-invariant by convention, like `::backdrop`."
22995
23154
  }
22996
23155
  ],
22997
- version: "11.7.0"
23156
+ version: "11.8.0"
22998
23157
  },
22999
23158
  {
23000
23159
  id: "spotlight-styles",
@@ -23025,7 +23184,7 @@ placeholder="Name or address\u2026"
23025
23184
  description: "Hole-sized click-blocker, shown when the target must not be interactive."
23026
23185
  }
23027
23186
  ],
23028
- version: "11.7.0"
23187
+ version: "11.8.0"
23029
23188
  },
23030
23189
  {
23031
23190
  id: "anchor-rect",
@@ -23074,7 +23233,7 @@ placeholder="Name or address\u2026"
23074
23233
  description: ""
23075
23234
  }
23076
23235
  ],
23077
- version: "11.7.0"
23236
+ version: "11.8.0"
23078
23237
  },
23079
23238
  {
23080
23239
  id: "transform-origin-for",
@@ -23086,7 +23245,7 @@ placeholder="Name or address\u2026"
23086
23245
  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.",
23087
23246
  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).",
23088
23247
  members: [],
23089
- version: "11.7.0"
23248
+ version: "11.8.0"
23090
23249
  },
23091
23250
  {
23092
23251
  id: "transform-origins",
@@ -23098,7 +23257,7 @@ placeholder="Name or address\u2026"
23098
23257
  summary: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
23099
23258
  description: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
23100
23259
  members: [],
23101
- version: "11.7.0"
23260
+ version: "11.8.0"
23102
23261
  },
23103
23262
  {
23104
23263
  id: "set-anchor-name",
@@ -23110,7 +23269,7 @@ placeholder="Name or address\u2026"
23110
23269
  summary: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
23111
23270
  description: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
23112
23271
  members: [],
23113
- version: "11.7.0"
23272
+ version: "11.8.0"
23114
23273
  },
23115
23274
  {
23116
23275
  id: "clear-anchor-name",
@@ -23122,7 +23281,7 @@ placeholder="Name or address\u2026"
23122
23281
  summary: "",
23123
23282
  description: "",
23124
23283
  members: [],
23125
- version: "11.7.0"
23284
+ version: "11.8.0"
23126
23285
  },
23127
23286
  {
23128
23287
  id: "resolve-element",
@@ -23134,7 +23293,7 @@ placeholder="Name or address\u2026"
23134
23293
  summary: "Resolve an element-or-id reference.",
23135
23294
  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).",
23136
23295
  members: [],
23137
- version: "11.7.0"
23296
+ version: "11.8.0"
23138
23297
  },
23139
23298
  {
23140
23299
  id: "is-toggle-open",
@@ -23146,7 +23305,7 @@ placeholder="Name or address\u2026"
23146
23305
  summary: "True when a native `toggle` event reports the overlay opening.",
23147
23306
  description: "True when a native `toggle` event reports the overlay opening.",
23148
23307
  members: [],
23149
- version: "11.7.0"
23308
+ version: "11.8.0"
23150
23309
  },
23151
23310
  {
23152
23311
  id: "discrete-overlay-transition",
@@ -23158,7 +23317,7 @@ placeholder="Name or address\u2026"
23158
23317
  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.",
23159
23318
  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.",
23160
23319
  members: [],
23161
- version: "11.7.0"
23320
+ version: "11.8.0"
23162
23321
  },
23163
23322
  {
23164
23323
  id: "restore-overlay-focus",
@@ -23170,7 +23329,7 @@ placeholder="Name or address\u2026"
23170
23329
  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).",
23171
23330
  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.",
23172
23331
  members: [],
23173
- version: "11.7.0"
23332
+ version: "11.8.0"
23174
23333
  },
23175
23334
  {
23176
23335
  id: "focusable-elements",
@@ -23182,7 +23341,7 @@ placeholder="Name or address\u2026"
23182
23341
  summary: "The focusable elements inside `root`, in DOM order.",
23183
23342
  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).",
23184
23343
  members: [],
23185
- version: "11.7.0"
23344
+ version: "11.8.0"
23186
23345
  },
23187
23346
  {
23188
23347
  id: "backdrop-dismiss",
@@ -23207,7 +23366,7 @@ placeholder="Name or address\u2026"
23207
23366
  description: "True only when both the press and the click landed on the dialog itself."
23208
23367
  }
23209
23368
  ],
23210
- version: "11.7.0"
23369
+ version: "11.8.0"
23211
23370
  },
23212
23371
  {
23213
23372
  id: "sort-direction",
@@ -23219,7 +23378,7 @@ placeholder="Name or address\u2026"
23219
23378
  summary: "",
23220
23379
  description: "",
23221
23380
  members: [],
23222
- version: "11.7.0"
23381
+ version: "11.8.0"
23223
23382
  },
23224
23383
  {
23225
23384
  id: "sort",
@@ -23244,7 +23403,7 @@ placeholder="Name or address\u2026"
23244
23403
  description: ""
23245
23404
  }
23246
23405
  ],
23247
- version: "11.7.0"
23406
+ version: "11.8.0"
23248
23407
  },
23249
23408
  {
23250
23409
  id: "uni-base-datasource",
@@ -23413,7 +23572,7 @@ placeholder="Name or address\u2026"
23413
23572
  description: ""
23414
23573
  }
23415
23574
  ],
23416
- version: "11.7.0"
23575
+ version: "11.8.0"
23417
23576
  },
23418
23577
  {
23419
23578
  id: "page-request",
@@ -23456,7 +23615,7 @@ placeholder="Name or address\u2026"
23456
23615
  description: ""
23457
23616
  }
23458
23617
  ],
23459
- version: "11.7.0"
23618
+ version: "11.8.0"
23460
23619
  },
23461
23620
  {
23462
23621
  id: "page-response",
@@ -23493,7 +23652,7 @@ placeholder="Name or address\u2026"
23493
23652
  description: ""
23494
23653
  }
23495
23654
  ],
23496
- version: "11.7.0"
23655
+ version: "11.8.0"
23497
23656
  },
23498
23657
  {
23499
23658
  id: "data-loader",
@@ -23505,7 +23664,7 @@ placeholder="Name or address\u2026"
23505
23664
  summary: "",
23506
23665
  description: "",
23507
23666
  members: [],
23508
- version: "11.7.0"
23667
+ version: "11.8.0"
23509
23668
  },
23510
23669
  {
23511
23670
  id: "uni-server-side-datasource",
@@ -23644,7 +23803,7 @@ placeholder="Name or address\u2026"
23644
23803
  description: ""
23645
23804
  }
23646
23805
  ],
23647
- version: "11.7.0"
23806
+ version: "11.8.0"
23648
23807
  },
23649
23808
  {
23650
23809
  id: "uni-datasource",
@@ -23656,7 +23815,7 @@ placeholder="Name or address\u2026"
23656
23815
  summary: "",
23657
23816
  description: "",
23658
23817
  members: [],
23659
- version: "11.7.0"
23818
+ version: "11.8.0"
23660
23819
  },
23661
23820
  {
23662
23821
  id: "uni-record-datasource",
@@ -23765,7 +23924,7 @@ placeholder="Name or address\u2026"
23765
23924
  description: ""
23766
23925
  }
23767
23926
  ],
23768
- version: "11.7.0"
23927
+ version: "11.8.0"
23769
23928
  },
23770
23929
  {
23771
23930
  id: "local-storage-service",
@@ -23820,7 +23979,7 @@ placeholder="Name or address\u2026"
23820
23979
  description: ""
23821
23980
  }
23822
23981
  ],
23823
- version: "11.7.0"
23982
+ version: "11.8.0"
23824
23983
  },
23825
23984
  {
23826
23985
  id: "alert",
@@ -23875,7 +24034,7 @@ placeholder="Name or address\u2026"
23875
24034
  description: ""
23876
24035
  }
23877
24036
  ],
23878
- version: "11.7.0"
24037
+ version: "11.8.0"
23879
24038
  },
23880
24039
  {
23881
24040
  id: "snackbar",
@@ -23930,7 +24089,7 @@ placeholder="Name or address\u2026"
23930
24089
  description: ""
23931
24090
  }
23932
24091
  ],
23933
- version: "11.7.0"
24092
+ version: "11.8.0"
23934
24093
  },
23935
24094
  {
23936
24095
  id: "confirmation",
@@ -23979,7 +24138,7 @@ placeholder="Name or address\u2026"
23979
24138
  description: ""
23980
24139
  }
23981
24140
  ],
23982
- version: "11.7.0"
24141
+ version: "11.8.0"
23983
24142
  },
23984
24143
  {
23985
24144
  id: "notification-service",
@@ -24046,7 +24205,7 @@ placeholder="Name or address\u2026"
24046
24205
  description: ""
24047
24206
  }
24048
24207
  ],
24049
- version: "11.7.0"
24208
+ version: "11.8.0"
24050
24209
  },
24051
24210
  {
24052
24211
  id: "option",
@@ -24083,7 +24242,7 @@ placeholder="Name or address\u2026"
24083
24242
  description: "Visible and announced, but not committable; listbox navigation skips it."
24084
24243
  }
24085
24244
  ],
24086
- version: "11.7.0"
24245
+ version: "11.8.0"
24087
24246
  },
24088
24247
  {
24089
24248
  id: "options",
@@ -24095,7 +24254,7 @@ placeholder="Name or address\u2026"
24095
24254
  summary: "",
24096
24255
  description: "",
24097
24256
  members: [],
24098
- version: "11.7.0"
24257
+ version: "11.8.0"
24099
24258
  },
24100
24259
  {
24101
24260
  id: "use-timer",
@@ -24107,7 +24266,7 @@ placeholder="Name or address\u2026"
24107
24266
  summary: "",
24108
24267
  description: "",
24109
24268
  members: [],
24110
- version: "11.7.0"
24269
+ version: "11.8.0"
24111
24270
  },
24112
24271
  {
24113
24272
  id: "acceptable-file",
@@ -24119,7 +24278,7 @@ placeholder="Name or address\u2026"
24119
24278
  summary: "",
24120
24279
  description: "",
24121
24280
  members: [],
24122
- version: "11.7.0"
24281
+ version: "11.8.0"
24123
24282
  },
24124
24283
  {
24125
24284
  id: "get-file-extension",
@@ -24131,7 +24290,7 @@ placeholder="Name or address\u2026"
24131
24290
  summary: "",
24132
24291
  description: "",
24133
24292
  members: [],
24134
- version: "11.7.0"
24293
+ version: "11.8.0"
24135
24294
  },
24136
24295
  {
24137
24296
  id: "query-permission",
@@ -24143,7 +24302,7 @@ placeholder="Name or address\u2026"
24143
24302
  summary: "The current state of a browser permission.",
24144
24303
  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".',
24145
24304
  members: [],
24146
- version: "11.7.0"
24305
+ version: "11.8.0"
24147
24306
  },
24148
24307
  {
24149
24308
  id: "permission-service",
@@ -24168,7 +24327,7 @@ placeholder="Name or address\u2026"
24168
24327
  description: ""
24169
24328
  }
24170
24329
  ],
24171
- version: "11.7.0"
24330
+ version: "11.8.0"
24172
24331
  },
24173
24332
  {
24174
24333
  id: "permission",
@@ -24180,7 +24339,7 @@ placeholder="Name or address\u2026"
24180
24339
  summary: "",
24181
24340
  description: "",
24182
24341
  members: [],
24183
- version: "11.7.0"
24342
+ version: "11.8.0"
24184
24343
  },
24185
24344
  {
24186
24345
  id: "permission-state",
@@ -24192,7 +24351,7 @@ placeholder="Name or address\u2026"
24192
24351
  summary: "",
24193
24352
  description: "",
24194
24353
  members: [],
24195
- version: "11.7.0"
24354
+ version: "11.8.0"
24196
24355
  },
24197
24356
  {
24198
24357
  id: "clipboard-copy-result",
@@ -24204,7 +24363,7 @@ placeholder="Name or address\u2026"
24204
24363
  summary: "How a copy ended: - `copied` \u2014 the content is on the clipboard.",
24205
24364
  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.",
24206
24365
  members: [],
24207
- version: "11.7.0"
24366
+ version: "11.8.0"
24208
24367
  },
24209
24368
  {
24210
24369
  id: "clipboard-data",
@@ -24216,7 +24375,7 @@ placeholder="Name or address\u2026"
24216
24375
  summary: "One clipboard representation; a promise lets the data arrive after the gesture.",
24217
24376
  description: "One clipboard representation; a promise lets the data arrive after the gesture.",
24218
24377
  members: [],
24219
- version: "11.7.0"
24378
+ version: "11.8.0"
24220
24379
  },
24221
24380
  {
24222
24381
  id: "clipboard-content",
@@ -24228,7 +24387,7 @@ placeholder="Name or address\u2026"
24228
24387
  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 }`.",
24229
24388
  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 }`.",
24230
24389
  members: [],
24231
- version: "11.7.0"
24390
+ version: "11.8.0"
24232
24391
  },
24233
24392
  {
24234
24393
  id: "copy-to-clipboard",
@@ -24240,7 +24399,7 @@ placeholder="Name or address\u2026"
24240
24399
  summary: "Copies text or rich content with the Async Clipboard API.",
24241
24400
  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.",
24242
24401
  members: [],
24243
- version: "11.7.0"
24402
+ version: "11.8.0"
24244
24403
  }
24245
24404
  ],
24246
24405
  utilityDocs: [
@@ -25703,7 +25862,9 @@ var buildComponents = (c) => ({
25703
25862
  textAlign: "center",
25704
25863
  divider: void 0,
25705
25864
  closeButtonIcon: "close",
25706
- closeButtonSize: "md"
25865
+ closeButtonSize: "md",
25866
+ richColor: void 0,
25867
+ richPadding: "md"
25707
25868
  } },
25708
25869
  select: { options: {
25709
25870
  toggleIcon: "chevronDown",
@@ -27880,4 +28041,4 @@ export {
27880
28041
  buildStoredTheme,
27881
28042
  createUniServer
27882
28043
  };
27883
- //# sourceMappingURL=chunk-Y6SCKJEM.js.map
28044
+ //# sourceMappingURL=chunk-R4RLYWUY.js.map