@uni-design-system/uni-mcp 4.1.2 → 4.3.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: "5.2.0",
11
- builtAt: "2026-07-24T03:22:37.140Z",
10
+ version: "6.0.1",
11
+ builtAt: "2026-07-24T15:08:54.365Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 69,
17
- tokens: 272,
16
+ components: 70,
17
+ tokens: 296,
18
18
  themes: 2,
19
- examples: 126
19
+ examples: 132
20
20
  }
21
21
  },
22
22
  components: [
@@ -27,11 +27,11 @@ var uni_index_default = {
27
27
  summary: "",
28
28
  description: "",
29
29
  category: "feedback",
30
- version: "5.2.0",
30
+ version: "6.0.1",
31
31
  bindings: {
32
32
  angular: {
33
33
  importPath: "@uni-design-system/uni-angular",
34
- selectorOrTag: "uni-alert, Alert",
34
+ selectorOrTag: "uni-alert",
35
35
  api: [
36
36
  {
37
37
  name: "show",
@@ -78,11 +78,11 @@ var uni_index_default = {
78
78
  {
79
79
  title: "Primary",
80
80
  framework: "angular",
81
- code: "<!-- Storybook story: Primary -->\n<Button (click)=\"alert.open()\">Show Alert</Button>\n<Alert #alert ${argsToTemplate(props)}>\n ${ngContent}\n</Alert>\n<!-- args:\n{\n ngContent: 'This is an alert!',\n variant: 'tertiary',\n symbolName: 'privacy_tip',\n }\n-->"
81
+ code: "<!-- Storybook story: Primary -->\n<button text-button (click)=\"alert.open()\">Show Alert</button>\n<uni-alert #alert ${argsToTemplate(props)}>\n ${ngContent}\n</uni-alert>\n<!-- args:\n{\n ngContent: 'This is an alert!',\n variant: 'tertiary',\n symbolName: 'privacy_tip',\n }\n-->"
82
82
  }
83
83
  ],
84
84
  guidelines: {
85
- whenToUse: "",
85
+ whenToUse: "The Alert is used to communicate a state that affects a system, feature or page.\nFor instance, alerts can be used to display errors or any unexpected results from a user's action.",
86
86
  dos: [],
87
87
  donts: [],
88
88
  accessibility: []
@@ -101,11 +101,11 @@ var uni_index_default = {
101
101
  summary: "",
102
102
  description: "",
103
103
  category: "components",
104
- version: "5.2.0",
104
+ version: "6.0.1",
105
105
  bindings: {
106
106
  angular: {
107
107
  importPath: "@uni-design-system/uni-angular",
108
- selectorOrTag: "uni-app-bar, AppBar",
108
+ selectorOrTag: "uni-app-bar",
109
109
  api: [
110
110
  {
111
111
  name: "title",
@@ -141,10 +141,13 @@ var uni_index_default = {
141
141
  }
142
142
  ],
143
143
  guidelines: {
144
- whenToUse: "",
144
+ whenToUse: "Horizontal application bar for the top of a page or section. Project controls with the\n`leading` attribute (menu button, logo) and actions with `trailing` (pushed to the far\nedge); pass `title` or project your own center content. Surface color, height, the\ndivider rule, title typography and spacing all resolve from the theme's `appBar`\noptions, and `sticky` pins the bar to the top of its scroll container.\nPlace it inside your page's `<header>` landmark. It pairs with the Drawer \u2014 see the\nDrawer docs for the full dashboard-shell recipe.",
145
145
  dos: [],
146
146
  donts: [],
147
- accessibility: []
147
+ accessibility: [
148
+ "The bar is a styled container, not a landmark \u2014 place it inside your page's `<header>` element.",
149
+ "Give leading/trailing icon buttons text content or `ariaLabel` so they announce."
150
+ ]
148
151
  },
149
152
  relatedTokens: []
150
153
  },
@@ -155,11 +158,11 @@ var uni_index_default = {
155
158
  summary: "",
156
159
  description: "",
157
160
  category: "components",
158
- version: "5.2.0",
161
+ version: "6.0.1",
159
162
  bindings: {
160
163
  angular: {
161
164
  importPath: "@uni-design-system/uni-angular",
162
- selectorOrTag: "uni-avatar, Avatar",
165
+ selectorOrTag: "uni-avatar",
163
166
  api: [
164
167
  {
165
168
  name: "src",
@@ -190,7 +193,7 @@ var uni_index_default = {
190
193
  title: "Initials",
191
194
  framework: "angular",
192
195
  code: `<!-- Storybook story: Initials -->
193
- <div style="display: flex; gap: 12px; align-items: center;">
196
+ <div row-layout gap="sm" alignItems="center">
194
197
  <uni-avatar name="Ada Lovelace" size="sm" />
195
198
  <uni-avatar name="Grace Hopper" size="md" variant="secondary" />
196
199
  <uni-avatar name="Katherine Johnson" size="lg" variant="tertiary" />
@@ -204,19 +207,22 @@ var uni_index_default = {
204
207
  {
205
208
  title: "Sizes And Variants",
206
209
  framework: "angular",
207
- code: '<!-- Storybook story: Sizes And Variants -->\n<div style="display: flex; gap: 12px; align-items: center;">\n<uni-avatar name="Ada Lovelace" size="sm" />\n<uni-avatar name="Grace Hopper" size="md" variant="secondary" />\n<uni-avatar name="Katherine Johnson" size="lg" variant="tertiary" />\n<uni-avatar name="Annie Easley" size="xl" variant="success" />\n<uni-avatar size="lg" variant="quaternary" />\n</div>'
210
+ code: '<!-- Storybook story: Sizes And Variants -->\n<div row-layout gap="sm" alignItems="center">\n<uni-avatar name="Ada Lovelace" size="sm" />\n<uni-avatar name="Grace Hopper" size="md" variant="secondary" />\n<uni-avatar name="Katherine Johnson" size="lg" variant="tertiary" />\n<uni-avatar name="Annie Easley" size="xl" variant="success" />\n<uni-avatar size="lg" variant="quaternary" />\n</div>'
208
211
  },
209
212
  {
210
213
  title: "Group",
211
214
  framework: "angular",
212
- code: '<!-- Storybook story: Group -->\n<div style="display: flex; gap: 12px; align-items: center;">\n<uni-avatar name="Ada Lovelace" size="sm" />\n<uni-avatar name="Grace Hopper" size="md" variant="secondary" />\n<uni-avatar name="Katherine Johnson" size="lg" variant="tertiary" />\n<uni-avatar name="Annie Easley" size="xl" variant="success" />\n<uni-avatar size="lg" variant="quaternary" />\n</div>'
215
+ code: '<!-- Storybook story: Group -->\n<div row-layout gap="sm" alignItems="center">\n<uni-avatar name="Ada Lovelace" size="sm" />\n<uni-avatar name="Grace Hopper" size="md" variant="secondary" />\n<uni-avatar name="Katherine Johnson" size="lg" variant="tertiary" />\n<uni-avatar name="Annie Easley" size="xl" variant="success" />\n<uni-avatar size="lg" variant="quaternary" />\n</div>'
213
216
  }
214
217
  ],
215
218
  guidelines: {
216
- whenToUse: "",
219
+ whenToUse: "Identity avatar with a graceful fallback chain: the image when it loads, initials\nderived from `name` when it doesn't (or was never given), and a themed symbol as the\nlast resort. The name doubles as the accessible label; avatars with no name are marked\ndecorative automatically.\nVariants color initials from the role's container tokens, so avatars follow the brand\npalette in light and dark. The corner radius is the theme's `avatar.options.borderRadius`\ntoken \u2014 circles by default, squares under a `sharp` shape language.",
217
220
  dos: [],
218
221
  donts: [],
219
- accessibility: []
222
+ accessibility: [
223
+ 'With a `name`, the avatar is `role="img"` labelled by that name; purely decorative avatars are `aria-hidden`.',
224
+ 'The group is a `role="group"`; the "+N" chip reads as text.'
225
+ ]
220
226
  },
221
227
  relatedTokens: [
222
228
  "avatar.behavior.borderRadius",
@@ -231,11 +237,11 @@ var uni_index_default = {
231
237
  summary: "",
232
238
  description: "",
233
239
  category: "components",
234
- version: "5.2.0",
240
+ version: "6.0.1",
235
241
  bindings: {
236
242
  angular: {
237
243
  importPath: "@uni-design-system/uni-angular",
238
- selectorOrTag: "uni-avatar-group, AvatarGroup",
244
+ selectorOrTag: "uni-avatar-group",
239
245
  api: [
240
246
  {
241
247
  name: "max",
@@ -264,11 +270,11 @@ var uni_index_default = {
264
270
  summary: "",
265
271
  description: "",
266
272
  category: "primitives",
267
- version: "5.2.0",
273
+ version: "6.0.1",
268
274
  bindings: {
269
275
  angular: {
270
276
  importPath: "@uni-design-system/uni-angular",
271
- selectorOrTag: "uni-background, Background",
277
+ selectorOrTag: "uni-background",
272
278
  api: [
273
279
  {
274
280
  name: "image",
@@ -327,10 +333,14 @@ var uni_index_default = {
327
333
  }
328
334
  ],
329
335
  guidelines: {
330
- whenToUse: "",
336
+ whenToUse: "The Background component is a flexible container that allows you to add and control background images in your application.\nIt provides various options for positioning and sizing the background image while maintaining a clean and responsive layout.",
331
337
  dos: [],
332
338
  donts: [],
333
- accessibility: []
339
+ accessibility: [
340
+ "Ensure any text overlaid on the background has sufficient contrast",
341
+ "Don't rely on background images to convey important information",
342
+ "Consider providing alternative visual styles for users who prefer reduced motion"
343
+ ]
334
344
  },
335
345
  relatedTokens: []
336
346
  },
@@ -341,11 +351,11 @@ var uni_index_default = {
341
351
  summary: "",
342
352
  description: "",
343
353
  category: "feedback",
344
- version: "5.2.0",
354
+ version: "6.0.1",
345
355
  bindings: {
346
356
  angular: {
347
357
  importPath: "@uni-design-system/uni-angular",
348
- selectorOrTag: "div[uni-badge], Badge",
358
+ selectorOrTag: "[uni-badge]",
349
359
  api: [
350
360
  {
351
361
  name: "color",
@@ -378,9 +388,9 @@ var uni_index_default = {
378
388
  title: "Pass",
379
389
  framework: "angular",
380
390
  code: `<!-- Storybook story: Pass -->
381
- <Badge color="\${color}" [width]="\${width}">
391
+ <div uni-badge color="\${color}" [width]="\${width}">
382
392
  \${ngContent}
383
- </Badge>
393
+ </div>
384
394
  <!-- args:
385
395
  {
386
396
  color: 'secondary',
@@ -393,9 +403,9 @@ var uni_index_default = {
393
403
  title: "Fail",
394
404
  framework: "angular",
395
405
  code: `<!-- Storybook story: Fail -->
396
- <Badge color="\${color}" [width]="\${width}">
406
+ <div uni-badge color="\${color}" [width]="\${width}">
397
407
  \${ngContent}
398
- </Badge>
408
+ </div>
399
409
  <!-- args:
400
410
  {
401
411
  color: 'warn',
@@ -406,7 +416,7 @@ var uni_index_default = {
406
416
  }
407
417
  ],
408
418
  guidelines: {
409
- whenToUse: "",
419
+ whenToUse: "Badges are used to highlight an item's status for quick recognition.",
410
420
  dos: [],
411
421
  donts: [],
412
422
  accessibility: []
@@ -422,7 +432,7 @@ var uni_index_default = {
422
432
  summary: "",
423
433
  description: "",
424
434
  category: "directives",
425
- version: "5.2.0",
435
+ version: "6.0.1",
426
436
  bindings: {
427
437
  angular: {
428
438
  importPath: "@uni-design-system/uni-angular",
@@ -446,11 +456,11 @@ var uni_index_default = {
446
456
  summary: "",
447
457
  description: "",
448
458
  category: "layout",
449
- version: "5.2.0",
459
+ version: "6.0.1",
450
460
  bindings: {
451
461
  angular: {
452
462
  importPath: "@uni-design-system/uni-angular",
453
- selectorOrTag: "div[uni-box-layout], Box, div[box-layout]",
463
+ selectorOrTag: "[uni-box-layout], [box-layout]",
454
464
  api: [
455
465
  {
456
466
  name: "color",
@@ -654,7 +664,7 @@ var uni_index_default = {
654
664
  kind: "input",
655
665
  type: "number | string",
656
666
  required: false,
657
- description: ""
667
+ description: 'Number = px via binding (`[height]="420"`); string = CSS length (`height="420px"`).'
658
668
  },
659
669
  {
660
670
  name: "minHeight",
@@ -675,7 +685,7 @@ var uni_index_default = {
675
685
  kind: "input",
676
686
  type: "number | string",
677
687
  required: false,
678
- description: ""
688
+ description: 'Number = px via binding (`[width]="420"`); string = CSS length (`width="50%"`).'
679
689
  },
680
690
  {
681
691
  name: "minWidth",
@@ -791,11 +801,11 @@ var uni_index_default = {
791
801
  {
792
802
  title: "Primary",
793
803
  framework: "angular",
794
- code: "<!-- Storybook story: Primary -->\n<div box-layout ${argsToTemplate(props)}>\n<Text>${ngContent}</Text>\n</div>\n<!-- args:\n{\n color: 'secondary-container',\n borderRadius: 'md',\n padding: 'lg',\n ngContent: 'Box Content.',\n }\n-->"
804
+ code: "<!-- Storybook story: Primary -->\n<div box-layout ${argsToTemplate(props)}>\n<span uni-text>${ngContent}</span>\n</div>\n<!-- args:\n{\n color: 'secondary-container',\n borderRadius: 'md',\n padding: 'lg',\n ngContent: 'Box Content.',\n }\n-->"
795
805
  }
796
806
  ],
797
807
  guidelines: {
798
- whenToUse: "",
808
+ whenToUse: "Box is the base Layout component. It is highly configurable.\nEach layout component extends the Box component while providing presets to support their application.",
799
809
  dos: [],
800
810
  donts: [],
801
811
  accessibility: []
@@ -809,11 +819,11 @@ var uni_index_default = {
809
819
  summary: "",
810
820
  description: "",
811
821
  category: "components",
812
- version: "5.2.0",
822
+ version: "6.0.1",
813
823
  bindings: {
814
824
  angular: {
815
825
  importPath: "@uni-design-system/uni-angular",
816
- selectorOrTag: "uni-breadcrumb, Breadcrumb",
826
+ selectorOrTag: "uni-breadcrumb",
817
827
  api: [
818
828
  {
819
829
  name: "items",
@@ -853,10 +863,15 @@ var uni_index_default = {
853
863
  }
854
864
  ],
855
865
  guidelines: {
856
- whenToUse: "",
866
+ whenToUse: "Breadcrumbs show where the current page sits in the hierarchy and give one-click\npassage back up the trail. The component renders the WAI-ARIA pattern: a labelled\n`nav` landmark wrapping an ordered list, with the last item marked as the current page\nand separators hidden from assistive tech.\nItems with `href` render as real links. For SPA routing, omit `href` and handle\n`itemClicked` \u2014 items render as link-styled buttons instead. Typography, link and\ncurrent-page colors, the separator symbol, and spacing all resolve from the theme's\n`breadcrumb` options.",
857
867
  dos: [],
858
868
  donts: [],
859
- accessibility: []
869
+ accessibility: [
870
+ "Renders the WAI-ARIA pattern: a labelled `nav` landmark wrapping an ordered list.",
871
+ 'The last item is `aria-current="page"` and not a link.',
872
+ "Separators are `aria-hidden` \u2014 screen readers hear the trail, not the chevrons.",
873
+ "Set `ariaLabel` when a page has more than one breadcrumb nav."
874
+ ]
860
875
  },
861
876
  relatedTokens: [
862
877
  "breadcrumb.behavior.typeface",
@@ -873,11 +888,11 @@ var uni_index_default = {
873
888
  summary: "",
874
889
  description: "",
875
890
  category: "primitives",
876
- version: "5.2.0",
891
+ version: "6.0.1",
877
892
  bindings: {
878
893
  angular: {
879
894
  importPath: "@uni-design-system/uni-angular",
880
- selectorOrTag: "button[uni-text-button], Button, button[text-button]",
895
+ selectorOrTag: "button[uni-text-button], button[text-button]",
881
896
  api: [
882
897
  {
883
898
  name: "disable",
@@ -996,10 +1011,13 @@ var uni_index_default = {
996
1011
  }
997
1012
  ],
998
1013
  guidelines: {
999
- whenToUse: "",
1014
+ whenToUse: "Button is a clickable interactive element that triggers a response.\nYou can place text and icons inside of a button.\nButtons are often used for form submissions and to toggle elements into view.",
1000
1015
  dos: [],
1001
1016
  donts: [],
1002
- accessibility: []
1017
+ accessibility: [
1018
+ "A real `<button>` element \u2014 native focus, Enter/Space activation, and `disabled` semantics.",
1019
+ "`aria-busy` is set while `loading`; the spinner and symbols are decorative."
1020
+ ]
1003
1021
  },
1004
1022
  relatedTokens: [
1005
1023
  "button.behavior.borderRadius",
@@ -1013,11 +1031,11 @@ var uni_index_default = {
1013
1031
  summary: "",
1014
1032
  description: "",
1015
1033
  category: "primitives",
1016
- version: "5.2.0",
1034
+ version: "6.0.1",
1017
1035
  bindings: {
1018
1036
  angular: {
1019
1037
  importPath: "@uni-design-system/uni-angular",
1020
- selectorOrTag: "uni-button-group, ButtonGroup",
1038
+ selectorOrTag: "uni-button-group",
1021
1039
  api: []
1022
1040
  }
1023
1041
  },
@@ -1025,14 +1043,16 @@ var uni_index_default = {
1025
1043
  {
1026
1044
  title: "Primary",
1027
1045
  framework: "angular",
1028
- code: '<!-- Storybook story: Primary -->\n<ButtonGroup ${argsToTemplate(props)}>\n <button icon-button symbolName="align_horizontal_left" size="sm"></button>\n <button icon-button symbolName="align_horizontal_center" size="sm"></button>\n <button icon-button symbolName="align_horizontal_right" size="sm"></button>\n</ButtonGroup>\n<!-- args:\n{}\n-->'
1046
+ code: '<!-- Storybook story: Primary -->\n<uni-button-group ${argsToTemplate(props)}>\n <button icon-button symbolName="align_horizontal_left" size="sm"></button>\n <button icon-button symbolName="align_horizontal_center" size="sm"></button>\n <button icon-button symbolName="align_horizontal_right" size="sm"></button>\n</uni-button-group>\n<!-- args:\n{}\n-->'
1029
1047
  }
1030
1048
  ],
1031
1049
  guidelines: {
1032
- whenToUse: "",
1050
+ whenToUse: "The `ButtonGroup` component is used to group related buttons. It applies some base styling to the nested buttons.\nIf this is not desirable, consider using the `Row` component.",
1033
1051
  dos: [],
1034
1052
  donts: [],
1035
- accessibility: []
1053
+ accessibility: [
1054
+ "Group the related actions; each button keeps its own accessible name."
1055
+ ]
1036
1056
  },
1037
1057
  relatedTokens: []
1038
1058
  },
@@ -1043,11 +1063,11 @@ var uni_index_default = {
1043
1063
  summary: "",
1044
1064
  description: "",
1045
1065
  category: "layout",
1046
- version: "5.2.0",
1066
+ version: "6.0.1",
1047
1067
  bindings: {
1048
1068
  angular: {
1049
1069
  importPath: "@uni-design-system/uni-angular",
1050
- selectorOrTag: "uni-card, Card",
1070
+ selectorOrTag: "uni-card",
1051
1071
  api: []
1052
1072
  }
1053
1073
  },
@@ -1056,12 +1076,12 @@ var uni_index_default = {
1056
1076
  title: "Primary",
1057
1077
  framework: "angular",
1058
1078
  code: `<!-- Storybook story: Primary -->
1059
- <Card variant="\${variant}">
1060
- <CardHeader title="Card Header"></CardHeader>
1061
- <CardContent>
1062
- <Text>\${ngContent}</Text>
1063
- </CardContent>
1064
- </Card>
1079
+ <uni-card variant="\${variant}">
1080
+ <uni-card-header title="Card Header"></uni-card-header>
1081
+ <uni-card-content>
1082
+ <span uni-text>\${ngContent}</span>
1083
+ </uni-card-content>
1084
+ </uni-card>
1065
1085
  <!-- args:
1066
1086
  {
1067
1087
  variant: 'primary',
@@ -1072,7 +1092,7 @@ var uni_index_default = {
1072
1092
  }
1073
1093
  ],
1074
1094
  guidelines: {
1075
- whenToUse: "",
1095
+ whenToUse: "Content container with a themed frame: the border resolves from the **border\nprimitive named by its variant** (`borders.primary` \u2026 `borders.success`), the corner\nradius from the `card` theme options, and an optional elevation shadow. Compose with\nCard Header and Card Content for the standard anatomy \u2014 or point `options.border` at\na custom primitive to restyle every card in the theme at once.",
1076
1096
  dos: [],
1077
1097
  donts: [],
1078
1098
  accessibility: []
@@ -1088,11 +1108,11 @@ var uni_index_default = {
1088
1108
  summary: "",
1089
1109
  description: "",
1090
1110
  category: "layout",
1091
- version: "5.2.0",
1111
+ version: "6.0.1",
1092
1112
  bindings: {
1093
1113
  angular: {
1094
1114
  importPath: "@uni-design-system/uni-angular",
1095
- selectorOrTag: "uni-card-content, CardContent",
1115
+ selectorOrTag: "uni-card-content",
1096
1116
  api: []
1097
1117
  }
1098
1118
  },
@@ -1112,11 +1132,11 @@ var uni_index_default = {
1112
1132
  summary: "",
1113
1133
  description: "",
1114
1134
  category: "layout",
1115
- version: "5.2.0",
1135
+ version: "6.0.1",
1116
1136
  bindings: {
1117
1137
  angular: {
1118
1138
  importPath: "@uni-design-system/uni-angular",
1119
- selectorOrTag: "uni-card-header, CardHeader",
1139
+ selectorOrTag: "uni-card-header",
1120
1140
  api: [
1121
1141
  {
1122
1142
  name: "title",
@@ -1153,11 +1173,11 @@ var uni_index_default = {
1153
1173
  summary: "",
1154
1174
  description: "",
1155
1175
  category: "layout",
1156
- version: "5.2.0",
1176
+ version: "6.0.1",
1157
1177
  bindings: {
1158
1178
  angular: {
1159
1179
  importPath: "@uni-design-system/uni-angular",
1160
- selectorOrTag: "div[uni-center-layout], div[center-layout]",
1180
+ selectorOrTag: "[uni-center-layout], [center-layout]",
1161
1181
  api: [
1162
1182
  {
1163
1183
  name: "display",
@@ -1190,11 +1210,11 @@ var uni_index_default = {
1190
1210
  {
1191
1211
  title: "Primary",
1192
1212
  framework: "angular",
1193
- code: "<!-- Storybook story: Primary -->\n<div center-layout ${argsToTemplate(props)}>\n <Text typeface=\"headline-large\">${ngContent}</Text>\n</div>\n<!-- args:\n{\n ngContent: 'Centered Content',\n height: 180,\n width: '100%',\n }\n-->"
1213
+ code: "<!-- Storybook story: Primary -->\n<div center-layout ${argsToTemplate(props)}>\n <span uni-text=\"headline-large\">${ngContent}</span>\n</div>\n<!-- args:\n{\n ngContent: 'Centered Content',\n height: 180,\n width: '100%',\n }\n-->"
1194
1214
  }
1195
1215
  ],
1196
1216
  guidelines: {
1197
- whenToUse: "",
1217
+ whenToUse: "`Center` is a layout component that centers its child within itself.\n`Center` is an extension to the `Box` component and has all the `Box` attributes available to it.",
1198
1218
  dos: [],
1199
1219
  donts: [],
1200
1220
  accessibility: []
@@ -1208,11 +1228,11 @@ var uni_index_default = {
1208
1228
  summary: "",
1209
1229
  description: "",
1210
1230
  category: "forms",
1211
- version: "5.2.0",
1231
+ version: "6.0.1",
1212
1232
  bindings: {
1213
1233
  angular: {
1214
1234
  importPath: "@uni-design-system/uni-angular",
1215
- selectorOrTag: "uni-checkbox, Checkbox",
1235
+ selectorOrTag: "uni-checkbox",
1216
1236
  api: [
1217
1237
  {
1218
1238
  name: "checked",
@@ -1320,13 +1340,22 @@ var uni_index_default = {
1320
1340
  }
1321
1341
  ],
1322
1342
  guidelines: {
1323
- whenToUse: "",
1324
- dos: [],
1325
- donts: [],
1326
- accessibility: []
1343
+ whenToUse: 'Binary choice control for forms: check to opt in, submit to apply. It implements\n`FormCheckboxControl` for the Signal Forms `[field]` directive (or bind\n`[(checked)]` directly), exposes `aria-invalid` once touched, and supports an\n`indeterminate` model for "select all" parents \u2014 cleared automatically on the next\nuser interaction, matching native behavior.\nThe box color, check stroke (the variant\'s paired on-color), and size resolve from\nthe `checkbox` theme options.',
1344
+ dos: [
1345
+ "Use for choices that apply when the form is submitted"
1346
+ ],
1347
+ donts: [
1348
+ "Use for instant on/off effects \u2014 that is a toggle"
1349
+ ],
1350
+ accessibility: [
1351
+ 'Semantic `<input type="checkbox">` + `<label>`; Space toggles.',
1352
+ "`aria-invalid` reflects the error state once the field was touched or is dirty.",
1353
+ 'The indeterminate visual state is carried by the native `indeterminate` property, announced as "mixed".'
1354
+ ]
1327
1355
  },
1328
1356
  relatedTokens: [
1329
- "checkbox.behavior.size"
1357
+ "checkbox.behavior.size",
1358
+ "checkbox.behavior.boxColor"
1330
1359
  ]
1331
1360
  },
1332
1361
  {
@@ -1336,11 +1365,11 @@ var uni_index_default = {
1336
1365
  summary: "",
1337
1366
  description: "",
1338
1367
  category: "feedback",
1339
- version: "5.2.0",
1368
+ version: "6.0.1",
1340
1369
  bindings: {
1341
1370
  angular: {
1342
1371
  importPath: "@uni-design-system/uni-angular",
1343
- selectorOrTag: "uni-confirmation-dialog, Confirmation",
1372
+ selectorOrTag: "uni-confirmation-dialog",
1344
1373
  api: [
1345
1374
  {
1346
1375
  name: "show",
@@ -1383,7 +1412,7 @@ var uni_index_default = {
1383
1412
  summary: "",
1384
1413
  description: "",
1385
1414
  category: "forms",
1386
- version: "5.2.0",
1415
+ version: "6.0.1",
1387
1416
  bindings: {
1388
1417
  angular: {
1389
1418
  importPath: "@uni-design-system/uni-angular",
@@ -1420,7 +1449,7 @@ var uni_index_default = {
1420
1449
  framework: "angular",
1421
1450
  code: `<!-- Storybook story: Primary -->
1422
1451
  <uni-data-search \${argsToTemplate(props)} />
1423
- <div style="margin-top: 16px;">
1452
+ <div box-layout paddingTop="md">
1424
1453
  @for (record of datasource.records(); track record.id) {
1425
1454
  <div>{{ record.name }} \u2014 {{ record.homeworld }}</div>
1426
1455
  }
@@ -1437,7 +1466,7 @@ var uni_index_default = {
1437
1466
  framework: "angular",
1438
1467
  code: `<!-- Storybook story: Field Scoped -->
1439
1468
  <uni-data-search \${argsToTemplate(props)} />
1440
- <div style="margin-top: 16px;">
1469
+ <div box-layout paddingTop="md">
1441
1470
  @for (record of datasource.records(); track record.id) {
1442
1471
  <div>{{ record.name }} \u2014 {{ record.homeworld }}</div>
1443
1472
  }
@@ -1452,7 +1481,7 @@ var uni_index_default = {
1452
1481
  }
1453
1482
  ],
1454
1483
  guidelines: {
1455
- whenToUse: "",
1484
+ whenToUse: 'The Data Search input filters a `UniDatasource` as the user types. With a client-side\n`UniRecordDatasource` it applies a predicate over the record\'s fields; with a\n`UniServerSideDatasource` it sends a filter object to the data loader. Pass `fields` to\nrestrict the search to specific columns. A clear button resets the filter.\nIt pairs with the [Data Table](?path=/docs/components-data-table--docs) \u2014 see its\n"With Search" story.',
1456
1485
  dos: [],
1457
1486
  donts: [],
1458
1487
  accessibility: []
@@ -1466,11 +1495,11 @@ var uni_index_default = {
1466
1495
  summary: "",
1467
1496
  description: "",
1468
1497
  category: "data",
1469
- version: "5.2.0",
1498
+ version: "6.0.1",
1470
1499
  bindings: {
1471
1500
  angular: {
1472
1501
  importPath: "@uni-design-system/uni-angular",
1473
- selectorOrTag: "uni-data-table, DataTable",
1502
+ selectorOrTag: "uni-data-table",
1474
1503
  api: [
1475
1504
  {
1476
1505
  name: "datasource",
@@ -1549,10 +1578,14 @@ var uni_index_default = {
1549
1578
  }
1550
1579
  ],
1551
1580
  guidelines: {
1552
- whenToUse: "",
1581
+ whenToUse: "Data grid for structured records: sortable column headers (Sort Header), paging\n(Paginator), field-scoped search (Data Search), row interaction, sticky columns,\nand expandable detail rows \u2014 all themed through the `dataTable` options, which\npoint at shared tokens for surfaces, borders, and typography.",
1553
1582
  dos: [],
1554
1583
  donts: [],
1555
- accessibility: []
1584
+ accessibility: [
1585
+ 'Column headers use `scope="col"`; sortable headers are real buttons with `aria-sort` on the `<th>`.',
1586
+ 'The loading overlay is a `role="status"` region and the table is `aria-busy` while loading.',
1587
+ "Collapsed detail rows are `inert`, out of the accessibility tree until expanded."
1588
+ ]
1556
1589
  },
1557
1590
  relatedTokens: []
1558
1591
  },
@@ -1563,11 +1596,11 @@ var uni_index_default = {
1563
1596
  summary: "",
1564
1597
  description: "",
1565
1598
  category: "forms",
1566
- version: "5.2.0",
1599
+ version: "6.0.1",
1567
1600
  bindings: {
1568
1601
  angular: {
1569
1602
  importPath: "@uni-design-system/uni-angular",
1570
- selectorOrTag: "DebounceInput, uni-debounce-input",
1603
+ selectorOrTag: "uni-debounce-input",
1571
1604
  api: [
1572
1605
  {
1573
1606
  name: "inputName",
@@ -1591,6 +1624,58 @@ var uni_index_default = {
1591
1624
  default: "400",
1592
1625
  description: ""
1593
1626
  },
1627
+ {
1628
+ name: "label",
1629
+ kind: "input",
1630
+ type: "string",
1631
+ required: false,
1632
+ description: "Accessible name for the input."
1633
+ },
1634
+ {
1635
+ name: "placeholder",
1636
+ kind: "input",
1637
+ type: "string",
1638
+ required: false,
1639
+ default: "''",
1640
+ description: ""
1641
+ },
1642
+ {
1643
+ name: "disabled",
1644
+ kind: "input",
1645
+ type: "boolean",
1646
+ required: false,
1647
+ default: "false",
1648
+ description: ""
1649
+ },
1650
+ {
1651
+ name: "role",
1652
+ kind: "input",
1653
+ type: "string",
1654
+ required: false,
1655
+ description: ""
1656
+ },
1657
+ {
1658
+ name: "ariaExpanded",
1659
+ kind: "input",
1660
+ type: "boolean | undefined",
1661
+ required: false,
1662
+ default: "undefined",
1663
+ description: ""
1664
+ },
1665
+ {
1666
+ name: "ariaControls",
1667
+ kind: "input",
1668
+ type: "string",
1669
+ required: false,
1670
+ description: ""
1671
+ },
1672
+ {
1673
+ name: "ariaActivedescendant",
1674
+ kind: "input",
1675
+ type: "string",
1676
+ required: false,
1677
+ description: ""
1678
+ },
1594
1679
  {
1595
1680
  name: "change",
1596
1681
  kind: "output",
@@ -1606,8 +1691,8 @@ var uni_index_default = {
1606
1691
  title: "Primary",
1607
1692
  framework: "angular",
1608
1693
  code: `<!-- Storybook story: Primary -->
1609
- <DebounceInput \${argsToTemplate(props)} (change)="lastEmitted = $event" #debounce />
1610
- <div style="margin-top: 16px;">
1694
+ <uni-debounce-input \${argsToTemplate(props)} (change)="lastEmitted = $event" #debounce />
1695
+ <div box-layout paddingTop="md">
1611
1696
  <div>Live value: {{ debounce.value() }}</div>
1612
1697
  <div>Debounced value: {{ lastEmitted }}</div>
1613
1698
  </div>
@@ -1620,10 +1705,13 @@ var uni_index_default = {
1620
1705
  }
1621
1706
  ],
1622
1707
  guidelines: {
1623
- whenToUse: "",
1708
+ whenToUse: "A themed text input that emits its `change` output only after the user pauses typing\n(400&nbsp;ms by default) and only when the value actually changed \u2014 a signal-based\ndebounce with no rxjs involved. The live value is exposed as the `value` signal, and\n`clear()` empties the field immediately (cancelling any pending emit).\nIt wears the shared input chrome (color, border, typeface, focus ring) via the input\nbox, and offers `pre-input` / `post-input` attribute slots for adornments plus ARIA\npassthrough inputs (`role`, `ariaExpanded`, `ariaControls`, `ariaActivedescendant`)\nso composite widgets can annotate the real input element.\nUsed by the [Search Input](?path=/docs/components-forms-search-input--docs), which\nprojects its magnifier and clear button through the slots and drives the combobox\nARIA through the passthroughs.",
1624
1709
  dos: [],
1625
1710
  donts: [],
1626
- accessibility: []
1711
+ accessibility: [
1712
+ "Set `label` \u2014 it becomes the accessible name (`aria-label`) of the inner input.",
1713
+ "The ARIA passthrough inputs (`role`, `ariaExpanded`, `ariaControls`,"
1714
+ ]
1627
1715
  },
1628
1716
  relatedTokens: []
1629
1717
  },
@@ -1634,11 +1722,11 @@ var uni_index_default = {
1634
1722
  summary: "",
1635
1723
  description: "",
1636
1724
  category: "feedback",
1637
- version: "5.2.0",
1725
+ version: "6.0.1",
1638
1726
  bindings: {
1639
1727
  angular: {
1640
1728
  importPath: "@uni-design-system/uni-angular",
1641
- selectorOrTag: "dialog[uni-dialog], Dialog",
1729
+ selectorOrTag: "dialog[uni-dialog]",
1642
1730
  api: [
1643
1731
  {
1644
1732
  name: "show",
@@ -1683,14 +1771,18 @@ var uni_index_default = {
1683
1771
  {
1684
1772
  title: "Primary",
1685
1773
  framework: "angular",
1686
- code: '<!-- Storybook story: Primary -->\n<Button (click)="dialog.open()">Open Dialog</Button>\n<Dialog #dialog>\n <DialogHeader color="primary">Sample Dialog</DialogHeader>\n <div center-layout [width]="300" [height]="200">\n <Text>Dialog</Text>\n </div>\n <DialogButtons></DialogButtons>\n</Dialog>\n<!-- args:\n{}\n-->'
1774
+ code: '<!-- Storybook story: Primary -->\n<button text-button (click)="dialog.open()">Open Dialog</button>\n<dialog uni-dialog #dialog>\n <header uni-dialog-header color="primary">Sample Dialog</header>\n <div center-layout [width]="300" [height]="200">\n <span uni-text>Dialog</span>\n </div>\n <footer dialog-buttons></footer>\n</dialog>\n<!-- args:\n{}\n-->'
1687
1775
  }
1688
1776
  ],
1689
1777
  guidelines: {
1690
- whenToUse: "",
1778
+ whenToUse: "Enhanced modal dialog that extends the native HTML `<dialog>` element with built-in animations, composition components, and accessibility features.\n### Features\n- **Native HTML Dialog**: Built on the standard dialog element with full semantic support\n- **Smooth Animations**: Automatic fade transitions for open/close states\n- **Composition Components**: Optional `DialogHeader` and `DialogButtons` for consistent layouts\n- **Programmatic Control**: Open/close methods plus show property binding\n- **Backdrop Handling**: Click-outside-to-close with customizable behavior\n- **Accessibility**: Full keyboard navigation, focus trapping, and screen reader support",
1691
1779
  dos: [],
1692
1780
  donts: [],
1693
- accessibility: []
1781
+ accessibility: [
1782
+ "Focus trapping and keyboard navigation (Tab, Escape, Enter)",
1783
+ "Screen reader announcements",
1784
+ "Semantic dialog roles"
1785
+ ]
1694
1786
  },
1695
1787
  relatedTokens: [
1696
1788
  "dialog.behavior.borderRadius",
@@ -1708,11 +1800,11 @@ var uni_index_default = {
1708
1800
  summary: "",
1709
1801
  description: "",
1710
1802
  category: "feedback",
1711
- version: "5.2.0",
1803
+ version: "6.0.1",
1712
1804
  bindings: {
1713
1805
  angular: {
1714
1806
  importPath: "@uni-design-system/uni-angular",
1715
- selectorOrTag: "uni-dialog-buttons, DialogButtons, div[dialog-buttons]",
1807
+ selectorOrTag: "[uni-dialog-buttons], [dialog-buttons]",
1716
1808
  api: [
1717
1809
  {
1718
1810
  name: "confirmButtonText",
@@ -1793,11 +1885,11 @@ var uni_index_default = {
1793
1885
  summary: "",
1794
1886
  description: "",
1795
1887
  category: "feedback",
1796
- version: "5.2.0",
1888
+ version: "6.0.1",
1797
1889
  bindings: {
1798
1890
  angular: {
1799
1891
  importPath: "@uni-design-system/uni-angular",
1800
- selectorOrTag: "div[uni-dialog-header], DialogHeader",
1892
+ selectorOrTag: "[uni-dialog-header]",
1801
1893
  api: []
1802
1894
  }
1803
1895
  },
@@ -1817,11 +1909,11 @@ var uni_index_default = {
1817
1909
  summary: "",
1818
1910
  description: "",
1819
1911
  category: "layout",
1820
- version: "5.2.0",
1912
+ version: "6.0.1",
1821
1913
  bindings: {
1822
1914
  angular: {
1823
1915
  importPath: "@uni-design-system/uni-angular",
1824
- selectorOrTag: "uni-divider, Divider",
1916
+ selectorOrTag: "uni-divider",
1825
1917
  api: [
1826
1918
  {
1827
1919
  name: "orientation",
@@ -1847,9 +1939,9 @@ var uni_index_default = {
1847
1939
  title: "Primary",
1848
1940
  framework: "angular",
1849
1941
  code: `<!-- Storybook story: Primary -->
1850
- <Center height="200px">
1851
- <Divider border="\${border}" orientation="\${orientation}" />
1852
- </Center>
1942
+ <div center-layout height="200px">
1943
+ <uni-divider border="\${border}" orientation="\${orientation}" />
1944
+ </div>
1853
1945
  <!-- args:
1854
1946
  {
1855
1947
  orientation: 'horizontal',
@@ -1859,7 +1951,7 @@ var uni_index_default = {
1859
1951
  }
1860
1952
  ],
1861
1953
  guidelines: {
1862
- whenToUse: "",
1954
+ whenToUse: "Dividers are used to visually separate content in a list or group.",
1863
1955
  dos: [],
1864
1956
  donts: [],
1865
1957
  accessibility: []
@@ -1873,7 +1965,7 @@ var uni_index_default = {
1873
1965
  summary: "",
1874
1966
  description: "",
1875
1967
  category: "directives",
1876
- version: "5.2.0",
1968
+ version: "6.0.1",
1877
1969
  bindings: {
1878
1970
  angular: {
1879
1971
  importPath: "@uni-design-system/uni-angular",
@@ -1905,11 +1997,11 @@ var uni_index_default = {
1905
1997
  summary: "",
1906
1998
  description: "",
1907
1999
  category: "components",
1908
- version: "5.2.0",
2000
+ version: "6.0.1",
1909
2001
  bindings: {
1910
2002
  angular: {
1911
2003
  importPath: "@uni-design-system/uni-angular",
1912
- selectorOrTag: "uni-drawer, Drawer",
2004
+ selectorOrTag: "uni-drawer",
1913
2005
  api: [
1914
2006
  {
1915
2007
  name: "open",
@@ -1950,19 +2042,23 @@ var uni_index_default = {
1950
2042
  {
1951
2043
  title: "Dashboard Shell",
1952
2044
  framework: "angular",
1953
- code: '<!-- Storybook story: Dashboard Shell -->\n<div style="display: flex; flex-direction: column; height: 420px; border: 1px solid #8884; overflow: hidden;">\n<uni-app-bar title="Console">\n <button leading icon-button symbolName="menu" (click)="open = !open">Toggle navigation</button>\n <button trailing icon-button symbolName="account_circle">Account</button>\n</uni-app-bar>\n<div style="display: flex; flex: 1; min-height: 0;">\n <uni-drawer mode="side" [(open)]="open">\n <uni-text typeface="title-small" display="block">Dashboard</uni-text>\n <uni-text typeface="title-small" display="block">Reports</uni-text>\n <uni-text typeface="title-small" display="block">Settings</uni-text>\n </uni-drawer>\n <main style="flex: 1; padding: 16px; min-width: 0;">\n <uni-text typeface="headline-small">Content</uni-text>\n <uni-text typeface="body-1-long" display="block">\n The side drawer pushes this content; toggle it from the app bar.\n </uni-text>\n </main>\n</div>\n</div>'
2045
+ code: '<!-- Storybook story: Dashboard Shell -->\n<section stack-layout height="420px" overflow="hidden">\n<uni-app-bar title="Console">\n <button leading icon-button symbolName="menu" (click)="open = !open">Toggle navigation</button>\n <button trailing icon-button symbolName="account_circle">Account</button>\n</uni-app-bar>\n<div row-layout [grow]="1" [minHeight]="0">\n <uni-drawer mode="side" [(open)]="open">\n <nav stack-layout gap="sm" aria-label="Main">\n <span uni-text="title-small" display="block">Dashboard</span>\n <span uni-text="title-small" display="block">Reports</span>\n <span uni-text="title-small" display="block">Settings</span>\n </nav>\n </uni-drawer>\n <main box-layout [grow]="1" padding="md" [minWidth]="0">\n <h2 uni-text="headline-small">Content</h2>\n <span uni-text="body-1-long" display="block">\n The side drawer pushes this content; toggle it from the app bar.\n </span>\n </main>\n</div>\n</section>'
1954
2046
  },
1955
2047
  {
1956
2048
  title: "Overlay",
1957
2049
  framework: "angular",
1958
- code: '<!-- Storybook story: Overlay -->\n<div style="display: flex; flex-direction: column; height: 420px; border: 1px solid #8884; overflow: hidden;">\n<uni-app-bar title="Console">\n <button leading icon-button symbolName="menu" (click)="open = !open">Toggle navigation</button>\n <button trailing icon-button symbolName="account_circle">Account</button>\n</uni-app-bar>\n<div style="display: flex; flex: 1; min-height: 0;">\n <uni-drawer mode="side" [(open)]="open">\n <uni-text typeface="title-small" display="block">Dashboard</uni-text>\n <uni-text typeface="title-small" display="block">Reports</uni-text>\n <uni-text typeface="title-small" display="block">Settings</uni-text>\n </uni-drawer>\n <main style="flex: 1; padding: 16px; min-width: 0;">\n <uni-text typeface="headline-small">Content</uni-text>\n <uni-text typeface="body-1-long" display="block">\n The side drawer pushes this content; toggle it from the app bar.\n </uni-text>\n </main>\n</div>\n</div>'
2050
+ code: '<!-- Storybook story: Overlay -->\n<section stack-layout height="420px" overflow="hidden">\n<uni-app-bar title="Console">\n <button leading icon-button symbolName="menu" (click)="open = !open">Toggle navigation</button>\n <button trailing icon-button symbolName="account_circle">Account</button>\n</uni-app-bar>\n<div row-layout [grow]="1" [minHeight]="0">\n <uni-drawer mode="side" [(open)]="open">\n <nav stack-layout gap="sm" aria-label="Main">\n <span uni-text="title-small" display="block">Dashboard</span>\n <span uni-text="title-small" display="block">Reports</span>\n <span uni-text="title-small" display="block">Settings</span>\n </nav>\n </uni-drawer>\n <main box-layout [grow]="1" padding="md" [minWidth]="0">\n <h2 uni-text="headline-small">Content</h2>\n <span uni-text="body-1-long" display="block">\n The side drawer pushes this content; toggle it from the app bar.\n </span>\n </main>\n</div>\n</section>'
1959
2051
  }
1960
2052
  ],
1961
2053
  guidelines: {
1962
- whenToUse: "",
2054
+ whenToUse: "Navigation drawer with two modes sharing one content slot:\n- **`side`** renders an in-flow `<aside>` that pushes page content \u2014 the classic\n dashboard sidenav. Opening and closing animates its width; a divider border primitive\n separates it from the content, and it is hidden from assistive tech while closed.\n- **`over`** renders a native `<dialog>` in the top layer: focus trapping, Escape, and\n the scrim backdrop come from the platform, and the panel slides in from its edge\n (`position`: `start` or `end`).\n`[(open)]` is two-way; Escape and backdrop clicks keep it in sync. Surface, width,\ndivider, elevation, padding and backdrop all resolve from the theme's `drawer` options.",
1963
2055
  dos: [],
1964
2056
  donts: [],
1965
- accessibility: []
2057
+ accessibility: [
2058
+ "Overlay mode is a native `<dialog>`: focus is trapped by `showModal()`, Escape closes, and the backdrop click closes \u2014 all kept in sync with `[(open)]`.",
2059
+ 'Give the overlay an accessible name via `ariaLabel` (defaults to "Navigation").',
2060
+ "A closed side drawer is `aria-hidden`, so its links leave the accessibility tree."
2061
+ ]
1966
2062
  },
1967
2063
  relatedTokens: [
1968
2064
  "drawer.behavior.color",
@@ -1980,11 +2076,11 @@ var uni_index_default = {
1980
2076
  summary: "",
1981
2077
  description: "",
1982
2078
  category: "components",
1983
- version: "5.2.0",
2079
+ version: "6.0.1",
1984
2080
  bindings: {
1985
2081
  angular: {
1986
2082
  importPath: "@uni-design-system/uni-angular",
1987
- selectorOrTag: "uni-dropdown, Dropdown",
2083
+ selectorOrTag: "uni-dropdown",
1988
2084
  api: [
1989
2085
  {
1990
2086
  name: "trigger",
@@ -2069,11 +2165,11 @@ var uni_index_default = {
2069
2165
  summary: "",
2070
2166
  description: "",
2071
2167
  category: "layout",
2072
- version: "5.2.0",
2168
+ version: "6.0.1",
2073
2169
  bindings: {
2074
2170
  angular: {
2075
2171
  importPath: "@uni-design-system/uni-angular",
2076
- selectorOrTag: "uni-expand, Expand",
2172
+ selectorOrTag: "uni-expand",
2077
2173
  api: [
2078
2174
  {
2079
2175
  name: "collapsed",
@@ -2091,14 +2187,14 @@ var uni_index_default = {
2091
2187
  title: "Primary",
2092
2188
  framework: "angular",
2093
2189
  code: `<!-- Storybook story: Primary -->
2094
- <Card>
2095
- <CardHeader title="Expandable Card"><ExpandToggle #toggle /></CardHeader>
2096
- <Expand [collapsed]="toggle.collapsed()">
2097
- <CardContent>
2098
- <Text>\${ngContent}</Text>
2099
- </CardContent>
2100
- </Expand>
2101
- </Card>
2190
+ <uni-card>
2191
+ <uni-card-header title="Expandable Card"><uni-expand-toggle #toggle /></uni-card-header>
2192
+ <uni-expand [collapsed]="toggle.collapsed()">
2193
+ <uni-card-content>
2194
+ <span uni-text>\${ngContent}</span>
2195
+ </uni-card-content>
2196
+ </uni-expand>
2197
+ </uni-card>
2102
2198
  <!-- args:
2103
2199
  {
2104
2200
  collapsed: false,
@@ -2108,10 +2204,12 @@ var uni_index_default = {
2108
2204
  }
2109
2205
  ],
2110
2206
  guidelines: {
2111
- whenToUse: "",
2207
+ whenToUse: "Expand is a group of components that can be used in concert to expand/collapse sections of information.\nThe Expand component is transparent in nature and can nest any element to collapse it out of view.\nThe Expand Toggle is an optional convenience element that can be used to trigger the expand/collapse animation.\nIt has been designed to work with the Card Header.",
2112
2208
  dos: [],
2113
2209
  donts: [],
2114
- accessibility: []
2210
+ accessibility: [
2211
+ "The toggle carries `aria-expanded` and `aria-controls` for its region (wired automatically inside Expand Area)."
2212
+ ]
2115
2213
  },
2116
2214
  relatedTokens: []
2117
2215
  },
@@ -2122,11 +2220,11 @@ var uni_index_default = {
2122
2220
  summary: "",
2123
2221
  description: "",
2124
2222
  category: "layout",
2125
- version: "5.2.0",
2223
+ version: "6.0.1",
2126
2224
  bindings: {
2127
2225
  angular: {
2128
2226
  importPath: "@uni-design-system/uni-angular",
2129
- selectorOrTag: "uni-expand-area, ExpandArea",
2227
+ selectorOrTag: "uni-expand-area",
2130
2228
  api: [
2131
2229
  {
2132
2230
  name: "title",
@@ -2166,9 +2264,9 @@ var uni_index_default = {
2166
2264
  title: "Primary",
2167
2265
  framework: "angular",
2168
2266
  code: `<!-- Storybook story: Primary -->
2169
- <ExpandArea title="\${title}" padding="\${padding}" initCollapsed="\${initCollapsed}" #expandArea>
2267
+ <uni-expand-area title="\${title}" padding="\${padding}" initCollapsed="\${initCollapsed}" #expandArea>
2170
2268
  <button text-button (click)="expandArea.toggleExpand()" size="md" variant="ghost" symbolLeft="collapse_all">Collapse area</button>
2171
- </ExpandArea>
2269
+ </uni-expand-area>
2172
2270
  <!-- args:
2173
2271
  {
2174
2272
  title: 'Expand Area Title',
@@ -2179,7 +2277,7 @@ var uni_index_default = {
2179
2277
  }
2180
2278
  ],
2181
2279
  guidelines: {
2182
- whenToUse: "",
2280
+ whenToUse: "The batteries-included collapsible: a themed surface with a header row, an Expand\nToggle, and a content region wired together \u2014 `aria-expanded`/`aria-controls`\nhandled automatically. For custom collapse layouts, compose the lower-level Expand\nand Expand Toggle directly.",
2183
2281
  dos: [],
2184
2282
  donts: [],
2185
2283
  accessibility: []
@@ -2193,11 +2291,11 @@ var uni_index_default = {
2193
2291
  summary: "",
2194
2292
  description: "",
2195
2293
  category: "forms",
2196
- version: "5.2.0",
2294
+ version: "6.0.1",
2197
2295
  bindings: {
2198
2296
  angular: {
2199
2297
  importPath: "@uni-design-system/uni-angular",
2200
- selectorOrTag: "uni-expand-toggle, ExpandToggle",
2298
+ selectorOrTag: "uni-expand-toggle",
2201
2299
  api: [
2202
2300
  {
2203
2301
  name: "collapsed",
@@ -2221,11 +2319,11 @@ var uni_index_default = {
2221
2319
  {
2222
2320
  title: "Primary",
2223
2321
  framework: "angular",
2224
- code: '<!-- Storybook story: Primary -->\n<ExpandToggle [collapsed]="collapsed" #toggle />\n<div>Collapsed: {{ toggle.collapsed() }}</div>\n<!-- args:\n{\n collapsed: true,\n }\n-->'
2322
+ code: '<!-- Storybook story: Primary -->\n<uni-expand-toggle [collapsed]="collapsed" #toggle />\n<div>Collapsed: {{ toggle.collapsed() }}</div>\n<!-- args:\n{\n collapsed: true,\n }\n-->'
2225
2323
  }
2226
2324
  ],
2227
2325
  guidelines: {
2228
- whenToUse: "",
2326
+ whenToUse: 'The Expand Toggle is a chevron icon button that controls collapsed/expanded state. It pairs\nwith the [Expand](?path=/docs/components-expand--docs) component: bind the toggle\'s\n`collapsed` model to the Expand\'s `collapsed` input to build collapsible sections.\nThe icon rotates 180\xB0 between states and shows an "Expand"/"Collapse" tooltip.',
2229
2327
  dos: [],
2230
2328
  donts: [],
2231
2329
  accessibility: []
@@ -2239,7 +2337,7 @@ var uni_index_default = {
2239
2337
  summary: "",
2240
2338
  description: "",
2241
2339
  category: "forms",
2242
- version: "5.2.0",
2340
+ version: "6.0.1",
2243
2341
  bindings: {
2244
2342
  angular: {
2245
2343
  importPath: "@uni-design-system/uni-angular",
@@ -2348,8 +2446,8 @@ var uni_index_default = {
2348
2446
  <uni-file-drop-zone \${argsToTemplate(props)} [helpTemplate]="myTemplate" />
2349
2447
  <ng-template #myTemplate>
2350
2448
  <div stack-layout alignItems="center">
2351
- <Text typeface="title-medium">Title Text</Text>
2352
- <Text typeface="subtitle-1">Subtitle Text</Text>
2449
+ <span uni-text="title-medium">Title Text</span>
2450
+ <span uni-text="subtitle-1">Subtitle Text</span>
2353
2451
  </div>
2354
2452
  </ng-template>
2355
2453
  <!-- args:
@@ -2367,8 +2465,8 @@ var uni_index_default = {
2367
2465
  <uni-file-drop-zone \${argsToTemplate(props)} [helpTemplate]="myTemplate" />
2368
2466
  <ng-template #myTemplate>
2369
2467
  <div stack-layout alignItems="center">
2370
- <Text typeface="title-medium">Title Text</Text>
2371
- <Text typeface="subtitle-1">Subtitle Text</Text>
2468
+ <span uni-text="title-medium">Title Text</span>
2469
+ <span uni-text="subtitle-1">Subtitle Text</span>
2372
2470
  </div>
2373
2471
  </ng-template>
2374
2472
  <!-- args:
@@ -2381,10 +2479,12 @@ var uni_index_default = {
2381
2479
  }
2382
2480
  ],
2383
2481
  guidelines: {
2384
- whenToUse: "",
2482
+ whenToUse: "The File Drop Zone component is used in uploading files.",
2385
2483
  dos: [],
2386
2484
  donts: [],
2387
- accessibility: []
2485
+ accessibility: [
2486
+ 'Without a browse button, the zone itself is `role="button"` with `tabindex="0"` and Enter/Space activation.'
2487
+ ]
2388
2488
  },
2389
2489
  relatedTokens: []
2390
2490
  },
@@ -2395,11 +2495,11 @@ var uni_index_default = {
2395
2495
  summary: "",
2396
2496
  description: "",
2397
2497
  category: "layout",
2398
- version: "5.2.0",
2498
+ version: "6.0.1",
2399
2499
  bindings: {
2400
2500
  angular: {
2401
2501
  importPath: "@uni-design-system/uni-angular",
2402
- selectorOrTag: "div[uni-grid-layout], Grid, div[grid-layout]",
2502
+ selectorOrTag: "[uni-grid-layout], [grid-layout]",
2403
2503
  api: [
2404
2504
  {
2405
2505
  name: "display",
@@ -2454,19 +2554,19 @@ var uni_index_default = {
2454
2554
  code: `<!-- Storybook story: Simple Grid -->
2455
2555
  <div grid-layout \${argsToTemplate(props)}>
2456
2556
  <div box-layout gridArea="nav" color="quaternary" padding="md" borderRadius="sm">
2457
- <Text>nav</Text>
2557
+ <span uni-text>nav</span>
2458
2558
  </div>
2459
2559
  <div box-layout gridArea="a1" color="primary" padding="md" borderRadius="sm">
2460
- <Text>a1</Text>
2560
+ <span uni-text>a1</span>
2461
2561
  </div>
2462
2562
  <div box-layout gridArea="a2" color="secondary" padding="md" borderRadius="sm">
2463
- <Text>a2</Text>
2563
+ <span uni-text>a2</span>
2464
2564
  </div>
2465
2565
  <div box-layout gridArea="b1" color="tertiary" padding="md" borderRadius="sm">
2466
- <Text>b1</Text>
2566
+ <span uni-text>b1</span>
2467
2567
  </div>
2468
2568
  <div box-layout gridArea="b2" color="warn" padding="md" borderRadius="sm">
2469
- <Text>b2</Text>
2569
+ <span uni-text>b2</span>
2470
2570
  </div>
2471
2571
  </div>
2472
2572
  <!-- args:
@@ -2478,7 +2578,7 @@ var uni_index_default = {
2478
2578
  }
2479
2579
  ],
2480
2580
  guidelines: {
2481
- whenToUse: "",
2581
+ whenToUse: "Grid is a layout component used for composing elements in a grid-like pattern.\nLike tables, grid layouts align elements into columns and rows.\nHowever, grids allow for more control when spanning elements across columns and rows.",
2482
2582
  dos: [],
2483
2583
  donts: [],
2484
2584
  accessibility: []
@@ -2492,11 +2592,11 @@ var uni_index_default = {
2492
2592
  summary: "",
2493
2593
  description: "",
2494
2594
  category: "layout",
2495
- version: "5.2.0",
2595
+ version: "6.0.1",
2496
2596
  bindings: {
2497
2597
  angular: {
2498
2598
  importPath: "@uni-design-system/uni-angular",
2499
- selectorOrTag: "GridArea",
2599
+ selectorOrTag: "[uni-grid-area-layout], [grid-area-layout]",
2500
2600
  api: [
2501
2601
  {
2502
2602
  name: "area",
@@ -2524,11 +2624,11 @@ var uni_index_default = {
2524
2624
  summary: "",
2525
2625
  description: "",
2526
2626
  category: "primitives",
2527
- version: "5.2.0",
2627
+ version: "6.0.1",
2528
2628
  bindings: {
2529
2629
  angular: {
2530
2630
  importPath: "@uni-design-system/uni-angular",
2531
- selectorOrTag: "uni-icon, Icon",
2631
+ selectorOrTag: "uni-icon",
2532
2632
  api: [
2533
2633
  {
2534
2634
  name: "color",
@@ -2551,22 +2651,17 @@ var uni_index_default = {
2551
2651
  {
2552
2652
  title: "Primary",
2553
2653
  framework: "angular",
2554
- code: `<!-- Storybook story: Primary -->
2555
- <div style="height: \${size + 'px'}">
2556
- <Icon name="\${name}" color="\${color}" />
2557
- </div>
2558
- <!-- args:
2559
- {
2560
- name: 'checkCircle',
2561
- }
2562
- -->`
2654
+ code: '<!-- Storybook story: Primary -->\n<div box-layout height="${size}px">\n <uni-icon name="${name}" color="${color}" />\n </div>\n<!-- args:\n{\n name: \'checkCircle\',\n }\n-->'
2563
2655
  }
2564
2656
  ],
2565
2657
  guidelines: {
2566
- whenToUse: "",
2658
+ whenToUse: "Icons are adaptive svg images. Instead of defining a size or color attributes, Icons\nwill grow to the space allotted to them and use the current color of its parent element.\nHowever, it is possible to statically set the icon color.",
2567
2659
  dos: [],
2568
2660
  donts: [],
2569
- accessibility: []
2661
+ accessibility: [
2662
+ "Icons are decorative (`aria-hidden`) \u2014 the parent control carries the accessible name.",
2663
+ "Icons come from the theme's `icons` map (masked with `currentColor`); unknown names render nothing."
2664
+ ]
2570
2665
  },
2571
2666
  relatedTokens: []
2572
2667
  },
@@ -2577,7 +2672,7 @@ var uni_index_default = {
2577
2672
  summary: "",
2578
2673
  description: "",
2579
2674
  category: "primitives",
2580
- version: "5.2.0",
2675
+ version: "6.0.1",
2581
2676
  bindings: {
2582
2677
  angular: {
2583
2678
  importPath: "@uni-design-system/uni-angular",
@@ -2663,10 +2758,13 @@ var uni_index_default = {
2663
2758
  }
2664
2759
  ],
2665
2760
  guidelines: {
2666
- whenToUse: "",
2761
+ whenToUse: "A square, icon-only button for toolbars, bars, and tight layouts. Renders a real\n`<button>` around a symbol or icon, with ghost as the default variant so it sits\nquietly on any surface. Because there is no visible text, the accessible name comes\nfrom projected (visually hidden) text or `ariaLabel`.",
2667
2762
  dos: [],
2668
2763
  donts: [],
2669
- accessibility: []
2764
+ accessibility: [
2765
+ "Icon-only buttons need a name: project text (rendered visually hidden) or set `ariaLabel`.",
2766
+ "The icon/symbol itself is decorative (`aria-hidden`)."
2767
+ ]
2670
2768
  },
2671
2769
  relatedTokens: []
2672
2770
  },
@@ -2677,7 +2775,7 @@ var uni_index_default = {
2677
2775
  summary: "",
2678
2776
  description: "",
2679
2777
  category: "forms",
2680
- version: "5.2.0",
2778
+ version: "6.0.1",
2681
2779
  bindings: {
2682
2780
  angular: {
2683
2781
  importPath: "@uni-design-system/uni-angular",
@@ -2789,10 +2887,15 @@ var uni_index_default = {
2789
2887
  }
2790
2888
  ],
2791
2889
  guidelines: {
2792
- whenToUse: "",
2890
+ whenToUse: "Single-line text field with the shared input chrome (themed color, border, typeface,\nfocus ring, error state). It implements `FormValueControl<string>`: bind a Signal\nForms field with `[field]`, or drive `[(value)]` directly. Errors style the field\nonly after the user has interacted (touched or dirty), and `required` syncs from\n`required()` validators automatically.\nProject adornments with the `pre-input` / `post-input` slots. For multi-line text\nuse Textarea; for search semantics use Search Input.",
2793
2891
  dos: [],
2794
2892
  donts: [],
2795
- accessibility: []
2893
+ accessibility: [
2894
+ "`label` is required and becomes the accessible name (`aria-label`).",
2895
+ "`aria-invalid` reflects the error state once the field was touched or is dirty.",
2896
+ "`aria-required` mirrors the `required` state synced from validators.",
2897
+ "Link external error text with `ariaDescribedBy`."
2898
+ ]
2796
2899
  },
2797
2900
  relatedTokens: [
2798
2901
  "input.behavior.typeFace",
@@ -2817,7 +2920,7 @@ var uni_index_default = {
2817
2920
  summary: "",
2818
2921
  description: "",
2819
2922
  category: "forms",
2820
- version: "5.2.0",
2923
+ version: "6.0.1",
2821
2924
  bindings: {
2822
2925
  angular: {
2823
2926
  importPath: "@uni-design-system/uni-angular",
@@ -2876,7 +2979,7 @@ var uni_index_default = {
2876
2979
  }
2877
2980
  ],
2878
2981
  guidelines: {
2879
- whenToUse: "",
2982
+ whenToUse: "The Input Box is the themed shell shared by all text-like form controls\n([Input](?path=/docs/components-forms-input--docs),\n[Select](?path=/docs/components-forms-select--docs), Multi Select Dropdown). It projects any\nnative `input` or `select` element, strips the platform's default styling, and applies the\n`input` component theme options: colors, border, radius, focus outline, and the error and\ndisabled states.\nUse it directly when composing a custom form control that should match the design system's\ninput styling.",
2880
2983
  dos: [],
2881
2984
  donts: [],
2882
2985
  accessibility: []
@@ -2890,7 +2993,7 @@ var uni_index_default = {
2890
2993
  summary: "",
2891
2994
  description: "",
2892
2995
  category: "components",
2893
- version: "5.2.0",
2996
+ version: "6.0.1",
2894
2997
  bindings: {
2895
2998
  angular: {
2896
2999
  importPath: "@uni-design-system/uni-angular",
@@ -2946,7 +3049,7 @@ var uni_index_default = {
2946
3049
  }
2947
3050
  ],
2948
3051
  guidelines: {
2949
- whenToUse: "",
3052
+ whenToUse: "The JSON View component provides a simple way to display JSON data in a formatted, readable manner. It renders the JSON in a textarea element, making it easy for users to view and copy the content. The component automatically formats the JSON with proper indentation for better readability.",
2950
3053
  dos: [],
2951
3054
  donts: [],
2952
3055
  accessibility: []
@@ -2960,11 +3063,11 @@ var uni_index_default = {
2960
3063
  summary: "",
2961
3064
  description: "",
2962
3065
  category: "layout",
2963
- version: "5.2.0",
3066
+ version: "6.0.1",
2964
3067
  bindings: {
2965
3068
  angular: {
2966
3069
  importPath: "@uni-design-system/uni-angular",
2967
- selectorOrTag: "Menu, uni-menu",
3070
+ selectorOrTag: "uni-menu",
2968
3071
  api: [
2969
3072
  {
2970
3073
  name: "menuItems",
@@ -3004,9 +3107,9 @@ var uni_index_default = {
3004
3107
  framework: "angular",
3005
3108
  code: `<!-- Storybook story: Primary -->
3006
3109
  <div box-layout color="primary" padding="sm">
3007
- <Menu \${argsToTemplate(props)}>
3110
+ <uni-menu \${argsToTemplate(props)}>
3008
3111
  <button text-button variant="ghost" symbolRight="arrow_drop_down">Menu</button>
3009
- </Menu>
3112
+ </uni-menu>
3010
3113
  </div>
3011
3114
  <!-- args:
3012
3115
  {
@@ -3020,10 +3123,13 @@ var uni_index_default = {
3020
3123
  }
3021
3124
  ],
3022
3125
  guidelines: {
3023
- whenToUse: "",
3126
+ whenToUse: "Menus can be linked to any component, but it is recommended to use either the `text-button` or `icon-button` component.\nMenus are populated by creating an array of Menu Items (`MenuItem[]`) and binding it to the `Menu` component.\nActions are optional as the `Menu` component also emits the clicked menu item via the `menuItemClicked` output attribute.\n### Menu Item Interface\n```\nMenuItem {\n label: string;\n symbolName?: string;\n action?: () => void;\n}\n```",
3024
3127
  dos: [],
3025
3128
  donts: [],
3026
- accessibility: []
3129
+ accessibility: [
3130
+ "Full ARIA menu pattern: arrows and Home/End move, first-letter typeahead jumps, Enter/Space activates.",
3131
+ "ArrowDown/ArrowUp on the trigger opens onto the first/last item; focus returns to the trigger on close."
3132
+ ]
3027
3133
  },
3028
3134
  relatedTokens: []
3029
3135
  },
@@ -3034,11 +3140,11 @@ var uni_index_default = {
3034
3140
  summary: "",
3035
3141
  description: "",
3036
3142
  category: "layout",
3037
- version: "5.2.0",
3143
+ version: "6.0.1",
3038
3144
  bindings: {
3039
3145
  angular: {
3040
3146
  importPath: "@uni-design-system/uni-angular",
3041
- selectorOrTag: "div[uni-menu-item], div[menu-item]",
3147
+ selectorOrTag: "[uni-menu-item], [menu-item]",
3042
3148
  api: [
3043
3149
  {
3044
3150
  name: "display",
@@ -3150,11 +3256,11 @@ var uni_index_default = {
3150
3256
  summary: "",
3151
3257
  description: "",
3152
3258
  category: "forms",
3153
- version: "5.2.0",
3259
+ version: "6.0.1",
3154
3260
  bindings: {
3155
3261
  angular: {
3156
3262
  importPath: "@uni-design-system/uni-angular",
3157
- selectorOrTag: "uni-multi-select, MultiSelect",
3263
+ selectorOrTag: "uni-multi-select",
3158
3264
  api: [
3159
3265
  {
3160
3266
  name: "options",
@@ -3221,10 +3327,13 @@ var uni_index_default = {
3221
3327
  }
3222
3328
  ],
3223
3329
  guidelines: {
3224
- whenToUse: "",
3330
+ whenToUse: "Inline multiple-choice: every option visible as a toggleable item, selection\nemitted as an array. Reach for it when the option set is small enough to show all\nat once and seeing the full set helps the choice; when space is tight or options\nare many, use Multi Select Dropdown instead.",
3225
3331
  dos: [],
3226
3332
  donts: [],
3227
- accessibility: []
3333
+ accessibility: [
3334
+ "Options are real checkboxes in a labelled group \u2014 Space toggles, Tab moves between them.",
3335
+ "Selection state is announced per option."
3336
+ ]
3228
3337
  },
3229
3338
  relatedTokens: []
3230
3339
  },
@@ -3235,11 +3344,11 @@ var uni_index_default = {
3235
3344
  summary: "",
3236
3345
  description: "",
3237
3346
  category: "forms",
3238
- version: "5.2.0",
3347
+ version: "6.0.1",
3239
3348
  bindings: {
3240
3349
  angular: {
3241
3350
  importPath: "@uni-design-system/uni-angular",
3242
- selectorOrTag: "uni-multi-select-dropdown, MultiSelectDropdown",
3351
+ selectorOrTag: "uni-multi-select-dropdown",
3243
3352
  api: [
3244
3353
  {
3245
3354
  name: "value",
@@ -3352,10 +3461,14 @@ var uni_index_default = {
3352
3461
  }
3353
3462
  ],
3354
3463
  guidelines: {
3355
- whenToUse: "",
3464
+ whenToUse: "Multiple choice behind a compact trigger: a disclosure popover containing a search\nfield, checkbox options, and a Done action. Implements `FormValueControl` with an\narray value for Signal Forms, and shows a summarized selection in the trigger.\nThe popover surface, radius, and elevation resolve from the\n`multiSelectDropdown` theme options.",
3356
3465
  dos: [],
3357
3466
  donts: [],
3358
- accessibility: []
3467
+ accessibility: [
3468
+ 'The trigger is a disclosure (`aria-haspopup="dialog"`, `aria-expanded`); the popover contains native focusables Tab reaches normally.',
3469
+ "The search input is labelled; options are real checkboxes announced with their state.",
3470
+ "Escape closes the popover and returns focus to the trigger."
3471
+ ]
3359
3472
  },
3360
3473
  relatedTokens: []
3361
3474
  },
@@ -3366,7 +3479,7 @@ var uni_index_default = {
3366
3479
  summary: "",
3367
3480
  description: "",
3368
3481
  category: "feedback",
3369
- version: "5.2.0",
3482
+ version: "6.0.1",
3370
3483
  bindings: {
3371
3484
  angular: {
3372
3485
  importPath: "@uni-design-system/uni-angular",
@@ -3435,7 +3548,7 @@ var uni_index_default = {
3435
3548
  title: "Default",
3436
3549
  framework: "angular",
3437
3550
  code: `<!-- Storybook story: Default -->
3438
- <div style="margin: 20px;">
3551
+ <div box-layout padding="md">
3439
3552
  <uni-notification-badge
3440
3553
  [count]="count"
3441
3554
  [maxCount]="maxCount"
@@ -3463,7 +3576,7 @@ var uni_index_default = {
3463
3576
  title: "Dot",
3464
3577
  framework: "angular",
3465
3578
  code: `<!-- Storybook story: Dot -->
3466
- <div style="margin: 20px;">
3579
+ <div box-layout padding="md">
3467
3580
  <uni-notification-badge
3468
3581
  [count]="count"
3469
3582
  [maxCount]="maxCount"
@@ -3489,7 +3602,7 @@ var uni_index_default = {
3489
3602
  title: "Count",
3490
3603
  framework: "angular",
3491
3604
  code: `<!-- Storybook story: Count -->
3492
- <div style="margin: 20px;">
3605
+ <div box-layout padding="md">
3493
3606
  <uni-notification-badge
3494
3607
  [count]="count"
3495
3608
  [maxCount]="maxCount"
@@ -3517,7 +3630,7 @@ var uni_index_default = {
3517
3630
  title: "Pill",
3518
3631
  framework: "angular",
3519
3632
  code: `<!-- Storybook story: Pill -->
3520
- <div style="margin: 20px;">
3633
+ <div box-layout padding="md">
3521
3634
  <uni-notification-badge
3522
3635
  [count]="count"
3523
3636
  [maxCount]="maxCount"
@@ -3545,7 +3658,7 @@ var uni_index_default = {
3545
3658
  title: "Large Count",
3546
3659
  framework: "angular",
3547
3660
  code: `<!-- Storybook story: Large Count -->
3548
- <div style="margin: 20px;">
3661
+ <div box-layout padding="md">
3549
3662
  <uni-notification-badge
3550
3663
  [count]="count"
3551
3664
  [maxCount]="maxCount"
@@ -3572,29 +3685,34 @@ var uni_index_default = {
3572
3685
  {
3573
3686
  title: "Different Colors",
3574
3687
  framework: "angular",
3575
- code: '<!-- Storybook story: Different Colors -->\n<div style="margin: 20px;">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3688
+ code: '<!-- Storybook story: Different Colors -->\n<div box-layout padding="md">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3576
3689
  },
3577
3690
  {
3578
3691
  title: "Different Positions",
3579
3692
  framework: "angular",
3580
- code: '<!-- Storybook story: Different Positions -->\n<div style="margin: 20px;">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3693
+ code: '<!-- Storybook story: Different Positions -->\n<div box-layout padding="md">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3581
3694
  },
3582
3695
  {
3583
3696
  title: "Variant Comparison",
3584
3697
  framework: "angular",
3585
- code: '<!-- Storybook story: Variant Comparison -->\n<div style="margin: 20px;">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3698
+ code: '<!-- Storybook story: Variant Comparison -->\n<div box-layout padding="md">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3586
3699
  },
3587
3700
  {
3588
3701
  title: "With Icons",
3589
3702
  framework: "angular",
3590
- code: '<!-- Storybook story: With Icons -->\n<div style="margin: 20px;">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3703
+ code: '<!-- Storybook story: With Icons -->\n<div box-layout padding="md">\n<uni-notification-badge\n [count]="count"\n [maxCount]="maxCount"\n [badgeVariant]="badgeVariant"\n [color]="color"\n [position]="position"\n [show]="show">\n <button uni-text-button>\n Button with Badge\n </button>\n</uni-notification-badge>\n</div>'
3591
3704
  }
3592
3705
  ],
3593
3706
  guidelines: {
3594
- whenToUse: "",
3707
+ whenToUse: 'Attention indicator anchored to whatever it wraps \u2014 an icon button, a nav item, an\navatar. Three shapes: `dot` (something is new), `count` (how many), and `pill`\n(counts that need room); `maxCount` caps the display ("99+"). Position it on any\ncorner of the wrapped content.\nRadius and offset resolve from the `notificationBadge` theme options; the badge\nwears the active `variant` color.',
3595
3708
  dos: [],
3596
- donts: [],
3597
- accessibility: []
3709
+ donts: [
3710
+ "Convey urgency by color alone \u2014 the count/dot shape carries the signal"
3711
+ ],
3712
+ accessibility: [
3713
+ 'The visual badge is hidden from assistive tech; a visually-hidden text announcement carries the meaning ("3 notifications").',
3714
+ "Provide `ariaLabel` context when the wrapped control's purpose isn't obvious from its own name."
3715
+ ]
3598
3716
  },
3599
3717
  relatedTokens: []
3600
3718
  },
@@ -3605,11 +3723,11 @@ var uni_index_default = {
3605
3723
  summary: "",
3606
3724
  description: "",
3607
3725
  category: "feedback",
3608
- version: "5.2.0",
3726
+ version: "6.0.1",
3609
3727
  bindings: {
3610
3728
  angular: {
3611
3729
  importPath: "@uni-design-system/uni-angular",
3612
- selectorOrTag: "uni-notifications, Notifications",
3730
+ selectorOrTag: "uni-notifications",
3613
3731
  api: []
3614
3732
  }
3615
3733
  },
@@ -3629,11 +3747,11 @@ var uni_index_default = {
3629
3747
  summary: "",
3630
3748
  description: "",
3631
3749
  category: "data",
3632
- version: "5.2.0",
3750
+ version: "6.0.1",
3633
3751
  bindings: {
3634
3752
  angular: {
3635
3753
  importPath: "@uni-design-system/uni-angular",
3636
- selectorOrTag: "uni-paginator, Paginator",
3754
+ selectorOrTag: "uni-paginator",
3637
3755
  api: [
3638
3756
  {
3639
3757
  name: "datasource",
@@ -3680,19 +3798,22 @@ var uni_index_default = {
3680
3798
  {
3681
3799
  title: "Primary",
3682
3800
  framework: "angular",
3683
- code: '<!-- Storybook story: Primary -->\n<Paginator ${argsToTemplate(props)} />\n<div style="margin-top: 16px;">\n @for (record of datasource.records(); track record.id) {\n <div>{{ record.name }}</div>\n }\n</div>\n<!-- args:\n{\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\n initPageSize: 5,\n showPageSize: true,\n showPageJumper: true,\n showPageNumbers: true,\n }\n-->'
3801
+ code: '<!-- Storybook story: Primary -->\n<uni-paginator ${argsToTemplate(props)} />\n<div box-layout paddingTop="md">\n @for (record of datasource.records(); track record.id) {\n <div>{{ record.name }}</div>\n }\n</div>\n<!-- args:\n{\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\n initPageSize: 5,\n showPageSize: true,\n showPageJumper: true,\n showPageNumbers: true,\n }\n-->'
3684
3802
  },
3685
3803
  {
3686
3804
  title: "Page Numbers Only",
3687
3805
  framework: "angular",
3688
- code: '<!-- Storybook story: Page Numbers Only -->\n<Paginator ${argsToTemplate(props)} />\n<div style="margin-top: 16px;">\n @for (record of datasource.records(); track record.id) {\n <div>{{ record.name }}</div>\n }\n</div>\n<!-- args:\n{\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\n initPageSize: 5,\n showPageSize: false,\n showPageJumper: false,\n showPageNumbers: true,\n }\n-->'
3806
+ code: '<!-- Storybook story: Page Numbers Only -->\n<uni-paginator ${argsToTemplate(props)} />\n<div box-layout paddingTop="md">\n @for (record of datasource.records(); track record.id) {\n <div>{{ record.name }}</div>\n }\n</div>\n<!-- args:\n{\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\n initPageSize: 5,\n showPageSize: false,\n showPageJumper: false,\n showPageNumbers: true,\n }\n-->'
3689
3807
  }
3690
3808
  ],
3691
3809
  guidelines: {
3692
- whenToUse: "",
3810
+ whenToUse: "The Paginator drives page navigation for any `UniDatasource`: first/previous/next/last\nbuttons, truncated page numbers, an editable page size, and a page jumper. Each section can\nbe toggled independently, so it can render as a full control bar or a minimal pager \u2014 the\n[Data Table](?path=/docs/components-data-table--docs) stories use one paginator in the header\nfor page size and another in the footer for page numbers.",
3693
3811
  dos: [],
3694
3812
  donts: [],
3695
- accessibility: []
3813
+ accessibility: [
3814
+ 'A `role="navigation"` landmark; pages are real buttons with `aria-current="page"` on the active one.',
3815
+ "The page-number input is labelled."
3816
+ ]
3696
3817
  },
3697
3818
  relatedTokens: [
3698
3819
  "paginator.behavior.gap",
@@ -3711,11 +3832,11 @@ var uni_index_default = {
3711
3832
  summary: "",
3712
3833
  description: "",
3713
3834
  category: "layout",
3714
- version: "5.2.0",
3835
+ version: "6.0.1",
3715
3836
  bindings: {
3716
3837
  angular: {
3717
3838
  importPath: "@uni-design-system/uni-angular",
3718
- selectorOrTag: "uni-popover, Popover",
3839
+ selectorOrTag: "uni-popover",
3719
3840
  api: [
3720
3841
  {
3721
3842
  name: "placement",
@@ -3740,14 +3861,16 @@ var uni_index_default = {
3740
3861
  {
3741
3862
  title: "Primary",
3742
3863
  framework: "angular",
3743
- code: '<!-- Storybook story: Primary -->\n<Popover placement="${placement}" [autoClose]="${autoClose}" #popover>\n <Button trigger>Open Popover</Button>\n <Stack gap="sm">\n <div>\n <Text typeface="title-small" display="block">\n This is a Popover.\n </Text>\n It is possible to add any markup you want to a Popover.\n </div>\n <div>\n <Button symbolLeft="thumb_up" size="sm" variant="secondary" (click)="popover.hidePopover()">OK!</Button>\n </div>\n </Stack>\n</Popover>\n<!-- args:\n{\n placement: \'right-start\',\n autoClose: true,\n }\n-->'
3864
+ code: '<!-- Storybook story: Primary -->\n<uni-popover placement="${placement}" [autoClose]="${autoClose}" #popover>\n <button text-button trigger>Open Popover</button>\n <div stack-layout gap="sm">\n <div>\n <span uni-text="title-small" display="block">\n This is a Popover.\n </span>\n It is possible to add any markup you want to a Popover.\n </div>\n <div>\n <button text-button symbolLeft="thumb_up" size="sm" variant="secondary" (click)="popover.hidePopover()">OK!</button>\n </div>\n </div>\n</uni-popover>\n<!-- args:\n{\n placement: \'right-start\',\n autoClose: true,\n }\n-->'
3744
3865
  }
3745
3866
  ],
3746
3867
  guidelines: {
3747
- whenToUse: "",
3868
+ whenToUse: "Popover is a non-modal dialog that floats around a trigger.\nAny type of content can be added inside a popover; however, it is most suitable for short callouts or compact actions.\n**Note:** It is important to add the `trigger` attribute to the item you want to open and be referenced to the Popover.",
3748
3869
  dos: [],
3749
3870
  donts: [],
3750
- accessibility: []
3871
+ accessibility: [
3872
+ "The trigger carries `aria-expanded` and `aria-controls`; light-dismiss comes from the native popover."
3873
+ ]
3751
3874
  },
3752
3875
  relatedTokens: []
3753
3876
  },
@@ -3758,11 +3881,11 @@ var uni_index_default = {
3758
3881
  summary: "",
3759
3882
  description: "",
3760
3883
  category: "feedback",
3761
- version: "5.2.0",
3884
+ version: "6.0.1",
3762
3885
  bindings: {
3763
3886
  angular: {
3764
3887
  importPath: "@uni-design-system/uni-angular",
3765
- selectorOrTag: "uni-progress-bar, ProgressBar",
3888
+ selectorOrTag: "uni-progress-bar",
3766
3889
  api: [
3767
3890
  {
3768
3891
  name: "width",
@@ -3802,14 +3925,16 @@ var uni_index_default = {
3802
3925
  {
3803
3926
  title: "Default",
3804
3927
  framework: "angular",
3805
- code: '<!-- Storybook story: Default -->\n<ProgressBar percent="${percent}" ${argsToTemplate(props)}></ProgressBar>\n<!-- args:\n{\n percent: 60,\n }\n-->'
3928
+ code: '<!-- Storybook story: Default -->\n<uni-progress-bar percent="${percent}" ${argsToTemplate(props)}></uni-progress-bar>\n<!-- args:\n{\n percent: 60,\n }\n-->'
3806
3929
  }
3807
3930
  ],
3808
3931
  guidelines: {
3809
- whenToUse: "",
3932
+ whenToUse: "The progress bar is a graphical way of representing progress to completion.",
3810
3933
  dos: [],
3811
3934
  donts: [],
3812
- accessibility: []
3935
+ accessibility: [
3936
+ '`role="progressbar"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`.'
3937
+ ]
3813
3938
  },
3814
3939
  relatedTokens: []
3815
3940
  },
@@ -3820,11 +3945,11 @@ var uni_index_default = {
3820
3945
  summary: "",
3821
3946
  description: "",
3822
3947
  category: "feedback",
3823
- version: "5.2.0",
3948
+ version: "6.0.1",
3824
3949
  bindings: {
3825
3950
  angular: {
3826
3951
  importPath: "@uni-design-system/uni-angular",
3827
- selectorOrTag: "uni-progress-gauge, ProgressGauge",
3952
+ selectorOrTag: "uni-progress-gauge",
3828
3953
  api: [
3829
3954
  {
3830
3955
  name: "percent",
@@ -3849,7 +3974,7 @@ var uni_index_default = {
3849
3974
  title: "Default",
3850
3975
  framework: "angular",
3851
3976
  code: `<!-- Storybook story: Default -->
3852
- <ProgressGauge percent="\${percent}" variant="\${variant}" size="\${size}"></ProgressGauge>
3977
+ <uni-progress-gauge percent="\${percent}" variant="\${variant}" size="\${size}"></uni-progress-gauge>
3853
3978
  <!-- args:
3854
3979
  {
3855
3980
  percent: 60,
@@ -3860,10 +3985,12 @@ var uni_index_default = {
3860
3985
  }
3861
3986
  ],
3862
3987
  guidelines: {
3863
- whenToUse: "",
3988
+ whenToUse: "The progress gauge is a graphical way of representing progress to completion as well as scoring or ranking.",
3864
3989
  dos: [],
3865
3990
  donts: [],
3866
- accessibility: []
3991
+ accessibility: [
3992
+ '`role="progressbar"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`. The SVG is decorative.'
3993
+ ]
3867
3994
  },
3868
3995
  relatedTokens: []
3869
3996
  },
@@ -3874,11 +4001,11 @@ var uni_index_default = {
3874
4001
  summary: "",
3875
4002
  description: "",
3876
4003
  category: "forms",
3877
- version: "5.2.0",
4004
+ version: "6.0.1",
3878
4005
  bindings: {
3879
4006
  angular: {
3880
4007
  importPath: "@uni-design-system/uni-angular",
3881
- selectorOrTag: "uni-radio, Radio",
4008
+ selectorOrTag: "uni-radio",
3882
4009
  api: [
3883
4010
  {
3884
4011
  name: "value",
@@ -3999,12 +4126,24 @@ var uni_index_default = {
3999
4126
  }
4000
4127
  ],
4001
4128
  guidelines: {
4002
- whenToUse: "",
4003
- dos: [],
4004
- donts: [],
4005
- accessibility: []
4129
+ whenToUse: "Single choice among a small set of visible options. The component renders the whole\ngroup from an `options` array (`{ label, value, disabled? }`), implements\n`FormValueControl<string>` for Signal Forms, and defaults each group to a unique\n`name` so multiple groups on a page never collide.\nRing, fill, and size resolve from the `radio` theme options; the selected dot wears\nthe active `variant` color.",
4130
+ dos: [
4131
+ "Use for 2\u20135 mutually exclusive options that should all be visible"
4132
+ ],
4133
+ donts: [
4134
+ "Use for long option lists \u2014 that is a select"
4135
+ ],
4136
+ accessibility: [
4137
+ '`role="radiogroup"` labelled by the group label via `aria-labelledby`.',
4138
+ "Native radio inputs: arrow keys move selection within the group, Tab moves out.",
4139
+ "`aria-invalid` reflects the error state once the group was touched or is dirty."
4140
+ ]
4006
4141
  },
4007
- relatedTokens: []
4142
+ relatedTokens: [
4143
+ "radio.behavior.size",
4144
+ "radio.behavior.ringColor",
4145
+ "radio.behavior.fillColor"
4146
+ ]
4008
4147
  },
4009
4148
  {
4010
4149
  id: "ripple",
@@ -4013,7 +4152,7 @@ var uni_index_default = {
4013
4152
  summary: "",
4014
4153
  description: "",
4015
4154
  category: "directives",
4016
- version: "5.2.0",
4155
+ version: "6.0.1",
4017
4156
  bindings: {
4018
4157
  angular: {
4019
4158
  importPath: "@uni-design-system/uni-angular",
@@ -4037,11 +4176,11 @@ var uni_index_default = {
4037
4176
  summary: "",
4038
4177
  description: "",
4039
4178
  category: "layout",
4040
- version: "5.2.0",
4179
+ version: "6.0.1",
4041
4180
  bindings: {
4042
4181
  angular: {
4043
4182
  importPath: "@uni-design-system/uni-angular",
4044
- selectorOrTag: "div[uni-row-layout], Row, div[row-layout]",
4183
+ selectorOrTag: "[uni-row-layout], [row-layout]",
4045
4184
  api: [
4046
4185
  {
4047
4186
  name: "display",
@@ -4065,7 +4204,7 @@ var uni_index_default = {
4065
4204
  type: "number | string | undefined",
4066
4205
  required: false,
4067
4206
  default: "'fit-content'",
4068
- description: ""
4207
+ description: 'Defaults to `fit-content` (guards content collapse). Set `[minWidth]="0"` when the row must shrink inside a constrained flex parent (scroll or text truncation containment).'
4069
4208
  }
4070
4209
  ]
4071
4210
  }
@@ -4078,7 +4217,7 @@ var uni_index_default = {
4078
4217
  }
4079
4218
  ],
4080
4219
  guidelines: {
4081
- whenToUse: "",
4220
+ whenToUse: "`Row` is a layout component used to group elements in a horizontal arrangement and applies a uniform space between them.\n`Row` is an extension to the `Box` component and has all the `Box` attributes available to it.",
4082
4221
  dos: [],
4083
4222
  donts: [],
4084
4223
  accessibility: []
@@ -4092,11 +4231,11 @@ var uni_index_default = {
4092
4231
  summary: "",
4093
4232
  description: "",
4094
4233
  category: "layout",
4095
- version: "5.2.0",
4234
+ version: "6.0.1",
4096
4235
  bindings: {
4097
4236
  angular: {
4098
4237
  importPath: "@uni-design-system/uni-angular",
4099
- selectorOrTag: "div[uni-scroll-area], ScrollArea, div[scroll-area]",
4238
+ selectorOrTag: "[uni-scroll-area], [scroll-area]",
4100
4239
  api: [
4101
4240
  {
4102
4241
  name: "color",
@@ -4221,11 +4360,11 @@ var uni_index_default = {
4221
4360
  {
4222
4361
  title: "Primary",
4223
4362
  framework: "angular",
4224
- code: '<!-- Storybook story: Primary -->\n<div scroll-area ${argsToTemplate(props)} #scrollArea>\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_downward" (click)="scrollArea.scrollToBottom()">Scroll to bottom</button>\n ${ngContent}\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_upward" (click)="scrollArea.scrollToTop()">Back to top</button>\n</div>\n<!-- args:\n{\n border: \'quaternary\',\n color: \'tertiary-surface\',\n height: 200,\n ngContent: `\n <Text typeface="headline-medium">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</Text>\n <Text typeface="body-1-long">\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quis facere debitis ullam, quae quidem, impedit\n culpa nam\n repellat in voluptatibus esse ab harum, hic? Aliquam nesciunt voluptates repellendus assumenda labore.\n </p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro quos voluptate doloribus. Optio unde\n inventore, tempore\n nemo repellat expedita! Quod, accusamus nobis iure. Aliquam quibusdam, nemo explicabo ipsum provident\n asperiores.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat, qui, rem! Debitis cum maiores iste,\n possimus!\n Obcaecati accusamus eaque expedita quo soluta quis, repudiandae similique, veritatis repellendus facere\n suscipit!\n Et!</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum doloremque repellat praesentium quae et\n consectetur\n iure quos porro, provident voluptates reprehenderit a. Accusamus ut, quaerat asperiores blanditiis\n voluptate, sint\n facilis.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus beatae inventore nobis esse\n temporibus\n exercitationem\n eos illo minima non magnam, provident sit doloribus maiores odio in animi quidem unde. Perferendis.</p>\n\n </Text>\n\n\n `,\n }\n-->'
4363
+ code: '<!-- Storybook story: Primary -->\n<div scroll-area ${argsToTemplate(props)} #scrollArea>\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_downward" (click)="scrollArea.scrollToBottom()">Scroll to bottom</button>\n ${ngContent}\n <button size="sm" text-button variant="ghost" symbolLeft="arrow_upward" (click)="scrollArea.scrollToTop()">Back to top</button>\n</div>\n<!-- args:\n{\n border: \'quaternary\',\n color: \'tertiary-surface\',\n height: 200,\n ngContent: `\n <span uni-text="headline-medium">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</span>\n <span uni-text="body-1-long">\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quis facere debitis ullam, quae quidem, impedit\n culpa nam\n repellat in voluptatibus esse ab harum, hic? Aliquam nesciunt voluptates repellendus assumenda labore.\n </p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro quos voluptate doloribus. Optio unde\n inventore, tempore\n nemo repellat expedita! Quod, accusamus nobis iure. Aliquam quibusdam, nemo explicabo ipsum provident\n asperiores.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat, qui, rem! Debitis cum maiores iste,\n possimus!\n Obcaecati accusamus eaque expedita quo soluta quis, repudiandae similique, veritatis repellendus facere\n suscipit!\n Et!</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum doloremque repellat praesentium quae et\n consectetur\n iure quos porro, provident voluptates reprehenderit a. Accusamus ut, quaerat asperiores blanditiis\n voluptate, sint\n facilis.</p>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus beatae inventore nobis esse\n temporibus\n exercitationem\n eos illo minima non magnam, provident sit doloribus maiores odio in animi quidem unde. Perferendis.</p>\n\n </span>\n\n\n `,\n }\n-->'
4225
4364
  }
4226
4365
  ],
4227
4366
  guidelines: {
4228
- whenToUse: "",
4367
+ whenToUse: "A scroll container with themed, consistent scrollbars across browsers \u2014 thin\nEmotion-styled WebKit scrollbars with a `scrollbar-width`/`scrollbar-color`\nfallback. It detects scrollable state via ResizeObserver (the `scrollable` output)\nand offers `scrollToTop`/`scrollToBottom` for programmatic control.",
4229
4368
  dos: [],
4230
4369
  donts: [],
4231
4370
  accessibility: []
@@ -4239,17 +4378,24 @@ var uni_index_default = {
4239
4378
  summary: "",
4240
4379
  description: "",
4241
4380
  category: "forms",
4242
- version: "5.2.0",
4381
+ version: "6.0.1",
4243
4382
  bindings: {
4244
4383
  angular: {
4245
4384
  importPath: "@uni-design-system/uni-angular",
4246
- selectorOrTag: "SearchInput, uni-search-input",
4385
+ selectorOrTag: "uni-search-input",
4247
4386
  api: [
4248
4387
  {
4249
4388
  name: "label",
4250
4389
  kind: "input",
4251
4390
  type: "string",
4252
4391
  required: true,
4392
+ description: "Accessible name for the field, also the placeholder fallback."
4393
+ },
4394
+ {
4395
+ name: "placeholder",
4396
+ kind: "input",
4397
+ type: "string",
4398
+ required: false,
4253
4399
  description: ""
4254
4400
  },
4255
4401
  {
@@ -4260,6 +4406,22 @@ var uni_index_default = {
4260
4406
  default: "'100%'",
4261
4407
  description: ""
4262
4408
  },
4409
+ {
4410
+ name: "debounceTime",
4411
+ kind: "input",
4412
+ type: "number",
4413
+ required: false,
4414
+ default: "400",
4415
+ description: ""
4416
+ },
4417
+ {
4418
+ name: "suggestions",
4419
+ kind: "input",
4420
+ type: "string[]",
4421
+ required: false,
4422
+ default: "[]",
4423
+ description: "Type-ahead entries. Keep them fresh from `change` emissions; the list shows while the field has focus and entries exist."
4424
+ },
4263
4425
  {
4264
4426
  name: "change",
4265
4427
  kind: "output",
@@ -4273,6 +4435,13 @@ var uni_index_default = {
4273
4435
  type: "string",
4274
4436
  required: false,
4275
4437
  description: ""
4438
+ },
4439
+ {
4440
+ name: "suggestionSelected",
4441
+ kind: "output",
4442
+ type: "string",
4443
+ required: false,
4444
+ description: ""
4276
4445
  }
4277
4446
  ]
4278
4447
  }
@@ -4281,14 +4450,35 @@ var uni_index_default = {
4281
4450
  {
4282
4451
  title: "Primary",
4283
4452
  framework: "angular",
4284
- code: "<!-- Storybook story: Primary -->\n<!-- args:\n{\n label: 'Search',\n }\n-->"
4453
+ code: `<!-- Storybook story: Primary -->
4454
+ <div box-layout maxWidth="420px">
4455
+ <uni-search-input
4456
+ label="Search the docs"
4457
+ [debounceTime]="200"
4458
+ [suggestions]="suggestions"
4459
+ (change)="filter($event)"
4460
+ (search)="log($event)"
4461
+ ></uni-search-input>
4462
+ </div>
4463
+ <!-- args:
4464
+ { label: 'Search' }
4465
+ -->`
4466
+ },
4467
+ {
4468
+ title: "Type-ahead",
4469
+ framework: "angular",
4470
+ code: '<!-- Storybook story: Type-ahead -->\n<div box-layout maxWidth="420px">\n<uni-search-input\n label="Search the docs"\n [debounceTime]="200"\n [suggestions]="suggestions"\n (change)="filter($event)"\n (search)="log($event)"\n></uni-search-input>\n</div>'
4285
4471
  }
4286
4472
  ],
4287
4473
  guidelines: {
4288
- whenToUse: "",
4474
+ whenToUse: "Generic search field wearing the shared input chrome: a decorative leading magnifier,\na clear button while there's a query, and Enter to submit (`search`). `change` emits\ndebounced as the user types \u2014 use it to refresh results or the `suggestions` input.\nWith `suggestions`, the field becomes an ARIA combobox: entries render in a listbox\nunder the field, ArrowUp/Down move the highlight, Enter selects (emitting both\n`suggestionSelected` and `search`), and Escape closes the list first, then clears the\nquery. The suggestion list's surface, elevation and radius resolve from the theme's\n`searchInput` options, alongside the search/clear symbols.",
4289
4475
  dos: [],
4290
4476
  donts: [],
4291
- accessibility: []
4477
+ accessibility: [
4478
+ "The field is an ARIA combobox: `aria-expanded`, `aria-controls`, and `aria-activedescendant` track the suggestion listbox.",
4479
+ "ArrowUp/ArrowDown move the active option, Enter selects, Escape closes the list first and clears the query second.",
4480
+ 'The magnifier is decorative; the clear button has an accessible name ("Clear search").'
4481
+ ]
4292
4482
  },
4293
4483
  relatedTokens: []
4294
4484
  },
@@ -4299,11 +4489,11 @@ var uni_index_default = {
4299
4489
  summary: "",
4300
4490
  description: "",
4301
4491
  category: "forms",
4302
- version: "5.2.0",
4492
+ version: "6.0.1",
4303
4493
  bindings: {
4304
4494
  angular: {
4305
4495
  importPath: "@uni-design-system/uni-angular",
4306
- selectorOrTag: "uni-select, SelectInput",
4496
+ selectorOrTag: "uni-select",
4307
4497
  api: [
4308
4498
  {
4309
4499
  name: "value",
@@ -4418,10 +4608,13 @@ var uni_index_default = {
4418
4608
  }
4419
4609
  ],
4420
4610
  guidelines: {
4421
- whenToUse: "",
4611
+ whenToUse: "Single choice from a list, on a native `<select>` \u2014 platform pickers on mobile,\nplatform keyboard behavior everywhere. Options are typed generically\n(`options: T[]` with `optionLabel`/`optionValue` accessors), and the component\nimplements `FormValueControl` for the Signal Forms `[field]` directive. Errors\nstyle the field only after interaction, matching Input.\nFor choosing several, use Multi Select; for type-to-filter over large sets, use\nSearch Input's type-ahead.",
4422
4612
  dos: [],
4423
4613
  donts: [],
4424
- accessibility: []
4614
+ accessibility: [
4615
+ "Native `<select>`: platform keyboard interaction and mobile pickers for free.",
4616
+ "`label` becomes the accessible name; `aria-invalid` reflects the touched error state."
4617
+ ]
4425
4618
  },
4426
4619
  relatedTokens: []
4427
4620
  },
@@ -4432,11 +4625,11 @@ var uni_index_default = {
4432
4625
  summary: "",
4433
4626
  description: "",
4434
4627
  category: "components",
4435
- version: "5.2.0",
4628
+ version: "6.0.1",
4436
4629
  bindings: {
4437
4630
  angular: {
4438
4631
  importPath: "@uni-design-system/uni-angular",
4439
- selectorOrTag: "uni-skeleton, Skeleton",
4632
+ selectorOrTag: "uni-skeleton",
4440
4633
  api: [
4441
4634
  {
4442
4635
  name: "shape",
@@ -4478,15 +4671,19 @@ var uni_index_default = {
4478
4671
  title: "Text Lines",
4479
4672
  framework: "angular",
4480
4673
  code: `<!-- Storybook story: Text Lines -->
4481
- <uni-card style="max-width: 360px; display: block;">
4482
- <div style="display: flex; gap: 12px; align-items: center; padding: 16px;">
4483
- <uni-skeleton shape="circle" [height]="40" />
4484
- <div style="flex: 1;">
4485
- <uni-skeleton [lines]="2" />
4674
+ <div box-layout maxWidth="360px">
4675
+ <uni-card>
4676
+ <div row-layout gap="sm" alignItems="center" padding="md">
4677
+ <uni-skeleton shape="circle" [height]="40" />
4678
+ <div box-layout [grow]="1">
4679
+ <uni-skeleton [lines]="2" />
4680
+ </div>
4681
+ </div>
4682
+ <div box-layout paddingHorizontal="md" paddingBottom="md">
4683
+ <uni-skeleton shape="rect" [height]="120" />
4486
4684
  </div>
4487
- </div>
4488
- <uni-skeleton shape="rect" [height]="120" style="display: block; padding: 0 16px 16px;" />
4489
4685
  </uni-card>
4686
+ </div>
4490
4687
  <!-- args:
4491
4688
  { shape: 'text', lines: 3 }
4492
4689
  -->`
@@ -4494,14 +4691,19 @@ var uni_index_default = {
4494
4691
  {
4495
4692
  title: "Card Placeholder",
4496
4693
  framework: "angular",
4497
- code: '<!-- Storybook story: Card Placeholder -->\n<uni-card style="max-width: 360px; display: block;">\n<div style="display: flex; gap: 12px; align-items: center; padding: 16px;">\n <uni-skeleton shape="circle" [height]="40" />\n <div style="flex: 1;">\n <uni-skeleton [lines]="2" />\n </div>\n</div>\n<uni-skeleton shape="rect" [height]="120" style="display: block; padding: 0 16px 16px;" />\n</uni-card>'
4694
+ code: '<!-- Storybook story: Card Placeholder -->\n<div box-layout maxWidth="360px">\n<uni-card>\n <div row-layout gap="sm" alignItems="center" padding="md">\n <uni-skeleton shape="circle" [height]="40" />\n <div box-layout [grow]="1">\n <uni-skeleton [lines]="2" />\n </div>\n </div>\n <div box-layout paddingHorizontal="md" paddingBottom="md">\n <uni-skeleton shape="rect" [height]="120" />\n </div>\n</uni-card>\n</div>'
4498
4695
  }
4499
4696
  ],
4500
4697
  guidelines: {
4501
- whenToUse: "",
4698
+ whenToUse: "Loading placeholder that sketches the shape of incoming content: `text` renders one or\nmore lines (ending on a short line, as real copy would), `rect` stands in for media and\ncharts, `circle` for avatars. Skeletons paint with the theme's surface tokens so they\nsit naturally on any brand in both modes, and the shimmer sweep only animates for users\nwho allow motion \u2014 under `prefers-reduced-motion` it degrades to calm static blocks.\nSkeletons are `aria-hidden`; announce loading on the container (e.g. `aria-busy`)\nwhere your app knows what is actually loading.",
4502
4699
  dos: [],
4503
- donts: [],
4504
- accessibility: []
4700
+ donts: [
4701
+ "Announce individual skeletons to assistive tech \u2014 they are decorative placeholders"
4702
+ ],
4703
+ accessibility: [
4704
+ "Skeletons are `aria-hidden` \u2014 announce loading on the container (e.g. `aria-busy`) where your app knows what is loading.",
4705
+ "The shimmer respects `prefers-reduced-motion`, degrading to static blocks."
4706
+ ]
4505
4707
  },
4506
4708
  relatedTokens: [
4507
4709
  "skeleton.behavior.color",
@@ -4519,11 +4721,11 @@ var uni_index_default = {
4519
4721
  summary: "",
4520
4722
  description: "",
4521
4723
  category: "forms",
4522
- version: "5.2.0",
4724
+ version: "6.0.1",
4523
4725
  bindings: {
4524
4726
  angular: {
4525
4727
  importPath: "@uni-design-system/uni-angular",
4526
- selectorOrTag: "uni-slider, Slider",
4728
+ selectorOrTag: "uni-slider",
4527
4729
  api: [
4528
4730
  {
4529
4731
  name: "value",
@@ -4632,10 +4834,14 @@ var uni_index_default = {
4632
4834
  }
4633
4835
  ],
4634
4836
  guidelines: {
4635
- whenToUse: "",
4837
+ whenToUse: 'Range slider for picking a number within bounds. It renders a native\n`<input type="range">`, so keyboard interaction (arrows, Home/End, Page Up/Down) and\nthe ARIA slider contract come from the platform. The same Signal Forms contract as\nInput applies \u2014 bind with the `[field]` directive or drive `[(value)]` directly.\nFill and thumb color, track color, radii and geometry resolve from the theme\'s\n`slider` options; the fill level rides a CSS custom property, so dragging never\nregenerates styles.',
4636
4838
  dos: [],
4637
4839
  donts: [],
4638
- accessibility: []
4840
+ accessibility: [
4841
+ 'Native `<input type="range">`: arrows, Home/End, and Page Up/Down come from the platform, and the ARIA slider contract (valuenow/min/max) is native.',
4842
+ "`label` is required and becomes the accessible name.",
4843
+ "Expose the current value textually nearby and link it with `ariaDescribedBy` when the number matters."
4844
+ ]
4639
4845
  },
4640
4846
  relatedTokens: [
4641
4847
  "slider.behavior.color",
@@ -4652,11 +4858,11 @@ var uni_index_default = {
4652
4858
  summary: "",
4653
4859
  description: "",
4654
4860
  category: "feedback",
4655
- version: "5.2.0",
4861
+ version: "6.0.1",
4656
4862
  bindings: {
4657
4863
  angular: {
4658
4864
  importPath: "@uni-design-system/uni-angular",
4659
- selectorOrTag: "uni-snackbar, Snackbar",
4865
+ selectorOrTag: "uni-snackbar",
4660
4866
  api: [
4661
4867
  {
4662
4868
  name: "show",
@@ -4722,11 +4928,11 @@ var uni_index_default = {
4722
4928
  {
4723
4929
  title: "Primary",
4724
4930
  framework: "angular",
4725
- code: "<!-- Storybook story: Primary -->\n<Button (click)=\"snackbar.open()\">Show Snackbar</Button>\n<Snackbar #snackbar ${argsToTemplate(props)}>\n ${ngContent}\n</Snackbar>\n<!-- args:\n{\n ngContent: 'The record has been removed.',\n variant: 'warn',\n actionLabel: 'undo',\n timeout: '5000',\n symbolName: 'delete_sweep',\n }\n-->"
4931
+ code: "<!-- Storybook story: Primary -->\n<button text-button (click)=\"snackbar.open()\">Show Snackbar</button>\n<uni-snackbar #snackbar ${argsToTemplate(props)}>\n ${ngContent}\n</uni-snackbar>\n<!-- args:\n{\n ngContent: 'The record has been removed.',\n variant: 'warn',\n actionLabel: 'undo',\n timeout: '5000',\n symbolName: 'delete_sweep',\n }\n-->"
4726
4932
  }
4727
4933
  ],
4728
4934
  guidelines: {
4729
- whenToUse: "",
4935
+ whenToUse: "The Snackbar component is used to give feedback to users after an action has taken place.\nIt appears near the bottom center of the screen temporarily and floats above the UI to not affect the application's layout.\nA side action can be defined (e.g. undoing a process or navigating to the details of a newly created record).",
4730
4936
  dos: [],
4731
4937
  donts: [],
4732
4938
  accessibility: []
@@ -4744,7 +4950,7 @@ var uni_index_default = {
4744
4950
  summary: "",
4745
4951
  description: "",
4746
4952
  category: "data",
4747
- version: "5.2.0",
4953
+ version: "6.0.1",
4748
4954
  bindings: {
4749
4955
  angular: {
4750
4956
  importPath: "@uni-design-system/uni-angular",
@@ -4773,9 +4979,9 @@ var uni_index_default = {
4773
4979
  framework: "angular",
4774
4980
  code: `<!-- Storybook story: Primary -->
4775
4981
  <uni-sort-header [datasource]="datasource" [column]="column">
4776
- <Text typeface="title-small">Name</Text>
4982
+ <span uni-text="title-small">Name</span>
4777
4983
  </uni-sort-header>
4778
- <div style="margin-top: 16px;">
4984
+ <div box-layout paddingTop="md">
4779
4985
  @for (record of datasource.records().slice(0, 5); track record.id) {
4780
4986
  <div>{{ record.name }}</div>
4781
4987
  }
@@ -4789,7 +4995,7 @@ var uni_index_default = {
4789
4995
  }
4790
4996
  ],
4791
4997
  guidelines: {
4792
- whenToUse: "",
4998
+ whenToUse: "The Sort Header wraps a column heading and cycles the bound datasource's sort state\n(ascending \u2192 descending \u2192 unsorted) when clicked. An animated arrow indicates the current\nsort direction. It is used by the [Data Table](?path=/docs/components-data-table--docs)\nfor sortable columns, but can wrap any header content bound to a `UniDatasource`.",
4793
4999
  dos: [],
4794
5000
  donts: [],
4795
5001
  accessibility: []
@@ -4803,11 +5009,11 @@ var uni_index_default = {
4803
5009
  summary: "",
4804
5010
  description: "",
4805
5011
  category: "layout",
4806
- version: "5.2.0",
5012
+ version: "6.0.1",
4807
5013
  bindings: {
4808
5014
  angular: {
4809
5015
  importPath: "@uni-design-system/uni-angular",
4810
- selectorOrTag: "div[uni-stack-layout], Stack, div[stack-layout]",
5016
+ selectorOrTag: "[uni-stack-layout], [stack-layout]",
4811
5017
  api: [
4812
5018
  {
4813
5019
  name: "display",
@@ -4831,7 +5037,7 @@ var uni_index_default = {
4831
5037
  type: "number | string | undefined",
4832
5038
  required: false,
4833
5039
  default: "'fit-content'",
4834
- description: ""
5040
+ description: 'Defaults to `fit-content` (guards content collapse). Set `[minHeight]="0"` when the stack must shrink inside a constrained flex parent (scroll containment).'
4835
5041
  }
4836
5042
  ]
4837
5043
  }
@@ -4840,17 +5046,119 @@ var uni_index_default = {
4840
5046
  {
4841
5047
  title: "Stacked Cards",
4842
5048
  framework: "angular",
4843
- code: "<!-- Storybook story: Stacked Cards -->\n<div stack-layout ${argsToTemplate(props)}>\n <Card><CardContent><Text>Card 1</Text></CardContent></Card>\n <Card><CardContent><Text>Card 2</Text></CardContent></Card>\n <Card><CardContent><Text>Card 3</Text></CardContent></Card>\n <Card><CardContent><Text>Card 4</Text></CardContent></Card>\n <Card><CardContent><Text>Card 5</Text></CardContent></Card>\n</div>\n<!-- args:\n{ gap: 'lg' }\n-->"
5049
+ code: "<!-- Storybook story: Stacked Cards -->\n<div stack-layout ${argsToTemplate(props)}>\n <uni-card><uni-card-content><span uni-text>Card 1</span></uni-card-content></uni-card>\n <uni-card><uni-card-content><span uni-text>Card 2</span></uni-card-content></uni-card>\n <uni-card><uni-card-content><span uni-text>Card 3</span></uni-card-content></uni-card>\n <uni-card><uni-card-content><span uni-text>Card 4</span></uni-card-content></uni-card>\n <uni-card><uni-card-content><span uni-text>Card 5</span></uni-card-content></uni-card>\n</div>\n<!-- args:\n{ gap: 'lg' }\n-->"
4844
5050
  }
4845
5051
  ],
4846
5052
  guidelines: {
4847
- whenToUse: "",
5053
+ whenToUse: "`Stack` is a layout component used to group elements in a vertical arrangement and applies a uniform space between them.\n`Stack` is an extension to the `Box` component and has all the `Box` attributes available to it.",
4848
5054
  dos: [],
4849
5055
  donts: [],
4850
5056
  accessibility: []
4851
5057
  },
4852
5058
  relatedTokens: []
4853
5059
  },
5060
+ {
5061
+ id: "stat",
5062
+ name: "Stat",
5063
+ status: "stable",
5064
+ summary: "",
5065
+ description: "",
5066
+ category: "components",
5067
+ version: "6.0.1",
5068
+ bindings: {
5069
+ angular: {
5070
+ importPath: "@uni-design-system/uni-angular",
5071
+ selectorOrTag: "uni-stat",
5072
+ api: [
5073
+ {
5074
+ name: "label",
5075
+ kind: "input",
5076
+ type: "string",
5077
+ required: true,
5078
+ description: "What is being measured, sentence case."
5079
+ },
5080
+ {
5081
+ name: "value",
5082
+ kind: "input",
5083
+ type: "string | number",
5084
+ required: true,
5085
+ description: "The headline number: strings render verbatim, numbers auto-compact."
5086
+ },
5087
+ {
5088
+ name: "delta",
5089
+ kind: "input",
5090
+ type: "string",
5091
+ required: false,
5092
+ description: 'Signed change, e.g. "+12.4%" or "-0.4%". The sign drives the arrow.'
5093
+ },
5094
+ {
5095
+ name: "upIsGood",
5096
+ kind: "input",
5097
+ type: "boolean",
5098
+ required: false,
5099
+ default: "true",
5100
+ description: "Whether an upward movement is good news. Flip for churn, errors, cost."
5101
+ },
5102
+ {
5103
+ name: "caption",
5104
+ kind: "input",
5105
+ type: "string",
5106
+ required: false,
5107
+ description: 'Names the comparison period, e.g. "vs last month".'
5108
+ },
5109
+ {
5110
+ name: "trend",
5111
+ kind: "input",
5112
+ type: "number[] | undefined",
5113
+ required: false,
5114
+ default: "undefined",
5115
+ description: "Recent values for the decorative sparkline (12 points reads best)."
5116
+ }
5117
+ ]
5118
+ }
5119
+ },
5120
+ examples: [
5121
+ {
5122
+ title: "Default",
5123
+ framework: "angular",
5124
+ code: "<!-- Storybook story: Default -->\n<uni-stat ${argsToTemplate(props)}></uni-stat>\n<!-- args:\n{\n label: 'Monthly recurring revenue',\n value: '$48.2K',\n delta: '+12.4%',\n caption: 'vs last month',\n trend: [31, 34, 33, 38, 37, 41, 40, 44, 43, 46, 47, 48],\n }\n-->"
5125
+ },
5126
+ {
5127
+ title: "Down is good (churn)",
5128
+ framework: "angular",
5129
+ code: "<!-- Storybook story: Down is good (churn) -->\n<uni-stat ${argsToTemplate(props)}></uni-stat>\n<!-- args:\n{\n label: 'Churn rate',\n value: '2.1%',\n delta: '-0.4%',\n upIsGood: false,\n caption: 'vs last month',\n trend: [3.2, 3.1, 3.0, 2.8, 2.9, 2.7, 2.6, 2.4, 2.5, 2.3, 2.2, 2.1],\n }\n-->"
5130
+ },
5131
+ {
5132
+ title: "KPI row",
5133
+ framework: "angular",
5134
+ code: "<!-- Storybook story: KPI row -->\n<uni-stat ${argsToTemplate(props)}></uni-stat>"
5135
+ }
5136
+ ],
5137
+ guidelines: {
5138
+ whenToUse: 'The KPI tile a dashboard leads with: a muted label, a large headline value (numbers\nauto-compact \u2014 `48234` renders "48.2K"), an optional signed delta, and an optional\ndecorative sparkline.\nThe delta\'s color is decided by **direction \xD7 whether up is good**, never direction\nalone \u2014 set `upIsGood` to `false` for measures like churn, errors, or cost, and a\nfalling number correctly reads as good news. The arrow is accompanied by\nscreen-reader text ("up"/"down"), so state never relies on color alone, and `caption`\nnames the comparison period.\nFrame (surface, border primitive, radius), typography (the type scale\'s `stat` role\nfor values), delta inks (the semantic `success`/`error`), and sparkline colors all\nresolve from the theme\'s `stat` options.',
5139
+ dos: [],
5140
+ donts: [
5141
+ "Rely on delta color alone \u2014 the arrow + wording carry direction for everyone"
5142
+ ],
5143
+ accessibility: [
5144
+ 'The delta arrow is decorative; screen readers hear "up"/"down" in words instead.',
5145
+ "The sparkline is `aria-hidden` \u2014 the value and delta carry the information."
5146
+ ]
5147
+ },
5148
+ relatedTokens: [
5149
+ "stat.behavior.labelTypeface",
5150
+ "stat.behavior.valueTypeface",
5151
+ "stat.behavior.color",
5152
+ "stat.behavior.border",
5153
+ "stat.behavior.borderRadius",
5154
+ "stat.behavior.positiveColor",
5155
+ "stat.behavior.negativeColor",
5156
+ "stat.behavior.trendColor",
5157
+ "stat.behavior.trendAccent",
5158
+ "stat.behavior.padding",
5159
+ "stat.behavior.gap"
5160
+ ]
5161
+ },
4854
5162
  {
4855
5163
  id: "symbol",
4856
5164
  name: "Symbol",
@@ -4858,11 +5166,11 @@ var uni_index_default = {
4858
5166
  summary: "",
4859
5167
  description: "",
4860
5168
  category: "primitives",
4861
- version: "5.2.0",
5169
+ version: "6.0.1",
4862
5170
  bindings: {
4863
5171
  angular: {
4864
5172
  importPath: "@uni-design-system/uni-angular",
4865
- selectorOrTag: "uni-symbol, Symbol",
5173
+ selectorOrTag: "uni-symbol",
4866
5174
  api: [
4867
5175
  {
4868
5176
  name: "name",
@@ -4910,10 +5218,12 @@ var uni_index_default = {
4910
5218
  }
4911
5219
  ],
4912
5220
  guidelines: {
4913
- whenToUse: "",
5221
+ whenToUse: "The Symbol Component integrates the latest [Material Symbols](https://fonts.google.com/icons?icon.platform=web&icon.style=Rounded&icon.set=Material+Symbols&query=les).\nMaterial Symbols consolidates over 3,275 glyphs (icons) in a single font file with a wide range of design variants.\nSymbols are available in three styles and four adjustable variable font styles (fill, weight, grade, and optical size).",
4914
5222
  dos: [],
4915
5223
  donts: [],
4916
- accessibility: []
5224
+ accessibility: [
5225
+ "Symbols are decorative (`aria-hidden`) \u2014 the parent control carries the accessible name."
5226
+ ]
4917
5227
  },
4918
5228
  relatedTokens: [
4919
5229
  "symbol.behavior.fill",
@@ -4929,11 +5239,11 @@ var uni_index_default = {
4929
5239
  summary: "",
4930
5240
  description: "",
4931
5241
  category: "components",
4932
- version: "5.2.0",
5242
+ version: "6.0.1",
4933
5243
  bindings: {
4934
5244
  angular: {
4935
5245
  importPath: "@uni-design-system/uni-angular",
4936
- selectorOrTag: "uni-tab, Tab",
5246
+ selectorOrTag: "uni-tab",
4937
5247
  api: [
4938
5248
  {
4939
5249
  name: "label",
@@ -4969,11 +5279,11 @@ var uni_index_default = {
4969
5279
  summary: "",
4970
5280
  description: "",
4971
5281
  category: "components",
4972
- version: "5.2.0",
5282
+ version: "6.0.1",
4973
5283
  bindings: {
4974
5284
  angular: {
4975
5285
  importPath: "@uni-design-system/uni-angular",
4976
- selectorOrTag: "uni-tabs, Tabs",
5286
+ selectorOrTag: "uni-tabs",
4977
5287
  api: [
4978
5288
  {
4979
5289
  name: "selectedIndex",
@@ -4990,19 +5300,29 @@ var uni_index_default = {
4990
5300
  {
4991
5301
  title: "Default",
4992
5302
  framework: "angular",
4993
- code: '<!-- Storybook story: Default -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <uni-text typeface="body-1-long">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </uni-text>\n</uni-tab>\n<uni-tab label="Activity">\n <uni-text typeface="body-1-long">Recent activity would render here.</uni-text>\n</uni-tab>\n<uni-tab label="Settings">\n <uni-text typeface="body-1-long">Settings content, instantiated on selection.</uni-text>\n</uni-tab>\n</uni-tabs>'
5303
+ code: '<!-- Storybook story: Default -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <span uni-text="body-1-long">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </span>\n</uni-tab>\n<uni-tab label="Activity">\n <span uni-text="body-1-long">Recent activity would render here.</span>\n</uni-tab>\n<uni-tab label="Settings">\n <span uni-text="body-1-long">Settings content, instantiated on selection.</span>\n</uni-tab>\n</uni-tabs>'
4994
5304
  },
4995
5305
  {
4996
5306
  title: "With Disabled Tab",
4997
5307
  framework: "angular",
4998
- code: '<!-- Storybook story: With Disabled Tab -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <uni-text typeface="body-1-long">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </uni-text>\n</uni-tab>\n<uni-tab label="Activity">\n <uni-text typeface="body-1-long">Recent activity would render here.</uni-text>\n</uni-tab>\n<uni-tab label="Settings">\n <uni-text typeface="body-1-long">Settings content, instantiated on selection.</uni-text>\n</uni-tab>\n</uni-tabs>'
5308
+ code: '<!-- Storybook story: With Disabled Tab -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <span uni-text="body-1-long">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </span>\n</uni-tab>\n<uni-tab label="Activity">\n <span uni-text="body-1-long">Recent activity would render here.</span>\n</uni-tab>\n<uni-tab label="Settings">\n <span uni-text="body-1-long">Settings content, instantiated on selection.</span>\n</uni-tab>\n</uni-tabs>'
4999
5309
  }
5000
5310
  ],
5001
5311
  guidelines: {
5002
- whenToUse: "",
5003
- dos: [],
5004
- donts: [],
5005
- accessibility: []
5312
+ whenToUse: "Tabs organize peer views behind a single switcher. Each `uni-tab` supplies a label and\nits panel content; only the selected panel is instantiated, so heavy tab content costs\nnothing until visited.\nThe default tokens render underline tabs; a theme that sets `borderRadius: 'max'` and\nan `activeColor` gets segmented pills without any component changes.",
5313
+ dos: [
5314
+ "Use for peer views of the same subject (details, activity, settings)",
5315
+ "Keep labels to one or two words"
5316
+ ],
5317
+ donts: [
5318
+ "Nest tabs inside tabs",
5319
+ "Use tabs for sequential steps \u2014 that is a stepper"
5320
+ ],
5321
+ accessibility: [
5322
+ "Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired",
5323
+ "Arrow keys move between tabs with selection following focus, wrapping at the ends;",
5324
+ "Roving tabindex: only the selected tab sits in the tab order; the panel itself is"
5325
+ ]
5006
5326
  },
5007
5327
  relatedTokens: [
5008
5328
  "tabs.behavior.typeface",
@@ -5023,11 +5343,11 @@ var uni_index_default = {
5023
5343
  summary: "",
5024
5344
  description: "",
5025
5345
  category: "data",
5026
- version: "5.2.0",
5346
+ version: "6.0.1",
5027
5347
  bindings: {
5028
5348
  angular: {
5029
5349
  importPath: "@uni-design-system/uni-angular",
5030
- selectorOrTag: "Tag, uni-tag",
5350
+ selectorOrTag: "uni-tag",
5031
5351
  api: [
5032
5352
  {
5033
5353
  name: "label",
@@ -5076,7 +5396,7 @@ var uni_index_default = {
5076
5396
  }
5077
5397
  ],
5078
5398
  guidelines: {
5079
- whenToUse: "",
5399
+ whenToUse: "Compact label for classifying content \u2014 categories, states, filters. Tags are\ndisplay-only chips that wear the active variant's colors; for removable,\ntype-to-add chips (a future input variant), see the roadmap.",
5080
5400
  dos: [],
5081
5401
  donts: [],
5082
5402
  accessibility: []
@@ -5090,19 +5410,27 @@ var uni_index_default = {
5090
5410
  summary: "",
5091
5411
  description: "",
5092
5412
  category: "primitives",
5093
- version: "5.2.0",
5413
+ version: "6.0.1",
5094
5414
  bindings: {
5095
5415
  angular: {
5096
5416
  importPath: "@uni-design-system/uni-angular",
5097
- selectorOrTag: "uni-text, Text",
5417
+ selectorOrTag: "[uni-text]",
5098
5418
  api: [
5419
+ {
5420
+ name: "uniText",
5421
+ kind: "input",
5422
+ type: "Typeface | ''",
5423
+ required: false,
5424
+ default: "'', { alias: 'uni-text' }",
5425
+ description: 'Typeface via the selector attribute: `uni-text="headline-large"`.'
5426
+ },
5099
5427
  {
5100
5428
  name: "typeface",
5101
5429
  kind: "input",
5102
- type: "Typeface",
5430
+ type: "Typeface | undefined",
5103
5431
  required: false,
5104
- default: "'title-small'",
5105
- description: ""
5432
+ default: "undefined",
5433
+ description: "Explicit typeface; the attribute value wins when both are set."
5106
5434
  },
5107
5435
  {
5108
5436
  name: "color",
@@ -5150,12 +5478,30 @@ var uni_index_default = {
5150
5478
  ]
5151
5479
  }
5152
5480
  },
5153
- examples: [],
5481
+ examples: [
5482
+ {
5483
+ title: "Value shorthand",
5484
+ framework: "angular",
5485
+ code: '<!-- Storybook story: Value shorthand -->\n<div stack-layout gap="sm">\n<span uni-text="display-small" display="block">Display small</span>\n<span uni-text="headline-medium" display="block">Headline medium</span>\n<span uni-text="body-1-long" display="block">\n Body copy set with uni-text="body-1-long" \u2014 the attribute value is the typeface.\n</span>\n<span uni-text="caption" color="on-background-variant" display="block">\n A caption in the muted ink.\n</span>\n</div>'
5486
+ },
5487
+ {
5488
+ title: "Element-aware defaults",
5489
+ framework: "angular",
5490
+ code: '<!-- Storybook story: Element-aware defaults -->\n<div stack-layout gap="sm">\n<span uni-text="display-small" display="block">Display small</span>\n<span uni-text="headline-medium" display="block">Headline medium</span>\n<span uni-text="body-1-long" display="block">\n Body copy set with uni-text="body-1-long" \u2014 the attribute value is the typeface.\n</span>\n<span uni-text="caption" color="on-background-variant" display="block">\n A caption in the muted ink.\n</span>\n</div>'
5491
+ }
5492
+ ],
5154
5493
  guidelines: {
5155
- whenToUse: "",
5156
- dos: [],
5157
- donts: [],
5158
- accessibility: []
5494
+ whenToUse: 'The typography primitive, applied as an **attribute on any element** so your HTML\nsemantics stay intact. The attribute value is the typeface \u2014\n`<h1 uni-text="display-small">` \u2014 and `[uni-text]="role()"` binds it dynamically.\nWith no value, the typeface is inferred from the host element (`h1` \u2192\n`headline-large`, `p` \u2192 `body-1-long`, `small` \u2192 `caption`, `blockquote` \u2192 `quote`,\nfalling back to `title-small`), so plain semantic markup is correctly set with zero\nconfiguration. `color` takes any theme color token; `align`, `nowrap`, `maxWidth`,\nand `ellipsis` handle common text layout.',
5495
+ dos: [
5496
+ "Reach for semantic elements first and let the element-aware defaults set the type"
5497
+ ],
5498
+ donts: [
5499
+ 'Use `span uni-text="headline-large"` where a real heading belongs'
5500
+ ],
5501
+ accessibility: [
5502
+ "Text never replaces your elements \u2014 headings stay `h1`\u2013`h6`, paragraphs stay `p`,",
5503
+ "Type is styling only: pick the element for meaning, the typeface for appearance"
5504
+ ]
5159
5505
  },
5160
5506
  relatedTokens: []
5161
5507
  },
@@ -5166,7 +5512,7 @@ var uni_index_default = {
5166
5512
  summary: "",
5167
5513
  description: "",
5168
5514
  category: "primitives",
5169
- version: "5.2.0",
5515
+ version: "6.0.1",
5170
5516
  bindings: {
5171
5517
  angular: {
5172
5518
  importPath: "@uni-design-system/uni-angular",
@@ -5276,10 +5622,13 @@ var uni_index_default = {
5276
5622
  }
5277
5623
  ],
5278
5624
  guidelines: {
5279
- whenToUse: "",
5625
+ whenToUse: "Multi-line text field with the same Signal Forms contract as Input \u2014 use it anywhere\nfree-form text runs past one line (comments, descriptions, feedback). It shares Input's\nthemed chrome (color, border, error state, focus outline, typeface) and adds\ntextarea-specific behavior from the theme's `textarea` options: default `rows` and the\nCSS `resize` mode. Bind it to a form with the `[field]` directive, or drive `[(value)]`\ndirectly.",
5280
5626
  dos: [],
5281
5627
  donts: [],
5282
- accessibility: []
5628
+ accessibility: [
5629
+ "`label` is required and becomes the accessible name (`aria-label`).",
5630
+ "Error state is exposed as `aria-invalid` once the field was touched or is dirty; wire your error text with `ariaDescribedBy`."
5631
+ ]
5283
5632
  },
5284
5633
  relatedTokens: [
5285
5634
  "textarea.behavior.rows",
@@ -5293,7 +5642,7 @@ var uni_index_default = {
5293
5642
  summary: "",
5294
5643
  description: "",
5295
5644
  category: "primitives",
5296
- version: "5.2.0",
5645
+ version: "6.0.1",
5297
5646
  bindings: {
5298
5647
  angular: {
5299
5648
  importPath: "@uni-design-system/uni-angular",
@@ -5323,11 +5672,11 @@ var uni_index_default = {
5323
5672
  summary: "",
5324
5673
  description: "",
5325
5674
  category: "forms",
5326
- version: "5.2.0",
5675
+ version: "6.0.1",
5327
5676
  bindings: {
5328
5677
  angular: {
5329
5678
  importPath: "@uni-design-system/uni-angular",
5330
- selectorOrTag: "uni-toggle, Toggle",
5679
+ selectorOrTag: "uni-toggle",
5331
5680
  api: [
5332
5681
  {
5333
5682
  name: "checked",
@@ -5427,13 +5776,23 @@ var uni_index_default = {
5427
5776
  }
5428
5777
  ],
5429
5778
  guidelines: {
5430
- whenToUse: "",
5431
- dos: [],
5432
- donts: [],
5433
- accessibility: []
5779
+ whenToUse: "A switch-style control for turning an option on or off with immediate effect \u2014\nprefer it over a checkbox when the change applies instantly (settings, feature\nswitches) rather than as part of a submitted form. It implements\n`FormCheckboxControl`, so it binds with the Signal Forms `[field]` directive or a\ndirect `[(checked)]` model.\nTrack, knob, and size resolve from the `toggle` theme options; the checked state\nwears the active `variant` color.",
5780
+ dos: [
5781
+ "Use for instant on/off effects (settings, feature switches)"
5782
+ ],
5783
+ donts: [
5784
+ "Use in submitted forms where nothing happens until save \u2014 that is a checkbox"
5785
+ ],
5786
+ accessibility: [
5787
+ 'Semantic `<input type="checkbox">` with `role="switch"`, properly associated with its label.',
5788
+ "Space toggles; focus indicators are provided for keyboard navigation.",
5789
+ "Screen readers announce the label and on/off state."
5790
+ ]
5434
5791
  },
5435
5792
  relatedTokens: [
5436
- "toggle.behavior.size"
5793
+ "toggle.behavior.size",
5794
+ "toggle.behavior.trackColor",
5795
+ "toggle.behavior.knobColor"
5437
5796
  ]
5438
5797
  },
5439
5798
  {
@@ -5443,11 +5802,11 @@ var uni_index_default = {
5443
5802
  summary: "",
5444
5803
  description: "",
5445
5804
  category: "feedback",
5446
- version: "5.2.0",
5805
+ version: "6.0.1",
5447
5806
  bindings: {
5448
5807
  angular: {
5449
5808
  importPath: "@uni-design-system/uni-angular",
5450
- selectorOrTag: "uni-tooltip, Tooltip",
5809
+ selectorOrTag: "uni-tooltip",
5451
5810
  api: [
5452
5811
  {
5453
5812
  name: "hoverDelay",
@@ -5495,14 +5854,18 @@ var uni_index_default = {
5495
5854
  {
5496
5855
  title: "Primary",
5497
5856
  framework: "angular",
5498
- code: "<!-- Storybook story: Primary -->\n<Text>Here is some text with a <Tooltip ${argsToTemplate(props)}>tooltip</Tooltip> in the middle.\n</Text>\n<!-- args:\n{\n label: 'Bottom-start tooltip',\n placement: 'bottom-start',\n inlineText: true,\n }\n-->"
5857
+ code: "<!-- Storybook story: Primary -->\n<span uni-text>Here is some text with a <uni-tooltip ${argsToTemplate(props)}>tooltip</uni-tooltip> in the middle.\n</span>\n<!-- args:\n{\n label: 'Bottom-start tooltip',\n placement: 'bottom-start',\n inlineText: true,\n }\n-->"
5499
5858
  }
5500
5859
  ],
5501
5860
  guidelines: {
5502
- whenToUse: "",
5861
+ whenToUse: "A tooltip is a brief, informative message that appears when a user interacts with an element.\nIf using a tooltip within a body of text, set the `inlineText` option to `true`.",
5503
5862
  dos: [],
5504
5863
  donts: [],
5505
- accessibility: []
5864
+ accessibility: [
5865
+ '`role="tooltip"` linked to the trigger via `aria-describedby` (wired once \u2014 the bubble is always in the DOM).',
5866
+ "Shows on keyboard focus, hides on blur and Escape; stays open while hovered (WCAG 1.4.13).",
5867
+ 'Non-focusable triggers get `tabindex="0"` so keyboard users can reach the tooltip.'
5868
+ ]
5506
5869
  },
5507
5870
  relatedTokens: [
5508
5871
  "tooltip.behavior.borderRadius",
@@ -5518,11 +5881,11 @@ var uni_index_default = {
5518
5881
  summary: "",
5519
5882
  description: "",
5520
5883
  category: "layout",
5521
- version: "5.2.0",
5884
+ version: "6.0.1",
5522
5885
  bindings: {
5523
5886
  angular: {
5524
5887
  importPath: "@uni-design-system/uni-angular",
5525
- selectorOrTag: "div[uni-wrap-layout], Wrap, div[wrap-layout]",
5888
+ selectorOrTag: "[uni-wrap-layout], [wrap-layout]",
5526
5889
  api: [
5527
5890
  {
5528
5891
  name: "display",
@@ -5551,7 +5914,7 @@ var uni_index_default = {
5551
5914
  }
5552
5915
  ],
5553
5916
  guidelines: {
5554
- whenToUse: "",
5917
+ whenToUse: "Used to add space between elements and wraps automatically if there isn't enough space.",
5555
5918
  dos: [],
5556
5919
  donts: [],
5557
5920
  accessibility: []
@@ -6979,6 +7342,17 @@ var uni_index_default = {
6979
7342
  DarkTheme: '{"fontFamily":"Red Hat Display","fontSize":16,"lineHeight":24}'
6980
7343
  }
6981
7344
  },
7345
+ {
7346
+ id: "typography.stat",
7347
+ value: '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
7348
+ type: "typography",
7349
+ kind: "style",
7350
+ target: "emotion-css",
7351
+ themeValues: {
7352
+ LightTheme: '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
7353
+ DarkTheme: '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}'
7354
+ }
7355
+ },
6982
7356
  {
6983
7357
  id: "typography.tag",
6984
7358
  value: '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
@@ -7325,6 +7699,78 @@ var uni_index_default = {
7325
7699
  DarkTheme: 2
7326
7700
  }
7327
7701
  },
7702
+ {
7703
+ id: "searchInput.behavior.searchSymbol",
7704
+ value: "search",
7705
+ type: "string",
7706
+ kind: "behavioral",
7707
+ target: "component-prop",
7708
+ appliesTo: "searchInput",
7709
+ themeValues: {
7710
+ LightTheme: "search",
7711
+ DarkTheme: "search"
7712
+ }
7713
+ },
7714
+ {
7715
+ id: "searchInput.behavior.clearSymbol",
7716
+ value: "close",
7717
+ type: "string",
7718
+ kind: "behavioral",
7719
+ target: "component-prop",
7720
+ appliesTo: "searchInput",
7721
+ themeValues: {
7722
+ LightTheme: "close",
7723
+ DarkTheme: "close"
7724
+ }
7725
+ },
7726
+ {
7727
+ id: "searchInput.behavior.listColor",
7728
+ value: "primary-surface",
7729
+ type: "string",
7730
+ kind: "behavioral",
7731
+ target: "component-prop",
7732
+ appliesTo: "searchInput",
7733
+ themeValues: {
7734
+ LightTheme: "primary-surface",
7735
+ DarkTheme: "primary-surface"
7736
+ }
7737
+ },
7738
+ {
7739
+ id: "searchInput.behavior.listShadow",
7740
+ value: "menu",
7741
+ type: "string",
7742
+ kind: "behavioral",
7743
+ target: "component-prop",
7744
+ appliesTo: "searchInput",
7745
+ themeValues: {
7746
+ LightTheme: "menu",
7747
+ DarkTheme: "menu"
7748
+ }
7749
+ },
7750
+ {
7751
+ id: "searchInput.behavior.listBorderRadius",
7752
+ value: "xs",
7753
+ type: "string",
7754
+ kind: "behavioral",
7755
+ target: "component-prop",
7756
+ appliesTo: "searchInput",
7757
+ themeValues: {
7758
+ LightTheme: "xs",
7759
+ DarkTheme: "xs"
7760
+ }
7761
+ },
7762
+ {
7763
+ id: "searchInput.behavior.maxSuggestions",
7764
+ value: 8,
7765
+ type: "number",
7766
+ kind: "behavioral",
7767
+ target: "component-prop",
7768
+ appliesTo: "searchInput",
7769
+ themeValues: {
7770
+ LightTheme: 8,
7771
+ DarkTheme: 8
7772
+ }
7773
+ },
7328
7774
  {
7329
7775
  id: "checkbox.behavior.size",
7330
7776
  value: 20,
@@ -7337,6 +7783,54 @@ var uni_index_default = {
7337
7783
  DarkTheme: 20
7338
7784
  }
7339
7785
  },
7786
+ {
7787
+ id: "checkbox.behavior.boxColor",
7788
+ value: "surface",
7789
+ type: "string",
7790
+ kind: "behavioral",
7791
+ target: "component-prop",
7792
+ appliesTo: "checkbox",
7793
+ themeValues: {
7794
+ LightTheme: "surface",
7795
+ DarkTheme: "surface"
7796
+ }
7797
+ },
7798
+ {
7799
+ id: "radio.behavior.size",
7800
+ value: 20,
7801
+ type: "number",
7802
+ kind: "behavioral",
7803
+ target: "component-prop",
7804
+ appliesTo: "radio",
7805
+ themeValues: {
7806
+ LightTheme: 20,
7807
+ DarkTheme: 20
7808
+ }
7809
+ },
7810
+ {
7811
+ id: "radio.behavior.ringColor",
7812
+ value: "outline",
7813
+ type: "string",
7814
+ kind: "behavioral",
7815
+ target: "component-prop",
7816
+ appliesTo: "radio",
7817
+ themeValues: {
7818
+ LightTheme: "outline",
7819
+ DarkTheme: "outline"
7820
+ }
7821
+ },
7822
+ {
7823
+ id: "radio.behavior.fillColor",
7824
+ value: "surface",
7825
+ type: "string",
7826
+ kind: "behavioral",
7827
+ target: "component-prop",
7828
+ appliesTo: "radio",
7829
+ themeValues: {
7830
+ LightTheme: "surface",
7831
+ DarkTheme: "surface"
7832
+ }
7833
+ },
7340
7834
  {
7341
7835
  id: "dialog.behavior.borderRadius",
7342
7836
  value: "lg",
@@ -8417,6 +8911,138 @@ var uni_index_default = {
8417
8911
  DarkTheme: "xs"
8418
8912
  }
8419
8913
  },
8914
+ {
8915
+ id: "stat.behavior.labelTypeface",
8916
+ value: "label",
8917
+ type: "string",
8918
+ kind: "behavioral",
8919
+ target: "component-prop",
8920
+ appliesTo: "stat",
8921
+ themeValues: {
8922
+ LightTheme: "label",
8923
+ DarkTheme: "label"
8924
+ }
8925
+ },
8926
+ {
8927
+ id: "stat.behavior.valueTypeface",
8928
+ value: "stat",
8929
+ type: "string",
8930
+ kind: "behavioral",
8931
+ target: "component-prop",
8932
+ appliesTo: "stat",
8933
+ themeValues: {
8934
+ LightTheme: "stat",
8935
+ DarkTheme: "stat"
8936
+ }
8937
+ },
8938
+ {
8939
+ id: "stat.behavior.color",
8940
+ value: "surface",
8941
+ type: "string",
8942
+ kind: "behavioral",
8943
+ target: "component-prop",
8944
+ appliesTo: "stat",
8945
+ themeValues: {
8946
+ LightTheme: "surface",
8947
+ DarkTheme: "surface"
8948
+ }
8949
+ },
8950
+ {
8951
+ id: "stat.behavior.border",
8952
+ value: "light",
8953
+ type: "string",
8954
+ kind: "behavioral",
8955
+ target: "component-prop",
8956
+ appliesTo: "stat",
8957
+ themeValues: {
8958
+ LightTheme: "light",
8959
+ DarkTheme: "light"
8960
+ }
8961
+ },
8962
+ {
8963
+ id: "stat.behavior.borderRadius",
8964
+ value: "xs",
8965
+ type: "string",
8966
+ kind: "behavioral",
8967
+ target: "component-prop",
8968
+ appliesTo: "stat",
8969
+ themeValues: {
8970
+ LightTheme: "xs",
8971
+ DarkTheme: "xs"
8972
+ }
8973
+ },
8974
+ {
8975
+ id: "stat.behavior.positiveColor",
8976
+ value: "success",
8977
+ type: "string",
8978
+ kind: "behavioral",
8979
+ target: "component-prop",
8980
+ appliesTo: "stat",
8981
+ themeValues: {
8982
+ LightTheme: "success",
8983
+ DarkTheme: "success"
8984
+ }
8985
+ },
8986
+ {
8987
+ id: "stat.behavior.negativeColor",
8988
+ value: "error",
8989
+ type: "string",
8990
+ kind: "behavioral",
8991
+ target: "component-prop",
8992
+ appliesTo: "stat",
8993
+ themeValues: {
8994
+ LightTheme: "error",
8995
+ DarkTheme: "error"
8996
+ }
8997
+ },
8998
+ {
8999
+ id: "stat.behavior.trendColor",
9000
+ value: "outline",
9001
+ type: "string",
9002
+ kind: "behavioral",
9003
+ target: "component-prop",
9004
+ appliesTo: "stat",
9005
+ themeValues: {
9006
+ LightTheme: "outline",
9007
+ DarkTheme: "outline"
9008
+ }
9009
+ },
9010
+ {
9011
+ id: "stat.behavior.trendAccent",
9012
+ value: "primary",
9013
+ type: "string",
9014
+ kind: "behavioral",
9015
+ target: "component-prop",
9016
+ appliesTo: "stat",
9017
+ themeValues: {
9018
+ LightTheme: "primary",
9019
+ DarkTheme: "primary"
9020
+ }
9021
+ },
9022
+ {
9023
+ id: "stat.behavior.padding",
9024
+ value: "md",
9025
+ type: "string",
9026
+ kind: "behavioral",
9027
+ target: "component-prop",
9028
+ appliesTo: "stat",
9029
+ themeValues: {
9030
+ LightTheme: "md",
9031
+ DarkTheme: "md"
9032
+ }
9033
+ },
9034
+ {
9035
+ id: "stat.behavior.gap",
9036
+ value: "xxs",
9037
+ type: "string",
9038
+ kind: "behavioral",
9039
+ target: "component-prop",
9040
+ appliesTo: "stat",
9041
+ themeValues: {
9042
+ LightTheme: "xxs",
9043
+ DarkTheme: "xxs"
9044
+ }
9045
+ },
8420
9046
  {
8421
9047
  id: "slider.behavior.color",
8422
9048
  value: "primary",
@@ -8645,6 +9271,30 @@ var uni_index_default = {
8645
9271
  DarkTheme: 20
8646
9272
  }
8647
9273
  },
9274
+ {
9275
+ id: "toggle.behavior.trackColor",
9276
+ value: "surface-variant",
9277
+ type: "string",
9278
+ kind: "behavioral",
9279
+ target: "component-prop",
9280
+ appliesTo: "toggle",
9281
+ themeValues: {
9282
+ LightTheme: "surface-variant",
9283
+ DarkTheme: "surface-variant"
9284
+ }
9285
+ },
9286
+ {
9287
+ id: "toggle.behavior.knobColor",
9288
+ value: "surface",
9289
+ type: "string",
9290
+ kind: "behavioral",
9291
+ target: "component-prop",
9292
+ appliesTo: "toggle",
9293
+ themeValues: {
9294
+ LightTheme: "surface",
9295
+ DarkTheme: "surface"
9296
+ }
9297
+ },
8648
9298
  {
8649
9299
  id: "tooltip.behavior.borderRadius",
8650
9300
  value: "xs",
@@ -8829,6 +9479,7 @@ var uni_index_default = {
8829
9479
  "typography.quote": '{"fontFamily":"Roboto","fontSize":16,"lineHeight":24}',
8830
9480
  "typography.note": '{"fontFamily":"Roboto","fontSize":14,"lineHeight":22,"fontStyle":"italic"}',
8831
9481
  "typography.badge": '{"fontFamily":"Red Hat Display","fontSize":16,"lineHeight":24}',
9482
+ "typography.stat": '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
8832
9483
  "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
8833
9484
  "typography.input": '{"fontFamily":"Red Hat Display","fontSize":14,"lineHeight":24}'
8834
9485
  },
@@ -8872,8 +9523,22 @@ var uni_index_default = {
8872
9523
  ringColor: "surface",
8873
9524
  ringWidth: 2
8874
9525
  },
9526
+ searchInput: {
9527
+ searchSymbol: "search",
9528
+ clearSymbol: "close",
9529
+ listColor: "primary-surface",
9530
+ listShadow: "menu",
9531
+ listBorderRadius: "xs",
9532
+ maxSuggestions: 8
9533
+ },
8875
9534
  checkbox: {
8876
- size: 20
9535
+ size: 20,
9536
+ boxColor: "surface"
9537
+ },
9538
+ radio: {
9539
+ size: 20,
9540
+ ringColor: "outline",
9541
+ fillColor: "surface"
8877
9542
  },
8878
9543
  dialog: {
8879
9544
  borderRadius: "lg",
@@ -8997,6 +9662,19 @@ var uni_index_default = {
8997
9662
  currentPageBorder: "light",
8998
9663
  currentPageBorderRadius: "xs"
8999
9664
  },
9665
+ stat: {
9666
+ labelTypeface: "label",
9667
+ valueTypeface: "stat",
9668
+ color: "surface",
9669
+ border: "light",
9670
+ borderRadius: "xs",
9671
+ positiveColor: "success",
9672
+ negativeColor: "error",
9673
+ trendColor: "outline",
9674
+ trendAccent: "primary",
9675
+ padding: "md",
9676
+ gap: "xxs"
9677
+ },
9000
9678
  slider: {
9001
9679
  color: "primary",
9002
9680
  trackColor: "surface-variant",
@@ -9024,7 +9702,9 @@ var uni_index_default = {
9024
9702
  opticalSize: 24
9025
9703
  },
9026
9704
  toggle: {
9027
- size: 20
9705
+ size: 20,
9706
+ trackColor: "surface-variant",
9707
+ knobColor: "surface"
9028
9708
  },
9029
9709
  tooltip: {
9030
9710
  borderRadius: "xs",
@@ -9169,6 +9849,7 @@ var uni_index_default = {
9169
9849
  "typography.quote": '{"fontFamily":"Roboto","fontSize":16,"lineHeight":24}',
9170
9850
  "typography.note": '{"fontFamily":"Roboto","fontSize":14,"lineHeight":22,"fontStyle":"italic"}',
9171
9851
  "typography.badge": '{"fontFamily":"Red Hat Display","fontSize":16,"lineHeight":24}',
9852
+ "typography.stat": '{"fontFamily":"Red Hat Display","fontSize":32,"lineHeight":38,"fontWeight":600,"letterSpacing":-0.32}',
9172
9853
  "typography.tag": '{"fontFamily":"Red Hat Display","fontSize":15,"lineHeight":20,"fontWeight":600}',
9173
9854
  "typography.input": '{"fontFamily":"Red Hat Display","fontSize":14,"lineHeight":24}'
9174
9855
  },
@@ -9212,8 +9893,22 @@ var uni_index_default = {
9212
9893
  ringColor: "surface",
9213
9894
  ringWidth: 2
9214
9895
  },
9896
+ searchInput: {
9897
+ searchSymbol: "search",
9898
+ clearSymbol: "close",
9899
+ listColor: "primary-surface",
9900
+ listShadow: "menu",
9901
+ listBorderRadius: "xs",
9902
+ maxSuggestions: 8
9903
+ },
9215
9904
  checkbox: {
9216
- size: 20
9905
+ size: 20,
9906
+ boxColor: "surface"
9907
+ },
9908
+ radio: {
9909
+ size: 20,
9910
+ ringColor: "outline",
9911
+ fillColor: "surface"
9217
9912
  },
9218
9913
  dialog: {
9219
9914
  borderRadius: "lg",
@@ -9337,6 +10032,19 @@ var uni_index_default = {
9337
10032
  currentPageBorder: "light",
9338
10033
  currentPageBorderRadius: "xs"
9339
10034
  },
10035
+ stat: {
10036
+ labelTypeface: "label",
10037
+ valueTypeface: "stat",
10038
+ color: "surface",
10039
+ border: "light",
10040
+ borderRadius: "xs",
10041
+ positiveColor: "success",
10042
+ negativeColor: "error",
10043
+ trendColor: "outline",
10044
+ trendAccent: "primary",
10045
+ padding: "md",
10046
+ gap: "xxs"
10047
+ },
9340
10048
  slider: {
9341
10049
  color: "primary",
9342
10050
  trackColor: "surface-variant",
@@ -9364,7 +10072,9 @@ var uni_index_default = {
9364
10072
  opticalSize: 24
9365
10073
  },
9366
10074
  toggle: {
9367
- size: 20
10075
+ size: 20,
10076
+ trackColor: "surface-variant",
10077
+ knobColor: "surface"
9368
10078
  },
9369
10079
  tooltip: {
9370
10080
  borderRadius: "xs",
@@ -10101,6 +10811,19 @@ var generateShadows = (colors, mode = "light") => {
10101
10811
  warn: `0 0 5px ${rgba(error, 0.5)}, inset 0 0 5px ${rgba(error, 0.3)}`
10102
10812
  };
10103
10813
  };
10814
+ var BaseIcons = {
10815
+ alertCircle: "data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath d='M0 0h24v24H0V0z' fill='none'/%3e%3cpath d='M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'/%3e%3c/svg%3e",
10816
+ calendar: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z'%3E%3C/path%3E%3C/svg%3E",
10817
+ checkCircle: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg%3E%3Cpath d='M32,0A32,32,0,1,0,64,32,32,32,0,0,0,32,0Zm2.0873,41.5-5.4107,5.4106-.02.02L14.1751,32.4492l5.4306-5.4306,9.051,9.0509L46.2861,18.44l5.4305,5.4306Z'/%3E%3C/g%3E%3C/svg%3E",
10818
+ chevronUp: "data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3E%3Cpath d='m296-345-56-56 240-240 240 240-56 56-184-184-184 184Z'/%3E%3C/svg%3E",
10819
+ chevronDown: "data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3E%3Cpath d='M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z'/%3E%3C/svg%3E",
10820
+ chevronLeft: "data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3E%3Cpath d='M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z'/%3E%3C/svg%3E",
10821
+ chevronRight: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3E%3Cpath d='M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z'/%3E%3C/svg%3E",
10822
+ xCircle: "data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3e%3cg%3e%3cpath d='M32,0A32,32,0,1,0,64,32,32,32,0,0,0,32,0ZM47.4649,42.3543l-5.4306,5.43L31.68,37.4305,21.3257,47.7848l-5.4306-5.43L26.25,32,15.8951,21.6456l5.4306-5.4305L31.68,26.5694,42.0343,16.2151l5.4306,5.4305L37.1106,32Z'/%3e%3c/g%3e%3c/svg%3e",
10823
+ search: "data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 50'%3e%3cg%3e%3cpath d='M 21 3 C 11.601563 3 4 10.601563 4 20 C 4 29.398438 11.601563 37 21 37 C 24.355469 37 27.460938 36.015625 30.09375 34.34375 L 42.375 46.625 L 46.625 42.375 L 34.5 30.28125 C 36.679688 27.421875 38 23.878906 38 20 C 38 10.601563 30.398438 3 21 3 Z M 21 7 C 28.199219 7 34 12.800781 34 20 C 34 27.199219 28.199219 33 21 33 C 13.800781 33 8 27.199219 8 20 C 8 12.800781 13.800781 7 21 7 Z'%3e%3c/path%3e%3c/g%3e%3c/svg%3e",
10824
+ close: "data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cg%3e%3cpath fill='currentColor' d='M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z'%3e%3c/path%3e%3c/g%3e%3c/svg%3e",
10825
+ spinner: "data:image/svg+xml;charset=UTF-8,%3csvg stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3e%3cstyle%3e .oui_spinner %7b transform-origin: center; animation: rotate_360 2s linear infinite;%7d .oui_spinner circle %7b stroke-linecap: round; animation: dash 1.5s ease-in-out infinite;%7d %40keyframes rotate_360 %7b 100%25 %7b transform: rotate(360deg);%7d %7d %40keyframes dash %7b 0%25 %7b stroke-dasharray: 0 150; stroke-dashoffset: 0;%7d 47.5%25 %7b stroke-dasharray: 42 150; stroke-dashoffset: -16;%7d 95%25, 100%25 %7b stroke-dasharray: 42 150; stroke-dashoffset: -59;%7d %7d %3c/style%3e%3cg class='oui_spinner'%3e%3ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3e%3c/circle%3e%3c/g%3e%3c/svg%3e "
10826
+ };
10104
10827
  var BaseTypography = {
10105
10828
  "display-large": {
10106
10829
  fontFamily: "Red Hat Display",
@@ -10238,6 +10961,13 @@ var BaseTypography = {
10238
10961
  fontSize: 16,
10239
10962
  lineHeight: 24
10240
10963
  },
10964
+ stat: {
10965
+ fontFamily: "Red Hat Display",
10966
+ fontSize: 32,
10967
+ lineHeight: 38,
10968
+ fontWeight: 600,
10969
+ letterSpacing: -0.32
10970
+ },
10241
10971
  tag: {
10242
10972
  fontFamily: "Red Hat Display",
10243
10973
  fontSize: 15,
@@ -10381,7 +11111,23 @@ var buildComponents = (c) => ({
10381
11111
  ringColor: "surface",
10382
11112
  ringWidth: 2
10383
11113
  } },
10384
- checkbox: { options: { size: 20 } },
11114
+ searchInput: { options: {
11115
+ searchSymbol: "search",
11116
+ clearSymbol: "close",
11117
+ listColor: "primary-surface",
11118
+ listShadow: "menu",
11119
+ listBorderRadius: "xs",
11120
+ maxSuggestions: 8
11121
+ } },
11122
+ checkbox: { options: {
11123
+ size: 20,
11124
+ boxColor: "surface"
11125
+ } },
11126
+ radio: { options: {
11127
+ size: 20,
11128
+ ringColor: "outline",
11129
+ fillColor: "surface"
11130
+ } },
10385
11131
  dialog: { options: {
10386
11132
  borderRadius: "lg",
10387
11133
  color: "primary-surface",
@@ -10706,6 +11452,19 @@ var buildComponents = (c) => ({
10706
11452
  currentPageBorder: "light",
10707
11453
  currentPageBorderRadius: "xs"
10708
11454
  } },
11455
+ stat: { options: {
11456
+ labelTypeface: "label",
11457
+ valueTypeface: "stat",
11458
+ color: "surface",
11459
+ border: "light",
11460
+ borderRadius: "xs",
11461
+ positiveColor: "success",
11462
+ negativeColor: "error",
11463
+ trendColor: "outline",
11464
+ trendAccent: "primary",
11465
+ padding: "md",
11466
+ gap: "xxs"
11467
+ } },
10709
11468
  slider: { options: {
10710
11469
  color: "primary",
10711
11470
  trackColor: "surface-variant",
@@ -10732,7 +11491,11 @@ var buildComponents = (c) => ({
10732
11491
  grade: 0,
10733
11492
  opticalSize: 24
10734
11493
  } },
10735
- toggle: { options: { size: 20 } },
11494
+ toggle: { options: {
11495
+ size: 20,
11496
+ trackColor: "surface-variant",
11497
+ knobColor: "surface"
11498
+ } },
10736
11499
  tooltip: { options: {
10737
11500
  border: void 0,
10738
11501
  borderRadius: "xs",
@@ -10758,7 +11521,10 @@ var createTheme = ({ id, name, colors, icons = {}, radii = BaseRadii, shadows =
10758
11521
  shadows,
10759
11522
  spacing: BaseSpacing,
10760
11523
  thicknesses: BaseThicknesses,
10761
- icons,
11524
+ icons: {
11525
+ ...BaseIcons,
11526
+ ...icons
11527
+ },
10762
11528
  components: deepMerge(buildComponents(colors), components)
10763
11529
  });
10764
11530
  var BASE_PALETTE_CONFIG = {
@@ -10900,6 +11666,7 @@ var themeExport = (exportName, displayName, colorsConst, shadowsConst, radii) =>
10900
11666
  ` borders: borders(${colorsConst}),`,
10901
11667
  ` components: components(${colorsConst}),`,
10902
11668
  ` shadows: ${shadowsConst},`,
11669
+ " icons,",
10903
11670
  ...radii ? [" radii,"] : [],
10904
11671
  "});"
10905
11672
  ].join("\n");
@@ -10945,6 +11712,7 @@ var emitThemeFile = (input) => {
10945
11712
  " type Borders,",
10946
11713
  " type Colors,",
10947
11714
  " type ComponentThemes,",
11715
+ " type Icons,",
10948
11716
  " type Shadows,",
10949
11717
  " type UniTheme,",
10950
11718
  "} from '@uni-design-system/uni-core';",
@@ -10968,6 +11736,15 @@ ${recordLiteral(shadows, " ")}
10968
11736
  " */",
10969
11737
  "const components = (colors: Colors): ComponentThemes => ({});",
10970
11738
  "",
11739
+ "/**",
11740
+ " * Icon primitives, merged over the built-in set (close, search, spinner,",
11741
+ " * chevrons, \u2026). Define an icon ONCE here as an inline SVG data URI \u2014 it is",
11742
+ " * masked with currentColor, so it recolors with the theme \u2014 and render it",
11743
+ " * anywhere via `<uni-icon name='\u2026'/>`. Never inline SVG in components.",
11744
+ ` * Example: logo: "data:image/svg+xml,%3Csvg xmlns='\u2026' viewBox='0 0 24 24'%3E\u2026%3C/svg%3E",`,
11745
+ " */",
11746
+ "const icons: Icons = {};",
11747
+ "",
10971
11748
  ...radii ? [
10972
11749
  `/** Shape language: '${input.shape}'. */`,
10973
11750
  `const radii = {
@@ -11139,6 +11916,10 @@ ${failing.map((f) => `- ${f.mode} \`${f.foreground}\` on \`${f.background}\`: ${
11139
11916
  "- **Components**: the `components` function returns sparse overrides deep-merged over",
11140
11917
  " Uni defaults \u2014 set only what you change, e.g.",
11141
11918
  " `button: { variants: { secondary: { border: borders(colors)['brush-stroke'] } } }`.",
11919
+ "- **Icons**: never inline SVG in components. Define an icon ONCE in the theme file's",
11920
+ " `icons` map as an inline SVG data URI \u2014 it is masked with `currentColor`, so it",
11921
+ " recolors with the theme \u2014 then render it anywhere with `<uni-icon name='\u2026'/>`.",
11922
+ " A built-in set (close, search, spinner, chevrons, \u2026) ships with every theme.",
11142
11923
  "- Never hardcode hex values in application components: style through `ThemeService`",
11143
11924
  " accessors and semantic token names so themes stay swappable."
11144
11925
  ].join("\n");
@@ -11348,4 +12129,4 @@ export {
11348
12129
  meta,
11349
12130
  createUniServer
11350
12131
  };
11351
- //# sourceMappingURL=chunk-E34OHB3Z.js.map
12132
+ //# sourceMappingURL=chunk-WCJS2FYS.js.map