@uni-design-system/uni-mcp 4.7.3 → 10.2.1

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,8 +7,8 @@ import { z } from "zod";
7
7
  // src/data/uni-index.json
8
8
  var uni_index_default = {
9
9
  meta: {
10
- version: "10.1.0",
11
- builtAt: "2026-08-31T19:56:38.627Z",
10
+ version: "10.2.1",
11
+ builtAt: "2026-09-01T22:40:17.762Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
@@ -27,7 +27,7 @@ var uni_index_default = {
27
27
  summary: "",
28
28
  description: "",
29
29
  category: "feedback",
30
- version: "10.1.0",
30
+ version: "10.2.1",
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: "10.1.0",
120
+ version: "10.2.1",
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: "10.1.0",
193
+ version: "10.2.1",
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: "10.1.0",
288
+ version: "10.2.1",
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: "10.1.0",
337
+ version: "10.2.1",
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: "10.1.0",
418
+ version: "10.2.1",
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: "10.1.0",
515
+ version: "10.2.1",
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: "10.1.0",
539
+ version: "10.2.1",
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: "10.1.0",
945
+ version: "10.2.1",
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: "10.1.0",
1030
+ version: "10.2.1",
1031
1031
  bindings: {
1032
1032
  angular: {
1033
1033
  importPath: "@uni-design-system/uni-angular",
@@ -1186,7 +1186,7 @@ var uni_index_default = {
1186
1186
  summary: "",
1187
1187
  description: "",
1188
1188
  category: "primitives",
1189
- version: "10.1.0",
1189
+ version: "10.2.1",
1190
1190
  bindings: {
1191
1191
  angular: {
1192
1192
  importPath: "@uni-design-system/uni-angular",
@@ -1218,7 +1218,7 @@ var uni_index_default = {
1218
1218
  summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
1219
1219
  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.",
1220
1220
  category: "forms",
1221
- version: "10.1.0",
1221
+ version: "10.2.1",
1222
1222
  bindings: {
1223
1223
  angular: {
1224
1224
  importPath: "@uni-design-system/uni-angular",
@@ -1452,7 +1452,7 @@ var uni_index_default = {
1452
1452
  summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
1453
1453
  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).',
1454
1454
  category: "components",
1455
- version: "10.1.0",
1455
+ version: "10.2.1",
1456
1456
  bindings: {
1457
1457
  angular: {
1458
1458
  importPath: "@uni-design-system/uni-angular",
@@ -1672,7 +1672,7 @@ var uni_index_default = {
1672
1672
  summary: "",
1673
1673
  description: "",
1674
1674
  category: "layout",
1675
- version: "10.1.0",
1675
+ version: "10.2.1",
1676
1676
  bindings: {
1677
1677
  angular: {
1678
1678
  importPath: "@uni-design-system/uni-angular",
@@ -1734,7 +1734,7 @@ var uni_index_default = {
1734
1734
  summary: "",
1735
1735
  description: "",
1736
1736
  category: "layout",
1737
- version: "10.1.0",
1737
+ version: "10.2.1",
1738
1738
  bindings: {
1739
1739
  angular: {
1740
1740
  importPath: "@uni-design-system/uni-angular",
@@ -1775,7 +1775,7 @@ var uni_index_default = {
1775
1775
  summary: "",
1776
1776
  description: "",
1777
1777
  category: "layout",
1778
- version: "10.1.0",
1778
+ version: "10.2.1",
1779
1779
  bindings: {
1780
1780
  angular: {
1781
1781
  importPath: "@uni-design-system/uni-angular",
@@ -1832,7 +1832,7 @@ var uni_index_default = {
1832
1832
  summary: "",
1833
1833
  description: "",
1834
1834
  category: "layout",
1835
- version: "10.1.0",
1835
+ version: "10.2.1",
1836
1836
  bindings: {
1837
1837
  angular: {
1838
1838
  importPath: "@uni-design-system/uni-angular",
@@ -1887,7 +1887,7 @@ var uni_index_default = {
1887
1887
  summary: "",
1888
1888
  description: "",
1889
1889
  category: "forms",
1890
- version: "10.1.0",
1890
+ version: "10.2.1",
1891
1891
  bindings: {
1892
1892
  angular: {
1893
1893
  importPath: "@uni-design-system/uni-angular",
@@ -1941,6 +1941,13 @@ var uni_index_default = {
1941
1941
  default: "false",
1942
1942
  description: "Synced from required() validators by the Signal Forms [formField] directive."
1943
1943
  },
1944
+ {
1945
+ name: "checkedColor",
1946
+ kind: "input",
1947
+ type: "ColorKey",
1948
+ required: false,
1949
+ description: "Accent colour token, overriding the variant's themed accent for one instance. Mirrors `uni-toggle`'s input of the same name \u2014 it exists because `variant` defaults to `'primary'`, so the component cannot tell \"set to primary\" from \"not set\"."
1950
+ },
1944
1951
  {
1945
1952
  name: "ariaDescribedBy",
1946
1953
  kind: "input",
@@ -2056,7 +2063,7 @@ var uni_index_default = {
2056
2063
  summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
2057
2064
  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.",
2058
2065
  category: "forms",
2059
- version: "10.1.0",
2066
+ version: "10.2.1",
2060
2067
  bindings: {
2061
2068
  angular: {
2062
2069
  importPath: "@uni-design-system/uni-angular",
@@ -2335,7 +2342,7 @@ emptyText="No countries found"
2335
2342
  summary: "",
2336
2343
  description: "",
2337
2344
  category: "feedback",
2338
- version: "10.1.0",
2345
+ version: "10.2.1",
2339
2346
  bindings: {
2340
2347
  angular: {
2341
2348
  importPath: "@uni-design-system/uni-angular",
@@ -2382,7 +2389,7 @@ emptyText="No countries found"
2382
2389
  summary: "",
2383
2390
  description: "",
2384
2391
  category: "forms",
2385
- version: "10.1.0",
2392
+ version: "10.2.1",
2386
2393
  bindings: {
2387
2394
  angular: {
2388
2395
  importPath: "@uni-design-system/uni-angular",
@@ -2481,7 +2488,7 @@ emptyText="No countries found"
2481
2488
  summary: "",
2482
2489
  description: "",
2483
2490
  category: "data",
2484
- version: "10.1.0",
2491
+ version: "10.2.1",
2485
2492
  bindings: {
2486
2493
  angular: {
2487
2494
  importPath: "@uni-design-system/uni-angular",
@@ -2721,7 +2728,7 @@ emptyText="No countries found"
2721
2728
  summary: "Date field with free-typed parsing and a popup calendar.",
2722
2729
  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.",
2723
2730
  category: "forms",
2724
- version: "10.1.0",
2731
+ version: "10.2.1",
2725
2732
  bindings: {
2726
2733
  angular: {
2727
2734
  importPath: "@uni-design-system/uni-angular",
@@ -2945,7 +2952,7 @@ emptyText="No countries found"
2945
2952
  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.",
2946
2953
  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.",
2947
2954
  category: "forms",
2948
- version: "10.1.0",
2955
+ version: "10.2.1",
2949
2956
  bindings: {
2950
2957
  angular: {
2951
2958
  importPath: "@uni-design-system/uni-angular",
@@ -3131,7 +3138,7 @@ emptyText="No countries found"
3131
3138
  summary: "Text input that emits `change` only after the user pauses typing.",
3132
3139
  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.",
3133
3140
  category: "forms",
3134
- version: "10.1.0",
3141
+ version: "10.2.1",
3135
3142
  bindings: {
3136
3143
  angular: {
3137
3144
  importPath: "@uni-design-system/uni-angular",
@@ -3279,7 +3286,7 @@ emptyText="No countries found"
3279
3286
  summary: "",
3280
3287
  description: "",
3281
3288
  category: "feedback",
3282
- version: "10.1.0",
3289
+ version: "10.2.1",
3283
3290
  bindings: {
3284
3291
  angular: {
3285
3292
  importPath: "@uni-design-system/uni-angular",
@@ -3373,7 +3380,7 @@ emptyText="No countries found"
3373
3380
  summary: "",
3374
3381
  description: "",
3375
3382
  category: "feedback",
3376
- version: "10.1.0",
3383
+ version: "10.2.1",
3377
3384
  bindings: {
3378
3385
  angular: {
3379
3386
  importPath: "@uni-design-system/uni-angular",
@@ -3477,7 +3484,7 @@ emptyText="No countries found"
3477
3484
  summary: "",
3478
3485
  description: "",
3479
3486
  category: "feedback",
3480
- version: "10.1.0",
3487
+ version: "10.2.1",
3481
3488
  bindings: {
3482
3489
  angular: {
3483
3490
  importPath: "@uni-design-system/uni-angular",
@@ -3518,7 +3525,7 @@ emptyText="No countries found"
3518
3525
  summary: "",
3519
3526
  description: "",
3520
3527
  category: "layout",
3521
- version: "10.1.0",
3528
+ version: "10.2.1",
3522
3529
  bindings: {
3523
3530
  angular: {
3524
3531
  importPath: "@uni-design-system/uni-angular",
@@ -3574,7 +3581,7 @@ emptyText="No countries found"
3574
3581
  summary: "",
3575
3582
  description: "",
3576
3583
  category: "directives",
3577
- version: "10.1.0",
3584
+ version: "10.2.1",
3578
3585
  bindings: {
3579
3586
  angular: {
3580
3587
  importPath: "@uni-design-system/uni-angular",
@@ -3606,7 +3613,7 @@ emptyText="No countries found"
3606
3613
  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.",
3607
3614
  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.",
3608
3615
  category: "components",
3609
- version: "10.1.0",
3616
+ version: "10.2.1",
3610
3617
  bindings: {
3611
3618
  angular: {
3612
3619
  importPath: "@uni-design-system/uni-angular",
@@ -3796,7 +3803,7 @@ initialFocus="input"
3796
3803
  summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
3797
3804
  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.",
3798
3805
  category: "primitives",
3799
- version: "10.1.0",
3806
+ version: "10.2.1",
3800
3807
  bindings: {
3801
3808
  angular: {
3802
3809
  importPath: "@uni-design-system/uni-angular",
@@ -3893,7 +3900,7 @@ initialFocus="input"
3893
3900
  summary: "The drawer's pinned header row: a title, and optionally a close button.",
3894
3901
  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.",
3895
3902
  category: "components",
3896
- version: "10.1.0",
3903
+ version: "10.2.1",
3897
3904
  bindings: {
3898
3905
  angular: {
3899
3906
  importPath: "@uni-design-system/uni-angular",
@@ -3941,7 +3948,7 @@ initialFocus="input"
3941
3948
  summary: "",
3942
3949
  description: "",
3943
3950
  category: "components",
3944
- version: "10.1.0",
3951
+ version: "10.2.1",
3945
3952
  bindings: {
3946
3953
  angular: {
3947
3954
  importPath: "@uni-design-system/uni-angular",
@@ -4075,7 +4082,7 @@ initialFocus="input"
4075
4082
  summary: "",
4076
4083
  description: "",
4077
4084
  category: "layout",
4078
- version: "10.1.0",
4085
+ version: "10.2.1",
4079
4086
  bindings: {
4080
4087
  angular: {
4081
4088
  importPath: "@uni-design-system/uni-angular",
@@ -4179,7 +4186,7 @@ initialFocus="input"
4179
4186
  summary: "",
4180
4187
  description: "",
4181
4188
  category: "layout",
4182
- version: "10.1.0",
4189
+ version: "10.2.1",
4183
4190
  bindings: {
4184
4191
  angular: {
4185
4192
  importPath: "@uni-design-system/uni-angular",
@@ -4250,7 +4257,7 @@ initialFocus="input"
4250
4257
  summary: "Trigger for a {@link UniExpandComponent} region.",
4251
4258
  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.",
4252
4259
  category: "layout",
4253
- version: "10.1.0",
4260
+ version: "10.2.1",
4254
4261
  bindings: {
4255
4262
  angular: {
4256
4263
  importPath: "@uni-design-system/uni-angular",
@@ -4335,7 +4342,7 @@ initialFocus="input"
4335
4342
  summary: "",
4336
4343
  description: "",
4337
4344
  category: "forms",
4338
- version: "10.1.0",
4345
+ version: "10.2.1",
4339
4346
  bindings: {
4340
4347
  angular: {
4341
4348
  importPath: "@uni-design-system/uni-angular",
@@ -4493,7 +4500,7 @@ initialFocus="input"
4493
4500
  summary: "",
4494
4501
  description: "",
4495
4502
  category: "layout",
4496
- version: "10.1.0",
4503
+ version: "10.2.1",
4497
4504
  bindings: {
4498
4505
  angular: {
4499
4506
  importPath: "@uni-design-system/uni-angular",
@@ -4590,7 +4597,7 @@ initialFocus="input"
4590
4597
  summary: "",
4591
4598
  description: "",
4592
4599
  category: "layout",
4593
- version: "10.1.0",
4600
+ version: "10.2.1",
4594
4601
  bindings: {
4595
4602
  angular: {
4596
4603
  importPath: "@uni-design-system/uni-angular",
@@ -4622,7 +4629,7 @@ initialFocus="input"
4622
4629
  summary: "",
4623
4630
  description: "",
4624
4631
  category: "primitives",
4625
- version: "10.1.0",
4632
+ version: "10.2.1",
4626
4633
  bindings: {
4627
4634
  angular: {
4628
4635
  importPath: "@uni-design-system/uni-angular",
@@ -4682,7 +4689,7 @@ initialFocus="input"
4682
4689
  summary: "",
4683
4690
  description: "",
4684
4691
  category: "primitives",
4685
- version: "10.1.0",
4692
+ version: "10.2.1",
4686
4693
  bindings: {
4687
4694
  angular: {
4688
4695
  importPath: "@uni-design-system/uni-angular",
@@ -4785,7 +4792,7 @@ initialFocus="input"
4785
4792
  summary: "",
4786
4793
  description: "",
4787
4794
  category: "forms",
4788
- version: "10.1.0",
4795
+ version: "10.2.1",
4789
4796
  bindings: {
4790
4797
  angular: {
4791
4798
  importPath: "@uni-design-system/uni-angular",
@@ -5063,7 +5070,7 @@ initialFocus="input"
5063
5070
  summary: "",
5064
5071
  description: "",
5065
5072
  category: "forms",
5066
- version: "10.1.0",
5073
+ version: "10.2.1",
5067
5074
  bindings: {
5068
5075
  angular: {
5069
5076
  importPath: "@uni-design-system/uni-angular",
@@ -5184,7 +5191,7 @@ initialFocus="input"
5184
5191
  summary: "",
5185
5192
  description: "",
5186
5193
  category: "components",
5187
- version: "10.1.0",
5194
+ version: "10.2.1",
5188
5195
  bindings: {
5189
5196
  angular: {
5190
5197
  importPath: "@uni-design-system/uni-angular",
@@ -5254,7 +5261,7 @@ initialFocus="input"
5254
5261
  summary: "",
5255
5262
  description: "",
5256
5263
  category: "layout",
5257
- version: "10.1.0",
5264
+ version: "10.2.1",
5258
5265
  bindings: {
5259
5266
  angular: {
5260
5267
  importPath: "@uni-design-system/uni-angular",
@@ -5358,7 +5365,7 @@ initialFocus="input"
5358
5365
  summary: "",
5359
5366
  description: "",
5360
5367
  category: "layout",
5361
- version: "10.1.0",
5368
+ version: "10.2.1",
5362
5369
  bindings: {
5363
5370
  angular: {
5364
5371
  importPath: "@uni-design-system/uni-angular",
@@ -5440,7 +5447,7 @@ initialFocus="input"
5440
5447
  summary: "",
5441
5448
  description: "",
5442
5449
  category: "forms",
5443
- version: "10.1.0",
5450
+ version: "10.2.1",
5444
5451
  bindings: {
5445
5452
  angular: {
5446
5453
  importPath: "@uni-design-system/uni-angular",
@@ -5534,7 +5541,7 @@ initialFocus="input"
5534
5541
  summary: "",
5535
5542
  description: "",
5536
5543
  category: "forms",
5537
- version: "10.1.0",
5544
+ version: "10.2.1",
5538
5545
  bindings: {
5539
5546
  angular: {
5540
5547
  importPath: "@uni-design-system/uni-angular",
@@ -5706,7 +5713,7 @@ initialFocus="input"
5706
5713
  summary: "",
5707
5714
  description: "",
5708
5715
  category: "feedback",
5709
- version: "10.1.0",
5716
+ version: "10.2.1",
5710
5717
  bindings: {
5711
5718
  angular: {
5712
5719
  importPath: "@uni-design-system/uni-angular",
@@ -5966,7 +5973,7 @@ initialFocus="input"
5966
5973
  summary: "",
5967
5974
  description: "",
5968
5975
  category: "feedback",
5969
- version: "10.1.0",
5976
+ version: "10.2.1",
5970
5977
  bindings: {
5971
5978
  angular: {
5972
5979
  importPath: "@uni-design-system/uni-angular",
@@ -5990,7 +5997,7 @@ initialFocus="input"
5990
5997
  summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
5991
5998
  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.',
5992
5999
  category: "forms",
5993
- version: "10.1.0",
6000
+ version: "10.2.1",
5994
6001
  bindings: {
5995
6002
  angular: {
5996
6003
  importPath: "@uni-design-system/uni-angular",
@@ -6409,7 +6416,7 @@ initialFocus="input"
6409
6416
  summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
6410
6417
  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.",
6411
6418
  category: "forms",
6412
- version: "10.1.0",
6419
+ version: "10.2.1",
6413
6420
  bindings: {
6414
6421
  angular: {
6415
6422
  importPath: "@uni-design-system/uni-angular",
@@ -6691,7 +6698,7 @@ initialFocus="input"
6691
6698
  summary: "",
6692
6699
  description: "",
6693
6700
  category: "data",
6694
- version: "10.1.0",
6701
+ version: "10.2.1",
6695
6702
  bindings: {
6696
6703
  angular: {
6697
6704
  importPath: "@uni-design-system/uni-angular",
@@ -6792,7 +6799,7 @@ initialFocus="input"
6792
6799
  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.",
6793
6800
  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.',
6794
6801
  category: "layout",
6795
- version: "10.1.0",
6802
+ version: "10.2.1",
6796
6803
  bindings: {
6797
6804
  angular: {
6798
6805
  importPath: "@uni-design-system/uni-angular",
@@ -6984,7 +6991,7 @@ initialFocus="input"
6984
6991
  summary: "",
6985
6992
  description: "",
6986
6993
  category: "feedback",
6987
- version: "10.1.0",
6994
+ version: "10.2.1",
6988
6995
  bindings: {
6989
6996
  angular: {
6990
6997
  importPath: "@uni-design-system/uni-angular",
@@ -7048,7 +7055,7 @@ initialFocus="input"
7048
7055
  summary: "",
7049
7056
  description: "",
7050
7057
  category: "feedback",
7051
- version: "10.1.0",
7058
+ version: "10.2.1",
7052
7059
  bindings: {
7053
7060
  angular: {
7054
7061
  importPath: "@uni-design-system/uni-angular",
@@ -7120,7 +7127,7 @@ initialFocus="input"
7120
7127
  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.",
7121
7128
  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.',
7122
7129
  category: "forms",
7123
- version: "10.1.0",
7130
+ version: "10.2.1",
7124
7131
  bindings: {
7125
7132
  angular: {
7126
7133
  importPath: "@uni-design-system/uni-angular",
@@ -7316,7 +7323,7 @@ initialFocus="input"
7316
7323
  summary: "",
7317
7324
  description: "",
7318
7325
  category: "forms",
7319
- version: "10.1.0",
7326
+ version: "10.2.1",
7320
7327
  bindings: {
7321
7328
  angular: {
7322
7329
  importPath: "@uni-design-system/uni-angular",
@@ -7370,6 +7377,13 @@ initialFocus="input"
7370
7377
  default: "false",
7371
7378
  description: "Synced from required() validators by the Signal Forms [formField] directive."
7372
7379
  },
7380
+ {
7381
+ name: "checkedColor",
7382
+ kind: "input",
7383
+ type: "ColorKey",
7384
+ required: false,
7385
+ description: "Accent colour token, overriding the variant's themed accent for one instance. Mirrors the input of the same name on `uni-checkbox` and `uni-toggle`."
7386
+ },
7373
7387
  {
7374
7388
  name: "ariaDescribedBy",
7375
7389
  kind: "input",
@@ -7500,7 +7514,7 @@ initialFocus="input"
7500
7514
  summary: "",
7501
7515
  description: "",
7502
7516
  category: "directives",
7503
- version: "10.1.0",
7517
+ version: "10.2.1",
7504
7518
  bindings: {
7505
7519
  angular: {
7506
7520
  importPath: "@uni-design-system/uni-angular",
@@ -7524,7 +7538,7 @@ initialFocus="input"
7524
7538
  summary: "",
7525
7539
  description: "",
7526
7540
  category: "layout",
7527
- version: "10.1.0",
7541
+ version: "10.2.1",
7528
7542
  bindings: {
7529
7543
  angular: {
7530
7544
  importPath: "@uni-design-system/uni-angular",
@@ -7579,7 +7593,7 @@ initialFocus="input"
7579
7593
  summary: "Native scroll area with theme-driven scrollbar styling.",
7580
7594
  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.",
7581
7595
  category: "layout",
7582
- version: "10.1.0",
7596
+ version: "10.2.1",
7583
7597
  bindings: {
7584
7598
  angular: {
7585
7599
  importPath: "@uni-design-system/uni-angular",
@@ -7726,7 +7740,7 @@ initialFocus="input"
7726
7740
  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.",
7727
7741
  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.",
7728
7742
  category: "forms",
7729
- version: "10.1.0",
7743
+ version: "10.2.1",
7730
7744
  bindings: {
7731
7745
  angular: {
7732
7746
  importPath: "@uni-design-system/uni-angular",
@@ -7853,7 +7867,7 @@ initialFocus="input"
7853
7867
  summary: "",
7854
7868
  description: "",
7855
7869
  category: "forms",
7856
- version: "10.1.0",
7870
+ version: "10.2.1",
7857
7871
  bindings: {
7858
7872
  angular: {
7859
7873
  importPath: "@uni-design-system/uni-angular",
@@ -8019,7 +8033,7 @@ initialFocus="input"
8019
8033
  summary: "Loading placeholder painted with surface tokens.",
8020
8034
  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.",
8021
8035
  category: "components",
8022
- version: "10.1.0",
8036
+ version: "10.2.1",
8023
8037
  bindings: {
8024
8038
  angular: {
8025
8039
  importPath: "@uni-design-system/uni-angular",
@@ -8170,7 +8184,7 @@ initialFocus="input"
8170
8184
  summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
8171
8185
  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.",
8172
8186
  category: "forms",
8173
- version: "10.1.0",
8187
+ version: "10.2.1",
8174
8188
  bindings: {
8175
8189
  angular: {
8176
8190
  importPath: "@uni-design-system/uni-angular",
@@ -8437,7 +8451,7 @@ initialFocus="input"
8437
8451
  summary: "",
8438
8452
  description: "",
8439
8453
  category: "feedback",
8440
- version: "10.1.0",
8454
+ version: "10.2.1",
8441
8455
  bindings: {
8442
8456
  angular: {
8443
8457
  importPath: "@uni-design-system/uni-angular",
@@ -8549,7 +8563,7 @@ initialFocus="input"
8549
8563
  summary: "",
8550
8564
  description: "",
8551
8565
  category: "data",
8552
- version: "10.1.0",
8566
+ version: "10.2.1",
8553
8567
  bindings: {
8554
8568
  angular: {
8555
8569
  importPath: "@uni-design-system/uni-angular",
@@ -8608,7 +8622,7 @@ initialFocus="input"
8608
8622
  summary: "",
8609
8623
  description: "",
8610
8624
  category: "layout",
8611
- version: "10.1.0",
8625
+ version: "10.2.1",
8612
8626
  bindings: {
8613
8627
  angular: {
8614
8628
  importPath: "@uni-design-system/uni-angular",
@@ -8663,7 +8677,7 @@ initialFocus="input"
8663
8677
  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.',
8664
8678
  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.',
8665
8679
  category: "components",
8666
- version: "10.1.0",
8680
+ version: "10.2.1",
8667
8681
  bindings: {
8668
8682
  angular: {
8669
8683
  importPath: "@uni-design-system/uni-angular",
@@ -8781,7 +8795,7 @@ initialFocus="input"
8781
8795
  summary: "",
8782
8796
  description: "",
8783
8797
  category: "primitives",
8784
- version: "10.1.0",
8798
+ version: "10.2.1",
8785
8799
  bindings: {
8786
8800
  angular: {
8787
8801
  importPath: "@uni-design-system/uni-angular",
@@ -8870,7 +8884,7 @@ initialFocus="input"
8870
8884
  summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
8871
8885
  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.",
8872
8886
  category: "components",
8873
- version: "10.1.0",
8887
+ version: "10.2.1",
8874
8888
  bindings: {
8875
8889
  angular: {
8876
8890
  importPath: "@uni-design-system/uni-angular",
@@ -8910,7 +8924,7 @@ initialFocus="input"
8910
8924
  summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
8911
8925
  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.",
8912
8926
  category: "components",
8913
- version: "10.1.0",
8927
+ version: "10.2.1",
8914
8928
  bindings: {
8915
8929
  angular: {
8916
8930
  importPath: "@uni-design-system/uni-angular",
@@ -8990,7 +9004,7 @@ initialFocus="input"
8990
9004
  summary: "Compact chip for categories, states, filters and tokens.",
8991
9005
  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.",
8992
9006
  category: "data",
8993
- version: "10.1.0",
9007
+ version: "10.2.1",
8994
9008
  bindings: {
8995
9009
  angular: {
8996
9010
  importPath: "@uni-design-system/uni-angular",
@@ -9347,7 +9361,7 @@ initialFocus="input"
9347
9361
  summary: "",
9348
9362
  description: "",
9349
9363
  category: "forms",
9350
- version: "10.1.0",
9364
+ version: "10.2.1",
9351
9365
  bindings: {
9352
9366
  angular: {
9353
9367
  importPath: "@uni-design-system/uni-angular",
@@ -9680,7 +9694,7 @@ placeholder="Name or address\u2026"
9680
9694
  summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
9681
9695
  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.',
9682
9696
  category: "primitives",
9683
- version: "10.1.0",
9697
+ version: "10.2.1",
9684
9698
  bindings: {
9685
9699
  angular: {
9686
9700
  importPath: "@uni-design-system/uni-angular",
@@ -9782,7 +9796,7 @@ placeholder="Name or address\u2026"
9782
9796
  summary: "",
9783
9797
  description: "",
9784
9798
  category: "forms",
9785
- version: "10.1.0",
9799
+ version: "10.2.1",
9786
9800
  bindings: {
9787
9801
  angular: {
9788
9802
  importPath: "@uni-design-system/uni-angular",
@@ -9982,7 +9996,7 @@ placeholder="Name or address\u2026"
9982
9996
  summary: "",
9983
9997
  description: "",
9984
9998
  category: "primitives",
9985
- version: "10.1.0",
9999
+ version: "10.2.1",
9986
10000
  bindings: {
9987
10001
  angular: {
9988
10002
  importPath: "@uni-design-system/uni-angular",
@@ -10012,7 +10026,7 @@ placeholder="Name or address\u2026"
10012
10026
  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).",
10013
10027
  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).",
10014
10028
  category: "components",
10015
- version: "10.1.0",
10029
+ version: "10.2.1",
10016
10030
  bindings: {
10017
10031
  angular: {
10018
10032
  importPath: "@uni-design-system/uni-angular",
@@ -10070,7 +10084,7 @@ placeholder="Name or address\u2026"
10070
10084
  summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
10071
10085
  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.",
10072
10086
  category: "forms",
10073
- version: "10.1.0",
10087
+ version: "10.2.1",
10074
10088
  bindings: {
10075
10089
  angular: {
10076
10090
  importPath: "@uni-design-system/uni-angular",
@@ -10278,7 +10292,7 @@ placeholder="Name or address\u2026"
10278
10292
  summary: "",
10279
10293
  description: "",
10280
10294
  category: "forms",
10281
- version: "10.1.0",
10295
+ version: "10.2.1",
10282
10296
  bindings: {
10283
10297
  angular: {
10284
10298
  importPath: "@uni-design-system/uni-angular",
@@ -10501,7 +10515,7 @@ placeholder="Name or address\u2026"
10501
10515
  summary: "",
10502
10516
  description: "",
10503
10517
  category: "feedback",
10504
- version: "10.1.0",
10518
+ version: "10.2.1",
10505
10519
  bindings: {
10506
10520
  angular: {
10507
10521
  importPath: "@uni-design-system/uni-angular",
@@ -10588,7 +10602,7 @@ placeholder="Name or address\u2026"
10588
10602
  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).',
10589
10603
  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.',
10590
10604
  category: "components",
10591
- version: "10.1.0",
10605
+ version: "10.2.1",
10592
10606
  bindings: {
10593
10607
  angular: {
10594
10608
  importPath: "@uni-design-system/uni-angular",
@@ -10715,7 +10729,7 @@ placeholder="Name or address\u2026"
10715
10729
  summary: "",
10716
10730
  description: "",
10717
10731
  category: "layout",
10718
- version: "10.1.0",
10732
+ version: "10.2.1",
10719
10733
  bindings: {
10720
10734
  angular: {
10721
10735
  importPath: "@uni-design-system/uni-angular",
@@ -17211,6 +17225,29 @@ placeholder="Name or address\u2026"
17211
17225
  {
17212
17226
  package: "@uni-design-system/uni-angular",
17213
17227
  releases: [
17228
+ {
17229
+ version: "10.2.1",
17230
+ entries: [],
17231
+ dependencyBumps: []
17232
+ },
17233
+ {
17234
+ version: "10.2.0",
17235
+ entries: [
17236
+ {
17237
+ bump: "minor",
17238
+ title: "Checkbox, radio and toggle take their accent from the theme, not from the",
17239
+ body: "variant's name.\n\n**Twelve sites across the three controls resolved a variant name as a colour\ntoken.** That held together only because every name in the closed union happened\nto also be a colour. Under an open registry the coincidence ends by design:\n`<uni-checkbox variant=\"destructive\">` would look up `colors['destructive']`,\nmiss, and **silently render primary** \u2014 a wrong-coloured control with no error,\nno warning, and nothing to grep for.\n\nCheckbox was worse than it looked. Alongside five `getThemeColor` calls it had\ntwo more through a second resolver that built `on-${variant}`, so an\nunregistered intent also missed its paired content colour and fell back to\n`on-primary` \u2014 the tick would have stayed light on a dark fill even after the\nbox was fixed.\n\nThe theme now says which colour draws each intent, through a new\n`variantOptions` map on `ComponentTheme`:\n\n```ts\ncheckbox: {\n variantOptions: {\n primary: { accent: 'primary' },\n warn: { accent: 'warn' },\n },\n}\n```\n\n`variantOptions` is per-variant data a component **reads**, as against `variants`,\nwhich is CSS that gets **applied**. The distinction earns its place here: a\ncheckbox's accent lands on the box outline, the checked and indeterminate fills,\nthe tick and the focus ring at once, and expressing that as CSS would have meant\nthe theme naming `.checkbox-check` and `.radio-inner` \u2014 promoting private DOM to\npublic theme contract.\n\nAll three controls gain a `checkedColor` input as the per-instance override,\nmatching the one `uni-toggle` already had; its resolution order is now input \u2192\nthe variant's themed accent \u2192 theme option. The base theme defines the same\nseven intents `button` and `iconButton` do, so the library is consistent about\nwhich exist by default, and `getThemeColor` \u2014 triplicated byte-for-byte across\nthe three components, with a silent fallback to primary \u2014 is gone.\n\nRendering is unchanged for anything that does not set `variant`: the default\nstill resolves to the primary accent and its paired on-colour.",
17240
+ commit: "1cd0140"
17241
+ },
17242
+ {
17243
+ bump: "minor",
17244
+ title: "`Variant` is an open registry: a design system can define its own intents.",
17245
+ body: "A variant names _what an action means_, and it is the theme's job to describe\nhow that intent is drawn. So the set of names was never Uni's to fix \u2014 an app\nwhose actions are `destructive`, `subtle` and `info` had to translate them onto\ntwelve names chosen elsewhere. `Variant` is now `keyof UniVariantRegistry`,\nextended by declaration merging:\n\n```ts\ndeclare module '@uni-design-system/uni-core' {\n interface UniVariantRegistry {\n destructive: true;\n }\n}\n```\n\n`variant=\"destructive\"` then compiles wherever a variant is accepted, and\n`variant=\"destructve\"` still does not \u2014 which the library's other open-token\nidiom, `Named | (string & {})`, cannot give you, and which would also have\ncollapsed the theme's `variants` map keys to `string`.\n\nOnly the type was ever closed: theme validation checks the _shape_ of a\n`variants` block and never its key names, so a custom variant already reached\n`componentStyle` untouched at runtime.\n\n**The registry extends; it cannot replace.** Declaration merging has no way to\nremove a member, so Uni's twelve names stay legal in a consuming app; enforcing\na house set is a lint concern rather than a type. Two names are reserved and\ndocumented as always present: `primary`, which every component inherits as its\ndefault, and `disabled`, which the disabled state resolves to.\n\n**An unthemed variant now says so.** With a closed union this was nearly\nimpossible; with an open set it is the ordinary state of a work in progress \u2014\na variant registered and used before its theme block exists. The theme service\nwarns once per component and variant in dev, naming what the theme does define,\nmirroring what it already did for an unknown spacing token. Components that\ntheme no variants at all stay silent, since a missing key there is not a gap.",
17246
+ commit: "1cd0140"
17247
+ }
17248
+ ],
17249
+ dependencyBumps: []
17250
+ },
17214
17251
  {
17215
17252
  version: "10.1.0",
17216
17253
  entries: [
@@ -17952,6 +17989,29 @@ placeholder="Name or address\u2026"
17952
17989
  {
17953
17990
  package: "@uni-design-system/uni-core",
17954
17991
  releases: [
17992
+ {
17993
+ version: "10.2.1",
17994
+ entries: [],
17995
+ dependencyBumps: []
17996
+ },
17997
+ {
17998
+ version: "10.2.0",
17999
+ entries: [
18000
+ {
18001
+ bump: "minor",
18002
+ title: "Checkbox, radio and toggle take their accent from the theme, not from the",
18003
+ body: "variant's name.\n\n**Twelve sites across the three controls resolved a variant name as a colour\ntoken.** That held together only because every name in the closed union happened\nto also be a colour. Under an open registry the coincidence ends by design:\n`<uni-checkbox variant=\"destructive\">` would look up `colors['destructive']`,\nmiss, and **silently render primary** \u2014 a wrong-coloured control with no error,\nno warning, and nothing to grep for.\n\nCheckbox was worse than it looked. Alongside five `getThemeColor` calls it had\ntwo more through a second resolver that built `on-${variant}`, so an\nunregistered intent also missed its paired content colour and fell back to\n`on-primary` \u2014 the tick would have stayed light on a dark fill even after the\nbox was fixed.\n\nThe theme now says which colour draws each intent, through a new\n`variantOptions` map on `ComponentTheme`:\n\n```ts\ncheckbox: {\n variantOptions: {\n primary: { accent: 'primary' },\n warn: { accent: 'warn' },\n },\n}\n```\n\n`variantOptions` is per-variant data a component **reads**, as against `variants`,\nwhich is CSS that gets **applied**. The distinction earns its place here: a\ncheckbox's accent lands on the box outline, the checked and indeterminate fills,\nthe tick and the focus ring at once, and expressing that as CSS would have meant\nthe theme naming `.checkbox-check` and `.radio-inner` \u2014 promoting private DOM to\npublic theme contract.\n\nAll three controls gain a `checkedColor` input as the per-instance override,\nmatching the one `uni-toggle` already had; its resolution order is now input \u2192\nthe variant's themed accent \u2192 theme option. The base theme defines the same\nseven intents `button` and `iconButton` do, so the library is consistent about\nwhich exist by default, and `getThemeColor` \u2014 triplicated byte-for-byte across\nthe three components, with a silent fallback to primary \u2014 is gone.\n\nRendering is unchanged for anything that does not set `variant`: the default\nstill resolves to the primary accent and its paired on-colour.",
18004
+ commit: "1cd0140"
18005
+ },
18006
+ {
18007
+ bump: "minor",
18008
+ title: "`Variant` is an open registry: a design system can define its own intents.",
18009
+ body: "A variant names _what an action means_, and it is the theme's job to describe\nhow that intent is drawn. So the set of names was never Uni's to fix \u2014 an app\nwhose actions are `destructive`, `subtle` and `info` had to translate them onto\ntwelve names chosen elsewhere. `Variant` is now `keyof UniVariantRegistry`,\nextended by declaration merging:\n\n```ts\ndeclare module '@uni-design-system/uni-core' {\n interface UniVariantRegistry {\n destructive: true;\n }\n}\n```\n\n`variant=\"destructive\"` then compiles wherever a variant is accepted, and\n`variant=\"destructve\"` still does not \u2014 which the library's other open-token\nidiom, `Named | (string & {})`, cannot give you, and which would also have\ncollapsed the theme's `variants` map keys to `string`.\n\nOnly the type was ever closed: theme validation checks the _shape_ of a\n`variants` block and never its key names, so a custom variant already reached\n`componentStyle` untouched at runtime.\n\n**The registry extends; it cannot replace.** Declaration merging has no way to\nremove a member, so Uni's twelve names stay legal in a consuming app; enforcing\na house set is a lint concern rather than a type. Two names are reserved and\ndocumented as always present: `primary`, which every component inherits as its\ndefault, and `disabled`, which the disabled state resolves to.\n\n**An unthemed variant now says so.** With a closed union this was nearly\nimpossible; with an open set it is the ordinary state of a work in progress \u2014\na variant registered and used before its theme block exists. The theme service\nwarns once per component and variant in dev, naming what the theme does define,\nmirroring what it already did for an unknown spacing token. Components that\ntheme no variants at all stay silent, since a missing key there is not a gap.",
18010
+ commit: "1cd0140"
18011
+ }
18012
+ ],
18013
+ dependencyBumps: []
18014
+ },
17955
18015
  {
17956
18016
  version: "10.1.0",
17957
18017
  entries: [
@@ -18465,6 +18525,16 @@ placeholder="Name or address\u2026"
18465
18525
  {
18466
18526
  package: "@uni-design-system/uni-react",
18467
18527
  releases: [
18528
+ {
18529
+ version: "10.2.1",
18530
+ entries: [],
18531
+ dependencyBumps: []
18532
+ },
18533
+ {
18534
+ version: "10.2.0",
18535
+ entries: [],
18536
+ dependencyBumps: []
18537
+ },
18468
18538
  {
18469
18539
  version: "10.1.0",
18470
18540
  entries: [],
@@ -18698,6 +18768,30 @@ placeholder="Name or address\u2026"
18698
18768
  {
18699
18769
  package: "@uni-design-system/uni-mcp",
18700
18770
  releases: [
18771
+ {
18772
+ version: "10.2.1",
18773
+ entries: [
18774
+ {
18775
+ bump: "patch",
18776
+ title: "The published MCP server carries the index for its own release.",
18777
+ body: "`uni-mcp@10.2.0` shipped a bundle whose index was stamped `meta.version:\ncheck which release the server describes said the previous one \u2014 the same drift\nthe version alignment had just been made to end.\n\nThe cause was ordering, not data. `tsup` **inlines** `uni-index.json` into the\nbundle, so the dist built during the verify step was stamped before\n`changeset version` ran; publishing then shipped that stale bundle even though\nthe regenerated index was correctly committed to the repo. `version-packages`\nnow rebuilds `uni-mcp` after regenerating the index, so the artifact and its\nsource agree.\n\nThe general rule, for anything added later: a package whose dist embeds\nrelease-time data has to be rebuilt _after_ the version bump, not before.",
18778
+ commit: "704e79b"
18779
+ }
18780
+ ],
18781
+ dependencyBumps: []
18782
+ },
18783
+ {
18784
+ version: "10.2.0",
18785
+ entries: [
18786
+ {
18787
+ bump: "patch",
18788
+ title: "The MCP server now shares the library's version number.",
18789
+ body: "It used to release on its own `4.x` line while the library was on `10.x`, which\nhad two consequences. Pinning was impossible: the README told you to match the\nserver to your installed `@uni-design-system/uni-angular` version, but\n`uni-mcp@10.1.0` did not exist. And staleness was silent \u2014 the index is\nregenerated on every release, stamped with that release's version and **inlined\ninto the published bundle**, yet the package only republished when someone\nremembered a changeset for it. Miss one and the server keeps describing the\nprevious release while reporting a version that gives no hint of it.\n\n`uni-mcp` joins `uni-core`, `uni-react` and `uni-angular` in the changesets\n`fixed` group, so it always shares their version and always republishes. The\nversion therefore jumps from `4.7.3` to match the current release. Nothing about\nthe server's behaviour, transport or tools changes.\n\n`uni-mcp@<version>` now describes `uni-angular@<version>`, so pinning them\ntogether does what the docs always claimed it did.",
18790
+ commit: "2b8d80f"
18791
+ }
18792
+ ],
18793
+ dependencyBumps: []
18794
+ },
18701
18795
  {
18702
18796
  version: "4.7.3",
18703
18797
  entries: [
@@ -19958,6 +20052,18 @@ var buildBorders = (c) => ({
19958
20052
  dark: `1px solid ${c["on-background"]}`,
19959
20053
  dotted: `1px dotted ${c["on-background"]}`
19960
20054
  });
20055
+ var SELECTION_ACCENTS = {
20056
+ primary: { accent: "primary" },
20057
+ secondary: { accent: "secondary" },
20058
+ tertiary: { accent: "tertiary" },
20059
+ warn: { accent: "warn" },
20060
+ success: { accent: "success" },
20061
+ disabled: { accent: "disabled" },
20062
+ ghost: {
20063
+ accent: "ghost",
20064
+ onAccent: "on-primary"
20065
+ }
20066
+ };
19961
20067
  var tagVariant = (c, role) => ({ [role]: {
19962
20068
  backgroundColor: c[`${role}-container`],
19963
20069
  color: c[`on-${role}-container`],
@@ -20094,18 +20200,24 @@ var buildComponents = (c) => ({
20094
20200
  activeColor: "primary-container",
20095
20201
  maxSuggestions: 8
20096
20202
  } },
20097
- checkbox: { options: {
20098
- size: 20,
20099
- boxColor: "surface",
20100
- borderRadius: 2,
20101
- focusRingGap: 2
20102
- } },
20103
- radio: { options: {
20104
- size: 20,
20105
- ringColor: "outline",
20106
- fillColor: "surface",
20107
- motion: "control"
20108
- } },
20203
+ checkbox: {
20204
+ options: {
20205
+ size: 20,
20206
+ boxColor: "surface",
20207
+ borderRadius: 2,
20208
+ focusRingGap: 2
20209
+ },
20210
+ variantOptions: SELECTION_ACCENTS
20211
+ },
20212
+ radio: {
20213
+ options: {
20214
+ size: 20,
20215
+ ringColor: "outline",
20216
+ fillColor: "surface",
20217
+ motion: "control"
20218
+ },
20219
+ variantOptions: SELECTION_ACCENTS
20220
+ },
20109
20221
  dialog: { options: {
20110
20222
  borderRadius: "lg",
20111
20223
  color: "primary-surface",
@@ -20167,13 +20279,16 @@ var buildComponents = (c) => ({
20167
20279
  activeSymbol: "check",
20168
20280
  motion: "control"
20169
20281
  },
20170
- variants: { warn: {
20171
- color: c.warn,
20172
- [HOVER_OR_KEYBOARD_FOCUS]: {
20173
- backgroundColor: c["warn-container"],
20174
- color: c["on-warn-container"]
20282
+ variants: {
20283
+ primary: {},
20284
+ warn: {
20285
+ color: c.warn,
20286
+ [HOVER_OR_KEYBOARD_FOCUS]: {
20287
+ backgroundColor: c["warn-container"],
20288
+ color: c["on-warn-container"]
20289
+ }
20175
20290
  }
20176
- } }
20291
+ }
20177
20292
  },
20178
20293
  popover: { options: {
20179
20294
  color: "primary-surface",
@@ -20722,6 +20837,7 @@ var buildComponents = (c) => ({
20722
20837
  knobColor: "surface",
20723
20838
  motion: "control"
20724
20839
  },
20840
+ variantOptions: SELECTION_ACCENTS,
20725
20841
  sizes: {
20726
20842
  sm: {
20727
20843
  width: 28,
@@ -21401,6 +21517,17 @@ var checkComponents = (value, issues) => {
21401
21517
  }
21402
21518
  for (const [key, style] of Object.entries(styles)) if (style !== void 0) checkStyleExpression(style, `components.${name}.${section}.${key}`, issues);
21403
21519
  }
21520
+ const variantOptions = entry["variantOptions"];
21521
+ if (variantOptions !== void 0) {
21522
+ if (!isRecord(variantOptions)) issues.push({
21523
+ path: `components.${name}.variantOptions`,
21524
+ message: "must be an object"
21525
+ });
21526
+ else for (const [key, roles] of Object.entries(variantOptions)) if (roles !== void 0 && !isRecord(roles)) issues.push({
21527
+ path: `components.${name}.variantOptions.${key}`,
21528
+ message: "must be an object"
21529
+ });
21530
+ }
21404
21531
  if (entry["options"] !== void 0 && !isRecord(entry["options"])) issues.push({
21405
21532
  path: `components.${name}.options`,
21406
21533
  message: "must be an object"
@@ -22131,4 +22258,4 @@ export {
22131
22258
  buildStoredTheme,
22132
22259
  createUniServer
22133
22260
  };
22134
- //# sourceMappingURL=chunk-MK73QVY4.js.map
22261
+ //# sourceMappingURL=chunk-JMAG4RA3.js.map