@uni-design-system/uni-mcp 11.0.0 → 11.1.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.0.0",
11
- builtAt: "2026-09-07T13:37:31.297Z",
10
+ version: "11.1.0",
11
+ builtAt: "2026-09-10T16:48:25.514Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 85,
17
- tokens: 482,
16
+ components: 86,
17
+ tokens: 485,
18
18
  themes: 2,
19
- examples: 233
19
+ examples: 238
20
20
  }
21
21
  },
22
22
  components: [
@@ -27,7 +27,7 @@ var uni_index_default = {
27
27
  summary: "",
28
28
  description: "",
29
29
  category: "feedback",
30
- version: "11.0.0",
30
+ version: "11.1.0",
31
31
  bindings: {
32
32
  angular: {
33
33
  importPath: "@uni-design-system/uni-angular",
@@ -117,7 +117,7 @@ var uni_index_default = {
117
117
  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.",
118
118
  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.",
119
119
  category: "components",
120
- version: "11.0.0",
120
+ version: "11.1.0",
121
121
  bindings: {
122
122
  angular: {
123
123
  importPath: "@uni-design-system/uni-angular",
@@ -190,7 +190,7 @@ var uni_index_default = {
190
190
  summary: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol.",
191
191
  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.",
192
192
  category: "components",
193
- version: "11.0.0",
193
+ version: "11.1.0",
194
194
  bindings: {
195
195
  angular: {
196
196
  importPath: "@uni-design-system/uni-angular",
@@ -285,7 +285,7 @@ var uni_index_default = {
285
285
  summary: "Overlapping stack of avatars.",
286
286
  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.",
287
287
  category: "components",
288
- version: "11.0.0",
288
+ version: "11.1.0",
289
289
  bindings: {
290
290
  angular: {
291
291
  importPath: "@uni-design-system/uni-angular",
@@ -334,7 +334,7 @@ var uni_index_default = {
334
334
  summary: "",
335
335
  description: "",
336
336
  category: "primitives",
337
- version: "11.0.0",
337
+ version: "11.1.0",
338
338
  bindings: {
339
339
  angular: {
340
340
  importPath: "@uni-design-system/uni-angular",
@@ -415,7 +415,7 @@ var uni_index_default = {
415
415
  summary: "",
416
416
  description: "",
417
417
  category: "feedback",
418
- version: "11.0.0",
418
+ version: "11.1.0",
419
419
  bindings: {
420
420
  angular: {
421
421
  importPath: "@uni-design-system/uni-angular",
@@ -512,7 +512,7 @@ var uni_index_default = {
512
512
  summary: "",
513
513
  description: "",
514
514
  category: "directives",
515
- version: "11.0.0",
515
+ version: "11.1.0",
516
516
  bindings: {
517
517
  angular: {
518
518
  importPath: "@uni-design-system/uni-angular",
@@ -536,7 +536,7 @@ var uni_index_default = {
536
536
  summary: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`.',
537
537
  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.',
538
538
  category: "layout",
539
- version: "11.0.0",
539
+ version: "11.1.0",
540
540
  bindings: {
541
541
  angular: {
542
542
  importPath: "@uni-design-system/uni-angular",
@@ -942,7 +942,7 @@ var uni_index_default = {
942
942
  summary: 'WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current="page"`), separators are decorative.',
943
943
  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.',
944
944
  category: "components",
945
- version: "11.0.0",
945
+ version: "11.1.0",
946
946
  bindings: {
947
947
  angular: {
948
948
  importPath: "@uni-design-system/uni-angular",
@@ -1027,7 +1027,7 @@ var uni_index_default = {
1027
1027
  summary: "",
1028
1028
  description: "",
1029
1029
  category: "primitives",
1030
- version: "11.0.0",
1030
+ version: "11.1.0",
1031
1031
  bindings: {
1032
1032
  angular: {
1033
1033
  importPath: "@uni-design-system/uni-angular",
@@ -1187,7 +1187,7 @@ var uni_index_default = {
1187
1187
  summary: "",
1188
1188
  description: "",
1189
1189
  category: "primitives",
1190
- version: "11.0.0",
1190
+ version: "11.1.0",
1191
1191
  bindings: {
1192
1192
  angular: {
1193
1193
  importPath: "@uni-design-system/uni-angular",
@@ -1219,7 +1219,7 @@ var uni_index_default = {
1219
1219
  summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
1220
1220
  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.",
1221
1221
  category: "forms",
1222
- version: "11.0.0",
1222
+ version: "11.1.0",
1223
1223
  bindings: {
1224
1224
  angular: {
1225
1225
  importPath: "@uni-design-system/uni-angular",
@@ -1460,7 +1460,7 @@ var uni_index_default = {
1460
1460
  summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
1461
1461
  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).',
1462
1462
  category: "components",
1463
- version: "11.0.0",
1463
+ version: "11.1.0",
1464
1464
  bindings: {
1465
1465
  angular: {
1466
1466
  importPath: "@uni-design-system/uni-angular",
@@ -1680,7 +1680,7 @@ var uni_index_default = {
1680
1680
  summary: "",
1681
1681
  description: "",
1682
1682
  category: "layout",
1683
- version: "11.0.0",
1683
+ version: "11.1.0",
1684
1684
  bindings: {
1685
1685
  angular: {
1686
1686
  importPath: "@uni-design-system/uni-angular",
@@ -1742,7 +1742,7 @@ var uni_index_default = {
1742
1742
  summary: "",
1743
1743
  description: "",
1744
1744
  category: "layout",
1745
- version: "11.0.0",
1745
+ version: "11.1.0",
1746
1746
  bindings: {
1747
1747
  angular: {
1748
1748
  importPath: "@uni-design-system/uni-angular",
@@ -1783,7 +1783,7 @@ var uni_index_default = {
1783
1783
  summary: "",
1784
1784
  description: "",
1785
1785
  category: "layout",
1786
- version: "11.0.0",
1786
+ version: "11.1.0",
1787
1787
  bindings: {
1788
1788
  angular: {
1789
1789
  importPath: "@uni-design-system/uni-angular",
@@ -1840,7 +1840,7 @@ var uni_index_default = {
1840
1840
  summary: "",
1841
1841
  description: "",
1842
1842
  category: "layout",
1843
- version: "11.0.0",
1843
+ version: "11.1.0",
1844
1844
  bindings: {
1845
1845
  angular: {
1846
1846
  importPath: "@uni-design-system/uni-angular",
@@ -1895,7 +1895,7 @@ var uni_index_default = {
1895
1895
  summary: "",
1896
1896
  description: "",
1897
1897
  category: "forms",
1898
- version: "11.0.0",
1898
+ version: "11.1.0",
1899
1899
  bindings: {
1900
1900
  angular: {
1901
1901
  importPath: "@uni-design-system/uni-angular",
@@ -2079,7 +2079,7 @@ var uni_index_default = {
2079
2079
  summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
2080
2080
  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.",
2081
2081
  category: "forms",
2082
- version: "11.0.0",
2082
+ version: "11.1.0",
2083
2083
  bindings: {
2084
2084
  angular: {
2085
2085
  importPath: "@uni-design-system/uni-angular",
@@ -2365,7 +2365,7 @@ emptyText="No countries found"
2365
2365
  summary: "",
2366
2366
  description: "",
2367
2367
  category: "feedback",
2368
- version: "11.0.0",
2368
+ version: "11.1.0",
2369
2369
  bindings: {
2370
2370
  angular: {
2371
2371
  importPath: "@uni-design-system/uni-angular",
@@ -2412,7 +2412,7 @@ emptyText="No countries found"
2412
2412
  summary: "",
2413
2413
  description: "",
2414
2414
  category: "forms",
2415
- version: "11.0.0",
2415
+ version: "11.1.0",
2416
2416
  bindings: {
2417
2417
  angular: {
2418
2418
  importPath: "@uni-design-system/uni-angular",
@@ -2511,7 +2511,7 @@ emptyText="No countries found"
2511
2511
  summary: "",
2512
2512
  description: "",
2513
2513
  category: "data",
2514
- version: "11.0.0",
2514
+ version: "11.1.0",
2515
2515
  bindings: {
2516
2516
  angular: {
2517
2517
  importPath: "@uni-design-system/uni-angular",
@@ -2751,7 +2751,7 @@ emptyText="No countries found"
2751
2751
  summary: "Date field with free-typed parsing and a popup calendar.",
2752
2752
  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.",
2753
2753
  category: "forms",
2754
- version: "11.0.0",
2754
+ version: "11.1.0",
2755
2755
  bindings: {
2756
2756
  angular: {
2757
2757
  importPath: "@uni-design-system/uni-angular",
@@ -2982,7 +2982,7 @@ emptyText="No countries found"
2982
2982
  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.",
2983
2983
  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.",
2984
2984
  category: "forms",
2985
- version: "11.0.0",
2985
+ version: "11.1.0",
2986
2986
  bindings: {
2987
2987
  angular: {
2988
2988
  importPath: "@uni-design-system/uni-angular",
@@ -3175,7 +3175,7 @@ emptyText="No countries found"
3175
3175
  summary: "Text input that emits `change` only after the user pauses typing.",
3176
3176
  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.",
3177
3177
  category: "forms",
3178
- version: "11.0.0",
3178
+ version: "11.1.0",
3179
3179
  bindings: {
3180
3180
  angular: {
3181
3181
  importPath: "@uni-design-system/uni-angular",
@@ -3323,7 +3323,7 @@ emptyText="No countries found"
3323
3323
  summary: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`.",
3324
3324
  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.",
3325
3325
  category: "feedback",
3326
- version: "11.0.0",
3326
+ version: "11.1.0",
3327
3327
  bindings: {
3328
3328
  angular: {
3329
3329
  importPath: "@uni-design-system/uni-angular",
@@ -3476,7 +3476,7 @@ uni-dialog
3476
3476
  summary: "",
3477
3477
  description: "",
3478
3478
  category: "feedback",
3479
- version: "11.0.0",
3479
+ version: "11.1.0",
3480
3480
  bindings: {
3481
3481
  angular: {
3482
3482
  importPath: "@uni-design-system/uni-angular",
@@ -3580,7 +3580,7 @@ uni-dialog
3580
3580
  summary: "",
3581
3581
  description: "",
3582
3582
  category: "feedback",
3583
- version: "11.0.0",
3583
+ version: "11.1.0",
3584
3584
  bindings: {
3585
3585
  angular: {
3586
3586
  importPath: "@uni-design-system/uni-angular",
@@ -3621,7 +3621,7 @@ uni-dialog
3621
3621
  summary: "",
3622
3622
  description: "",
3623
3623
  category: "layout",
3624
- version: "11.0.0",
3624
+ version: "11.1.0",
3625
3625
  bindings: {
3626
3626
  angular: {
3627
3627
  importPath: "@uni-design-system/uni-angular",
@@ -3677,7 +3677,7 @@ uni-dialog
3677
3677
  summary: "",
3678
3678
  description: "",
3679
3679
  category: "directives",
3680
- version: "11.0.0",
3680
+ version: "11.1.0",
3681
3681
  bindings: {
3682
3682
  angular: {
3683
3683
  importPath: "@uni-design-system/uni-angular",
@@ -3709,7 +3709,7 @@ uni-dialog
3709
3709
  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.",
3710
3710
  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.",
3711
3711
  category: "components",
3712
- version: "11.0.0",
3712
+ version: "11.1.0",
3713
3713
  bindings: {
3714
3714
  angular: {
3715
3715
  importPath: "@uni-design-system/uni-angular",
@@ -3900,7 +3900,7 @@ initialFocus="input"
3900
3900
  summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
3901
3901
  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.",
3902
3902
  category: "primitives",
3903
- version: "11.0.0",
3903
+ version: "11.1.0",
3904
3904
  bindings: {
3905
3905
  angular: {
3906
3906
  importPath: "@uni-design-system/uni-angular",
@@ -3997,7 +3997,7 @@ initialFocus="input"
3997
3997
  summary: "The drawer's pinned header row: a title, and optionally a close button.",
3998
3998
  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.",
3999
3999
  category: "components",
4000
- version: "11.0.0",
4000
+ version: "11.1.0",
4001
4001
  bindings: {
4002
4002
  angular: {
4003
4003
  importPath: "@uni-design-system/uni-angular",
@@ -4045,7 +4045,7 @@ initialFocus="input"
4045
4045
  summary: "",
4046
4046
  description: "",
4047
4047
  category: "components",
4048
- version: "11.0.0",
4048
+ version: "11.1.0",
4049
4049
  bindings: {
4050
4050
  angular: {
4051
4051
  importPath: "@uni-design-system/uni-angular",
@@ -4179,7 +4179,7 @@ initialFocus="input"
4179
4179
  summary: "",
4180
4180
  description: "",
4181
4181
  category: "layout",
4182
- version: "11.0.0",
4182
+ version: "11.1.0",
4183
4183
  bindings: {
4184
4184
  angular: {
4185
4185
  importPath: "@uni-design-system/uni-angular",
@@ -4283,7 +4283,7 @@ initialFocus="input"
4283
4283
  summary: "",
4284
4284
  description: "",
4285
4285
  category: "layout",
4286
- version: "11.0.0",
4286
+ version: "11.1.0",
4287
4287
  bindings: {
4288
4288
  angular: {
4289
4289
  importPath: "@uni-design-system/uni-angular",
@@ -4354,7 +4354,7 @@ initialFocus="input"
4354
4354
  summary: "Trigger for a {@link UniExpandComponent} region.",
4355
4355
  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.",
4356
4356
  category: "layout",
4357
- version: "11.0.0",
4357
+ version: "11.1.0",
4358
4358
  bindings: {
4359
4359
  angular: {
4360
4360
  importPath: "@uni-design-system/uni-angular",
@@ -4439,7 +4439,7 @@ initialFocus="input"
4439
4439
  summary: "",
4440
4440
  description: "",
4441
4441
  category: "forms",
4442
- version: "11.0.0",
4442
+ version: "11.1.0",
4443
4443
  bindings: {
4444
4444
  angular: {
4445
4445
  importPath: "@uni-design-system/uni-angular",
@@ -4597,7 +4597,7 @@ initialFocus="input"
4597
4597
  summary: "",
4598
4598
  description: "",
4599
4599
  category: "layout",
4600
- version: "11.0.0",
4600
+ version: "11.1.0",
4601
4601
  bindings: {
4602
4602
  angular: {
4603
4603
  importPath: "@uni-design-system/uni-angular",
@@ -4694,7 +4694,7 @@ initialFocus="input"
4694
4694
  summary: "",
4695
4695
  description: "",
4696
4696
  category: "layout",
4697
- version: "11.0.0",
4697
+ version: "11.1.0",
4698
4698
  bindings: {
4699
4699
  angular: {
4700
4700
  importPath: "@uni-design-system/uni-angular",
@@ -4726,7 +4726,7 @@ initialFocus="input"
4726
4726
  summary: "",
4727
4727
  description: "",
4728
4728
  category: "primitives",
4729
- version: "11.0.0",
4729
+ version: "11.1.0",
4730
4730
  bindings: {
4731
4731
  angular: {
4732
4732
  importPath: "@uni-design-system/uni-angular",
@@ -4786,7 +4786,7 @@ initialFocus="input"
4786
4786
  summary: "",
4787
4787
  description: "",
4788
4788
  category: "primitives",
4789
- version: "11.0.0",
4789
+ version: "11.1.0",
4790
4790
  bindings: {
4791
4791
  angular: {
4792
4792
  importPath: "@uni-design-system/uni-angular",
@@ -4889,7 +4889,7 @@ initialFocus="input"
4889
4889
  summary: "A button that lives inside a sentence.",
4890
4890
  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.",
4891
4891
  category: "primitives",
4892
- version: "11.0.0",
4892
+ version: "11.1.0",
4893
4893
  bindings: {
4894
4894
  angular: {
4895
4895
  importPath: "@uni-design-system/uni-angular",
@@ -5004,7 +5004,7 @@ initialFocus="input"
5004
5004
  summary: "",
5005
5005
  description: "",
5006
5006
  category: "forms",
5007
- version: "11.0.0",
5007
+ version: "11.1.0",
5008
5008
  bindings: {
5009
5009
  angular: {
5010
5010
  importPath: "@uni-design-system/uni-angular",
@@ -5289,7 +5289,7 @@ initialFocus="input"
5289
5289
  summary: "",
5290
5290
  description: "",
5291
5291
  category: "forms",
5292
- version: "11.0.0",
5292
+ version: "11.1.0",
5293
5293
  bindings: {
5294
5294
  angular: {
5295
5295
  importPath: "@uni-design-system/uni-angular",
@@ -5410,7 +5410,7 @@ initialFocus="input"
5410
5410
  summary: "",
5411
5411
  description: "",
5412
5412
  category: "components",
5413
- version: "11.0.0",
5413
+ version: "11.1.0",
5414
5414
  bindings: {
5415
5415
  angular: {
5416
5416
  importPath: "@uni-design-system/uni-angular",
@@ -5480,7 +5480,7 @@ initialFocus="input"
5480
5480
  summary: "",
5481
5481
  description: "",
5482
5482
  category: "layout",
5483
- version: "11.0.0",
5483
+ version: "11.1.0",
5484
5484
  bindings: {
5485
5485
  angular: {
5486
5486
  importPath: "@uni-design-system/uni-angular",
@@ -5584,7 +5584,7 @@ initialFocus="input"
5584
5584
  summary: "",
5585
5585
  description: "",
5586
5586
  category: "layout",
5587
- version: "11.0.0",
5587
+ version: "11.1.0",
5588
5588
  bindings: {
5589
5589
  angular: {
5590
5590
  importPath: "@uni-design-system/uni-angular",
@@ -5666,7 +5666,7 @@ initialFocus="input"
5666
5666
  summary: "",
5667
5667
  description: "",
5668
5668
  category: "forms",
5669
- version: "11.0.0",
5669
+ version: "11.1.0",
5670
5670
  bindings: {
5671
5671
  angular: {
5672
5672
  importPath: "@uni-design-system/uni-angular",
@@ -5760,7 +5760,7 @@ initialFocus="input"
5760
5760
  summary: "",
5761
5761
  description: "",
5762
5762
  category: "forms",
5763
- version: "11.0.0",
5763
+ version: "11.1.0",
5764
5764
  bindings: {
5765
5765
  angular: {
5766
5766
  importPath: "@uni-design-system/uni-angular",
@@ -5939,7 +5939,7 @@ initialFocus="input"
5939
5939
  summary: "",
5940
5940
  description: "",
5941
5941
  category: "feedback",
5942
- version: "11.0.0",
5942
+ version: "11.1.0",
5943
5943
  bindings: {
5944
5944
  angular: {
5945
5945
  importPath: "@uni-design-system/uni-angular",
@@ -6199,7 +6199,7 @@ initialFocus="input"
6199
6199
  summary: "",
6200
6200
  description: "",
6201
6201
  category: "feedback",
6202
- version: "11.0.0",
6202
+ version: "11.1.0",
6203
6203
  bindings: {
6204
6204
  angular: {
6205
6205
  importPath: "@uni-design-system/uni-angular",
@@ -6223,7 +6223,7 @@ initialFocus="input"
6223
6223
  summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
6224
6224
  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.',
6225
6225
  category: "forms",
6226
- version: "11.0.0",
6226
+ version: "11.1.0",
6227
6227
  bindings: {
6228
6228
  angular: {
6229
6229
  importPath: "@uni-design-system/uni-angular",
@@ -6649,7 +6649,7 @@ initialFocus="input"
6649
6649
  summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
6650
6650
  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.",
6651
6651
  category: "forms",
6652
- version: "11.0.0",
6652
+ version: "11.1.0",
6653
6653
  bindings: {
6654
6654
  angular: {
6655
6655
  importPath: "@uni-design-system/uni-angular",
@@ -6940,7 +6940,7 @@ initialFocus="input"
6940
6940
  summary: "",
6941
6941
  description: "",
6942
6942
  category: "data",
6943
- version: "11.0.0",
6943
+ version: "11.1.0",
6944
6944
  bindings: {
6945
6945
  angular: {
6946
6946
  importPath: "@uni-design-system/uni-angular",
@@ -7041,7 +7041,7 @@ initialFocus="input"
7041
7041
  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.",
7042
7042
  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.',
7043
7043
  category: "layout",
7044
- version: "11.0.0",
7044
+ version: "11.1.0",
7045
7045
  bindings: {
7046
7046
  angular: {
7047
7047
  importPath: "@uni-design-system/uni-angular",
@@ -7233,7 +7233,7 @@ initialFocus="input"
7233
7233
  summary: "",
7234
7234
  description: "",
7235
7235
  category: "feedback",
7236
- version: "11.0.0",
7236
+ version: "11.1.0",
7237
7237
  bindings: {
7238
7238
  angular: {
7239
7239
  importPath: "@uni-design-system/uni-angular",
@@ -7297,7 +7297,7 @@ initialFocus="input"
7297
7297
  summary: "",
7298
7298
  description: "",
7299
7299
  category: "feedback",
7300
- version: "11.0.0",
7300
+ version: "11.1.0",
7301
7301
  bindings: {
7302
7302
  angular: {
7303
7303
  importPath: "@uni-design-system/uni-angular",
@@ -7369,7 +7369,7 @@ initialFocus="input"
7369
7369
  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.",
7370
7370
  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.',
7371
7371
  category: "forms",
7372
- version: "11.0.0",
7372
+ version: "11.1.0",
7373
7373
  bindings: {
7374
7374
  angular: {
7375
7375
  importPath: "@uni-design-system/uni-angular",
@@ -7572,7 +7572,7 @@ initialFocus="input"
7572
7572
  summary: "",
7573
7573
  description: "",
7574
7574
  category: "forms",
7575
- version: "11.0.0",
7575
+ version: "11.1.0",
7576
7576
  bindings: {
7577
7577
  angular: {
7578
7578
  importPath: "@uni-design-system/uni-angular",
@@ -7770,7 +7770,7 @@ initialFocus="input"
7770
7770
  summary: "",
7771
7771
  description: "",
7772
7772
  category: "directives",
7773
- version: "11.0.0",
7773
+ version: "11.1.0",
7774
7774
  bindings: {
7775
7775
  angular: {
7776
7776
  importPath: "@uni-design-system/uni-angular",
@@ -7794,7 +7794,7 @@ initialFocus="input"
7794
7794
  summary: "",
7795
7795
  description: "",
7796
7796
  category: "layout",
7797
- version: "11.0.0",
7797
+ version: "11.1.0",
7798
7798
  bindings: {
7799
7799
  angular: {
7800
7800
  importPath: "@uni-design-system/uni-angular",
@@ -7849,7 +7849,7 @@ initialFocus="input"
7849
7849
  summary: "Native scroll area with theme-driven scrollbar styling.",
7850
7850
  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.",
7851
7851
  category: "layout",
7852
- version: "11.0.0",
7852
+ version: "11.1.0",
7853
7853
  bindings: {
7854
7854
  angular: {
7855
7855
  importPath: "@uni-design-system/uni-angular",
@@ -7996,7 +7996,7 @@ initialFocus="input"
7996
7996
  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.",
7997
7997
  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.",
7998
7998
  category: "forms",
7999
- version: "11.0.0",
7999
+ version: "11.1.0",
8000
8000
  bindings: {
8001
8001
  angular: {
8002
8002
  importPath: "@uni-design-system/uni-angular",
@@ -8123,7 +8123,7 @@ initialFocus="input"
8123
8123
  summary: "",
8124
8124
  description: "",
8125
8125
  category: "forms",
8126
- version: "11.0.0",
8126
+ version: "11.1.0",
8127
8127
  bindings: {
8128
8128
  angular: {
8129
8129
  importPath: "@uni-design-system/uni-angular",
@@ -8293,7 +8293,7 @@ initialFocus="input"
8293
8293
  summary: "Loading placeholder painted with surface tokens.",
8294
8294
  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.",
8295
8295
  category: "components",
8296
- version: "11.0.0",
8296
+ version: "11.1.0",
8297
8297
  bindings: {
8298
8298
  angular: {
8299
8299
  importPath: "@uni-design-system/uni-angular",
@@ -8444,7 +8444,7 @@ initialFocus="input"
8444
8444
  summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
8445
8445
  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.",
8446
8446
  category: "forms",
8447
- version: "11.0.0",
8447
+ version: "11.1.0",
8448
8448
  bindings: {
8449
8449
  angular: {
8450
8450
  importPath: "@uni-design-system/uni-angular",
@@ -8718,7 +8718,7 @@ initialFocus="input"
8718
8718
  summary: "",
8719
8719
  description: "",
8720
8720
  category: "feedback",
8721
- version: "11.0.0",
8721
+ version: "11.1.0",
8722
8722
  bindings: {
8723
8723
  angular: {
8724
8724
  importPath: "@uni-design-system/uni-angular",
@@ -8830,7 +8830,7 @@ initialFocus="input"
8830
8830
  summary: "",
8831
8831
  description: "",
8832
8832
  category: "data",
8833
- version: "11.0.0",
8833
+ version: "11.1.0",
8834
8834
  bindings: {
8835
8835
  angular: {
8836
8836
  importPath: "@uni-design-system/uni-angular",
@@ -8889,7 +8889,7 @@ initialFocus="input"
8889
8889
  summary: "",
8890
8890
  description: "",
8891
8891
  category: "layout",
8892
- version: "11.0.0",
8892
+ version: "11.1.0",
8893
8893
  bindings: {
8894
8894
  angular: {
8895
8895
  importPath: "@uni-design-system/uni-angular",
@@ -8944,7 +8944,7 @@ initialFocus="input"
8944
8944
  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.',
8945
8945
  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.',
8946
8946
  category: "components",
8947
- version: "11.0.0",
8947
+ version: "11.1.0",
8948
8948
  bindings: {
8949
8949
  angular: {
8950
8950
  importPath: "@uni-design-system/uni-angular",
@@ -9062,7 +9062,7 @@ initialFocus="input"
9062
9062
  summary: "",
9063
9063
  description: "",
9064
9064
  category: "primitives",
9065
- version: "11.0.0",
9065
+ version: "11.1.0",
9066
9066
  bindings: {
9067
9067
  angular: {
9068
9068
  importPath: "@uni-design-system/uni-angular",
@@ -9151,7 +9151,7 @@ initialFocus="input"
9151
9151
  summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
9152
9152
  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.",
9153
9153
  category: "components",
9154
- version: "11.0.0",
9154
+ version: "11.1.0",
9155
9155
  bindings: {
9156
9156
  angular: {
9157
9157
  importPath: "@uni-design-system/uni-angular",
@@ -9191,7 +9191,7 @@ initialFocus="input"
9191
9191
  summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
9192
9192
  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.",
9193
9193
  category: "components",
9194
- version: "11.0.0",
9194
+ version: "11.1.0",
9195
9195
  bindings: {
9196
9196
  angular: {
9197
9197
  importPath: "@uni-design-system/uni-angular",
@@ -9270,9 +9270,9 @@ initialFocus="input"
9270
9270
  name: "Tag",
9271
9271
  status: "stable",
9272
9272
  summary: "Compact chip for categories, states, filters and tokens.",
9273
- 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. 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.",
9273
+ 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.",
9274
9274
  category: "data",
9275
- version: "11.0.0",
9275
+ version: "11.1.0",
9276
9276
  bindings: {
9277
9277
  angular: {
9278
9278
  importPath: "@uni-design-system/uni-angular",
@@ -9304,7 +9304,7 @@ initialFocus="input"
9304
9304
  {
9305
9305
  name: "value",
9306
9306
  kind: "input",
9307
- type: "string | number",
9307
+ type: "T",
9308
9308
  required: false,
9309
9309
  description: ""
9310
9310
  },
@@ -9404,19 +9404,19 @@ initialFocus="input"
9404
9404
  type: "number",
9405
9405
  required: false,
9406
9406
  default: "0",
9407
- description: "Tab position of the chip's controls. A composite that owns its own roving focus \u2014 `uni-tag-input`, where the whole field is one tab stop \u2014 passes `-1` so Tab does not walk through every chip to reach the next control."
9407
+ description: "Tab position of the chip's controls. A composite that owns its own roving focus \u2014 `uni-tag-input` or `uni-tag-group`, where the whole thing is one tab stop \u2014 passes `-1` so Tab does not walk through every chip to reach the next control."
9408
9408
  },
9409
9409
  {
9410
9410
  name: "removed",
9411
9411
  kind: "output",
9412
- type: "UniTagValue",
9412
+ type: "T | undefined",
9413
9413
  required: false,
9414
9414
  description: ""
9415
9415
  },
9416
9416
  {
9417
9417
  name: "activated",
9418
9418
  kind: "output",
9419
- type: "UniTagValue",
9419
+ type: "T | undefined",
9420
9420
  required: false,
9421
9421
  description: ""
9422
9422
  },
@@ -9519,7 +9519,25 @@ initialFocus="input"
9519
9519
  }
9520
9520
  </div>
9521
9521
  <!-- args:
9522
- { interactive: true, selected: true, tone: 'solid' }
9522
+ { interactive: true, selected: true }
9523
+ -->`
9524
+ },
9525
+ {
9526
+ title: "Toggles",
9527
+ framework: "angular",
9528
+ code: `<!-- Storybook story: Toggles -->
9529
+ <div row-layout gap="sm" alignItems="center" style="flex-wrap:wrap">
9530
+ @for (facet of ['Design', 'Engineering', 'Legal', 'Finance']; track facet) {
9531
+ <uni-tag
9532
+ [interactive]="true"
9533
+ [label]="facet"
9534
+ [selected]="picked.includes(facet)"
9535
+ (activated)="toggle(facet)"
9536
+ />
9537
+ }
9538
+ </div>
9539
+ <!-- args:
9540
+ { label: 'nope@@x', invalid: true, removable: true, variant: 'warn' }
9523
9541
  -->`
9524
9542
  },
9525
9543
  {
@@ -9610,6 +9628,7 @@ initialFocus="input"
9610
9628
  "A static tag is **text, not a widget**: no role, no tab stop. Screen readers",
9611
9629
  "`removable` adds one real `<button>` named `Remove {label}`, overridable with",
9612
9630
  '`interactive` makes the body a `<button type="button">`; `selected` maps to',
9631
+ "`controlTabIndex` lets a composite that owns its own roving focus \u2014",
9613
9632
  "Icons, avatars, initials and dots are `aria-hidden` \u2014 the chip's text is its",
9614
9633
  "`invalid` sets `aria-invalid` and adds a non-colour cue."
9615
9634
  ]
@@ -9620,9 +9639,208 @@ initialFocus="input"
9620
9639
  "tag.behavior.gap",
9621
9640
  "tag.behavior.removeIcon",
9622
9641
  "tag.behavior.selectedIcon",
9623
- "tag.behavior.motion"
9642
+ "tag.behavior.motion",
9643
+ "tag.behavior.endInset"
9624
9644
  ]
9625
9645
  },
9646
+ {
9647
+ id: "tag-group",
9648
+ name: "TagGroup",
9649
+ status: "stable",
9650
+ summary: "A row of chips the user picks from: filters, facets, a set of labels.",
9651
+ 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.",
9652
+ category: "data",
9653
+ version: "11.1.0",
9654
+ bindings: {
9655
+ angular: {
9656
+ importPath: "@uni-design-system/uni-angular",
9657
+ selectorOrTag: "uni-tag-group",
9658
+ api: [
9659
+ {
9660
+ name: "items",
9661
+ kind: "input",
9662
+ type: "readonly UniTagGroupItem<T>[]",
9663
+ required: false,
9664
+ default: "[]",
9665
+ description: ""
9666
+ },
9667
+ {
9668
+ name: "layout",
9669
+ kind: "input",
9670
+ type: "'wrap' | 'justify'",
9671
+ required: false,
9672
+ default: "'wrap'",
9673
+ description: "`wrap` lets chips keep their natural widths. `justify` stretches each filled row flush to both edges, leaving the last row ragged; chips put the extra width around their labels, so tucked leads and remove controls stay tucked."
9674
+ },
9675
+ {
9676
+ name: "multiple",
9677
+ kind: "input",
9678
+ type: "boolean",
9679
+ required: false,
9680
+ default: "false",
9681
+ description: "Allow more than one chip at a time. Single select replaces instead."
9682
+ },
9683
+ {
9684
+ name: "value",
9685
+ kind: "model",
9686
+ type: "T[]",
9687
+ required: false,
9688
+ default: "[]",
9689
+ description: "The selected values \u2014 one array in both modes, as `uni-tag-input` keeps one array for its items. Single select simply never holds more than one, which spares callers a `T[] | T | null` union at every call site."
9690
+ },
9691
+ {
9692
+ name: "activated",
9693
+ kind: "output",
9694
+ type: "T | undefined",
9695
+ required: false,
9696
+ description: "The chip the user just activated, selected or deselected."
9697
+ },
9698
+ {
9699
+ name: "removed",
9700
+ kind: "output",
9701
+ type: "T | undefined",
9702
+ required: false,
9703
+ description: ""
9704
+ },
9705
+ {
9706
+ name: "chipTone",
9707
+ kind: "input",
9708
+ type: "TagTone | undefined",
9709
+ required: false,
9710
+ default: "undefined",
9711
+ description: ""
9712
+ },
9713
+ {
9714
+ name: "chipSize",
9715
+ kind: "input",
9716
+ type: "Size | undefined",
9717
+ required: false,
9718
+ default: "undefined",
9719
+ description: ""
9720
+ },
9721
+ {
9722
+ name: "chipVariant",
9723
+ kind: "input",
9724
+ type: "Variant | undefined",
9725
+ required: false,
9726
+ default: "undefined",
9727
+ description: ""
9728
+ },
9729
+ {
9730
+ name: "variant",
9731
+ kind: "input",
9732
+ type: "Variant",
9733
+ required: false,
9734
+ default: "'primary'",
9735
+ description: "Style archetype from the theme. Inherited from BaseComponent."
9736
+ },
9737
+ {
9738
+ name: "size",
9739
+ kind: "input",
9740
+ type: "Size",
9741
+ required: false,
9742
+ default: "'lg'",
9743
+ description: "Size token from the theme. Inherited from BaseComponent. Only has an effect where the component theme defines a `sizes` block."
9744
+ }
9745
+ ]
9746
+ }
9747
+ },
9748
+ examples: [
9749
+ {
9750
+ title: "Wrap",
9751
+ framework: "angular",
9752
+ code: `<!-- Storybook story: Wrap -->
9753
+ <div style="max-width: 520px">
9754
+ <uni-tag-group
9755
+ [items]="items"
9756
+ [value]="value"
9757
+ [multiple]="multiple"
9758
+ layout="justify"
9759
+ />
9760
+ </div>
9761
+ <!-- args:
9762
+ { value: ['engineering'] }
9763
+ -->`
9764
+ },
9765
+ {
9766
+ title: "Justify",
9767
+ framework: "angular",
9768
+ code: `<!-- Storybook story: Justify -->
9769
+ <div style="max-width: 520px">
9770
+ <uni-tag-group
9771
+ [items]="items"
9772
+ [value]="value"
9773
+ [multiple]="multiple"
9774
+ layout="justify"
9775
+ />
9776
+ </div>
9777
+ <!-- args:
9778
+ { layout: 'justify', value: ['design', 'security'] }
9779
+ -->`
9780
+ },
9781
+ {
9782
+ title: "Single Select",
9783
+ framework: "angular",
9784
+ code: `<!-- Storybook story: Single Select -->
9785
+ <div style="max-width: 520px">
9786
+ <uni-tag-group
9787
+ [items]="items"
9788
+ [value]="value"
9789
+ [multiple]="multiple"
9790
+ layout="justify"
9791
+ />
9792
+ </div>
9793
+ <!-- args:
9794
+ { multiple: false, value: ['legal'] }
9795
+ -->`
9796
+ },
9797
+ {
9798
+ title: "Mixed Chips",
9799
+ framework: "angular",
9800
+ code: `<!-- Storybook story: Mixed Chips -->
9801
+ <div style="max-width: 520px">
9802
+ <uni-tag-group
9803
+ [items]="items"
9804
+ [value]="value"
9805
+ [multiple]="multiple"
9806
+ layout="justify"
9807
+ />
9808
+ </div>
9809
+ <!-- args:
9810
+ {
9811
+ items: [
9812
+ { label: 'Starred', value: 'starred', iconName: 'star' },
9813
+ { label: 'Live', value: 'live', dot: true, variant: 'success' },
9814
+ { label: 'Alice Chen', value: 'alice', avatarName: 'Alice Chen' },
9815
+ { label: 'Blocked', value: 'blocked', variant: 'warn', tone: 'outline' },
9816
+ { label: 'Archived', value: 'archived', disabled: true },
9817
+ { label: 'Custom', value: 'custom', removable: true },
9818
+ ],
9819
+ }
9820
+ -->`
9821
+ }
9822
+ ],
9823
+ guidelines: {
9824
+ whenToUse: "A row of chips the user picks from: filters, facets, a set of labels. The group\nowns the two things an app was otherwise wiring on every chip \u2014 **which one is\nselected** and **which one holds the tab stop**.",
9825
+ dos: [
9826
+ "Give the group `multiple` when the filters combine, and leave it off when they",
9827
+ 'Reach for `layout="justify"` when the row is long enough to wrap \u2014 a single',
9828
+ "Put per-chip differences on the item (`variant`, `tone`, `iconName`)."
9829
+ ],
9830
+ donts: [
9831
+ "Don't bind `[selected]` on chips inside a group \u2014 that is the thing the group",
9832
+ "Don't use it for an open set the user types into; that is `uni-tag-input`.",
9833
+ "Don't reach for it as a generic chip row. With no selection to own it is just"
9834
+ ],
9835
+ accessibility: [
9836
+ '`role="toolbar"` with `aria-orientation="horizontal"`: one tab stop for the',
9837
+ "Arrow keys move within the group. Both axes work, because the row wraps \u2014",
9838
+ "The tab stop follows the last chip the user picked, so tabbing back into the",
9839
+ "Each chip announces its own state through `aria-pressed`, since each one is an"
9840
+ ]
9841
+ },
9842
+ relatedTokens: []
9843
+ },
9626
9844
  {
9627
9845
  id: "tag-input",
9628
9846
  name: "TagInput",
@@ -9630,7 +9848,7 @@ initialFocus="input"
9630
9848
  summary: "",
9631
9849
  description: "",
9632
9850
  category: "forms",
9633
- version: "11.0.0",
9851
+ version: "11.1.0",
9634
9852
  bindings: {
9635
9853
  angular: {
9636
9854
  importPath: "@uni-design-system/uni-angular",
@@ -9971,7 +10189,7 @@ placeholder="Name or address\u2026"
9971
10189
  summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
9972
10190
  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.',
9973
10191
  category: "primitives",
9974
- version: "11.0.0",
10192
+ version: "11.1.0",
9975
10193
  bindings: {
9976
10194
  angular: {
9977
10195
  importPath: "@uni-design-system/uni-angular",
@@ -10073,7 +10291,7 @@ placeholder="Name or address\u2026"
10073
10291
  summary: "",
10074
10292
  description: "",
10075
10293
  category: "forms",
10076
- version: "11.0.0",
10294
+ version: "11.1.0",
10077
10295
  bindings: {
10078
10296
  angular: {
10079
10297
  importPath: "@uni-design-system/uni-angular",
@@ -10280,7 +10498,7 @@ placeholder="Name or address\u2026"
10280
10498
  summary: "",
10281
10499
  description: "",
10282
10500
  category: "primitives",
10283
- version: "11.0.0",
10501
+ version: "11.1.0",
10284
10502
  bindings: {
10285
10503
  angular: {
10286
10504
  importPath: "@uni-design-system/uni-angular",
@@ -10310,7 +10528,7 @@ placeholder="Name or address\u2026"
10310
10528
  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).",
10311
10529
  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).",
10312
10530
  category: "components",
10313
- version: "11.0.0",
10531
+ version: "11.1.0",
10314
10532
  bindings: {
10315
10533
  angular: {
10316
10534
  importPath: "@uni-design-system/uni-angular",
@@ -10368,7 +10586,7 @@ placeholder="Name or address\u2026"
10368
10586
  summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
10369
10587
  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.",
10370
10588
  category: "forms",
10371
- version: "11.0.0",
10589
+ version: "11.1.0",
10372
10590
  bindings: {
10373
10591
  angular: {
10374
10592
  importPath: "@uni-design-system/uni-angular",
@@ -10583,7 +10801,7 @@ placeholder="Name or address\u2026"
10583
10801
  summary: "",
10584
10802
  description: "",
10585
10803
  category: "forms",
10586
- version: "11.0.0",
10804
+ version: "11.1.0",
10587
10805
  bindings: {
10588
10806
  angular: {
10589
10807
  importPath: "@uni-design-system/uni-angular",
@@ -10813,7 +11031,7 @@ placeholder="Name or address\u2026"
10813
11031
  summary: "",
10814
11032
  description: "",
10815
11033
  category: "feedback",
10816
- version: "11.0.0",
11034
+ version: "11.1.0",
10817
11035
  bindings: {
10818
11036
  angular: {
10819
11037
  importPath: "@uni-design-system/uni-angular",
@@ -10901,7 +11119,7 @@ placeholder="Name or address\u2026"
10901
11119
  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).',
10902
11120
  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.',
10903
11121
  category: "components",
10904
- version: "11.0.0",
11122
+ version: "11.1.0",
10905
11123
  bindings: {
10906
11124
  angular: {
10907
11125
  importPath: "@uni-design-system/uni-angular",
@@ -11028,7 +11246,7 @@ placeholder="Name or address\u2026"
11028
11246
  summary: "",
11029
11247
  description: "",
11030
11248
  category: "layout",
11031
- version: "11.0.0",
11249
+ version: "11.1.0",
11032
11250
  bindings: {
11033
11251
  angular: {
11034
11252
  importPath: "@uni-design-system/uni-angular",
@@ -12590,13 +12808,13 @@ placeholder="Name or address\u2026"
12590
12808
  },
12591
12809
  {
12592
12810
  id: "typography.tag",
12593
- value: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
12811
+ value: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":500}',
12594
12812
  type: "typography",
12595
12813
  kind: "style",
12596
12814
  target: "emotion-css",
12597
12815
  themeValues: {
12598
- LightTheme: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
12599
- DarkTheme: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}'
12816
+ LightTheme: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":500}',
12817
+ DarkTheme: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":500}'
12600
12818
  }
12601
12819
  },
12602
12820
  {
@@ -14938,6 +15156,42 @@ placeholder="Name or address\u2026"
14938
15156
  DarkTheme: "control"
14939
15157
  }
14940
15158
  },
15159
+ {
15160
+ id: "tag.behavior.endInset",
15161
+ value: "auto",
15162
+ type: "string",
15163
+ kind: "behavioral",
15164
+ target: "component-prop",
15165
+ appliesTo: "tag",
15166
+ themeValues: {
15167
+ LightTheme: "auto",
15168
+ DarkTheme: "auto"
15169
+ }
15170
+ },
15171
+ {
15172
+ id: "tagGroup.behavior.gap",
15173
+ value: "xs",
15174
+ type: "string",
15175
+ kind: "behavioral",
15176
+ target: "component-prop",
15177
+ appliesTo: "tagGroup",
15178
+ themeValues: {
15179
+ LightTheme: "xs",
15180
+ DarkTheme: "xs"
15181
+ }
15182
+ },
15183
+ {
15184
+ id: "tagGroup.behavior.rowGap",
15185
+ value: "xs",
15186
+ type: "string",
15187
+ kind: "behavioral",
15188
+ target: "component-prop",
15189
+ appliesTo: "tagGroup",
15190
+ themeValues: {
15191
+ LightTheme: "xs",
15192
+ DarkTheme: "xs"
15193
+ }
15194
+ },
14941
15195
  {
14942
15196
  id: "tagInput.behavior.chipGap",
14943
15197
  value: "xs",
@@ -16859,7 +17113,7 @@ placeholder="Name or address\u2026"
16859
17113
  "typography.note": '{"fontFamily":"Roboto","fontSize":14,"lineHeight":22,"fontStyle":"italic"}',
16860
17114
  "typography.badge": '{"fontFamily":"Red Hat Display","fontSize":16,"lineHeight":24}',
16861
17115
  "typography.stat": '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
16862
- "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
17116
+ "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":500}',
16863
17117
  "typography.input": '{"fontFamily":"Red Hat Display","fontSize":14,"lineHeight":24}'
16864
17118
  },
16865
17119
  componentOptions: {
@@ -17117,7 +17371,12 @@ placeholder="Name or address\u2026"
17117
17371
  gap: "xs",
17118
17372
  removeIcon: "close",
17119
17373
  selectedIcon: "check",
17120
- motion: "control"
17374
+ motion: "control",
17375
+ endInset: "auto"
17376
+ },
17377
+ tagGroup: {
17378
+ gap: "xs",
17379
+ rowGap: "xs"
17121
17380
  },
17122
17381
  tagInput: {
17123
17382
  chipGap: "xs",
@@ -17459,7 +17718,7 @@ placeholder="Name or address\u2026"
17459
17718
  "typography.note": '{"fontFamily":"Roboto","fontSize":14,"lineHeight":22,"fontStyle":"italic"}',
17460
17719
  "typography.badge": '{"fontFamily":"Red Hat Display","fontSize":16,"lineHeight":24}',
17461
17720
  "typography.stat": '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
17462
- "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
17721
+ "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":500}',
17463
17722
  "typography.input": '{"fontFamily":"Red Hat Display","fontSize":14,"lineHeight":24}'
17464
17723
  },
17465
17724
  componentOptions: {
@@ -17717,7 +17976,12 @@ placeholder="Name or address\u2026"
17717
17976
  gap: "xs",
17718
17977
  removeIcon: "close",
17719
17978
  selectedIcon: "check",
17720
- motion: "control"
17979
+ motion: "control",
17980
+ endInset: "auto"
17981
+ },
17982
+ tagGroup: {
17983
+ gap: "xs",
17984
+ rowGap: "xs"
17721
17985
  },
17722
17986
  tagInput: {
17723
17987
  chipGap: "xs",
@@ -17921,6 +18185,18 @@ placeholder="Name or address\u2026"
17921
18185
  {
17922
18186
  package: "@uni-design-system/uni-angular",
17923
18187
  releases: [
18188
+ {
18189
+ version: "11.1.0",
18190
+ entries: [
18191
+ {
18192
+ bump: "minor",
18193
+ title: "Selection, hover and density become theme decisions on `uni-tag`, and add `uni-tag-group`.",
18194
+ body: "`uni-tag` had the right axes but made the app do the work. `selected` painted nothing \u2014 it set `aria-pressed` and swapped the lead glyph \u2014 so every toggle chip in app markup carried a `[tone]=\"on() ? 'solid' : 'soft'\"` of its own. Interactive chips had no hover state at all. The selected check was added rather than reserved, so picking a chip reflowed the whole row.\n\n**Selection paints itself.** A selected chip adds a `tag-selected` class and an interactive one adds `tag-interactive`, both as much public theme contract as `&.tone-*` already was. The base theme's `tag` variants use them: selection promotes a chip to its role's solid pair at every tone (`solid` deepens instead of refilling), and `&.tag-interactive:hover` is a `brightness(0.95)` wash that darkens fill, ink and edge together. A theme restyling either writes the rules per variant, beside the colours they belong to.\n\n**A toggle chip holds the check's place.** Bind `selected` and the chip reserves the glyph's footprint while unselected, so picking one never resizes it. A chip that already has a lead needs no slot \u2014 the check replaces the avatar or icon at identical width.\n\n**`uni-tag-group`** is a row of chips the user picks from. It renders its own chips from `items` and owns the two things an app was otherwise wiring per chip: which one is selected (`value`, plus `multiple`) and which one holds the tab stop. Keyboard model is the toolbar pattern \u2014 one tab stop for the whole row, arrow keys within it, on both axes because the row wraps. `layout=\"justify\"` stretches each filled row flush to both edges and leaves the last row at its natural widths, the way justified text leaves its last line alone. It is themed as **`tagGroup`** (`gap`, `rowGap`, `chipSize`, `chipTone`, `chipVariant`), layout only \u2014 every colour decision stays on the chips, so a group restyles with them.\n\n**Visual changes to every existing chip**, including the chips inside `uni-tag-input`:\n- A lead element and the remove control now **tuck into the rounded end** instead of starting where the radius ends \u2014 each sits concentric with the curve it is in, so a small status dot sits further in than a full lead box. A lead is balanced against, so the **label sits centred**; the tuck costs less than the old gutter did, so that balance is largely paid for rather than added. A remove control is not balanced against on its own, since it reads as an affordance rather than as content \u2014 a chip with nothing but a remove button keeps its gutter and simply tucks the glyph. A chip whose ends are too square to flow into (`borderRadius: 'xs'`) keeps the size token's gutter at both ends.\n- The `tag` typeface drops from **weight 600 to 500**. Geometry is unchanged; what made these chips read louder than the ones they replaced was the weight, not the size.\n- `border-color` and `filter` join the transition list, so an outline\u2194solid change fades its edge instead of snapping while the fill animates, and the hover wash fades in.\n\nNew `tag` theme option **`endInset`** (`number | 'auto'`) sets how far that tuck goes; `auto` derives it from the chip so the lead sits concentric with the cap. The `tag` size tokens now state `paddingInline` rather than a `padding` shorthand, since the chip reads that number back to balance the label \u2014 a theme still stating the shorthand is parsed as before.\n\n`UniTagComponent` is now generic in its value (`UniTagComponent<T extends UniTagValue = UniTagValue>`), so `value`, `removed` and `activated` carry an app's own type and `$event` flows without a closure. The default type parameter leaves every existing use compiling unchanged.",
18195
+ commit: "d00b2fe"
18196
+ }
18197
+ ],
18198
+ dependencyBumps: []
18199
+ },
17924
18200
  {
17925
18201
  version: "11.0.0",
17926
18202
  entries: [
@@ -18753,6 +19029,18 @@ placeholder="Name or address\u2026"
18753
19029
  {
18754
19030
  package: "@uni-design-system/uni-core",
18755
19031
  releases: [
19032
+ {
19033
+ version: "11.1.0",
19034
+ entries: [
19035
+ {
19036
+ bump: "minor",
19037
+ title: "Selection, hover and density become theme decisions on `uni-tag`, and add `uni-tag-group`.",
19038
+ body: "`uni-tag` had the right axes but made the app do the work. `selected` painted nothing \u2014 it set `aria-pressed` and swapped the lead glyph \u2014 so every toggle chip in app markup carried a `[tone]=\"on() ? 'solid' : 'soft'\"` of its own. Interactive chips had no hover state at all. The selected check was added rather than reserved, so picking a chip reflowed the whole row.\n\n**Selection paints itself.** A selected chip adds a `tag-selected` class and an interactive one adds `tag-interactive`, both as much public theme contract as `&.tone-*` already was. The base theme's `tag` variants use them: selection promotes a chip to its role's solid pair at every tone (`solid` deepens instead of refilling), and `&.tag-interactive:hover` is a `brightness(0.95)` wash that darkens fill, ink and edge together. A theme restyling either writes the rules per variant, beside the colours they belong to.\n\n**A toggle chip holds the check's place.** Bind `selected` and the chip reserves the glyph's footprint while unselected, so picking one never resizes it. A chip that already has a lead needs no slot \u2014 the check replaces the avatar or icon at identical width.\n\n**`uni-tag-group`** is a row of chips the user picks from. It renders its own chips from `items` and owns the two things an app was otherwise wiring per chip: which one is selected (`value`, plus `multiple`) and which one holds the tab stop. Keyboard model is the toolbar pattern \u2014 one tab stop for the whole row, arrow keys within it, on both axes because the row wraps. `layout=\"justify\"` stretches each filled row flush to both edges and leaves the last row at its natural widths, the way justified text leaves its last line alone. It is themed as **`tagGroup`** (`gap`, `rowGap`, `chipSize`, `chipTone`, `chipVariant`), layout only \u2014 every colour decision stays on the chips, so a group restyles with them.\n\n**Visual changes to every existing chip**, including the chips inside `uni-tag-input`:\n- A lead element and the remove control now **tuck into the rounded end** instead of starting where the radius ends \u2014 each sits concentric with the curve it is in, so a small status dot sits further in than a full lead box. A lead is balanced against, so the **label sits centred**; the tuck costs less than the old gutter did, so that balance is largely paid for rather than added. A remove control is not balanced against on its own, since it reads as an affordance rather than as content \u2014 a chip with nothing but a remove button keeps its gutter and simply tucks the glyph. A chip whose ends are too square to flow into (`borderRadius: 'xs'`) keeps the size token's gutter at both ends.\n- The `tag` typeface drops from **weight 600 to 500**. Geometry is unchanged; what made these chips read louder than the ones they replaced was the weight, not the size.\n- `border-color` and `filter` join the transition list, so an outline\u2194solid change fades its edge instead of snapping while the fill animates, and the hover wash fades in.\n\nNew `tag` theme option **`endInset`** (`number | 'auto'`) sets how far that tuck goes; `auto` derives it from the chip so the lead sits concentric with the cap. The `tag` size tokens now state `paddingInline` rather than a `padding` shorthand, since the chip reads that number back to balance the label \u2014 a theme still stating the shorthand is parsed as before.\n\n`UniTagComponent` is now generic in its value (`UniTagComponent<T extends UniTagValue = UniTagValue>`), so `value`, `removed` and `activated` carry an app's own type and `$event` flows without a closure. The default type parameter leaves every existing use compiling unchanged.",
19039
+ commit: "d00b2fe"
19040
+ }
19041
+ ],
19042
+ dependencyBumps: []
19043
+ },
18756
19044
  {
18757
19045
  version: "11.0.0",
18758
19046
  entries: [
@@ -19361,6 +19649,11 @@ placeholder="Name or address\u2026"
19361
19649
  {
19362
19650
  package: "@uni-design-system/uni-react",
19363
19651
  releases: [
19652
+ {
19653
+ version: "11.1.0",
19654
+ entries: [],
19655
+ dependencyBumps: []
19656
+ },
19364
19657
  {
19365
19658
  version: "11.0.0",
19366
19659
  entries: [
@@ -19632,6 +19925,11 @@ placeholder="Name or address\u2026"
19632
19925
  {
19633
19926
  package: "@uni-design-system/uni-mcp",
19634
19927
  releases: [
19928
+ {
19929
+ version: "11.1.0",
19930
+ entries: [],
19931
+ dependencyBumps: []
19932
+ },
19635
19933
  {
19636
19934
  version: "11.0.0",
19637
19935
  entries: [
@@ -20870,7 +21168,7 @@ var BaseTypography = {
20870
21168
  fontFamily: "Red Hat Display",
20871
21169
  fontSize: 15,
20872
21170
  lineHeight: 20,
20873
- fontWeight: 600
21171
+ fontWeight: 500
20874
21172
  },
20875
21173
  input: {
20876
21174
  fontFamily: "Red Hat Display",
@@ -20965,14 +21263,26 @@ var SELECTION_ACCENTS = {
20965
21263
  var tagVariant = (c, role) => ({ [role]: {
20966
21264
  backgroundColor: c[`${role}-container`],
20967
21265
  color: c[`on-${role}-container`],
20968
- "&.tone-solid": {
21266
+ "&.tag-selected": {
20969
21267
  backgroundColor: c[role],
20970
21268
  color: c[`on-${role}`]
20971
21269
  },
21270
+ "&.tag-interactive:hover": { filter: "brightness(0.95)" },
21271
+ "&.tone-solid": {
21272
+ backgroundColor: c[role],
21273
+ color: c[`on-${role}`],
21274
+ "&.tag-selected": { filter: "brightness(0.9)" },
21275
+ "&.tag-selected.tag-interactive:hover": { filter: "brightness(0.85)" }
21276
+ },
20972
21277
  "&.tone-outline": {
20973
21278
  backgroundColor: "transparent",
20974
21279
  color: c[role],
20975
- borderColor: c[`on-${role}-container-border`] ?? c[role]
21280
+ borderColor: c[`on-${role}-container-border`] ?? c[role],
21281
+ "&.tag-selected": {
21282
+ backgroundColor: c[role],
21283
+ color: c[`on-${role}`],
21284
+ borderColor: c[role]
21285
+ }
20976
21286
  }
20977
21287
  } });
20978
21288
  var buildComponents = (c) => ({
@@ -21313,7 +21623,8 @@ var buildComponents = (c) => ({
21313
21623
  gap: "xs",
21314
21624
  removeIcon: "close",
21315
21625
  selectedIcon: "check",
21316
- motion: "control"
21626
+ motion: "control",
21627
+ endInset: "auto"
21317
21628
  },
21318
21629
  fixed: {
21319
21630
  display: "inline-flex",
@@ -21330,13 +21641,25 @@ var buildComponents = (c) => ({
21330
21641
  ghost: {
21331
21642
  backgroundColor: "transparent",
21332
21643
  color: c["on-background"],
21333
- "&.tone-solid": {
21644
+ "&.tag-selected": {
21334
21645
  backgroundColor: c["surface-variant"],
21335
21646
  color: c["on-surface-variant"]
21336
21647
  },
21648
+ "&.tag-interactive:hover": { filter: "brightness(0.95)" },
21649
+ "&.tone-solid": {
21650
+ backgroundColor: c["surface-variant"],
21651
+ color: c["on-surface-variant"],
21652
+ "&.tag-selected": { filter: "brightness(0.9)" },
21653
+ "&.tag-selected.tag-interactive:hover": { filter: "brightness(0.85)" }
21654
+ },
21337
21655
  "&.tone-outline": {
21338
21656
  backgroundColor: "transparent",
21339
- borderColor: c.outline
21657
+ borderColor: c.outline,
21658
+ "&.tag-selected": {
21659
+ backgroundColor: c["surface-variant"],
21660
+ color: c["on-surface-variant"],
21661
+ borderColor: c.outline
21662
+ }
21340
21663
  }
21341
21664
  },
21342
21665
  disabled: {
@@ -21356,20 +21679,31 @@ var buildComponents = (c) => ({
21356
21679
  sm: {
21357
21680
  height: 20,
21358
21681
  fontSize: 12,
21359
- padding: "0 8px"
21682
+ paddingInline: 8
21360
21683
  },
21361
21684
  md: {
21362
21685
  height: 24,
21363
21686
  fontSize: 13,
21364
- padding: "0 10px"
21687
+ paddingInline: 10
21365
21688
  },
21366
21689
  lg: {
21367
21690
  height: 32,
21368
21691
  fontSize: 15,
21369
- padding: "0 12px"
21692
+ paddingInline: 12
21370
21693
  }
21371
21694
  }
21372
21695
  },
21696
+ tagGroup: {
21697
+ options: {
21698
+ gap: "xs",
21699
+ rowGap: "xs"
21700
+ },
21701
+ fixed: {
21702
+ display: "flex",
21703
+ flexWrap: "wrap",
21704
+ alignItems: "center"
21705
+ }
21706
+ },
21373
21707
  tagInput: { options: {
21374
21708
  chipGap: "xs",
21375
21709
  chipSize: "md",
@@ -23212,4 +23546,4 @@ export {
23212
23546
  buildStoredTheme,
23213
23547
  createUniServer
23214
23548
  };
23215
- //# sourceMappingURL=chunk-RAD6CBGV.js.map
23549
+ //# sourceMappingURL=chunk-G5LYVS3L.js.map