@uni-design-system/uni-mcp 10.4.0 → 11.0.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: "10.4.0",
11
- builtAt: "2026-09-04T18:00:08.990Z",
10
+ version: "11.0.0",
11
+ builtAt: "2026-09-07T13:37:31.297Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 84,
17
- tokens: 458,
16
+ components: 85,
17
+ tokens: 482,
18
18
  themes: 2,
19
- examples: 229
19
+ examples: 233
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: "10.4.0",
30
+ version: "11.0.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: "10.4.0",
120
+ version: "11.0.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: "10.4.0",
193
+ version: "11.0.0",
194
194
  bindings: {
195
195
  angular: {
196
196
  importPath: "@uni-design-system/uni-angular",
@@ -275,7 +275,7 @@ var uni_index_default = {
275
275
  relatedTokens: [
276
276
  "avatar.behavior.borderRadius",
277
277
  "avatar.behavior.typeface",
278
- "avatar.behavior.fallbackSymbol"
278
+ "avatar.behavior.fallbackIcon"
279
279
  ]
280
280
  },
281
281
  {
@@ -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.4.0",
288
+ version: "11.0.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: "10.4.0",
337
+ version: "11.0.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: "10.4.0",
418
+ version: "11.0.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: "10.4.0",
515
+ version: "11.0.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: "10.4.0",
539
+ version: "11.0.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: "10.4.0",
945
+ version: "11.0.0",
946
946
  bindings: {
947
947
  angular: {
948
948
  importPath: "@uni-design-system/uni-angular",
@@ -1016,7 +1016,7 @@ var uni_index_default = {
1016
1016
  "breadcrumb.behavior.typeface",
1017
1017
  "breadcrumb.behavior.color",
1018
1018
  "breadcrumb.behavior.currentColor",
1019
- "breadcrumb.behavior.separatorSymbol",
1019
+ "breadcrumb.behavior.separatorIcon",
1020
1020
  "breadcrumb.behavior.gap"
1021
1021
  ]
1022
1022
  },
@@ -1027,7 +1027,7 @@ var uni_index_default = {
1027
1027
  summary: "",
1028
1028
  description: "",
1029
1029
  category: "primitives",
1030
- version: "10.4.0",
1030
+ version: "11.0.0",
1031
1031
  bindings: {
1032
1032
  angular: {
1033
1033
  importPath: "@uni-design-system/uni-angular",
@@ -1176,7 +1176,8 @@ var uni_index_default = {
1176
1176
  },
1177
1177
  relatedTokens: [
1178
1178
  "button.behavior.borderRadius",
1179
- "button.behavior.typeface"
1179
+ "button.behavior.typeface",
1180
+ "button.behavior.motion"
1180
1181
  ]
1181
1182
  },
1182
1183
  {
@@ -1186,7 +1187,7 @@ var uni_index_default = {
1186
1187
  summary: "",
1187
1188
  description: "",
1188
1189
  category: "primitives",
1189
- version: "10.4.0",
1190
+ version: "11.0.0",
1190
1191
  bindings: {
1191
1192
  angular: {
1192
1193
  importPath: "@uni-design-system/uni-angular",
@@ -1218,7 +1219,7 @@ var uni_index_default = {
1218
1219
  summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
1219
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.",
1220
1221
  category: "forms",
1221
- version: "10.4.0",
1222
+ version: "11.0.0",
1222
1223
  bindings: {
1223
1224
  angular: {
1224
1225
  importPath: "@uni-design-system/uni-angular",
@@ -1247,6 +1248,13 @@ var uni_index_default = {
1247
1248
  default: "false",
1248
1249
  description: ""
1249
1250
  },
1251
+ {
1252
+ name: "touch",
1253
+ kind: "output",
1254
+ type: "void",
1255
+ required: false,
1256
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
1257
+ },
1250
1258
  {
1251
1259
  name: "invalid",
1252
1260
  kind: "input",
@@ -1438,8 +1446,8 @@ var uni_index_default = {
1438
1446
  "calendar.behavior.dayBorderRadius",
1439
1447
  "calendar.behavior.typeface",
1440
1448
  "calendar.behavior.gap",
1441
- "calendar.behavior.navPrevSymbol",
1442
- "calendar.behavior.navNextSymbol",
1449
+ "calendar.behavior.navPrevIcon",
1450
+ "calendar.behavior.navNextIcon",
1443
1451
  "calendar.behavior.weekdayFormat",
1444
1452
  "calendar.behavior.showOutsideDays",
1445
1453
  "calendar.behavior.todayStyle"
@@ -1452,7 +1460,7 @@ var uni_index_default = {
1452
1460
  summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
1453
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).',
1454
1462
  category: "components",
1455
- version: "10.4.0",
1463
+ version: "11.0.0",
1456
1464
  bindings: {
1457
1465
  angular: {
1458
1466
  importPath: "@uni-design-system/uni-angular",
@@ -1655,7 +1663,7 @@ var uni_index_default = {
1655
1663
  "callout.behavior.padding",
1656
1664
  "callout.behavior.headerTypeface",
1657
1665
  "callout.behavior.typeface",
1658
- "callout.behavior.closeSymbol",
1666
+ "callout.behavior.closeIcon",
1659
1667
  "callout.behavior.arrowSize",
1660
1668
  "callout.behavior.offset",
1661
1669
  "callout.behavior.scrimColor",
@@ -1672,7 +1680,7 @@ var uni_index_default = {
1672
1680
  summary: "",
1673
1681
  description: "",
1674
1682
  category: "layout",
1675
- version: "10.4.0",
1683
+ version: "11.0.0",
1676
1684
  bindings: {
1677
1685
  angular: {
1678
1686
  importPath: "@uni-design-system/uni-angular",
@@ -1734,7 +1742,7 @@ var uni_index_default = {
1734
1742
  summary: "",
1735
1743
  description: "",
1736
1744
  category: "layout",
1737
- version: "10.4.0",
1745
+ version: "11.0.0",
1738
1746
  bindings: {
1739
1747
  angular: {
1740
1748
  importPath: "@uni-design-system/uni-angular",
@@ -1775,7 +1783,7 @@ var uni_index_default = {
1775
1783
  summary: "",
1776
1784
  description: "",
1777
1785
  category: "layout",
1778
- version: "10.4.0",
1786
+ version: "11.0.0",
1779
1787
  bindings: {
1780
1788
  angular: {
1781
1789
  importPath: "@uni-design-system/uni-angular",
@@ -1832,7 +1840,7 @@ var uni_index_default = {
1832
1840
  summary: "",
1833
1841
  description: "",
1834
1842
  category: "layout",
1835
- version: "10.4.0",
1843
+ version: "11.0.0",
1836
1844
  bindings: {
1837
1845
  angular: {
1838
1846
  importPath: "@uni-design-system/uni-angular",
@@ -1887,7 +1895,7 @@ var uni_index_default = {
1887
1895
  summary: "",
1888
1896
  description: "",
1889
1897
  category: "forms",
1890
- version: "10.4.0",
1898
+ version: "11.0.0",
1891
1899
  bindings: {
1892
1900
  angular: {
1893
1901
  importPath: "@uni-design-system/uni-angular",
@@ -1917,6 +1925,13 @@ var uni_index_default = {
1917
1925
  default: "false",
1918
1926
  description: ""
1919
1927
  },
1928
+ {
1929
+ name: "touch",
1930
+ kind: "output",
1931
+ type: "void",
1932
+ required: false,
1933
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
1934
+ },
1920
1935
  {
1921
1936
  name: "invalid",
1922
1937
  kind: "input",
@@ -2050,6 +2065,7 @@ var uni_index_default = {
2050
2065
  ]
2051
2066
  },
2052
2067
  relatedTokens: [
2068
+ "checkbox.behavior.motion",
2053
2069
  "checkbox.behavior.size",
2054
2070
  "checkbox.behavior.boxColor",
2055
2071
  "checkbox.behavior.borderRadius",
@@ -2063,7 +2079,7 @@ var uni_index_default = {
2063
2079
  summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
2064
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.",
2065
2081
  category: "forms",
2066
- version: "10.4.0",
2082
+ version: "11.0.0",
2067
2083
  bindings: {
2068
2084
  angular: {
2069
2085
  importPath: "@uni-design-system/uni-angular",
@@ -2093,6 +2109,13 @@ var uni_index_default = {
2093
2109
  default: "false",
2094
2110
  description: ""
2095
2111
  },
2112
+ {
2113
+ name: "touch",
2114
+ kind: "output",
2115
+ type: "void",
2116
+ required: false,
2117
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
2118
+ },
2096
2119
  {
2097
2120
  name: "invalid",
2098
2121
  kind: "input",
@@ -2342,7 +2365,7 @@ emptyText="No countries found"
2342
2365
  summary: "",
2343
2366
  description: "",
2344
2367
  category: "feedback",
2345
- version: "10.4.0",
2368
+ version: "11.0.0",
2346
2369
  bindings: {
2347
2370
  angular: {
2348
2371
  importPath: "@uni-design-system/uni-angular",
@@ -2389,7 +2412,7 @@ emptyText="No countries found"
2389
2412
  summary: "",
2390
2413
  description: "",
2391
2414
  category: "forms",
2392
- version: "10.4.0",
2415
+ version: "11.0.0",
2393
2416
  bindings: {
2394
2417
  angular: {
2395
2418
  importPath: "@uni-design-system/uni-angular",
@@ -2488,7 +2511,7 @@ emptyText="No countries found"
2488
2511
  summary: "",
2489
2512
  description: "",
2490
2513
  category: "data",
2491
- version: "10.4.0",
2514
+ version: "11.0.0",
2492
2515
  bindings: {
2493
2516
  angular: {
2494
2517
  importPath: "@uni-design-system/uni-angular",
@@ -2728,7 +2751,7 @@ emptyText="No countries found"
2728
2751
  summary: "Date field with free-typed parsing and a popup calendar.",
2729
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.",
2730
2753
  category: "forms",
2731
- version: "10.4.0",
2754
+ version: "11.0.0",
2732
2755
  bindings: {
2733
2756
  angular: {
2734
2757
  importPath: "@uni-design-system/uni-angular",
@@ -2757,6 +2780,13 @@ emptyText="No countries found"
2757
2780
  default: "false",
2758
2781
  description: ""
2759
2782
  },
2783
+ {
2784
+ name: "touch",
2785
+ kind: "output",
2786
+ type: "void",
2787
+ required: false,
2788
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
2789
+ },
2760
2790
  {
2761
2791
  name: "invalid",
2762
2792
  kind: "input",
@@ -2952,7 +2982,7 @@ emptyText="No countries found"
2952
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.",
2953
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.",
2954
2984
  category: "forms",
2955
- version: "10.4.0",
2985
+ version: "11.0.0",
2956
2986
  bindings: {
2957
2987
  angular: {
2958
2988
  importPath: "@uni-design-system/uni-angular",
@@ -2981,6 +3011,13 @@ emptyText="No countries found"
2981
3011
  default: "false",
2982
3012
  description: ""
2983
3013
  },
3014
+ {
3015
+ name: "touch",
3016
+ kind: "output",
3017
+ type: "void",
3018
+ required: false,
3019
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
3020
+ },
2984
3021
  {
2985
3022
  name: "invalid",
2986
3023
  kind: "input",
@@ -3138,7 +3175,7 @@ emptyText="No countries found"
3138
3175
  summary: "Text input that emits `change` only after the user pauses typing.",
3139
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.",
3140
3177
  category: "forms",
3141
- version: "10.4.0",
3178
+ version: "11.0.0",
3142
3179
  bindings: {
3143
3180
  angular: {
3144
3181
  importPath: "@uni-design-system/uni-angular",
@@ -3286,7 +3323,7 @@ emptyText="No countries found"
3286
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]`.",
3287
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.",
3288
3325
  category: "feedback",
3289
- version: "10.4.0",
3326
+ version: "11.0.0",
3290
3327
  bindings: {
3291
3328
  angular: {
3292
3329
  importPath: "@uni-design-system/uni-angular",
@@ -3439,7 +3476,7 @@ uni-dialog
3439
3476
  summary: "",
3440
3477
  description: "",
3441
3478
  category: "feedback",
3442
- version: "10.4.0",
3479
+ version: "11.0.0",
3443
3480
  bindings: {
3444
3481
  angular: {
3445
3482
  importPath: "@uni-design-system/uni-angular",
@@ -3543,7 +3580,7 @@ uni-dialog
3543
3580
  summary: "",
3544
3581
  description: "",
3545
3582
  category: "feedback",
3546
- version: "10.4.0",
3583
+ version: "11.0.0",
3547
3584
  bindings: {
3548
3585
  angular: {
3549
3586
  importPath: "@uni-design-system/uni-angular",
@@ -3584,7 +3621,7 @@ uni-dialog
3584
3621
  summary: "",
3585
3622
  description: "",
3586
3623
  category: "layout",
3587
- version: "10.4.0",
3624
+ version: "11.0.0",
3588
3625
  bindings: {
3589
3626
  angular: {
3590
3627
  importPath: "@uni-design-system/uni-angular",
@@ -3640,7 +3677,7 @@ uni-dialog
3640
3677
  summary: "",
3641
3678
  description: "",
3642
3679
  category: "directives",
3643
- version: "10.4.0",
3680
+ version: "11.0.0",
3644
3681
  bindings: {
3645
3682
  angular: {
3646
3683
  importPath: "@uni-design-system/uni-angular",
@@ -3672,7 +3709,7 @@ uni-dialog
3672
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.",
3673
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.",
3674
3711
  category: "components",
3675
- version: "10.4.0",
3712
+ version: "11.0.0",
3676
3713
  bindings: {
3677
3714
  angular: {
3678
3715
  importPath: "@uni-design-system/uni-angular",
@@ -3863,7 +3900,7 @@ initialFocus="input"
3863
3900
  summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
3864
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.",
3865
3902
  category: "primitives",
3866
- version: "10.4.0",
3903
+ version: "11.0.0",
3867
3904
  bindings: {
3868
3905
  angular: {
3869
3906
  importPath: "@uni-design-system/uni-angular",
@@ -3960,7 +3997,7 @@ initialFocus="input"
3960
3997
  summary: "The drawer's pinned header row: a title, and optionally a close button.",
3961
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.",
3962
3999
  category: "components",
3963
- version: "10.4.0",
4000
+ version: "11.0.0",
3964
4001
  bindings: {
3965
4002
  angular: {
3966
4003
  importPath: "@uni-design-system/uni-angular",
@@ -4008,7 +4045,7 @@ initialFocus="input"
4008
4045
  summary: "",
4009
4046
  description: "",
4010
4047
  category: "components",
4011
- version: "10.4.0",
4048
+ version: "11.0.0",
4012
4049
  bindings: {
4013
4050
  angular: {
4014
4051
  importPath: "@uni-design-system/uni-angular",
@@ -4142,7 +4179,7 @@ initialFocus="input"
4142
4179
  summary: "",
4143
4180
  description: "",
4144
4181
  category: "layout",
4145
- version: "10.4.0",
4182
+ version: "11.0.0",
4146
4183
  bindings: {
4147
4184
  angular: {
4148
4185
  importPath: "@uni-design-system/uni-angular",
@@ -4246,7 +4283,7 @@ initialFocus="input"
4246
4283
  summary: "",
4247
4284
  description: "",
4248
4285
  category: "layout",
4249
- version: "10.4.0",
4286
+ version: "11.0.0",
4250
4287
  bindings: {
4251
4288
  angular: {
4252
4289
  importPath: "@uni-design-system/uni-angular",
@@ -4317,7 +4354,7 @@ initialFocus="input"
4317
4354
  summary: "Trigger for a {@link UniExpandComponent} region.",
4318
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.",
4319
4356
  category: "layout",
4320
- version: "10.4.0",
4357
+ version: "11.0.0",
4321
4358
  bindings: {
4322
4359
  angular: {
4323
4360
  importPath: "@uni-design-system/uni-angular",
@@ -4402,7 +4439,7 @@ initialFocus="input"
4402
4439
  summary: "",
4403
4440
  description: "",
4404
4441
  category: "forms",
4405
- version: "10.4.0",
4442
+ version: "11.0.0",
4406
4443
  bindings: {
4407
4444
  angular: {
4408
4445
  importPath: "@uni-design-system/uni-angular",
@@ -4560,7 +4597,7 @@ initialFocus="input"
4560
4597
  summary: "",
4561
4598
  description: "",
4562
4599
  category: "layout",
4563
- version: "10.4.0",
4600
+ version: "11.0.0",
4564
4601
  bindings: {
4565
4602
  angular: {
4566
4603
  importPath: "@uni-design-system/uni-angular",
@@ -4657,7 +4694,7 @@ initialFocus="input"
4657
4694
  summary: "",
4658
4695
  description: "",
4659
4696
  category: "layout",
4660
- version: "10.4.0",
4697
+ version: "11.0.0",
4661
4698
  bindings: {
4662
4699
  angular: {
4663
4700
  importPath: "@uni-design-system/uni-angular",
@@ -4689,7 +4726,7 @@ initialFocus="input"
4689
4726
  summary: "",
4690
4727
  description: "",
4691
4728
  category: "primitives",
4692
- version: "10.4.0",
4729
+ version: "11.0.0",
4693
4730
  bindings: {
4694
4731
  angular: {
4695
4732
  importPath: "@uni-design-system/uni-angular",
@@ -4749,7 +4786,7 @@ initialFocus="input"
4749
4786
  summary: "",
4750
4787
  description: "",
4751
4788
  category: "primitives",
4752
- version: "10.4.0",
4789
+ version: "11.0.0",
4753
4790
  bindings: {
4754
4791
  angular: {
4755
4792
  importPath: "@uni-design-system/uni-angular",
@@ -4845,6 +4882,121 @@ initialFocus="input"
4845
4882
  },
4846
4883
  relatedTokens: []
4847
4884
  },
4885
+ {
4886
+ id: "inline-button",
4887
+ name: "InlineButton",
4888
+ status: "stable",
4889
+ summary: "A button that lives inside a sentence.",
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
+ category: "primitives",
4892
+ version: "11.0.0",
4893
+ bindings: {
4894
+ angular: {
4895
+ importPath: "@uni-design-system/uni-angular",
4896
+ selectorOrTag: "button[uni-inline-button], button[inline-button]",
4897
+ api: [
4898
+ {
4899
+ name: "iconName",
4900
+ kind: "input",
4901
+ type: "IconName",
4902
+ required: false,
4903
+ description: "Theme icon token rendered beside the label. Prefer this over `symbolName`."
4904
+ },
4905
+ {
4906
+ name: "symbolName",
4907
+ kind: "input",
4908
+ type: "string",
4909
+ required: false,
4910
+ description: "Material Symbols ligature, for glyphs the theme's icon set doesn't carry."
4911
+ },
4912
+ {
4913
+ name: "iconPosition",
4914
+ kind: "input",
4915
+ type: "'start' | 'end'",
4916
+ required: false,
4917
+ default: "'start'",
4918
+ description: "Which side of the label the glyph sits on."
4919
+ },
4920
+ {
4921
+ name: "link",
4922
+ kind: "input",
4923
+ type: "unknown",
4924
+ required: false,
4925
+ default: "false, { transform: booleanAttribute }",
4926
+ description: "Paint the label with the theme's link colour instead of inheriting the ink."
4927
+ },
4928
+ {
4929
+ name: "disable",
4930
+ kind: "input",
4931
+ type: "unknown",
4932
+ required: false,
4933
+ default: "false, { transform: booleanAttribute }",
4934
+ description: ""
4935
+ },
4936
+ {
4937
+ name: "variant",
4938
+ kind: "input",
4939
+ type: "Variant",
4940
+ required: false,
4941
+ default: "'primary'",
4942
+ description: "Style archetype from the theme. Inherited from BaseComponent."
4943
+ },
4944
+ {
4945
+ name: "size",
4946
+ kind: "input",
4947
+ type: "Size",
4948
+ required: false,
4949
+ default: "'lg'",
4950
+ description: "Size token from the theme. Inherited from BaseComponent. Only has an effect where the component theme defines a `sizes` block."
4951
+ }
4952
+ ]
4953
+ }
4954
+ },
4955
+ examples: [
4956
+ {
4957
+ title: "In Prose",
4958
+ framework: "angular",
4959
+ code: '<!-- Storybook story: In Prose -->\n<p uni-text="body-1-long" style="max-width: 46ch">\nYour data is processed under the terms you accepted at sign-up. You can\n<button inline-button [underline]="underline" [link]="link" [disable]="disable"\n [iconName]="iconName" [symbolName]="symbolName" [iconPosition]="iconPosition">review them</button>\nat any time, or\n<button inline-button [underline]="underline" [link]="link">export everything</button>\nas a single archive.\n</p>\n<!-- args:\n{ underline: true, link: true }\n-->'
4960
+ },
4961
+ {
4962
+ title: "Against A Ghost Button",
4963
+ framework: "angular",
4964
+ code: '<!-- Storybook story: Against A Ghost Button -->\n<div style="display: grid; gap: 16px; max-width: 46ch">\n<p uni-text="body-1-long">\n Inline button: read the <button inline-button underline>privacy policy</button> before continuing.\n</p>\n<p uni-text="body-1-long">\n Ghost button: read the <button text-button variant="ghost">privacy policy</button> before continuing.\n</p>\n</div>'
4965
+ },
4966
+ {
4967
+ title: "With A Glyph",
4968
+ framework: "angular",
4969
+ code: '<!-- Storybook story: With A Glyph -->\n<div style="display: grid; gap: 16px; max-width: 46ch">\n<p uni-text="body-1-long">\n Opens elsewhere:\n <button inline-button link underline iconName="externalLink" iconPosition="end">the full report</button>.\n</p>\n<p uni-text="caption">\n Same control at caption size:\n <button inline-button link underline iconName="externalLink" iconPosition="end">the full report</button>.\n</p>\n<p uni-text="headline-small">\n And in a headline:\n <button inline-button link underline iconName="externalLink" iconPosition="end">the full report</button>.\n</p>\n</div>'
4970
+ },
4971
+ {
4972
+ title: "Long Labels Stay Whole",
4973
+ framework: "angular",
4974
+ code: '<!-- Storybook story: Long Labels Stay Whole -->\n<div style="display: grid; gap: 16px; max-width: 20ch">\n<p uni-text="body-1-long">\n Short label: <button inline-button underline>review terms</button> whenever you like.\n</p>\n<p uni-text="body-1-long">\n Long label: <button inline-button underline>review the terms of processing</button> whenever you like.\n</p>\n</div>'
4975
+ }
4976
+ ],
4977
+ guidelines: {
4978
+ whenToUse: "An action that lives **inside a sentence**.\nEvery other button in the library owns a box. Even `ghost` is a flex box with a\nhit area, horizontal padding and its own type scale, so dropping one into a\nparagraph takes it out of the run of text and onto a line of its own. This one\nadds no box at all: it inherits the surrounding type \u2014 family, size, weight,\nline height, letter spacing and colour \u2014 and renders as part of the sentence.",
4979
+ dos: [
4980
+ "Use it for actions inside running text: opening a dialog, revealing a section, undoing the last change",
4981
+ "Keep the label to a few words, so it never has to wrap",
4982
+ "Pair `link` with `underline`, so the action is not marked by colour alone",
4983
+ "Write a label that says what the action does on its own \u2014 it is the accessible name"
4984
+ ],
4985
+ donts: [
4986
+ "Reach for it where a link belongs; if the thing goes somewhere, use an `<a>`",
4987
+ "Set a px size on the glyph \u2014 the `em` sizing is what lets one markup read correctly from caption to headline",
4988
+ "Leave it undecorated *and* turn `underlineOnHover` off, which hides the action entirely",
4989
+ "Use it as a primary action; a paragraph is not where a form's Submit lives"
4990
+ ],
4991
+ accessibility: [
4992
+ "A real `<button>`: native focus, Enter/Space activation and `disabled` semantics, so nothing has to be re-implemented with key handlers",
4993
+ "The focus ring is the library's shared ring, drawn on the control rather than on the paragraph, and `focusColor` retunes it per theme",
4994
+ "The glyph is decorative and hidden from assistive tech; the label carries the accessible name",
4995
+ "Underlining is a visual affordance only \u2014 do not rely on colour alone to mark the action"
4996
+ ]
4997
+ },
4998
+ relatedTokens: []
4999
+ },
4848
5000
  {
4849
5001
  id: "input",
4850
5002
  name: "Input",
@@ -4852,7 +5004,7 @@ initialFocus="input"
4852
5004
  summary: "",
4853
5005
  description: "",
4854
5006
  category: "forms",
4855
- version: "10.4.0",
5007
+ version: "11.0.0",
4856
5008
  bindings: {
4857
5009
  angular: {
4858
5010
  importPath: "@uni-design-system/uni-angular",
@@ -4882,6 +5034,13 @@ initialFocus="input"
4882
5034
  default: "false",
4883
5035
  description: ""
4884
5036
  },
5037
+ {
5038
+ name: "touch",
5039
+ kind: "output",
5040
+ type: "void",
5041
+ required: false,
5042
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
5043
+ },
4885
5044
  {
4886
5045
  name: "invalid",
4887
5046
  kind: "input",
@@ -4953,19 +5112,19 @@ initialFocus="input"
4953
5112
  description: ""
4954
5113
  },
4955
5114
  {
4956
- name: "min",
5115
+ name: "minAttr",
4957
5116
  kind: "input",
4958
5117
  type: "number | undefined",
4959
5118
  required: false,
4960
- default: "undefined",
5119
+ default: "undefined, { alias: 'min' }",
4961
5120
  description: ""
4962
5121
  },
4963
5122
  {
4964
- name: "max",
5123
+ name: "maxAttr",
4965
5124
  kind: "input",
4966
5125
  type: "number | undefined",
4967
5126
  required: false,
4968
- default: "undefined",
5127
+ default: "undefined, { alias: 'max' }",
4969
5128
  description: ""
4970
5129
  },
4971
5130
  {
@@ -5130,7 +5289,7 @@ initialFocus="input"
5130
5289
  summary: "",
5131
5290
  description: "",
5132
5291
  category: "forms",
5133
- version: "10.4.0",
5292
+ version: "11.0.0",
5134
5293
  bindings: {
5135
5294
  angular: {
5136
5295
  importPath: "@uni-design-system/uni-angular",
@@ -5251,7 +5410,7 @@ initialFocus="input"
5251
5410
  summary: "",
5252
5411
  description: "",
5253
5412
  category: "components",
5254
- version: "10.4.0",
5413
+ version: "11.0.0",
5255
5414
  bindings: {
5256
5415
  angular: {
5257
5416
  importPath: "@uni-design-system/uni-angular",
@@ -5321,7 +5480,7 @@ initialFocus="input"
5321
5480
  summary: "",
5322
5481
  description: "",
5323
5482
  category: "layout",
5324
- version: "10.4.0",
5483
+ version: "11.0.0",
5325
5484
  bindings: {
5326
5485
  angular: {
5327
5486
  importPath: "@uni-design-system/uni-angular",
@@ -5425,7 +5584,7 @@ initialFocus="input"
5425
5584
  summary: "",
5426
5585
  description: "",
5427
5586
  category: "layout",
5428
- version: "10.4.0",
5587
+ version: "11.0.0",
5429
5588
  bindings: {
5430
5589
  angular: {
5431
5590
  importPath: "@uni-design-system/uni-angular",
@@ -5507,7 +5666,7 @@ initialFocus="input"
5507
5666
  summary: "",
5508
5667
  description: "",
5509
5668
  category: "forms",
5510
- version: "10.4.0",
5669
+ version: "11.0.0",
5511
5670
  bindings: {
5512
5671
  angular: {
5513
5672
  importPath: "@uni-design-system/uni-angular",
@@ -5601,7 +5760,7 @@ initialFocus="input"
5601
5760
  summary: "",
5602
5761
  description: "",
5603
5762
  category: "forms",
5604
- version: "10.4.0",
5763
+ version: "11.0.0",
5605
5764
  bindings: {
5606
5765
  angular: {
5607
5766
  importPath: "@uni-design-system/uni-angular",
@@ -5631,6 +5790,13 @@ initialFocus="input"
5631
5790
  default: "false",
5632
5791
  description: ""
5633
5792
  },
5793
+ {
5794
+ name: "touch",
5795
+ kind: "output",
5796
+ type: "void",
5797
+ required: false,
5798
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
5799
+ },
5634
5800
  {
5635
5801
  name: "invalid",
5636
5802
  kind: "input",
@@ -5773,7 +5939,7 @@ initialFocus="input"
5773
5939
  summary: "",
5774
5940
  description: "",
5775
5941
  category: "feedback",
5776
- version: "10.4.0",
5942
+ version: "11.0.0",
5777
5943
  bindings: {
5778
5944
  angular: {
5779
5945
  importPath: "@uni-design-system/uni-angular",
@@ -6033,7 +6199,7 @@ initialFocus="input"
6033
6199
  summary: "",
6034
6200
  description: "",
6035
6201
  category: "feedback",
6036
- version: "10.4.0",
6202
+ version: "11.0.0",
6037
6203
  bindings: {
6038
6204
  angular: {
6039
6205
  importPath: "@uni-design-system/uni-angular",
@@ -6057,7 +6223,7 @@ initialFocus="input"
6057
6223
  summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
6058
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.',
6059
6225
  category: "forms",
6060
- version: "10.4.0",
6226
+ version: "11.0.0",
6061
6227
  bindings: {
6062
6228
  angular: {
6063
6229
  importPath: "@uni-design-system/uni-angular",
@@ -6087,6 +6253,13 @@ initialFocus="input"
6087
6253
  default: "false",
6088
6254
  description: ""
6089
6255
  },
6256
+ {
6257
+ name: "touch",
6258
+ kind: "output",
6259
+ type: "void",
6260
+ required: false,
6261
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
6262
+ },
6090
6263
  {
6091
6264
  name: "invalid",
6092
6265
  kind: "input",
@@ -6476,7 +6649,7 @@ initialFocus="input"
6476
6649
  summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
6477
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.",
6478
6651
  category: "forms",
6479
- version: "10.4.0",
6652
+ version: "11.0.0",
6480
6653
  bindings: {
6481
6654
  angular: {
6482
6655
  importPath: "@uni-design-system/uni-angular",
@@ -6506,6 +6679,13 @@ initialFocus="input"
6506
6679
  default: "false",
6507
6680
  description: ""
6508
6681
  },
6682
+ {
6683
+ name: "touch",
6684
+ kind: "output",
6685
+ type: "void",
6686
+ required: false,
6687
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
6688
+ },
6509
6689
  {
6510
6690
  name: "invalid",
6511
6691
  kind: "input",
@@ -6633,17 +6813,19 @@ initialFocus="input"
6633
6813
  description: ""
6634
6814
  },
6635
6815
  {
6636
- name: "min",
6816
+ name: "minValue",
6637
6817
  kind: "input",
6638
6818
  type: "number | undefined",
6639
6819
  required: false,
6820
+ default: "undefined, { alias: 'min' }",
6640
6821
  description: ""
6641
6822
  },
6642
6823
  {
6643
- name: "max",
6824
+ name: "maxValue",
6644
6825
  kind: "input",
6645
6826
  type: "number | undefined",
6646
6827
  required: false,
6828
+ default: "undefined, { alias: 'max' }",
6647
6829
  description: ""
6648
6830
  },
6649
6831
  {
@@ -6698,17 +6880,17 @@ initialFocus="input"
6698
6880
  {
6699
6881
  title: "Primary",
6700
6882
  framework: "angular",
6701
- code: "<!-- Storybook story: Primary -->\n<!-- args:\n{\n label: 'Price range',\n currency: 'USD',\n min: 0,\n max: 5000,\n step: 10,\n value: { start: 200, end: 1500 },\n }\n-->"
6883
+ code: "<!-- Storybook story: Primary -->\n<!-- args:\n{\n label: 'Price range',\n currency: 'USD',\n minValue: 0,\n maxValue: 5000,\n step: 10,\n value: { start: 200, end: 1500 },\n }\n-->"
6702
6884
  },
6703
6885
  {
6704
6886
  title: "Price Filter",
6705
6887
  framework: "angular",
6706
- code: "<!-- Storybook story: Price Filter -->\n<!-- args:\n{\n label: 'Price range',\n currency: 'USD',\n min: 0,\n max: 5000,\n step: 10,\n value: { start: 200, end: 1500 },\n }\n-->"
6888
+ code: "<!-- Storybook story: Price Filter -->\n<!-- args:\n{\n label: 'Price range',\n currency: 'USD',\n minValue: 0,\n maxValue: 5000,\n step: 10,\n value: { start: 200, end: 1500 },\n }\n-->"
6707
6889
  },
6708
6890
  {
6709
6891
  title: "Minimum Gap",
6710
6892
  framework: "angular",
6711
- code: "<!-- Storybook story: Minimum Gap -->\n<!-- args:\n{ label: 'Temperature tolerance', suffix: '\xB0C', min: -20, max: 40, minGap: 5, value: { start: 5, end: 20 } }\n-->"
6893
+ code: "<!-- Storybook story: Minimum Gap -->\n<!-- args:\n{ label: 'Temperature tolerance', suffix: '\xB0C', minValue: -20, maxValue: 40, minGap: 5, value: { start: 5, end: 20 } }\n-->"
6712
6894
  },
6713
6895
  {
6714
6896
  title: "Open Ended",
@@ -6718,7 +6900,7 @@ initialFocus="input"
6718
6900
  {
6719
6901
  title: "Custom End Labels",
6720
6902
  framework: "angular",
6721
- code: "<!-- Storybook story: Custom End Labels -->\n<!-- args:\n{ label: 'Delivery window', suffix: ' days', startLabel: 'From', endLabel: 'To', min: 0, value: { start: 2, end: 7 } }\n-->"
6903
+ code: "<!-- Storybook story: Custom End Labels -->\n<!-- args:\n{ label: 'Delivery window', suffix: ' days', startLabel: 'From', endLabel: 'To', minValue: 0, value: { start: 2, end: 7 } }\n-->"
6722
6904
  },
6723
6905
  {
6724
6906
  title: "Disabled",
@@ -6758,7 +6940,7 @@ initialFocus="input"
6758
6940
  summary: "",
6759
6941
  description: "",
6760
6942
  category: "data",
6761
- version: "10.4.0",
6943
+ version: "11.0.0",
6762
6944
  bindings: {
6763
6945
  angular: {
6764
6946
  importPath: "@uni-design-system/uni-angular",
@@ -6859,7 +7041,7 @@ initialFocus="input"
6859
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.",
6860
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.',
6861
7043
  category: "layout",
6862
- version: "10.4.0",
7044
+ version: "11.0.0",
6863
7045
  bindings: {
6864
7046
  angular: {
6865
7047
  importPath: "@uni-design-system/uni-angular",
@@ -7036,7 +7218,7 @@ initialFocus="input"
7036
7218
  "popover.behavior.maxWidth",
7037
7219
  "popover.behavior.offset",
7038
7220
  "popover.behavior.arrowSize",
7039
- "popover.behavior.closeSymbol",
7221
+ "popover.behavior.closeIcon",
7040
7222
  "popover.behavior.headerTypeface",
7041
7223
  "popover.behavior.tooltipPadding",
7042
7224
  "popover.behavior.tooltipOpenDelay",
@@ -7051,7 +7233,7 @@ initialFocus="input"
7051
7233
  summary: "",
7052
7234
  description: "",
7053
7235
  category: "feedback",
7054
- version: "10.4.0",
7236
+ version: "11.0.0",
7055
7237
  bindings: {
7056
7238
  angular: {
7057
7239
  importPath: "@uni-design-system/uni-angular",
@@ -7115,7 +7297,7 @@ initialFocus="input"
7115
7297
  summary: "",
7116
7298
  description: "",
7117
7299
  category: "feedback",
7118
- version: "10.4.0",
7300
+ version: "11.0.0",
7119
7301
  bindings: {
7120
7302
  angular: {
7121
7303
  importPath: "@uni-design-system/uni-angular",
@@ -7187,7 +7369,7 @@ initialFocus="input"
7187
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.",
7188
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.',
7189
7371
  category: "forms",
7190
- version: "10.4.0",
7372
+ version: "11.0.0",
7191
7373
  bindings: {
7192
7374
  angular: {
7193
7375
  importPath: "@uni-design-system/uni-angular",
@@ -7217,6 +7399,13 @@ initialFocus="input"
7217
7399
  default: "false",
7218
7400
  description: ""
7219
7401
  },
7402
+ {
7403
+ name: "touch",
7404
+ kind: "output",
7405
+ type: "void",
7406
+ required: false,
7407
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
7408
+ },
7220
7409
  {
7221
7410
  name: "invalid",
7222
7411
  kind: "input",
@@ -7383,7 +7572,7 @@ initialFocus="input"
7383
7572
  summary: "",
7384
7573
  description: "",
7385
7574
  category: "forms",
7386
- version: "10.4.0",
7575
+ version: "11.0.0",
7387
7576
  bindings: {
7388
7577
  angular: {
7389
7578
  importPath: "@uni-design-system/uni-angular",
@@ -7413,6 +7602,13 @@ initialFocus="input"
7413
7602
  default: "false",
7414
7603
  description: ""
7415
7604
  },
7605
+ {
7606
+ name: "touch",
7607
+ kind: "output",
7608
+ type: "void",
7609
+ required: false,
7610
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
7611
+ },
7416
7612
  {
7417
7613
  name: "invalid",
7418
7614
  kind: "input",
@@ -7574,7 +7770,7 @@ initialFocus="input"
7574
7770
  summary: "",
7575
7771
  description: "",
7576
7772
  category: "directives",
7577
- version: "10.4.0",
7773
+ version: "11.0.0",
7578
7774
  bindings: {
7579
7775
  angular: {
7580
7776
  importPath: "@uni-design-system/uni-angular",
@@ -7598,7 +7794,7 @@ initialFocus="input"
7598
7794
  summary: "",
7599
7795
  description: "",
7600
7796
  category: "layout",
7601
- version: "10.4.0",
7797
+ version: "11.0.0",
7602
7798
  bindings: {
7603
7799
  angular: {
7604
7800
  importPath: "@uni-design-system/uni-angular",
@@ -7653,7 +7849,7 @@ initialFocus="input"
7653
7849
  summary: "Native scroll area with theme-driven scrollbar styling.",
7654
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.",
7655
7851
  category: "layout",
7656
- version: "10.4.0",
7852
+ version: "11.0.0",
7657
7853
  bindings: {
7658
7854
  angular: {
7659
7855
  importPath: "@uni-design-system/uni-angular",
@@ -7800,7 +7996,7 @@ initialFocus="input"
7800
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.",
7801
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.",
7802
7998
  category: "forms",
7803
- version: "10.4.0",
7999
+ version: "11.0.0",
7804
8000
  bindings: {
7805
8001
  angular: {
7806
8002
  importPath: "@uni-design-system/uni-angular",
@@ -7927,7 +8123,7 @@ initialFocus="input"
7927
8123
  summary: "",
7928
8124
  description: "",
7929
8125
  category: "forms",
7930
- version: "10.4.0",
8126
+ version: "11.0.0",
7931
8127
  bindings: {
7932
8128
  angular: {
7933
8129
  importPath: "@uni-design-system/uni-angular",
@@ -8084,7 +8280,11 @@ initialFocus="input"
8084
8280
  "Disabled options are rendered and announced, not hidden \u2014 removing them would"
8085
8281
  ]
8086
8282
  },
8087
- relatedTokens: []
8283
+ relatedTokens: [
8284
+ "select.behavior.toggleIcon",
8285
+ "select.behavior.toggleColor",
8286
+ "select.behavior.toggleSize"
8287
+ ]
8088
8288
  },
8089
8289
  {
8090
8290
  id: "skeleton",
@@ -8093,7 +8293,7 @@ initialFocus="input"
8093
8293
  summary: "Loading placeholder painted with surface tokens.",
8094
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.",
8095
8295
  category: "components",
8096
- version: "10.4.0",
8296
+ version: "11.0.0",
8097
8297
  bindings: {
8098
8298
  angular: {
8099
8299
  importPath: "@uni-design-system/uni-angular",
@@ -8244,7 +8444,7 @@ initialFocus="input"
8244
8444
  summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
8245
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.",
8246
8446
  category: "forms",
8247
- version: "10.4.0",
8447
+ version: "11.0.0",
8248
8448
  bindings: {
8249
8449
  angular: {
8250
8450
  importPath: "@uni-design-system/uni-angular",
@@ -8274,6 +8474,13 @@ initialFocus="input"
8274
8474
  default: "false",
8275
8475
  description: ""
8276
8476
  },
8477
+ {
8478
+ name: "touch",
8479
+ kind: "output",
8480
+ type: "void",
8481
+ required: false,
8482
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
8483
+ },
8277
8484
  {
8278
8485
  name: "invalid",
8279
8486
  kind: "input",
@@ -8323,7 +8530,7 @@ initialFocus="input"
8323
8530
  {
8324
8531
  name: "min",
8325
8532
  kind: "input",
8326
- type: "number | undefined",
8533
+ type: "number | UniNumberRange | undefined",
8327
8534
  required: false,
8328
8535
  default: "0",
8329
8536
  description: ""
@@ -8331,7 +8538,7 @@ initialFocus="input"
8331
8538
  {
8332
8539
  name: "max",
8333
8540
  kind: "input",
8334
- type: "number | undefined",
8541
+ type: "number | UniNumberRange | undefined",
8335
8542
  required: false,
8336
8543
  default: "100",
8337
8544
  description: ""
@@ -8501,7 +8708,7 @@ initialFocus="input"
8501
8708
  "slider.behavior.tooltipTextColor",
8502
8709
  "slider.behavior.tooltipShadow",
8503
8710
  "slider.behavior.tooltipBorderRadius",
8504
- "slider.behavior.transitionMs"
8711
+ "slider.behavior.motion"
8505
8712
  ]
8506
8713
  },
8507
8714
  {
@@ -8511,7 +8718,7 @@ initialFocus="input"
8511
8718
  summary: "",
8512
8719
  description: "",
8513
8720
  category: "feedback",
8514
- version: "10.4.0",
8721
+ version: "11.0.0",
8515
8722
  bindings: {
8516
8723
  angular: {
8517
8724
  importPath: "@uni-design-system/uni-angular",
@@ -8623,7 +8830,7 @@ initialFocus="input"
8623
8830
  summary: "",
8624
8831
  description: "",
8625
8832
  category: "data",
8626
- version: "10.4.0",
8833
+ version: "11.0.0",
8627
8834
  bindings: {
8628
8835
  angular: {
8629
8836
  importPath: "@uni-design-system/uni-angular",
@@ -8682,7 +8889,7 @@ initialFocus="input"
8682
8889
  summary: "",
8683
8890
  description: "",
8684
8891
  category: "layout",
8685
- version: "10.4.0",
8892
+ version: "11.0.0",
8686
8893
  bindings: {
8687
8894
  angular: {
8688
8895
  importPath: "@uni-design-system/uni-angular",
@@ -8737,7 +8944,7 @@ initialFocus="input"
8737
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.',
8738
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.',
8739
8946
  category: "components",
8740
- version: "10.4.0",
8947
+ version: "11.0.0",
8741
8948
  bindings: {
8742
8949
  angular: {
8743
8950
  importPath: "@uni-design-system/uni-angular",
@@ -8855,7 +9062,7 @@ initialFocus="input"
8855
9062
  summary: "",
8856
9063
  description: "",
8857
9064
  category: "primitives",
8858
- version: "10.4.0",
9065
+ version: "11.0.0",
8859
9066
  bindings: {
8860
9067
  angular: {
8861
9068
  importPath: "@uni-design-system/uni-angular",
@@ -8944,7 +9151,7 @@ initialFocus="input"
8944
9151
  summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
8945
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.",
8946
9153
  category: "components",
8947
- version: "10.4.0",
9154
+ version: "11.0.0",
8948
9155
  bindings: {
8949
9156
  angular: {
8950
9157
  importPath: "@uni-design-system/uni-angular",
@@ -8984,7 +9191,7 @@ initialFocus="input"
8984
9191
  summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
8985
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.",
8986
9193
  category: "components",
8987
- version: "10.4.0",
9194
+ version: "11.0.0",
8988
9195
  bindings: {
8989
9196
  angular: {
8990
9197
  importPath: "@uni-design-system/uni-angular",
@@ -9046,6 +9253,7 @@ initialFocus="input"
9046
9253
  ]
9047
9254
  },
9048
9255
  relatedTokens: [
9256
+ "tabs.behavior.motion",
9049
9257
  "tabs.behavior.typeface",
9050
9258
  "tabs.behavior.textColor",
9051
9259
  "tabs.behavior.activeTextColor",
@@ -9064,7 +9272,7 @@ initialFocus="input"
9064
9272
  summary: "Compact chip for categories, states, filters and tokens.",
9065
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.",
9066
9274
  category: "data",
9067
- version: "10.4.0",
9275
+ version: "11.0.0",
9068
9276
  bindings: {
9069
9277
  angular: {
9070
9278
  importPath: "@uni-design-system/uni-angular",
@@ -9411,7 +9619,8 @@ initialFocus="input"
9411
9619
  "tag.behavior.typeface",
9412
9620
  "tag.behavior.gap",
9413
9621
  "tag.behavior.removeIcon",
9414
- "tag.behavior.selectedIcon"
9622
+ "tag.behavior.selectedIcon",
9623
+ "tag.behavior.motion"
9415
9624
  ]
9416
9625
  },
9417
9626
  {
@@ -9421,7 +9630,7 @@ initialFocus="input"
9421
9630
  summary: "",
9422
9631
  description: "",
9423
9632
  category: "forms",
9424
- version: "10.4.0",
9633
+ version: "11.0.0",
9425
9634
  bindings: {
9426
9635
  angular: {
9427
9636
  importPath: "@uni-design-system/uni-angular",
@@ -9451,6 +9660,13 @@ initialFocus="input"
9451
9660
  default: "false",
9452
9661
  description: ""
9453
9662
  },
9663
+ {
9664
+ name: "touch",
9665
+ kind: "output",
9666
+ type: "void",
9667
+ required: false,
9668
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
9669
+ },
9454
9670
  {
9455
9671
  name: "invalid",
9456
9672
  kind: "input",
@@ -9529,10 +9745,11 @@ initialFocus="input"
9529
9745
  description: ""
9530
9746
  },
9531
9747
  {
9532
- name: "max",
9748
+ name: "maxLength",
9533
9749
  kind: "input",
9534
- type: "number",
9750
+ type: "number | undefined",
9535
9751
  required: false,
9752
+ default: "undefined, { alias: 'max' }",
9536
9753
  description: ""
9537
9754
  },
9538
9755
  {
@@ -9710,7 +9927,7 @@ placeholder="Name or address\u2026"
9710
9927
  (query)="onQuery($event)"
9711
9928
  />
9712
9929
  <!-- args:
9713
- { max: 3, value: [{ value: 'alpha' }, { value: 'beta' }] }
9930
+ { maxLength: 3, value: [{ value: 'alpha' }, { value: 'beta' }] }
9714
9931
  -->`
9715
9932
  },
9716
9933
  {
@@ -9754,7 +9971,7 @@ placeholder="Name or address\u2026"
9754
9971
  summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
9755
9972
  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.',
9756
9973
  category: "primitives",
9757
- version: "10.4.0",
9974
+ version: "11.0.0",
9758
9975
  bindings: {
9759
9976
  angular: {
9760
9977
  importPath: "@uni-design-system/uni-angular",
@@ -9856,7 +10073,7 @@ placeholder="Name or address\u2026"
9856
10073
  summary: "",
9857
10074
  description: "",
9858
10075
  category: "forms",
9859
- version: "10.4.0",
10076
+ version: "11.0.0",
9860
10077
  bindings: {
9861
10078
  angular: {
9862
10079
  importPath: "@uni-design-system/uni-angular",
@@ -9886,6 +10103,13 @@ placeholder="Name or address\u2026"
9886
10103
  default: "false",
9887
10104
  description: ""
9888
10105
  },
10106
+ {
10107
+ name: "touch",
10108
+ kind: "output",
10109
+ type: "void",
10110
+ required: false,
10111
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
10112
+ },
9889
10113
  {
9890
10114
  name: "invalid",
9891
10115
  kind: "input",
@@ -10056,7 +10280,7 @@ placeholder="Name or address\u2026"
10056
10280
  summary: "",
10057
10281
  description: "",
10058
10282
  category: "primitives",
10059
- version: "10.4.0",
10283
+ version: "11.0.0",
10060
10284
  bindings: {
10061
10285
  angular: {
10062
10286
  importPath: "@uni-design-system/uni-angular",
@@ -10086,7 +10310,7 @@ placeholder="Name or address\u2026"
10086
10310
  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).",
10087
10311
  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).",
10088
10312
  category: "components",
10089
- version: "10.4.0",
10313
+ version: "11.0.0",
10090
10314
  bindings: {
10091
10315
  angular: {
10092
10316
  importPath: "@uni-design-system/uni-angular",
@@ -10144,7 +10368,7 @@ placeholder="Name or address\u2026"
10144
10368
  summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
10145
10369
  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.",
10146
10370
  category: "forms",
10147
- version: "10.4.0",
10371
+ version: "11.0.0",
10148
10372
  bindings: {
10149
10373
  angular: {
10150
10374
  importPath: "@uni-design-system/uni-angular",
@@ -10173,6 +10397,13 @@ placeholder="Name or address\u2026"
10173
10397
  default: "false",
10174
10398
  description: ""
10175
10399
  },
10400
+ {
10401
+ name: "touch",
10402
+ kind: "output",
10403
+ type: "void",
10404
+ required: false,
10405
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
10406
+ },
10176
10407
  {
10177
10408
  name: "invalid",
10178
10409
  kind: "input",
@@ -10352,7 +10583,7 @@ placeholder="Name or address\u2026"
10352
10583
  summary: "",
10353
10584
  description: "",
10354
10585
  category: "forms",
10355
- version: "10.4.0",
10586
+ version: "11.0.0",
10356
10587
  bindings: {
10357
10588
  angular: {
10358
10589
  importPath: "@uni-design-system/uni-angular",
@@ -10382,6 +10613,13 @@ placeholder="Name or address\u2026"
10382
10613
  default: "false",
10383
10614
  description: ""
10384
10615
  },
10616
+ {
10617
+ name: "touch",
10618
+ kind: "output",
10619
+ type: "void",
10620
+ required: false,
10621
+ description: "Angular 22 marks the bound field touched through this output; the `touched` model above is bound inward by the directive and no longer propagates back out. Emitted wherever this control already decided the user was done with it."
10622
+ },
10385
10623
  {
10386
10624
  name: "invalid",
10387
10625
  kind: "input",
@@ -10575,7 +10813,7 @@ placeholder="Name or address\u2026"
10575
10813
  summary: "",
10576
10814
  description: "",
10577
10815
  category: "feedback",
10578
- version: "10.4.0",
10816
+ version: "11.0.0",
10579
10817
  bindings: {
10580
10818
  angular: {
10581
10819
  importPath: "@uni-design-system/uni-angular",
@@ -10649,6 +10887,7 @@ placeholder="Name or address\u2026"
10649
10887
  ]
10650
10888
  },
10651
10889
  relatedTokens: [
10890
+ "tooltip.behavior.motion",
10652
10891
  "tooltip.behavior.borderRadius",
10653
10892
  "tooltip.behavior.shadow",
10654
10893
  "tooltip.behavior.color",
@@ -10662,7 +10901,7 @@ placeholder="Name or address\u2026"
10662
10901
  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).',
10663
10902
  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.',
10664
10903
  category: "components",
10665
- version: "10.4.0",
10904
+ version: "11.0.0",
10666
10905
  bindings: {
10667
10906
  angular: {
10668
10907
  importPath: "@uni-design-system/uni-angular",
@@ -10789,7 +11028,7 @@ placeholder="Name or address\u2026"
10789
11028
  summary: "",
10790
11029
  description: "",
10791
11030
  category: "layout",
10792
- version: "10.4.0",
11031
+ version: "11.0.0",
10793
11032
  bindings: {
10794
11033
  angular: {
10795
11034
  importPath: "@uni-design-system/uni-angular",
@@ -11986,6 +12225,72 @@ placeholder="Name or address\u2026"
11986
12225
  DarkTheme: '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}'
11987
12226
  }
11988
12227
  },
12228
+ {
12229
+ id: "motion.popup",
12230
+ value: '{"duration":100,"easing":"linear","scale":0.8}',
12231
+ type: "motion",
12232
+ kind: "style",
12233
+ target: "emotion-css",
12234
+ themeValues: {
12235
+ LightTheme: '{"duration":100,"easing":"linear","scale":0.8}',
12236
+ DarkTheme: '{"duration":100,"easing":"linear","scale":0.8}'
12237
+ }
12238
+ },
12239
+ {
12240
+ id: "motion.panel",
12241
+ value: '{"duration":250,"easing":"ease"}',
12242
+ type: "motion",
12243
+ kind: "style",
12244
+ target: "emotion-css",
12245
+ themeValues: {
12246
+ LightTheme: '{"duration":250,"easing":"ease"}',
12247
+ DarkTheme: '{"duration":250,"easing":"ease"}'
12248
+ }
12249
+ },
12250
+ {
12251
+ id: "motion.reveal",
12252
+ value: '{"duration":350,"easing":"ease-in-out"}',
12253
+ type: "motion",
12254
+ kind: "style",
12255
+ target: "emotion-css",
12256
+ themeValues: {
12257
+ LightTheme: '{"duration":350,"easing":"ease-in-out"}',
12258
+ DarkTheme: '{"duration":350,"easing":"ease-in-out"}'
12259
+ }
12260
+ },
12261
+ {
12262
+ id: "motion.notification",
12263
+ value: '{"duration":350,"easing":"ease-in-out"}',
12264
+ type: "motion",
12265
+ kind: "style",
12266
+ target: "emotion-css",
12267
+ themeValues: {
12268
+ LightTheme: '{"duration":350,"easing":"ease-in-out"}',
12269
+ DarkTheme: '{"duration":350,"easing":"ease-in-out"}'
12270
+ }
12271
+ },
12272
+ {
12273
+ id: "motion.control",
12274
+ value: '{"duration":300,"easing":"ease"}',
12275
+ type: "motion",
12276
+ kind: "style",
12277
+ target: "emotion-css",
12278
+ themeValues: {
12279
+ LightTheme: '{"duration":300,"easing":"ease"}',
12280
+ DarkTheme: '{"duration":300,"easing":"ease"}'
12281
+ }
12282
+ },
12283
+ {
12284
+ id: "motion.snap",
12285
+ value: '{"duration":120,"easing":"ease"}',
12286
+ type: "motion",
12287
+ kind: "style",
12288
+ target: "emotion-css",
12289
+ themeValues: {
12290
+ LightTheme: '{"duration":120,"easing":"ease"}',
12291
+ DarkTheme: '{"duration":120,"easing":"ease"}'
12292
+ }
12293
+ },
11989
12294
  {
11990
12295
  id: "thickness.thin",
11991
12296
  value: 1,
@@ -12390,15 +12695,15 @@ placeholder="Name or address\u2026"
12390
12695
  }
12391
12696
  },
12392
12697
  {
12393
- id: "breadcrumb.behavior.separatorSymbol",
12394
- value: "chevron_right",
12698
+ id: "breadcrumb.behavior.separatorIcon",
12699
+ value: "chevronRight",
12395
12700
  type: "string",
12396
12701
  kind: "behavioral",
12397
12702
  target: "component-prop",
12398
12703
  appliesTo: "breadcrumb",
12399
12704
  themeValues: {
12400
- LightTheme: "chevron_right",
12401
- DarkTheme: "chevron_right"
12705
+ LightTheme: "chevronRight",
12706
+ DarkTheme: "chevronRight"
12402
12707
  }
12403
12708
  },
12404
12709
  {
@@ -12810,15 +13115,15 @@ placeholder="Name or address\u2026"
12810
13115
  }
12811
13116
  },
12812
13117
  {
12813
- id: "avatar.behavior.fallbackSymbol",
12814
- value: "person",
13118
+ id: "avatar.behavior.fallbackIcon",
13119
+ value: "profile",
12815
13120
  type: "string",
12816
13121
  kind: "behavioral",
12817
13122
  target: "component-prop",
12818
13123
  appliesTo: "avatar",
12819
13124
  themeValues: {
12820
- LightTheme: "person",
12821
- DarkTheme: "person"
13125
+ LightTheme: "profile",
13126
+ DarkTheme: "profile"
12822
13127
  }
12823
13128
  },
12824
13129
  {
@@ -12858,7 +13163,7 @@ placeholder="Name or address\u2026"
12858
13163
  }
12859
13164
  },
12860
13165
  {
12861
- id: "searchInput.behavior.searchSymbol",
13166
+ id: "searchInput.behavior.searchIcon",
12862
13167
  value: "search",
12863
13168
  type: "string",
12864
13169
  kind: "behavioral",
@@ -12870,7 +13175,7 @@ placeholder="Name or address\u2026"
12870
13175
  }
12871
13176
  },
12872
13177
  {
12873
- id: "searchInput.behavior.clearSymbol",
13178
+ id: "searchInput.behavior.clearIcon",
12874
13179
  value: "close",
12875
13180
  type: "string",
12876
13181
  kind: "behavioral",
@@ -12941,6 +13246,18 @@ placeholder="Name or address\u2026"
12941
13246
  DarkTheme: 8
12942
13247
  }
12943
13248
  },
13249
+ {
13250
+ id: "checkbox.behavior.motion",
13251
+ value: "control",
13252
+ type: "string",
13253
+ kind: "behavioral",
13254
+ target: "component-prop",
13255
+ appliesTo: "checkbox",
13256
+ themeValues: {
13257
+ LightTheme: "control",
13258
+ DarkTheme: "control"
13259
+ }
13260
+ },
12944
13261
  {
12945
13262
  id: "checkbox.behavior.size",
12946
13263
  value: 20,
@@ -13326,51 +13643,171 @@ placeholder="Name or address\u2026"
13326
13643
  }
13327
13644
  },
13328
13645
  {
13329
- id: "dropdown.behavior.border",
13330
- value: "none",
13646
+ id: "select.behavior.toggleIcon",
13647
+ value: "chevronDown",
13331
13648
  type: "string",
13332
13649
  kind: "behavioral",
13333
13650
  target: "component-prop",
13334
- appliesTo: "dropdown",
13651
+ appliesTo: "select",
13335
13652
  themeValues: {
13336
- LightTheme: "none",
13337
- DarkTheme: "none"
13653
+ LightTheme: "chevronDown",
13654
+ DarkTheme: "chevronDown"
13338
13655
  }
13339
13656
  },
13340
13657
  {
13341
- id: "dropdown.behavior.borderRadius",
13342
- value: "xxs",
13658
+ id: "select.behavior.toggleColor",
13659
+ value: "on-background-variant",
13343
13660
  type: "string",
13344
13661
  kind: "behavioral",
13345
13662
  target: "component-prop",
13346
- appliesTo: "dropdown",
13663
+ appliesTo: "select",
13347
13664
  themeValues: {
13348
- LightTheme: "xxs",
13349
- DarkTheme: "xxs"
13665
+ LightTheme: "on-background-variant",
13666
+ DarkTheme: "on-background-variant"
13350
13667
  }
13351
13668
  },
13352
13669
  {
13353
- id: "dropdown.behavior.color",
13354
- value: "primary-surface",
13355
- type: "string",
13670
+ id: "select.behavior.toggleSize",
13671
+ value: 20,
13672
+ type: "number",
13356
13673
  kind: "behavioral",
13357
13674
  target: "component-prop",
13358
- appliesTo: "dropdown",
13675
+ appliesTo: "select",
13359
13676
  themeValues: {
13360
- LightTheme: "primary-surface",
13361
- DarkTheme: "primary-surface"
13677
+ LightTheme: 20,
13678
+ DarkTheme: 20
13362
13679
  }
13363
13680
  },
13364
13681
  {
13365
- id: "dropdown.behavior.shadow",
13366
- value: "menu",
13682
+ id: "buttonGroup.behavior.border",
13683
+ value: "quaternary",
13367
13684
  type: "string",
13368
13685
  kind: "behavioral",
13369
13686
  target: "component-prop",
13370
- appliesTo: "dropdown",
13687
+ appliesTo: "buttonGroup",
13371
13688
  themeValues: {
13372
- LightTheme: "menu",
13373
- DarkTheme: "menu"
13689
+ LightTheme: "quaternary",
13690
+ DarkTheme: "quaternary"
13691
+ }
13692
+ },
13693
+ {
13694
+ id: "buttonGroup.behavior.borderRadius",
13695
+ value: 4,
13696
+ type: "number",
13697
+ kind: "behavioral",
13698
+ target: "component-prop",
13699
+ appliesTo: "buttonGroup",
13700
+ themeValues: {
13701
+ LightTheme: 4,
13702
+ DarkTheme: 4
13703
+ }
13704
+ },
13705
+ {
13706
+ id: "progressBar.behavior.trackColor",
13707
+ value: "primary-surface",
13708
+ type: "string",
13709
+ kind: "behavioral",
13710
+ target: "component-prop",
13711
+ appliesTo: "progressBar",
13712
+ themeValues: {
13713
+ LightTheme: "primary-surface",
13714
+ DarkTheme: "primary-surface"
13715
+ }
13716
+ },
13717
+ {
13718
+ id: "progressBar.behavior.fillColor",
13719
+ value: "secondary-surface",
13720
+ type: "string",
13721
+ kind: "behavioral",
13722
+ target: "component-prop",
13723
+ appliesTo: "progressBar",
13724
+ themeValues: {
13725
+ LightTheme: "secondary-surface",
13726
+ DarkTheme: "secondary-surface"
13727
+ }
13728
+ },
13729
+ {
13730
+ id: "progressBar.behavior.completeColor",
13731
+ value: "secondary",
13732
+ type: "string",
13733
+ kind: "behavioral",
13734
+ target: "component-prop",
13735
+ appliesTo: "progressBar",
13736
+ themeValues: {
13737
+ LightTheme: "secondary",
13738
+ DarkTheme: "secondary"
13739
+ }
13740
+ },
13741
+ {
13742
+ id: "progressBar.behavior.borderColor",
13743
+ value: "on-background-variant",
13744
+ type: "string",
13745
+ kind: "behavioral",
13746
+ target: "component-prop",
13747
+ appliesTo: "progressBar",
13748
+ themeValues: {
13749
+ LightTheme: "on-background-variant",
13750
+ DarkTheme: "on-background-variant"
13751
+ }
13752
+ },
13753
+ {
13754
+ id: "progressBar.behavior.strokeWidth",
13755
+ value: 1,
13756
+ type: "number",
13757
+ kind: "behavioral",
13758
+ target: "component-prop",
13759
+ appliesTo: "progressBar",
13760
+ themeValues: {
13761
+ LightTheme: 1,
13762
+ DarkTheme: 1
13763
+ }
13764
+ },
13765
+ {
13766
+ id: "dropdown.behavior.border",
13767
+ value: "none",
13768
+ type: "string",
13769
+ kind: "behavioral",
13770
+ target: "component-prop",
13771
+ appliesTo: "dropdown",
13772
+ themeValues: {
13773
+ LightTheme: "none",
13774
+ DarkTheme: "none"
13775
+ }
13776
+ },
13777
+ {
13778
+ id: "dropdown.behavior.borderRadius",
13779
+ value: "xxs",
13780
+ type: "string",
13781
+ kind: "behavioral",
13782
+ target: "component-prop",
13783
+ appliesTo: "dropdown",
13784
+ themeValues: {
13785
+ LightTheme: "xxs",
13786
+ DarkTheme: "xxs"
13787
+ }
13788
+ },
13789
+ {
13790
+ id: "dropdown.behavior.color",
13791
+ value: "primary-surface",
13792
+ type: "string",
13793
+ kind: "behavioral",
13794
+ target: "component-prop",
13795
+ appliesTo: "dropdown",
13796
+ themeValues: {
13797
+ LightTheme: "primary-surface",
13798
+ DarkTheme: "primary-surface"
13799
+ }
13800
+ },
13801
+ {
13802
+ id: "dropdown.behavior.shadow",
13803
+ value: "menu",
13804
+ type: "string",
13805
+ kind: "behavioral",
13806
+ target: "component-prop",
13807
+ appliesTo: "dropdown",
13808
+ themeValues: {
13809
+ LightTheme: "menu",
13810
+ DarkTheme: "menu"
13374
13811
  }
13375
13812
  },
13376
13813
  {
@@ -13518,7 +13955,7 @@ placeholder="Name or address\u2026"
13518
13955
  }
13519
13956
  },
13520
13957
  {
13521
- id: "menuItem.behavior.activeSymbol",
13958
+ id: "menuItem.behavior.activeIcon",
13522
13959
  value: "check",
13523
13960
  type: "string",
13524
13961
  kind: "behavioral",
@@ -13650,7 +14087,7 @@ placeholder="Name or address\u2026"
13650
14087
  }
13651
14088
  },
13652
14089
  {
13653
- id: "popover.behavior.closeSymbol",
14090
+ id: "popover.behavior.closeIcon",
13654
14091
  value: "close",
13655
14092
  type: "string",
13656
14093
  kind: "behavioral",
@@ -13733,54 +14170,6 @@ placeholder="Name or address\u2026"
13733
14170
  DarkTheme: "reveal"
13734
14171
  }
13735
14172
  },
13736
- {
13737
- id: "footer.behavior.height",
13738
- value: 52,
13739
- type: "number",
13740
- kind: "behavioral",
13741
- target: "component-prop",
13742
- appliesTo: "footer",
13743
- themeValues: {
13744
- LightTheme: 52,
13745
- DarkTheme: 52
13746
- }
13747
- },
13748
- {
13749
- id: "footer.behavior.color",
13750
- value: "primary",
13751
- type: "string",
13752
- kind: "behavioral",
13753
- target: "component-prop",
13754
- appliesTo: "footer",
13755
- themeValues: {
13756
- LightTheme: "primary",
13757
- DarkTheme: "primary"
13758
- }
13759
- },
13760
- {
13761
- id: "footer.behavior.logoHeight",
13762
- value: 18.6,
13763
- type: "number",
13764
- kind: "behavioral",
13765
- target: "component-prop",
13766
- appliesTo: "footer",
13767
- themeValues: {
13768
- LightTheme: 18.6,
13769
- DarkTheme: 18.6
13770
- }
13771
- },
13772
- {
13773
- id: "footer.behavior.logoPadding",
13774
- value: "md",
13775
- type: "string",
13776
- kind: "behavioral",
13777
- target: "component-prop",
13778
- appliesTo: "footer",
13779
- themeValues: {
13780
- LightTheme: "md",
13781
- DarkTheme: "md"
13782
- }
13783
- },
13784
14173
  {
13785
14174
  id: "input.behavior.typeface",
13786
14175
  value: "input",
@@ -14261,6 +14650,18 @@ placeholder="Name or address\u2026"
14261
14650
  DarkTheme: "3ch"
14262
14651
  }
14263
14652
  },
14653
+ {
14654
+ id: "tabs.behavior.motion",
14655
+ value: "snap",
14656
+ type: "string",
14657
+ kind: "behavioral",
14658
+ target: "component-prop",
14659
+ appliesTo: "tabs",
14660
+ themeValues: {
14661
+ LightTheme: "snap",
14662
+ DarkTheme: "snap"
14663
+ }
14664
+ },
14264
14665
  {
14265
14666
  id: "tabs.behavior.typeface",
14266
14667
  value: "title-small",
@@ -14525,6 +14926,18 @@ placeholder="Name or address\u2026"
14525
14926
  DarkTheme: "check"
14526
14927
  }
14527
14928
  },
14929
+ {
14930
+ id: "tag.behavior.motion",
14931
+ value: "control",
14932
+ type: "string",
14933
+ kind: "behavioral",
14934
+ target: "component-prop",
14935
+ appliesTo: "tag",
14936
+ themeValues: {
14937
+ LightTheme: "control",
14938
+ DarkTheme: "control"
14939
+ }
14940
+ },
14528
14941
  {
14529
14942
  id: "tagInput.behavior.chipGap",
14530
14943
  value: "xs",
@@ -14658,27 +15071,27 @@ placeholder="Name or address\u2026"
14658
15071
  }
14659
15072
  },
14660
15073
  {
14661
- id: "calendar.behavior.navPrevSymbol",
14662
- value: "chevron_left",
15074
+ id: "calendar.behavior.navPrevIcon",
15075
+ value: "chevronLeft",
14663
15076
  type: "string",
14664
15077
  kind: "behavioral",
14665
15078
  target: "component-prop",
14666
15079
  appliesTo: "calendar",
14667
15080
  themeValues: {
14668
- LightTheme: "chevron_left",
14669
- DarkTheme: "chevron_left"
15081
+ LightTheme: "chevronLeft",
15082
+ DarkTheme: "chevronLeft"
14670
15083
  }
14671
15084
  },
14672
15085
  {
14673
- id: "calendar.behavior.navNextSymbol",
14674
- value: "chevron_right",
15086
+ id: "calendar.behavior.navNextIcon",
15087
+ value: "chevronRight",
14675
15088
  type: "string",
14676
15089
  kind: "behavioral",
14677
15090
  target: "component-prop",
14678
15091
  appliesTo: "calendar",
14679
15092
  themeValues: {
14680
- LightTheme: "chevron_right",
14681
- DarkTheme: "chevron_right"
15093
+ LightTheme: "chevronRight",
15094
+ DarkTheme: "chevronRight"
14682
15095
  }
14683
15096
  },
14684
15097
  {
@@ -14826,15 +15239,15 @@ placeholder="Name or address\u2026"
14826
15239
  }
14827
15240
  },
14828
15241
  {
14829
- id: "dateInput.behavior.toggleSymbol",
14830
- value: "calendar_month",
15242
+ id: "dateInput.behavior.toggleIcon",
15243
+ value: "calendar",
14831
15244
  type: "string",
14832
15245
  kind: "behavioral",
14833
15246
  target: "component-prop",
14834
15247
  appliesTo: "dateInput",
14835
15248
  themeValues: {
14836
- LightTheme: "calendar_month",
14837
- DarkTheme: "calendar_month"
15249
+ LightTheme: "calendar",
15250
+ DarkTheme: "calendar"
14838
15251
  }
14839
15252
  },
14840
15253
  {
@@ -14874,15 +15287,15 @@ placeholder="Name or address\u2026"
14874
15287
  }
14875
15288
  },
14876
15289
  {
14877
- id: "timeInput.behavior.toggleSymbol",
14878
- value: "schedule",
15290
+ id: "timeInput.behavior.toggleIcon",
15291
+ value: "clock",
14879
15292
  type: "string",
14880
15293
  kind: "behavioral",
14881
15294
  target: "component-prop",
14882
15295
  appliesTo: "timeInput",
14883
15296
  themeValues: {
14884
- LightTheme: "schedule",
14885
- DarkTheme: "schedule"
15297
+ LightTheme: "clock",
15298
+ DarkTheme: "clock"
14886
15299
  }
14887
15300
  },
14888
15301
  {
@@ -14993,6 +15406,18 @@ placeholder="Name or address\u2026"
14993
15406
  DarkTheme: "button"
14994
15407
  }
14995
15408
  },
15409
+ {
15410
+ id: "button.behavior.motion",
15411
+ value: "control",
15412
+ type: "string",
15413
+ kind: "behavioral",
15414
+ target: "component-prop",
15415
+ appliesTo: "button",
15416
+ themeValues: {
15417
+ LightTheme: "control",
15418
+ DarkTheme: "control"
15419
+ }
15420
+ },
14996
15421
  {
14997
15422
  id: "iconButton.behavior.borderRadius",
14998
15423
  value: "max",
@@ -15005,6 +15430,78 @@ placeholder="Name or address\u2026"
15005
15430
  DarkTheme: "max"
15006
15431
  }
15007
15432
  },
15433
+ {
15434
+ id: "iconButton.behavior.motion",
15435
+ value: "control",
15436
+ type: "string",
15437
+ kind: "behavioral",
15438
+ target: "component-prop",
15439
+ appliesTo: "iconButton",
15440
+ themeValues: {
15441
+ LightTheme: "control",
15442
+ DarkTheme: "control"
15443
+ }
15444
+ },
15445
+ {
15446
+ id: "inlineButton.behavior.linkColor",
15447
+ value: "primary",
15448
+ type: "string",
15449
+ kind: "behavioral",
15450
+ target: "component-prop",
15451
+ appliesTo: "inlineButton",
15452
+ themeValues: {
15453
+ LightTheme: "primary",
15454
+ DarkTheme: "primary"
15455
+ }
15456
+ },
15457
+ {
15458
+ id: "inlineButton.behavior.underline",
15459
+ value: false,
15460
+ type: "boolean",
15461
+ kind: "behavioral",
15462
+ target: "component-prop",
15463
+ appliesTo: "inlineButton",
15464
+ themeValues: {
15465
+ LightTheme: false,
15466
+ DarkTheme: false
15467
+ }
15468
+ },
15469
+ {
15470
+ id: "inlineButton.behavior.underlineOnHover",
15471
+ value: true,
15472
+ type: "boolean",
15473
+ kind: "behavioral",
15474
+ target: "component-prop",
15475
+ appliesTo: "inlineButton",
15476
+ themeValues: {
15477
+ LightTheme: true,
15478
+ DarkTheme: true
15479
+ }
15480
+ },
15481
+ {
15482
+ id: "inlineButton.behavior.underlineOffset",
15483
+ value: "0.15em",
15484
+ type: "string",
15485
+ kind: "behavioral",
15486
+ target: "component-prop",
15487
+ appliesTo: "inlineButton",
15488
+ themeValues: {
15489
+ LightTheme: "0.15em",
15490
+ DarkTheme: "0.15em"
15491
+ }
15492
+ },
15493
+ {
15494
+ id: "inlineButton.behavior.gap",
15495
+ value: "xxs",
15496
+ type: "string",
15497
+ kind: "behavioral",
15498
+ target: "component-prop",
15499
+ appliesTo: "inlineButton",
15500
+ themeValues: {
15501
+ LightTheme: "xxs",
15502
+ DarkTheme: "xxs"
15503
+ }
15504
+ },
15008
15505
  {
15009
15506
  id: "card.behavior.borderRadius",
15010
15507
  value: "xs",
@@ -15065,6 +15562,18 @@ placeholder="Name or address\u2026"
15065
15562
  DarkTheme: "disabled"
15066
15563
  }
15067
15564
  },
15565
+ {
15566
+ id: "dataTable.behavior.motion",
15567
+ value: "control",
15568
+ type: "string",
15569
+ kind: "behavioral",
15570
+ target: "component-prop",
15571
+ appliesTo: "dataTable",
15572
+ themeValues: {
15573
+ LightTheme: "control",
15574
+ DarkTheme: "control"
15575
+ }
15576
+ },
15068
15577
  {
15069
15578
  id: "dataTable.behavior.color",
15070
15579
  value: "primary-surface",
@@ -15714,15 +16223,15 @@ placeholder="Name or address\u2026"
15714
16223
  }
15715
16224
  },
15716
16225
  {
15717
- id: "slider.behavior.transitionMs",
15718
- value: 120,
15719
- type: "number",
16226
+ id: "slider.behavior.motion",
16227
+ value: "snap",
16228
+ type: "string",
15720
16229
  kind: "behavioral",
15721
16230
  target: "component-prop",
15722
16231
  appliesTo: "slider",
15723
16232
  themeValues: {
15724
- LightTheme: 120,
15725
- DarkTheme: 120
16233
+ LightTheme: "snap",
16234
+ DarkTheme: "snap"
15726
16235
  }
15727
16236
  },
15728
16237
  {
@@ -15941,6 +16450,18 @@ placeholder="Name or address\u2026"
15941
16450
  DarkTheme: "control"
15942
16451
  }
15943
16452
  },
16453
+ {
16454
+ id: "tooltip.behavior.motion",
16455
+ value: "notification",
16456
+ type: "string",
16457
+ kind: "behavioral",
16458
+ target: "component-prop",
16459
+ appliesTo: "tooltip",
16460
+ themeValues: {
16461
+ LightTheme: "notification",
16462
+ DarkTheme: "notification"
16463
+ }
16464
+ },
15944
16465
  {
15945
16466
  id: "tooltip.behavior.borderRadius",
15946
16467
  value: "xs",
@@ -16074,7 +16595,7 @@ placeholder="Name or address\u2026"
16074
16595
  }
16075
16596
  },
16076
16597
  {
16077
- id: "callout.behavior.closeSymbol",
16598
+ id: "callout.behavior.closeIcon",
16078
16599
  value: "close",
16079
16600
  type: "string",
16080
16601
  kind: "behavioral",
@@ -16305,6 +16826,12 @@ placeholder="Name or address\u2026"
16305
16826
  "shadow.dialog": "rgba(23, 25, 43, 0.2) 0px 3px 5px -1px, rgba(23, 25, 43, 0.14) 0px 6px 10px 0px, rgba(23, 25, 43, 0.12) 0px 1px 18px 0px",
16306
16827
  "shadow.warn": "0 0 5px rgba(204, 40, 39, 0.5), inset 0 0 5px rgba(204, 40, 39, 0.3)",
16307
16828
  "backdrop.scrim": '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}',
16829
+ "motion.popup": '{"duration":100,"easing":"linear","scale":0.8}',
16830
+ "motion.panel": '{"duration":250,"easing":"ease"}',
16831
+ "motion.reveal": '{"duration":350,"easing":"ease-in-out"}',
16832
+ "motion.notification": '{"duration":350,"easing":"ease-in-out"}',
16833
+ "motion.control": '{"duration":300,"easing":"ease"}',
16834
+ "motion.snap": '{"duration":120,"easing":"ease"}',
16308
16835
  "thickness.thin": 1,
16309
16836
  "thickness.standard": 2,
16310
16837
  "thickness.thick": 4,
@@ -16346,7 +16873,7 @@ placeholder="Name or address\u2026"
16346
16873
  typeface: "label",
16347
16874
  color: "on-background-variant",
16348
16875
  currentColor: "on-background",
16349
- separatorSymbol: "chevron_right",
16876
+ separatorIcon: "chevronRight",
16350
16877
  gap: "xs"
16351
16878
  },
16352
16879
  appBar: {
@@ -16391,7 +16918,7 @@ placeholder="Name or address\u2026"
16391
16918
  avatar: {
16392
16919
  borderRadius: "max",
16393
16920
  typeface: "subtitle-2",
16394
- fallbackSymbol: "person"
16921
+ fallbackIcon: "profile"
16395
16922
  },
16396
16923
  avatarGroup: {
16397
16924
  overlap: "sm",
@@ -16399,8 +16926,8 @@ placeholder="Name or address\u2026"
16399
16926
  ringWidth: 2
16400
16927
  },
16401
16928
  searchInput: {
16402
- searchSymbol: "search",
16403
- clearSymbol: "close",
16929
+ searchIcon: "search",
16930
+ clearIcon: "close",
16404
16931
  listColor: "primary-surface",
16405
16932
  listShadow: "menu",
16406
16933
  listBorderRadius: "xs",
@@ -16408,6 +16935,7 @@ placeholder="Name or address\u2026"
16408
16935
  maxSuggestions: 8
16409
16936
  },
16410
16937
  checkbox: {
16938
+ motion: "control",
16411
16939
  size: 20,
16412
16940
  boxColor: "surface",
16413
16941
  borderRadius: 2,
@@ -16449,6 +16977,22 @@ placeholder="Name or address\u2026"
16449
16977
  closeButtonIcon: "close",
16450
16978
  closeButtonSize: "md"
16451
16979
  },
16980
+ select: {
16981
+ toggleIcon: "chevronDown",
16982
+ toggleColor: "on-background-variant",
16983
+ toggleSize: 20
16984
+ },
16985
+ buttonGroup: {
16986
+ border: "quaternary",
16987
+ borderRadius: 4
16988
+ },
16989
+ progressBar: {
16990
+ trackColor: "primary-surface",
16991
+ fillColor: "secondary-surface",
16992
+ completeColor: "secondary",
16993
+ borderColor: "on-background-variant",
16994
+ strokeWidth: 1
16995
+ },
16452
16996
  dropdown: {
16453
16997
  border: "none",
16454
16998
  borderRadius: "xxs",
@@ -16470,7 +17014,7 @@ placeholder="Name or address\u2026"
16470
17014
  borderRadius: "none",
16471
17015
  typeface: "label",
16472
17016
  hoverColor: "primary-container",
16473
- activeSymbol: "check",
17017
+ activeIcon: "check",
16474
17018
  motion: "control"
16475
17019
  },
16476
17020
  popover: {
@@ -16483,7 +17027,7 @@ placeholder="Name or address\u2026"
16483
17027
  maxWidth: "38ch",
16484
17028
  offset: 7,
16485
17029
  arrowSize: 8,
16486
- closeSymbol: "close",
17030
+ closeIcon: "close",
16487
17031
  headerTypeface: "title-small",
16488
17032
  tooltipPadding: "4px 8px",
16489
17033
  tooltipOpenDelay: 500,
@@ -16493,12 +17037,6 @@ placeholder="Name or address\u2026"
16493
17037
  expand: {
16494
17038
  motion: "reveal"
16495
17039
  },
16496
- footer: {
16497
- height: 52,
16498
- color: "primary",
16499
- logoHeight: 18.6,
16500
- logoPadding: "md"
16501
- },
16502
17040
  input: {
16503
17041
  typeface: "input",
16504
17042
  color: "primary-surface",
@@ -16550,6 +17088,7 @@ placeholder="Name or address\u2026"
16550
17088
  valueWidth: "3ch"
16551
17089
  },
16552
17090
  tabs: {
17091
+ motion: "snap",
16553
17092
  typeface: "title-small",
16554
17093
  textColor: "on-surface-variant",
16555
17094
  activeTextColor: "primary",
@@ -16577,7 +17116,8 @@ placeholder="Name or address\u2026"
16577
17116
  typeface: "tag",
16578
17117
  gap: "xs",
16579
17118
  removeIcon: "close",
16580
- selectedIcon: "check"
17119
+ selectedIcon: "check",
17120
+ motion: "control"
16581
17121
  },
16582
17122
  tagInput: {
16583
17123
  chipGap: "xs",
@@ -16593,8 +17133,8 @@ placeholder="Name or address\u2026"
16593
17133
  dayBorderRadius: "max",
16594
17134
  typeface: "label",
16595
17135
  gap: "xxs",
16596
- navPrevSymbol: "chevron_left",
16597
- navNextSymbol: "chevron_right",
17136
+ navPrevIcon: "chevronLeft",
17137
+ navNextIcon: "chevronRight",
16598
17138
  weekdayFormat: "short",
16599
17139
  showOutsideDays: false,
16600
17140
  todayStyle: "outline"
@@ -16611,13 +17151,13 @@ placeholder="Name or address\u2026"
16611
17151
  descriptionColor: "on-primary-surface-variant"
16612
17152
  },
16613
17153
  dateInput: {
16614
- toggleSymbol: "calendar_month",
17154
+ toggleIcon: "calendar",
16615
17155
  popupShadow: "menu",
16616
17156
  popupBorderRadius: "xs",
16617
17157
  popupColor: "primary-surface"
16618
17158
  },
16619
17159
  timeInput: {
16620
- toggleSymbol: "schedule",
17160
+ toggleIcon: "clock",
16621
17161
  listColor: "primary-surface",
16622
17162
  listShadow: "menu",
16623
17163
  listBorderRadius: "xs",
@@ -16630,10 +17170,19 @@ placeholder="Name or address\u2026"
16630
17170
  },
16631
17171
  button: {
16632
17172
  borderRadius: "max",
16633
- typeface: "button"
17173
+ typeface: "button",
17174
+ motion: "control"
16634
17175
  },
16635
17176
  iconButton: {
16636
- borderRadius: "max"
17177
+ borderRadius: "max",
17178
+ motion: "control"
17179
+ },
17180
+ inlineButton: {
17181
+ linkColor: "primary",
17182
+ underline: false,
17183
+ underlineOnHover: true,
17184
+ underlineOffset: "0.15em",
17185
+ gap: "xxs"
16637
17186
  },
16638
17187
  card: {
16639
17188
  borderRadius: "xs"
@@ -16645,6 +17194,7 @@ placeholder="Name or address\u2026"
16645
17194
  placeholderColor: "disabled"
16646
17195
  },
16647
17196
  dataTable: {
17197
+ motion: "control",
16648
17198
  color: "primary-surface",
16649
17199
  border: "light",
16650
17200
  borderRadius: "sm",
@@ -16707,7 +17257,7 @@ placeholder="Name or address\u2026"
16707
17257
  tooltipTextColor: "on-inverse-surface",
16708
17258
  tooltipShadow: "menu",
16709
17259
  tooltipBorderRadius: "xs",
16710
- transitionMs: 120
17260
+ motion: "snap"
16711
17261
  },
16712
17262
  skeleton: {
16713
17263
  color: "surface-variant",
@@ -16736,6 +17286,7 @@ placeholder="Name or address\u2026"
16736
17286
  motion: "control"
16737
17287
  },
16738
17288
  tooltip: {
17289
+ motion: "notification",
16739
17290
  borderRadius: "xs",
16740
17291
  shadow: "raised",
16741
17292
  color: "inverse-surface",
@@ -16749,7 +17300,7 @@ placeholder="Name or address\u2026"
16749
17300
  padding: "16px",
16750
17301
  headerTypeface: "title-small",
16751
17302
  typeface: "label",
16752
- closeSymbol: "close",
17303
+ closeIcon: "close",
16753
17304
  arrowSize: 8,
16754
17305
  offset: 12,
16755
17306
  scrimColor: "rgba(0, 0, 0, 0.45)",
@@ -16875,6 +17426,12 @@ placeholder="Name or address\u2026"
16875
17426
  "shadow.dialog": "0px 8px 28px rgba(0, 0, 0, 0.55)",
16876
17427
  "shadow.warn": "0 0 5px rgba(255, 150, 138, 0.55), inset 0 0 5px rgba(255, 150, 138, 0.35)",
16877
17428
  "backdrop.scrim": '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}',
17429
+ "motion.popup": '{"duration":100,"easing":"linear","scale":0.8}',
17430
+ "motion.panel": '{"duration":250,"easing":"ease"}',
17431
+ "motion.reveal": '{"duration":350,"easing":"ease-in-out"}',
17432
+ "motion.notification": '{"duration":350,"easing":"ease-in-out"}',
17433
+ "motion.control": '{"duration":300,"easing":"ease"}',
17434
+ "motion.snap": '{"duration":120,"easing":"ease"}',
16878
17435
  "thickness.thin": 1,
16879
17436
  "thickness.standard": 2,
16880
17437
  "thickness.thick": 4,
@@ -16916,7 +17473,7 @@ placeholder="Name or address\u2026"
16916
17473
  typeface: "label",
16917
17474
  color: "on-background-variant",
16918
17475
  currentColor: "on-background",
16919
- separatorSymbol: "chevron_right",
17476
+ separatorIcon: "chevronRight",
16920
17477
  gap: "xs"
16921
17478
  },
16922
17479
  appBar: {
@@ -16961,7 +17518,7 @@ placeholder="Name or address\u2026"
16961
17518
  avatar: {
16962
17519
  borderRadius: "max",
16963
17520
  typeface: "subtitle-2",
16964
- fallbackSymbol: "person"
17521
+ fallbackIcon: "profile"
16965
17522
  },
16966
17523
  avatarGroup: {
16967
17524
  overlap: "sm",
@@ -16969,8 +17526,8 @@ placeholder="Name or address\u2026"
16969
17526
  ringWidth: 2
16970
17527
  },
16971
17528
  searchInput: {
16972
- searchSymbol: "search",
16973
- clearSymbol: "close",
17529
+ searchIcon: "search",
17530
+ clearIcon: "close",
16974
17531
  listColor: "primary-surface",
16975
17532
  listShadow: "menu",
16976
17533
  listBorderRadius: "xs",
@@ -16978,6 +17535,7 @@ placeholder="Name or address\u2026"
16978
17535
  maxSuggestions: 8
16979
17536
  },
16980
17537
  checkbox: {
17538
+ motion: "control",
16981
17539
  size: 20,
16982
17540
  boxColor: "surface",
16983
17541
  borderRadius: 2,
@@ -17019,6 +17577,22 @@ placeholder="Name or address\u2026"
17019
17577
  closeButtonIcon: "close",
17020
17578
  closeButtonSize: "md"
17021
17579
  },
17580
+ select: {
17581
+ toggleIcon: "chevronDown",
17582
+ toggleColor: "on-background-variant",
17583
+ toggleSize: 20
17584
+ },
17585
+ buttonGroup: {
17586
+ border: "quaternary",
17587
+ borderRadius: 4
17588
+ },
17589
+ progressBar: {
17590
+ trackColor: "primary-surface",
17591
+ fillColor: "secondary-surface",
17592
+ completeColor: "secondary",
17593
+ borderColor: "on-background-variant",
17594
+ strokeWidth: 1
17595
+ },
17022
17596
  dropdown: {
17023
17597
  border: "none",
17024
17598
  borderRadius: "xxs",
@@ -17040,7 +17614,7 @@ placeholder="Name or address\u2026"
17040
17614
  borderRadius: "none",
17041
17615
  typeface: "label",
17042
17616
  hoverColor: "primary-container",
17043
- activeSymbol: "check",
17617
+ activeIcon: "check",
17044
17618
  motion: "control"
17045
17619
  },
17046
17620
  popover: {
@@ -17053,7 +17627,7 @@ placeholder="Name or address\u2026"
17053
17627
  maxWidth: "38ch",
17054
17628
  offset: 7,
17055
17629
  arrowSize: 8,
17056
- closeSymbol: "close",
17630
+ closeIcon: "close",
17057
17631
  headerTypeface: "title-small",
17058
17632
  tooltipPadding: "4px 8px",
17059
17633
  tooltipOpenDelay: 500,
@@ -17063,12 +17637,6 @@ placeholder="Name or address\u2026"
17063
17637
  expand: {
17064
17638
  motion: "reveal"
17065
17639
  },
17066
- footer: {
17067
- height: 52,
17068
- color: "primary",
17069
- logoHeight: 18.6,
17070
- logoPadding: "md"
17071
- },
17072
17640
  input: {
17073
17641
  typeface: "input",
17074
17642
  color: "primary-surface",
@@ -17120,6 +17688,7 @@ placeholder="Name or address\u2026"
17120
17688
  valueWidth: "3ch"
17121
17689
  },
17122
17690
  tabs: {
17691
+ motion: "snap",
17123
17692
  typeface: "title-small",
17124
17693
  textColor: "on-surface-variant",
17125
17694
  activeTextColor: "primary",
@@ -17147,7 +17716,8 @@ placeholder="Name or address\u2026"
17147
17716
  typeface: "tag",
17148
17717
  gap: "xs",
17149
17718
  removeIcon: "close",
17150
- selectedIcon: "check"
17719
+ selectedIcon: "check",
17720
+ motion: "control"
17151
17721
  },
17152
17722
  tagInput: {
17153
17723
  chipGap: "xs",
@@ -17163,8 +17733,8 @@ placeholder="Name or address\u2026"
17163
17733
  dayBorderRadius: "max",
17164
17734
  typeface: "label",
17165
17735
  gap: "xxs",
17166
- navPrevSymbol: "chevron_left",
17167
- navNextSymbol: "chevron_right",
17736
+ navPrevIcon: "chevronLeft",
17737
+ navNextIcon: "chevronRight",
17168
17738
  weekdayFormat: "short",
17169
17739
  showOutsideDays: false,
17170
17740
  todayStyle: "outline"
@@ -17181,13 +17751,13 @@ placeholder="Name or address\u2026"
17181
17751
  descriptionColor: "on-primary-surface-variant"
17182
17752
  },
17183
17753
  dateInput: {
17184
- toggleSymbol: "calendar_month",
17754
+ toggleIcon: "calendar",
17185
17755
  popupShadow: "menu",
17186
17756
  popupBorderRadius: "xs",
17187
17757
  popupColor: "primary-surface"
17188
17758
  },
17189
17759
  timeInput: {
17190
- toggleSymbol: "schedule",
17760
+ toggleIcon: "clock",
17191
17761
  listColor: "primary-surface",
17192
17762
  listShadow: "menu",
17193
17763
  listBorderRadius: "xs",
@@ -17200,10 +17770,19 @@ placeholder="Name or address\u2026"
17200
17770
  },
17201
17771
  button: {
17202
17772
  borderRadius: "max",
17203
- typeface: "button"
17773
+ typeface: "button",
17774
+ motion: "control"
17204
17775
  },
17205
17776
  iconButton: {
17206
- borderRadius: "max"
17777
+ borderRadius: "max",
17778
+ motion: "control"
17779
+ },
17780
+ inlineButton: {
17781
+ linkColor: "primary",
17782
+ underline: false,
17783
+ underlineOnHover: true,
17784
+ underlineOffset: "0.15em",
17785
+ gap: "xxs"
17207
17786
  },
17208
17787
  card: {
17209
17788
  borderRadius: "xs"
@@ -17215,6 +17794,7 @@ placeholder="Name or address\u2026"
17215
17794
  placeholderColor: "disabled"
17216
17795
  },
17217
17796
  dataTable: {
17797
+ motion: "control",
17218
17798
  color: "primary-surface",
17219
17799
  border: "light",
17220
17800
  borderRadius: "sm",
@@ -17277,7 +17857,7 @@ placeholder="Name or address\u2026"
17277
17857
  tooltipTextColor: "on-inverse-surface",
17278
17858
  tooltipShadow: "menu",
17279
17859
  tooltipBorderRadius: "xs",
17280
- transitionMs: 120
17860
+ motion: "snap"
17281
17861
  },
17282
17862
  skeleton: {
17283
17863
  color: "surface-variant",
@@ -17306,6 +17886,7 @@ placeholder="Name or address\u2026"
17306
17886
  motion: "control"
17307
17887
  },
17308
17888
  tooltip: {
17889
+ motion: "notification",
17309
17890
  borderRadius: "xs",
17310
17891
  shadow: "raised",
17311
17892
  color: "inverse-surface",
@@ -17319,7 +17900,7 @@ placeholder="Name or address\u2026"
17319
17900
  padding: "16px",
17320
17901
  headerTypeface: "title-small",
17321
17902
  typeface: "label",
17322
- closeSymbol: "close",
17903
+ closeIcon: "close",
17323
17904
  arrowSize: 8,
17324
17905
  offset: 12,
17325
17906
  scrimColor: "rgba(0, 0, 0, 0.45)",
@@ -17340,6 +17921,50 @@ placeholder="Name or address\u2026"
17340
17921
  {
17341
17922
  package: "@uni-design-system/uni-angular",
17342
17923
  releases: [
17924
+ {
17925
+ version: "11.0.0",
17926
+ entries: [
17927
+ {
17928
+ bump: "major",
17929
+ title: "Require Angular 22. `@angular/common`, `@angular/core` and `@angular/forms` move from `^21.2.0` to `^22.0.0`, so 11.x tracks Angular 22 and 10.x remains the Angular 21 line \u2014 one major of this package per Angular major, as documented. The old range excluded v22 outright, so an app that had taken Angular 22 could not install this package without a peer override.",
17930
+ body: "Two consequences of the framework's own changes:\n\n**`touch` output on every form control.** Angular 22 marks a bound field touched through a dedicated `touch` output rather than through the `touched` model, which the `Field` directive now binds inward only. All sixteen controls that track touched state (input, textarea, checkbox, radio, toggle, select, combobox, multi-select, tag-input, calendar, date/date-time/time inputs, number/number-range inputs, quantity-stepper, slider) emit it wherever they already considered the user done with the control. Without it, `touched()` never flips and error display gated on it never appears.\n\n**`min` / `max` typing.** The contract now types `min`/`max` as the control's own value type rather than as numbers. Where that still fits, the input was widened (`uni-slider`). Where it does not \u2014 a text control's native numeric attributes (`uni-input`), a range control's scalar bounds (`uni-number-range-input`), a tag limit (`uni-tag-input`) \u2014 the class member steps aside and the public binding name is preserved by an alias, so **templates are unchanged**. Only code reaching these through a `ViewChild` instance is affected: `min`/`max` are now `minAttr`/`maxAttr` on `uni-input`, `minValue`/`maxValue` on `uni-number-range-input`, and `max` is `maxLength` on `uni-tag-input`. `uni-number-range-input`'s protected `valueOf()` is renamed `partValue()`, since `valueOf` collides with `Object.valueOf`.\n\nAngular 22 also makes `OnPush` the default change detection; every component here already set it explicitly.",
17931
+ commit: "8fef84f"
17932
+ },
17933
+ {
17934
+ bump: "major",
17935
+ title: "Add `uni-inline-button`, and remove the `footer` component name.",
17936
+ body: "**`uni-inline-button`** is an action that lives inside a sentence. Every other button in the library owns a box \u2014 even `ghost` carries padding and a hit area, so dropping one into a paragraph pushes the words apart and breaks the line's rhythm. This one adds no box: it inherits the surrounding type (family, size, weight, line height, letter spacing and colour) and renders as part of the run of text.\n\n```html\nYour data is processed under the terms you accepted. You can\n<button inline-button underline link>review them</button> at any time.\n```\n\nIt is always a real `<button>`, so it can _look_ like a link without claiming to be navigation: Enter and Space activate it and assistive tech announces a button rather than an unfollowable link. Reach for an `<a>` when the thing actually goes somewhere.\n\nInputs: `underline` and `link` (both tri-state against the theme's defaults, and both readable as bare attributes), `iconName` / `symbolName` with `iconPosition`, and `disable`. A glyph is sized in `em` rather than px, so the same markup reads correctly in a caption and in a headline and never changes the line height of the paragraph it sits in.\n\nIt is themed as **`inlineButton`**, with `linkColor`, `underline`, `underlineOnHover`, `underlineOffset`, `gap` and `focusColor`. This replaces the `textButton` name that had sat in `ComponentName` since before there was anything to put behind it \u2014 **`ComponentName`'s `'textButton'` is renamed to `'inlineButton'`, and the exported options type `UniTextButtonOptions` to `UniInlineButtonOptions`.** Nothing shipped a `textButton` entry, so a theme only needs the rename if it had reached for the unbacked name.\n\nOne documented limit: browsers blockify every `<button>` to `inline-block` whatever `display` it asks for, so the control is an atomic inline box. A long label wraps inside it, but the run moves to the next line whole rather than splitting where the surrounding words would. `display: contents` would fix that and cost the button its focusability, so labels should stay to a few words.\n\n**`footer` is removed** from `ComponentName` and from the base theme. It was declared and themed but never built, so a theme could set options that reached nothing. Themes that state a `footer` entry now fail to type-check; delete the entry.",
17937
+ commit: "403043a"
17938
+ },
17939
+ {
17940
+ bump: "major",
17941
+ title: "Put every remaining hardcoded animation duration on the `motion` scale. Seventeen sites across twelve components carried their own literal, so a theme could retime some of the library and not the rest.",
17942
+ body: "New `motion` options, each defaulting to the token named: `button`, `iconButton`, `checkbox`, `tabs`, `tooltip`, `dataTable`, `tag`. `uni-sort-header` names `control` directly \u2014 it has no theme entry to hang an option on. `combobox`'s chevron now turns with the popup it opens, reading that component's existing `motion` option.\n\nTimings move where the literal and the token disagreed:\n\n| | before | after | token |\n| ----------------------------------------- | ----------------- | ----------------- | -------------- |\n| button, icon-button, data-table row hover | 280ms ease | 300ms ease | `control` |\n| checkbox box and dash | 200ms ease | 300ms ease | `control` |\n| checkbox tick (drawn, trails the box) | 500ms ease | 350ms ease-in-out | `reveal` |\n| tabs ink and indicator | 150ms ease | 120ms ease | `snap` |\n| combobox chevron | 150ms ease | 100ms linear | `popup` |\n| tag fill and ink | 200ms ease | 300ms ease | `control` |\n| sort-header arrow | 350ms ease-in-out | 300ms ease | `control` |\n| alert, snackbar dismiss | 300ms | 350ms | `notification` |\n| data-table detail expand | 300ms ease | 350ms ease-in-out | `reveal` |\n| tooltip fade, data-table loading overlay | 350ms | unchanged | `notification` |\n\nTwo of these lived in the theme rather than in a component: `button.fixed` and `tag.fixed` each baked a `transition`, and the button's won over the component that had already been migrated \u2014 so the button kept its old timing regardless. Both are gone; the components own their transitions and follow the token at runtime. A spec now fails if any shipped theme states a duration in a style block.\n\n`uni-skeleton` still stays out: its shimmer is a loop, not a transition.",
17943
+ commit: "2e4a6a4"
17944
+ },
17945
+ {
17946
+ bump: "major",
17947
+ title: "Move `uni-slider`'s click-to-jump timing onto the `motion` scale. The `slider.transitionMs` theme option is removed; use `slider.motion` \u2014 a token name \u2014 instead.",
17948
+ body: "It was the last duration option outside the scale. The other eight went in 9.0.0, but the slider was rewritten for the numeric family afterwards and reintroduced its own, so a theme could retime every animated component except this one.\n\nThe scale gains a sixth token for it, `snap` (120ms `ease`), which is the slider's exact previous timing \u2014 nothing moves faster or slower than before. It is a separate token rather than a reuse of `control` because the two describe different motion: `control` times a state change in place (a hover fill, a check mark) and runs 300ms, where a slider thumb covers distance to a value the user just chose and at 300ms reads as lagging the input rather than answering it. A drag is still never animated.\n\nThemes setting `slider.transitionMs` should set `motion.snap` instead, which also retimes anything else pointed at that token.",
17949
+ commit: "2dc4fb5"
17950
+ },
17951
+ {
17952
+ bump: "major",
17953
+ title: "Composite components now render their glyphs through `uni-icon` theme tokens instead of `uni-symbol` ligatures, completing the rule set in `AGENTS.md`. Thirteen theme options are renamed and retyped from `string` to `IconName`:",
17954
+ body: "| Component | before | after |\n| ---------------------- | --------------------------------- | ------------------------------------- |\n| date-input, time-input | `toggleSymbol` | `toggleIcon` (`calendar`, `clock`) |\n| calendar | `navPrevSymbol` / `navNextSymbol` | `navPrevIcon` / `navNextIcon` |\n| menu-item | `activeSymbol` | `activeIcon` |\n| avatar | `fallbackSymbol` | `fallbackIcon` (`person` \u2192 `profile`) |\n| breadcrumb | `separatorSymbol` | `separatorIcon` |\n| search-input | `searchSymbol` / `clearSymbol` | `searchIcon` / `clearIcon` |\n| callout, popover | `closeSymbol` | `closeIcon` |\n\n`drawer-header` and `dialog-header` shipped both `closeButtonIcon` and `closeButtonSymbol`; the `*Symbol` half is removed, and since `symbolName` outranked `iconName` inside the icon button, those two headers were still rendering the ligature path until now.\n\nFour glyphs join `BaseIcons` (65 total): `arrowUp`/`arrowDown` and `chevronsLeft`/`chevronsRight`, which is what unblocked `uni-sort-header` and `uni-paginator`. `select-input`, `multi-select-dropdown` and `data-search` also stopped hardcoding ligatures.\n\n**Migrating:** rename the option in your theme and swap the Material ligature for an icon token \u2014 `activeSymbol: 'check'` becomes `activeIcon: 'check'`, `toggleSymbol: 'calendar_month'` becomes `toggleIcon: 'calendar'`. Any glyph you need that `BaseIcons` lacks can be registered through `createTheme({ icons })`.\n\n`uni-symbol` is unchanged and still the right tool for app-facing inputs that take arbitrary ligature names \u2014 `symbolName` on icon-button, tag, alert, snackbar and menu-item, and `symbolLeft`/`symbolRight` on button. One consequence worth knowing: `uni-icon` has no variable-font axes, so a theme setting `symbol: { options: { weight } }` no longer affects these composites' glyphs \u2014 they take the icon set's weight (300). The Wellsourced theme, which sets weight 200, has accepted this.",
17955
+ commit: "44feb5d"
17956
+ },
17957
+ {
17958
+ bump: "major",
17959
+ title: "Remove the deprecated `toggle.size` theme option and wire up three component names that were declared but unreachable.",
17960
+ body: "`toggle.size` was the last `@deprecated` API in the library \u2014 the pre-`sizes` geometry (width 2x, knob 0.8x) that outranked the size block for every instance regardless of a toggle's own `size` input. No shipped theme set it. Use the `toggle.sizes` block, which gives each size token its own `width` / `height` / `padding`.\n\n`select`, `buttonGroup` and `progressBar` were listed in `ComponentName` with no theme entry and no `COMPONENT_NAME` provider behind them, so a theme could not dress them however it tried. Each now has an entry whose defaults are exactly what the component previously hardcoded, so nothing moves:\n- **`select`** \u2014 `toggleIcon`, `toggleColor`, `toggleSize` for the dropdown affordance, matching `uni-combobox`'s (`chevronDown`, `on-background-variant`, 20).\n- **`buttonGroup`** \u2014 `border` and `borderRadius` for the segmented frame, previously a literal `quaternary` border and 4px corners.\n- **`progressBar`** \u2014 `trackColor`, `fillColor`, `completeColor`, `borderColor` and `strokeWidth`, previously read straight off the palette.\n\nThe two remaining names are dealt with separately: `textButton` is renamed `inlineButton` and now backs the new `uni-inline-button`, and `footer` is removed from `ComponentName` altogether.",
17961
+ commit: "0b1c528"
17962
+ }
17963
+ ],
17964
+ dependencyBumps: [
17965
+ "@uni-design-system/uni-core@11.0.0"
17966
+ ]
17967
+ },
17343
17968
  {
17344
17969
  version: "10.4.0",
17345
17970
  entries: [
@@ -18128,6 +18753,54 @@ placeholder="Name or address\u2026"
18128
18753
  {
18129
18754
  package: "@uni-design-system/uni-core",
18130
18755
  releases: [
18756
+ {
18757
+ version: "11.0.0",
18758
+ entries: [
18759
+ {
18760
+ bump: "major",
18761
+ title: "Require Angular 22. `@angular/common`, `@angular/core` and `@angular/forms` move from `^21.2.0` to `^22.0.0`, so 11.x tracks Angular 22 and 10.x remains the Angular 21 line \u2014 one major of this package per Angular major, as documented. The old range excluded v22 outright, so an app that had taken Angular 22 could not install this package without a peer override.",
18762
+ body: "Two consequences of the framework's own changes:\n\n**`touch` output on every form control.** Angular 22 marks a bound field touched through a dedicated `touch` output rather than through the `touched` model, which the `Field` directive now binds inward only. All sixteen controls that track touched state (input, textarea, checkbox, radio, toggle, select, combobox, multi-select, tag-input, calendar, date/date-time/time inputs, number/number-range inputs, quantity-stepper, slider) emit it wherever they already considered the user done with the control. Without it, `touched()` never flips and error display gated on it never appears.\n\n**`min` / `max` typing.** The contract now types `min`/`max` as the control's own value type rather than as numbers. Where that still fits, the input was widened (`uni-slider`). Where it does not \u2014 a text control's native numeric attributes (`uni-input`), a range control's scalar bounds (`uni-number-range-input`), a tag limit (`uni-tag-input`) \u2014 the class member steps aside and the public binding name is preserved by an alias, so **templates are unchanged**. Only code reaching these through a `ViewChild` instance is affected: `min`/`max` are now `minAttr`/`maxAttr` on `uni-input`, `minValue`/`maxValue` on `uni-number-range-input`, and `max` is `maxLength` on `uni-tag-input`. `uni-number-range-input`'s protected `valueOf()` is renamed `partValue()`, since `valueOf` collides with `Object.valueOf`.\n\nAngular 22 also makes `OnPush` the default change detection; every component here already set it explicitly.",
18763
+ commit: "8fef84f"
18764
+ },
18765
+ {
18766
+ bump: "major",
18767
+ title: "Add `uni-inline-button`, and remove the `footer` component name.",
18768
+ body: "**`uni-inline-button`** is an action that lives inside a sentence. Every other button in the library owns a box \u2014 even `ghost` carries padding and a hit area, so dropping one into a paragraph pushes the words apart and breaks the line's rhythm. This one adds no box: it inherits the surrounding type (family, size, weight, line height, letter spacing and colour) and renders as part of the run of text.\n\n```html\nYour data is processed under the terms you accepted. You can\n<button inline-button underline link>review them</button> at any time.\n```\n\nIt is always a real `<button>`, so it can _look_ like a link without claiming to be navigation: Enter and Space activate it and assistive tech announces a button rather than an unfollowable link. Reach for an `<a>` when the thing actually goes somewhere.\n\nInputs: `underline` and `link` (both tri-state against the theme's defaults, and both readable as bare attributes), `iconName` / `symbolName` with `iconPosition`, and `disable`. A glyph is sized in `em` rather than px, so the same markup reads correctly in a caption and in a headline and never changes the line height of the paragraph it sits in.\n\nIt is themed as **`inlineButton`**, with `linkColor`, `underline`, `underlineOnHover`, `underlineOffset`, `gap` and `focusColor`. This replaces the `textButton` name that had sat in `ComponentName` since before there was anything to put behind it \u2014 **`ComponentName`'s `'textButton'` is renamed to `'inlineButton'`, and the exported options type `UniTextButtonOptions` to `UniInlineButtonOptions`.** Nothing shipped a `textButton` entry, so a theme only needs the rename if it had reached for the unbacked name.\n\nOne documented limit: browsers blockify every `<button>` to `inline-block` whatever `display` it asks for, so the control is an atomic inline box. A long label wraps inside it, but the run moves to the next line whole rather than splitting where the surrounding words would. `display: contents` would fix that and cost the button its focusability, so labels should stay to a few words.\n\n**`footer` is removed** from `ComponentName` and from the base theme. It was declared and themed but never built, so a theme could set options that reached nothing. Themes that state a `footer` entry now fail to type-check; delete the entry.",
18769
+ commit: "403043a"
18770
+ },
18771
+ {
18772
+ bump: "major",
18773
+ title: "Put every remaining hardcoded animation duration on the `motion` scale. Seventeen sites across twelve components carried their own literal, so a theme could retime some of the library and not the rest.",
18774
+ body: "New `motion` options, each defaulting to the token named: `button`, `iconButton`, `checkbox`, `tabs`, `tooltip`, `dataTable`, `tag`. `uni-sort-header` names `control` directly \u2014 it has no theme entry to hang an option on. `combobox`'s chevron now turns with the popup it opens, reading that component's existing `motion` option.\n\nTimings move where the literal and the token disagreed:\n\n| | before | after | token |\n| ----------------------------------------- | ----------------- | ----------------- | -------------- |\n| button, icon-button, data-table row hover | 280ms ease | 300ms ease | `control` |\n| checkbox box and dash | 200ms ease | 300ms ease | `control` |\n| checkbox tick (drawn, trails the box) | 500ms ease | 350ms ease-in-out | `reveal` |\n| tabs ink and indicator | 150ms ease | 120ms ease | `snap` |\n| combobox chevron | 150ms ease | 100ms linear | `popup` |\n| tag fill and ink | 200ms ease | 300ms ease | `control` |\n| sort-header arrow | 350ms ease-in-out | 300ms ease | `control` |\n| alert, snackbar dismiss | 300ms | 350ms | `notification` |\n| data-table detail expand | 300ms ease | 350ms ease-in-out | `reveal` |\n| tooltip fade, data-table loading overlay | 350ms | unchanged | `notification` |\n\nTwo of these lived in the theme rather than in a component: `button.fixed` and `tag.fixed` each baked a `transition`, and the button's won over the component that had already been migrated \u2014 so the button kept its old timing regardless. Both are gone; the components own their transitions and follow the token at runtime. A spec now fails if any shipped theme states a duration in a style block.\n\n`uni-skeleton` still stays out: its shimmer is a loop, not a transition.",
18775
+ commit: "2e4a6a4"
18776
+ },
18777
+ {
18778
+ bump: "major",
18779
+ title: "Move `uni-slider`'s click-to-jump timing onto the `motion` scale. The `slider.transitionMs` theme option is removed; use `slider.motion` \u2014 a token name \u2014 instead.",
18780
+ body: "It was the last duration option outside the scale. The other eight went in 9.0.0, but the slider was rewritten for the numeric family afterwards and reintroduced its own, so a theme could retime every animated component except this one.\n\nThe scale gains a sixth token for it, `snap` (120ms `ease`), which is the slider's exact previous timing \u2014 nothing moves faster or slower than before. It is a separate token rather than a reuse of `control` because the two describe different motion: `control` times a state change in place (a hover fill, a check mark) and runs 300ms, where a slider thumb covers distance to a value the user just chose and at 300ms reads as lagging the input rather than answering it. A drag is still never animated.\n\nThemes setting `slider.transitionMs` should set `motion.snap` instead, which also retimes anything else pointed at that token.",
18781
+ commit: "2dc4fb5"
18782
+ },
18783
+ {
18784
+ bump: "major",
18785
+ title: "Composite components now render their glyphs through `uni-icon` theme tokens instead of `uni-symbol` ligatures, completing the rule set in `AGENTS.md`. Thirteen theme options are renamed and retyped from `string` to `IconName`:",
18786
+ body: "| Component | before | after |\n| ---------------------- | --------------------------------- | ------------------------------------- |\n| date-input, time-input | `toggleSymbol` | `toggleIcon` (`calendar`, `clock`) |\n| calendar | `navPrevSymbol` / `navNextSymbol` | `navPrevIcon` / `navNextIcon` |\n| menu-item | `activeSymbol` | `activeIcon` |\n| avatar | `fallbackSymbol` | `fallbackIcon` (`person` \u2192 `profile`) |\n| breadcrumb | `separatorSymbol` | `separatorIcon` |\n| search-input | `searchSymbol` / `clearSymbol` | `searchIcon` / `clearIcon` |\n| callout, popover | `closeSymbol` | `closeIcon` |\n\n`drawer-header` and `dialog-header` shipped both `closeButtonIcon` and `closeButtonSymbol`; the `*Symbol` half is removed, and since `symbolName` outranked `iconName` inside the icon button, those two headers were still rendering the ligature path until now.\n\nFour glyphs join `BaseIcons` (65 total): `arrowUp`/`arrowDown` and `chevronsLeft`/`chevronsRight`, which is what unblocked `uni-sort-header` and `uni-paginator`. `select-input`, `multi-select-dropdown` and `data-search` also stopped hardcoding ligatures.\n\n**Migrating:** rename the option in your theme and swap the Material ligature for an icon token \u2014 `activeSymbol: 'check'` becomes `activeIcon: 'check'`, `toggleSymbol: 'calendar_month'` becomes `toggleIcon: 'calendar'`. Any glyph you need that `BaseIcons` lacks can be registered through `createTheme({ icons })`.\n\n`uni-symbol` is unchanged and still the right tool for app-facing inputs that take arbitrary ligature names \u2014 `symbolName` on icon-button, tag, alert, snackbar and menu-item, and `symbolLeft`/`symbolRight` on button. One consequence worth knowing: `uni-icon` has no variable-font axes, so a theme setting `symbol: { options: { weight } }` no longer affects these composites' glyphs \u2014 they take the icon set's weight (300). The Wellsourced theme, which sets weight 200, has accepted this.",
18787
+ commit: "44feb5d"
18788
+ },
18789
+ {
18790
+ bump: "major",
18791
+ title: "Remove the deprecated `toggle.size` theme option and wire up three component names that were declared but unreachable.",
18792
+ body: "`toggle.size` was the last `@deprecated` API in the library \u2014 the pre-`sizes` geometry (width 2x, knob 0.8x) that outranked the size block for every instance regardless of a toggle's own `size` input. No shipped theme set it. Use the `toggle.sizes` block, which gives each size token its own `width` / `height` / `padding`.\n\n`select`, `buttonGroup` and `progressBar` were listed in `ComponentName` with no theme entry and no `COMPONENT_NAME` provider behind them, so a theme could not dress them however it tried. Each now has an entry whose defaults are exactly what the component previously hardcoded, so nothing moves:\n- **`select`** \u2014 `toggleIcon`, `toggleColor`, `toggleSize` for the dropdown affordance, matching `uni-combobox`'s (`chevronDown`, `on-background-variant`, 20).\n- **`buttonGroup`** \u2014 `border` and `borderRadius` for the segmented frame, previously a literal `quaternary` border and 4px corners.\n- **`progressBar`** \u2014 `trackColor`, `fillColor`, `completeColor`, `borderColor` and `strokeWidth`, previously read straight off the palette.\n\nThe two remaining names are dealt with separately: `textButton` is renamed `inlineButton` and now backs the new `uni-inline-button`, and `footer` is removed from `ComponentName` altogether.",
18793
+ commit: "0b1c528"
18794
+ },
18795
+ {
18796
+ bump: "patch",
18797
+ title: "Fix unreadable text in `uni-card` under dark themes. The card's theme entry painted `backgroundColor` without the matching `color`, so any unstyled text inside it fell back to the user-agent default black. On a light theme that happened to read; on every dark theme it rendered black on a near-black surface \u2014 1.11:1 against a 4.5:1 AA requirement, reported from the theme switcher's preview card.",
18798
+ body: "The card now states `on-background` alongside its background, as `cardHeader` already did for each of its variants. All six registered themes measure between 13.8:1 and 18.1:1 on that text.\n\nAdded with the fix: a spec asserting the invariant across every component entry in the shipped themes \u2014 anything that paints a `backgroundColor` must also state a `color` \u2014 so the next half-painted surface fails a test rather than reaching a consumer.",
18799
+ commit: "85a1ec5"
18800
+ }
18801
+ ],
18802
+ dependencyBumps: []
18803
+ },
18131
18804
  {
18132
18805
  version: "10.4.0",
18133
18806
  entries: [
@@ -18688,6 +19361,24 @@ placeholder="Name or address\u2026"
18688
19361
  {
18689
19362
  package: "@uni-design-system/uni-react",
18690
19363
  releases: [
19364
+ {
19365
+ version: "11.0.0",
19366
+ entries: [
19367
+ {
19368
+ bump: "major",
19369
+ title: "Require Angular 22. `@angular/common`, `@angular/core` and `@angular/forms` move from `^21.2.0` to `^22.0.0`, so 11.x tracks Angular 22 and 10.x remains the Angular 21 line \u2014 one major of this package per Angular major, as documented. The old range excluded v22 outright, so an app that had taken Angular 22 could not install this package without a peer override.",
19370
+ body: "Two consequences of the framework's own changes:\n\n**`touch` output on every form control.** Angular 22 marks a bound field touched through a dedicated `touch` output rather than through the `touched` model, which the `Field` directive now binds inward only. All sixteen controls that track touched state (input, textarea, checkbox, radio, toggle, select, combobox, multi-select, tag-input, calendar, date/date-time/time inputs, number/number-range inputs, quantity-stepper, slider) emit it wherever they already considered the user done with the control. Without it, `touched()` never flips and error display gated on it never appears.\n\n**`min` / `max` typing.** The contract now types `min`/`max` as the control's own value type rather than as numbers. Where that still fits, the input was widened (`uni-slider`). Where it does not \u2014 a text control's native numeric attributes (`uni-input`), a range control's scalar bounds (`uni-number-range-input`), a tag limit (`uni-tag-input`) \u2014 the class member steps aside and the public binding name is preserved by an alias, so **templates are unchanged**. Only code reaching these through a `ViewChild` instance is affected: `min`/`max` are now `minAttr`/`maxAttr` on `uni-input`, `minValue`/`maxValue` on `uni-number-range-input`, and `max` is `maxLength` on `uni-tag-input`. `uni-number-range-input`'s protected `valueOf()` is renamed `partValue()`, since `valueOf` collides with `Object.valueOf`.\n\nAngular 22 also makes `OnPush` the default change detection; every component here already set it explicitly.",
19371
+ commit: "8fef84f"
19372
+ },
19373
+ {
19374
+ bump: "patch",
19375
+ title: "Mark the React package experimental. It shares a version number with `@uni-design-system/uni-angular` because the packages release together as a fixed group, not because they are at parity \u2014 React implements roughly a sixth of the Angular library's components and carries a single spec file. The version was reading as a maturity signal it had not earned.",
19376
+ body: "The package description and a README banner now say so; nothing about the code changes, and it stays published.",
19377
+ commit: "0b1c528"
19378
+ }
19379
+ ],
19380
+ dependencyBumps: []
19381
+ },
18691
19382
  {
18692
19383
  version: "10.4.0",
18693
19384
  entries: [],
@@ -18941,6 +19632,18 @@ placeholder="Name or address\u2026"
18941
19632
  {
18942
19633
  package: "@uni-design-system/uni-mcp",
18943
19634
  releases: [
19635
+ {
19636
+ version: "11.0.0",
19637
+ entries: [
19638
+ {
19639
+ bump: "major",
19640
+ title: "Require Angular 22. `@angular/common`, `@angular/core` and `@angular/forms` move from `^21.2.0` to `^22.0.0`, so 11.x tracks Angular 22 and 10.x remains the Angular 21 line \u2014 one major of this package per Angular major, as documented. The old range excluded v22 outright, so an app that had taken Angular 22 could not install this package without a peer override.",
19641
+ body: "Two consequences of the framework's own changes:\n\n**`touch` output on every form control.** Angular 22 marks a bound field touched through a dedicated `touch` output rather than through the `touched` model, which the `Field` directive now binds inward only. All sixteen controls that track touched state (input, textarea, checkbox, radio, toggle, select, combobox, multi-select, tag-input, calendar, date/date-time/time inputs, number/number-range inputs, quantity-stepper, slider) emit it wherever they already considered the user done with the control. Without it, `touched()` never flips and error display gated on it never appears.\n\n**`min` / `max` typing.** The contract now types `min`/`max` as the control's own value type rather than as numbers. Where that still fits, the input was widened (`uni-slider`). Where it does not \u2014 a text control's native numeric attributes (`uni-input`), a range control's scalar bounds (`uni-number-range-input`), a tag limit (`uni-tag-input`) \u2014 the class member steps aside and the public binding name is preserved by an alias, so **templates are unchanged**. Only code reaching these through a `ViewChild` instance is affected: `min`/`max` are now `minAttr`/`maxAttr` on `uni-input`, `minValue`/`maxValue` on `uni-number-range-input`, and `max` is `maxLength` on `uni-tag-input`. `uni-number-range-input`'s protected `valueOf()` is renamed `partValue()`, since `valueOf` collides with `Object.valueOf`.\n\nAngular 22 also makes `OnPush` the default change detection; every component here already set it explicitly.",
19642
+ commit: "8fef84f"
19643
+ }
19644
+ ],
19645
+ dependencyBumps: []
19646
+ },
18944
19647
  {
18945
19648
  version: "10.4.0",
18946
19649
  entries: [],
@@ -19959,6 +20662,10 @@ var BaseIcons = {
19959
20662
  chevronRight: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m517.85-480-184-184L376-706.15 602.15-480 376-253.85 333.85-296l184-184Z'/%3e%3c/svg%3e",
19960
20663
  arrowLeft: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m294.92-450 227.85 227.85L480-180 180-480l300-300 42.77 42.15L294.92-510H780v60H294.92Z'/%3e%3c/svg%3e",
19961
20664
  arrowRight: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M665.08-450H180v-60h485.08L437.23-737.85 480-780l300 300-300 300-42.77-42.15L665.08-450Z'/%3e%3c/svg%3e",
20665
+ arrowUp: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-180v-485.08L222.15-437.23 180-480l300-300 300 300-42.15 42.77L510-665.08V-180h-60Z'/%3e%3c/svg%3e",
20666
+ arrowDown: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-780v485.08L222.15-522.77 180-480l300 300 300-300-42.15-42.77L510-294.92V-780h-60Z'/%3e%3c/svg%3e",
20667
+ chevronsLeft: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M445-253.85 218.85-480 445-706.15 487.15-664 303.77-480l183.38 184L445-253.85Zm254 0L472.85-480 699-706.15 741.15-664 557.77-480l183.38 184L699-253.85Z'/%3e%3c/svg%3e",
20668
+ chevronsRight: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M402.23-480 218.85-664 261-706.15 487.15-480 261-253.85 218.85-296l183.38-184Zm254 0L472.85-664 515-706.15 741.15-480 515-253.85 472.85-296l183.38-184Z'/%3e%3c/svg%3e",
19962
20669
  home: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M240-200h133.85v-237.69h212.3V-200H720v-360L480-740.77 240-560v360Zm-60 60v-450l300-225.77L780-590v450H526.15v-237.69h-92.3V-140H180Zm300-330.38Z'/%3e%3c/svg%3e",
19963
20670
  building: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M130-136.92v-540h160v-160h380v320h160v380H530v-160H430v160H130Zm60-60h100v-100H190v100Zm0-160h100v-100H190v100Zm0-160h100v-100H190v100Zm160 160h100v-100H350v100Zm0-160h100v-100H350v100Zm0-160h100v-100H350v100Zm160 320h100v-100H510v100Zm0-160h100v-100H510v100Zm0-160h100v-100H510v100Zm160 480h100v-100H670v100Zm0-160h100v-100H670v100Z'/%3e%3c/svg%3e",
19964
20671
  externalLink: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-140Q182-140 161-161q-21-21-21-51.31v-535.38Q140-778 161-799q21-21 51.31-21h252.3v60h-252.3q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-252.3h60v252.3Q820-182 799-161q-21 21-51.31 21H212.31Zm176.46-206.62-42.15-42.15L717.85-760H560v-60h260v260h-60v-157.85L388.77-346.62Z'/%3e%3c/svg%3e",
@@ -20213,6 +20920,10 @@ var BaseMotion = {
20213
20920
  control: {
20214
20921
  duration: 300,
20215
20922
  easing: "ease"
20923
+ },
20924
+ snap: {
20925
+ duration: 120,
20926
+ easing: "ease"
20216
20927
  }
20217
20928
  };
20218
20929
  var BaseBackdrops = { scrim: {
@@ -20275,7 +20986,7 @@ var buildComponents = (c) => ({
20275
20986
  typeface: "label",
20276
20987
  color: "on-background-variant",
20277
20988
  currentColor: "on-background",
20278
- separatorSymbol: "chevron_right",
20989
+ separatorIcon: "chevronRight",
20279
20990
  gap: "xs"
20280
20991
  } },
20281
20992
  appBar: { options: {
@@ -20323,7 +21034,7 @@ var buildComponents = (c) => ({
20323
21034
  options: {
20324
21035
  borderRadius: "max",
20325
21036
  typeface: "subtitle-2",
20326
- fallbackSymbol: "person"
21037
+ fallbackIcon: "profile"
20327
21038
  },
20328
21039
  variants: {
20329
21040
  primary: {
@@ -20380,8 +21091,8 @@ var buildComponents = (c) => ({
20380
21091
  ringWidth: 2
20381
21092
  } },
20382
21093
  searchInput: { options: {
20383
- searchSymbol: "search",
20384
- clearSymbol: "close",
21094
+ searchIcon: "search",
21095
+ clearIcon: "close",
20385
21096
  listColor: "primary-surface",
20386
21097
  listShadow: "menu",
20387
21098
  listBorderRadius: "xs",
@@ -20390,6 +21101,7 @@ var buildComponents = (c) => ({
20390
21101
  } },
20391
21102
  checkbox: {
20392
21103
  options: {
21104
+ motion: "control",
20393
21105
  size: 20,
20394
21106
  boxColor: "surface",
20395
21107
  borderRadius: 2,
@@ -20439,6 +21151,22 @@ var buildComponents = (c) => ({
20439
21151
  closeButtonIcon: "close",
20440
21152
  closeButtonSize: "md"
20441
21153
  } },
21154
+ select: { options: {
21155
+ toggleIcon: "chevronDown",
21156
+ toggleColor: "on-background-variant",
21157
+ toggleSize: 20
21158
+ } },
21159
+ buttonGroup: { options: {
21160
+ border: "quaternary",
21161
+ borderRadius: 4
21162
+ } },
21163
+ progressBar: { options: {
21164
+ trackColor: "primary-surface",
21165
+ fillColor: "secondary-surface",
21166
+ completeColor: "secondary",
21167
+ borderColor: "on-background-variant",
21168
+ strokeWidth: 1
21169
+ } },
20442
21170
  dropdown: { options: {
20443
21171
  border: "none",
20444
21172
  borderRadius: "xxs",
@@ -20466,7 +21194,7 @@ var buildComponents = (c) => ({
20466
21194
  typeface: "label",
20467
21195
  textColor: void 0,
20468
21196
  hoverColor: "primary-container",
20469
- activeSymbol: "check",
21197
+ activeIcon: "check",
20470
21198
  motion: "control"
20471
21199
  },
20472
21200
  variants: {
@@ -20490,7 +21218,7 @@ var buildComponents = (c) => ({
20490
21218
  maxWidth: "38ch",
20491
21219
  offset: 7,
20492
21220
  arrowSize: 8,
20493
- closeSymbol: "close",
21221
+ closeIcon: "close",
20494
21222
  headerTypeface: "title-small",
20495
21223
  tooltipPadding: "4px 8px",
20496
21224
  tooltipOpenDelay: 500,
@@ -20498,12 +21226,6 @@ var buildComponents = (c) => ({
20498
21226
  motion: "panel"
20499
21227
  } },
20500
21228
  expand: { options: { motion: "reveal" } },
20501
- footer: { options: {
20502
- height: 52,
20503
- color: "primary",
20504
- logoHeight: 18.6,
20505
- logoPadding: "md"
20506
- } },
20507
21229
  input: { options: {
20508
21230
  typeface: "input",
20509
21231
  color: "primary-surface",
@@ -20562,6 +21284,7 @@ var buildComponents = (c) => ({
20562
21284
  }
20563
21285
  },
20564
21286
  tabs: { options: {
21287
+ motion: "snap",
20565
21288
  typeface: "title-small",
20566
21289
  textColor: "on-surface-variant",
20567
21290
  activeTextColor: "primary",
@@ -20589,14 +21312,14 @@ var buildComponents = (c) => ({
20589
21312
  typeface: "tag",
20590
21313
  gap: "xs",
20591
21314
  removeIcon: "close",
20592
- selectedIcon: "check"
21315
+ selectedIcon: "check",
21316
+ motion: "control"
20593
21317
  },
20594
21318
  fixed: {
20595
21319
  display: "inline-flex",
20596
21320
  alignItems: "center",
20597
21321
  maxWidth: "100%",
20598
- border: "1px solid transparent",
20599
- transition: "background-color .2s ease, color .2s ease"
21322
+ border: "1px solid transparent"
20600
21323
  },
20601
21324
  variants: {
20602
21325
  ...tagVariant(c, "primary"),
@@ -20662,8 +21385,8 @@ var buildComponents = (c) => ({
20662
21385
  dayBorderRadius: "max",
20663
21386
  typeface: "label",
20664
21387
  gap: "xxs",
20665
- navPrevSymbol: "chevron_left",
20666
- navNextSymbol: "chevron_right",
21388
+ navPrevIcon: "chevronLeft",
21389
+ navNextIcon: "chevronRight",
20667
21390
  weekdayFormat: "short",
20668
21391
  showOutsideDays: false,
20669
21392
  todayStyle: "outline"
@@ -20702,13 +21425,13 @@ var buildComponents = (c) => ({
20702
21425
  descriptionColor: "on-primary-surface-variant"
20703
21426
  } },
20704
21427
  dateInput: { options: {
20705
- toggleSymbol: "calendar_month",
21428
+ toggleIcon: "calendar",
20706
21429
  popupShadow: "menu",
20707
21430
  popupBorderRadius: "xs",
20708
21431
  popupColor: "primary-surface"
20709
21432
  } },
20710
21433
  timeInput: { options: {
20711
- toggleSymbol: "schedule",
21434
+ toggleIcon: "clock",
20712
21435
  listColor: "primary-surface",
20713
21436
  listShadow: "menu",
20714
21437
  listBorderRadius: "xs",
@@ -20722,15 +21445,15 @@ var buildComponents = (c) => ({
20722
21445
  button: {
20723
21446
  options: {
20724
21447
  borderRadius: "max",
20725
- typeface: "button"
21448
+ typeface: "button",
21449
+ motion: "control"
20726
21450
  },
20727
21451
  fixed: {
20728
21452
  position: "relative",
20729
21453
  overflow: "hidden",
20730
21454
  outline: "0",
20731
21455
  border: "0",
20732
- cursor: "pointer",
20733
- transition: "all 0.28s ease"
21456
+ cursor: "pointer"
20734
21457
  },
20735
21458
  variantOptions: {
20736
21459
  primary: { focusColor: "primary" },
@@ -20811,7 +21534,10 @@ var buildComponents = (c) => ({
20811
21534
  }
20812
21535
  },
20813
21536
  iconButton: {
20814
- options: { borderRadius: "max" },
21537
+ options: {
21538
+ borderRadius: "max",
21539
+ motion: "control"
21540
+ },
20815
21541
  variantOptions: {
20816
21542
  primary: { focusColor: "primary" },
20817
21543
  secondary: { focusColor: "secondary" },
@@ -20888,6 +21614,13 @@ var buildComponents = (c) => ({
20888
21614
  }
20889
21615
  }
20890
21616
  },
21617
+ inlineButton: { options: {
21618
+ linkColor: "primary",
21619
+ underline: false,
21620
+ underlineOnHover: true,
21621
+ underlineOffset: "0.15em",
21622
+ gap: "xxs"
21623
+ } },
20891
21624
  progressGauge: {
20892
21625
  fixed: { textFill: c["on-background"] },
20893
21626
  variants: {
@@ -20923,7 +21656,8 @@ var buildComponents = (c) => ({
20923
21656
  options: { borderRadius: "xs" },
20924
21657
  fixed: {
20925
21658
  overflow: "hidden",
20926
- backgroundColor: c.background
21659
+ backgroundColor: c.background,
21660
+ color: c["on-background"]
20927
21661
  }
20928
21662
  },
20929
21663
  cardHeader: {
@@ -20959,6 +21693,7 @@ var buildComponents = (c) => ({
20959
21693
  placeholderColor: "disabled"
20960
21694
  } },
20961
21695
  dataTable: { options: {
21696
+ motion: "control",
20962
21697
  color: "primary-surface",
20963
21698
  border: "light",
20964
21699
  borderRadius: "sm",
@@ -21022,7 +21757,7 @@ var buildComponents = (c) => ({
21022
21757
  tooltipTextColor: "on-inverse-surface",
21023
21758
  tooltipShadow: "menu",
21024
21759
  tooltipBorderRadius: "xs",
21025
- transitionMs: 120
21760
+ motion: "snap"
21026
21761
  } },
21027
21762
  skeleton: { options: {
21028
21763
  color: "surface-variant",
@@ -21071,6 +21806,7 @@ var buildComponents = (c) => ({
21071
21806
  }
21072
21807
  },
21073
21808
  tooltip: { options: {
21809
+ motion: "notification",
21074
21810
  border: void 0,
21075
21811
  borderRadius: "xs",
21076
21812
  shadow: "raised",
@@ -21085,7 +21821,7 @@ var buildComponents = (c) => ({
21085
21821
  padding: "16px",
21086
21822
  headerTypeface: "title-small",
21087
21823
  typeface: "label",
21088
- closeSymbol: "close",
21824
+ closeIcon: "close",
21089
21825
  arrowSize: 8,
21090
21826
  offset: 12,
21091
21827
  scrimColor: "rgba(0, 0, 0, 0.45)",
@@ -22156,7 +22892,7 @@ function createUniServer() {
22156
22892
  "list-tokens",
22157
22893
  {
22158
22894
  title: "List design tokens",
22159
- description: "Inventory of Uni design tokens. Filter by `type` (color, spacing, radius, shadow, border, backdrop, thickness, typography, ...), `kind` (style|behavioral), or `theme`.",
22895
+ description: "Inventory of Uni design tokens. Filter by `type` (color, spacing, radius, shadow, border, backdrop, motion, thickness, typography, ...), `kind` (style|behavioral), or `theme`.",
22160
22896
  inputSchema: {
22161
22897
  type: z.string().optional(),
22162
22898
  kind: z.enum(["style", "behavioral"]).optional(),
@@ -22476,4 +23212,4 @@ export {
22476
23212
  buildStoredTheme,
22477
23213
  createUniServer
22478
23214
  };
22479
- //# sourceMappingURL=chunk-QZ5TESCY.js.map
23215
+ //# sourceMappingURL=chunk-RAD6CBGV.js.map