@uni-design-system/uni-mcp 4.2.0 → 4.4.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: "6.0.0",
11
- builtAt: "2026-07-24T13:32:56.708Z",
10
+ version: "7.0.0",
11
+ builtAt: "2026-07-29T15:41:45.453Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 70,
17
- tokens: 296,
16
+ components: 71,
17
+ tokens: 305,
18
18
  themes: 2,
19
- examples: 132
19
+ examples: 133
20
20
  }
21
21
  },
22
22
  components: [
@@ -27,7 +27,7 @@ var uni_index_default = {
27
27
  summary: "",
28
28
  description: "",
29
29
  category: "feedback",
30
- version: "6.0.0",
30
+ version: "7.0.0",
31
31
  bindings: {
32
32
  angular: {
33
33
  importPath: "@uni-design-system/uni-angular",
@@ -82,7 +82,7 @@ var uni_index_default = {
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,7 +101,7 @@ var uni_index_default = {
101
101
  summary: "",
102
102
  description: "",
103
103
  category: "components",
104
- version: "6.0.0",
104
+ version: "7.0.0",
105
105
  bindings: {
106
106
  angular: {
107
107
  importPath: "@uni-design-system/uni-angular",
@@ -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,7 +158,7 @@ var uni_index_default = {
155
158
  summary: "",
156
159
  description: "",
157
160
  category: "components",
158
- version: "6.0.0",
161
+ version: "7.0.0",
159
162
  bindings: {
160
163
  angular: {
161
164
  importPath: "@uni-design-system/uni-angular",
@@ -213,10 +216,13 @@ var uni_index_default = {
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,7 +237,7 @@ var uni_index_default = {
231
237
  summary: "",
232
238
  description: "",
233
239
  category: "components",
234
- version: "6.0.0",
240
+ version: "7.0.0",
235
241
  bindings: {
236
242
  angular: {
237
243
  importPath: "@uni-design-system/uni-angular",
@@ -264,7 +270,7 @@ var uni_index_default = {
264
270
  summary: "",
265
271
  description: "",
266
272
  category: "primitives",
267
- version: "6.0.0",
273
+ version: "7.0.0",
268
274
  bindings: {
269
275
  angular: {
270
276
  importPath: "@uni-design-system/uni-angular",
@@ -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,7 +351,7 @@ var uni_index_default = {
341
351
  summary: "",
342
352
  description: "",
343
353
  category: "feedback",
344
- version: "6.0.0",
354
+ version: "7.0.0",
345
355
  bindings: {
346
356
  angular: {
347
357
  importPath: "@uni-design-system/uni-angular",
@@ -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: "6.0.0",
435
+ version: "7.0.0",
426
436
  bindings: {
427
437
  angular: {
428
438
  importPath: "@uni-design-system/uni-angular",
@@ -446,7 +456,7 @@ var uni_index_default = {
446
456
  summary: "",
447
457
  description: "",
448
458
  category: "layout",
449
- version: "6.0.0",
459
+ version: "7.0.0",
450
460
  bindings: {
451
461
  angular: {
452
462
  importPath: "@uni-design-system/uni-angular",
@@ -795,7 +805,7 @@ var uni_index_default = {
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,7 +819,7 @@ var uni_index_default = {
809
819
  summary: "",
810
820
  description: "",
811
821
  category: "components",
812
- version: "6.0.0",
822
+ version: "7.0.0",
813
823
  bindings: {
814
824
  angular: {
815
825
  importPath: "@uni-design-system/uni-angular",
@@ -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,7 +888,7 @@ var uni_index_default = {
873
888
  summary: "",
874
889
  description: "",
875
890
  category: "primitives",
876
- version: "6.0.0",
891
+ version: "7.0.0",
877
892
  bindings: {
878
893
  angular: {
879
894
  importPath: "@uni-design-system/uni-angular",
@@ -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,7 +1031,7 @@ var uni_index_default = {
1013
1031
  summary: "",
1014
1032
  description: "",
1015
1033
  category: "primitives",
1016
- version: "6.0.0",
1034
+ version: "7.0.0",
1017
1035
  bindings: {
1018
1036
  angular: {
1019
1037
  importPath: "@uni-design-system/uni-angular",
@@ -1029,10 +1047,12 @@ var uni_index_default = {
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,7 +1063,7 @@ var uni_index_default = {
1043
1063
  summary: "",
1044
1064
  description: "",
1045
1065
  category: "layout",
1046
- version: "6.0.0",
1066
+ version: "7.0.0",
1047
1067
  bindings: {
1048
1068
  angular: {
1049
1069
  importPath: "@uni-design-system/uni-angular",
@@ -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,7 +1108,7 @@ var uni_index_default = {
1088
1108
  summary: "",
1089
1109
  description: "",
1090
1110
  category: "layout",
1091
- version: "6.0.0",
1111
+ version: "7.0.0",
1092
1112
  bindings: {
1093
1113
  angular: {
1094
1114
  importPath: "@uni-design-system/uni-angular",
@@ -1112,7 +1132,7 @@ var uni_index_default = {
1112
1132
  summary: "",
1113
1133
  description: "",
1114
1134
  category: "layout",
1115
- version: "6.0.0",
1135
+ version: "7.0.0",
1116
1136
  bindings: {
1117
1137
  angular: {
1118
1138
  importPath: "@uni-design-system/uni-angular",
@@ -1153,7 +1173,7 @@ var uni_index_default = {
1153
1173
  summary: "",
1154
1174
  description: "",
1155
1175
  category: "layout",
1156
- version: "6.0.0",
1176
+ version: "7.0.0",
1157
1177
  bindings: {
1158
1178
  angular: {
1159
1179
  importPath: "@uni-design-system/uni-angular",
@@ -1194,7 +1214,7 @@ var uni_index_default = {
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,7 +1228,7 @@ var uni_index_default = {
1208
1228
  summary: "",
1209
1229
  description: "",
1210
1230
  category: "forms",
1211
- version: "6.0.0",
1231
+ version: "7.0.0",
1212
1232
  bindings: {
1213
1233
  angular: {
1214
1234
  importPath: "@uni-design-system/uni-angular",
@@ -1320,10 +1340,18 @@ 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
1357
  "checkbox.behavior.size",
@@ -1337,7 +1365,7 @@ var uni_index_default = {
1337
1365
  summary: "",
1338
1366
  description: "",
1339
1367
  category: "feedback",
1340
- version: "6.0.0",
1368
+ version: "7.0.0",
1341
1369
  bindings: {
1342
1370
  angular: {
1343
1371
  importPath: "@uni-design-system/uni-angular",
@@ -1384,7 +1412,7 @@ var uni_index_default = {
1384
1412
  summary: "",
1385
1413
  description: "",
1386
1414
  category: "forms",
1387
- version: "6.0.0",
1415
+ version: "7.0.0",
1388
1416
  bindings: {
1389
1417
  angular: {
1390
1418
  importPath: "@uni-design-system/uni-angular",
@@ -1453,7 +1481,7 @@ var uni_index_default = {
1453
1481
  }
1454
1482
  ],
1455
1483
  guidelines: {
1456
- 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.',
1457
1485
  dos: [],
1458
1486
  donts: [],
1459
1487
  accessibility: []
@@ -1467,7 +1495,7 @@ var uni_index_default = {
1467
1495
  summary: "",
1468
1496
  description: "",
1469
1497
  category: "data",
1470
- version: "6.0.0",
1498
+ version: "7.0.0",
1471
1499
  bindings: {
1472
1500
  angular: {
1473
1501
  importPath: "@uni-design-system/uni-angular",
@@ -1550,10 +1578,14 @@ var uni_index_default = {
1550
1578
  }
1551
1579
  ],
1552
1580
  guidelines: {
1553
- 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.",
1554
1582
  dos: [],
1555
1583
  donts: [],
1556
- 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
+ ]
1557
1589
  },
1558
1590
  relatedTokens: []
1559
1591
  },
@@ -1564,7 +1596,7 @@ var uni_index_default = {
1564
1596
  summary: "",
1565
1597
  description: "",
1566
1598
  category: "forms",
1567
- version: "6.0.0",
1599
+ version: "7.0.0",
1568
1600
  bindings: {
1569
1601
  angular: {
1570
1602
  importPath: "@uni-design-system/uni-angular",
@@ -1673,10 +1705,13 @@ var uni_index_default = {
1673
1705
  }
1674
1706
  ],
1675
1707
  guidelines: {
1676
- 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.",
1677
1709
  dos: [],
1678
1710
  donts: [],
1679
- 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
+ ]
1680
1715
  },
1681
1716
  relatedTokens: []
1682
1717
  },
@@ -1687,7 +1722,7 @@ var uni_index_default = {
1687
1722
  summary: "",
1688
1723
  description: "",
1689
1724
  category: "feedback",
1690
- version: "6.0.0",
1725
+ version: "7.0.0",
1691
1726
  bindings: {
1692
1727
  angular: {
1693
1728
  importPath: "@uni-design-system/uni-angular",
@@ -1740,10 +1775,14 @@ var uni_index_default = {
1740
1775
  }
1741
1776
  ],
1742
1777
  guidelines: {
1743
- 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",
1744
1779
  dos: [],
1745
1780
  donts: [],
1746
- accessibility: []
1781
+ accessibility: [
1782
+ "Focus trapping and keyboard navigation (Tab, Escape, Enter)",
1783
+ "Screen reader announcements",
1784
+ "Semantic dialog roles"
1785
+ ]
1747
1786
  },
1748
1787
  relatedTokens: [
1749
1788
  "dialog.behavior.borderRadius",
@@ -1761,7 +1800,7 @@ var uni_index_default = {
1761
1800
  summary: "",
1762
1801
  description: "",
1763
1802
  category: "feedback",
1764
- version: "6.0.0",
1803
+ version: "7.0.0",
1765
1804
  bindings: {
1766
1805
  angular: {
1767
1806
  importPath: "@uni-design-system/uni-angular",
@@ -1779,7 +1818,6 @@ var uni_index_default = {
1779
1818
  kind: "input",
1780
1819
  type: "Variant",
1781
1820
  required: false,
1782
- default: "'primary'",
1783
1821
  description: ""
1784
1822
  },
1785
1823
  {
@@ -1789,6 +1827,13 @@ var uni_index_default = {
1789
1827
  required: false,
1790
1828
  description: ""
1791
1829
  },
1830
+ {
1831
+ name: "cancelButtonVariant",
1832
+ kind: "input",
1833
+ type: "Variant",
1834
+ required: false,
1835
+ description: ""
1836
+ },
1792
1837
  {
1793
1838
  name: "disableConfirm",
1794
1839
  kind: "input",
@@ -1801,7 +1846,6 @@ var uni_index_default = {
1801
1846
  kind: "input",
1802
1847
  type: "NullableSize",
1803
1848
  required: false,
1804
- default: "'md'",
1805
1849
  description: ""
1806
1850
  },
1807
1851
  {
@@ -1809,7 +1853,6 @@ var uni_index_default = {
1809
1853
  kind: "input",
1810
1854
  type: "NullableSize",
1811
1855
  required: false,
1812
- default: "'lg'",
1813
1856
  description: ""
1814
1857
  },
1815
1858
  {
@@ -1817,7 +1860,6 @@ var uni_index_default = {
1817
1860
  kind: "input",
1818
1861
  type: "JustifyContent",
1819
1862
  required: false,
1820
- default: "'center'",
1821
1863
  description: ""
1822
1864
  },
1823
1865
  {
@@ -1846,7 +1888,7 @@ var uni_index_default = {
1846
1888
  summary: "",
1847
1889
  description: "",
1848
1890
  category: "feedback",
1849
- version: "6.0.0",
1891
+ version: "7.0.0",
1850
1892
  bindings: {
1851
1893
  angular: {
1852
1894
  importPath: "@uni-design-system/uni-angular",
@@ -1870,7 +1912,7 @@ var uni_index_default = {
1870
1912
  summary: "",
1871
1913
  description: "",
1872
1914
  category: "layout",
1873
- version: "6.0.0",
1915
+ version: "7.0.0",
1874
1916
  bindings: {
1875
1917
  angular: {
1876
1918
  importPath: "@uni-design-system/uni-angular",
@@ -1912,7 +1954,7 @@ var uni_index_default = {
1912
1954
  }
1913
1955
  ],
1914
1956
  guidelines: {
1915
- whenToUse: "",
1957
+ whenToUse: "Dividers are used to visually separate content in a list or group.",
1916
1958
  dos: [],
1917
1959
  donts: [],
1918
1960
  accessibility: []
@@ -1926,7 +1968,7 @@ var uni_index_default = {
1926
1968
  summary: "",
1927
1969
  description: "",
1928
1970
  category: "directives",
1929
- version: "6.0.0",
1971
+ version: "7.0.0",
1930
1972
  bindings: {
1931
1973
  angular: {
1932
1974
  importPath: "@uni-design-system/uni-angular",
@@ -1958,7 +2000,7 @@ var uni_index_default = {
1958
2000
  summary: "",
1959
2001
  description: "",
1960
2002
  category: "components",
1961
- version: "6.0.0",
2003
+ version: "7.0.0",
1962
2004
  bindings: {
1963
2005
  angular: {
1964
2006
  importPath: "@uni-design-system/uni-angular",
@@ -2012,10 +2054,14 @@ var uni_index_default = {
2012
2054
  }
2013
2055
  ],
2014
2056
  guidelines: {
2015
- whenToUse: "",
2057
+ 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.",
2016
2058
  dos: [],
2017
2059
  donts: [],
2018
- accessibility: []
2060
+ accessibility: [
2061
+ "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)]`.",
2062
+ 'Give the overlay an accessible name via `ariaLabel` (defaults to "Navigation").',
2063
+ "A closed side drawer is `aria-hidden`, so its links leave the accessibility tree."
2064
+ ]
2019
2065
  },
2020
2066
  relatedTokens: [
2021
2067
  "drawer.behavior.color",
@@ -2033,7 +2079,7 @@ var uni_index_default = {
2033
2079
  summary: "",
2034
2080
  description: "",
2035
2081
  category: "components",
2036
- version: "6.0.0",
2082
+ version: "7.0.0",
2037
2083
  bindings: {
2038
2084
  angular: {
2039
2085
  importPath: "@uni-design-system/uni-angular",
@@ -2122,7 +2168,7 @@ var uni_index_default = {
2122
2168
  summary: "",
2123
2169
  description: "",
2124
2170
  category: "layout",
2125
- version: "6.0.0",
2171
+ version: "7.0.0",
2126
2172
  bindings: {
2127
2173
  angular: {
2128
2174
  importPath: "@uni-design-system/uni-angular",
@@ -2154,17 +2200,18 @@ var uni_index_default = {
2154
2200
  </uni-card>
2155
2201
  <!-- args:
2156
2202
  {
2157
- collapsed: false,
2158
2203
  ngContent: 'Expandable Content',
2159
2204
  }
2160
2205
  -->`
2161
2206
  }
2162
2207
  ],
2163
2208
  guidelines: {
2164
- whenToUse: "",
2209
+ 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.",
2165
2210
  dos: [],
2166
2211
  donts: [],
2167
- accessibility: []
2212
+ accessibility: [
2213
+ "The toggle carries `aria-expanded` and `aria-controls` for its region (wired automatically inside Expand Area)."
2214
+ ]
2168
2215
  },
2169
2216
  relatedTokens: []
2170
2217
  },
@@ -2175,7 +2222,7 @@ var uni_index_default = {
2175
2222
  summary: "",
2176
2223
  description: "",
2177
2224
  category: "layout",
2178
- version: "6.0.0",
2225
+ version: "7.0.0",
2179
2226
  bindings: {
2180
2227
  angular: {
2181
2228
  importPath: "@uni-design-system/uni-angular",
@@ -2191,9 +2238,9 @@ var uni_index_default = {
2191
2238
  {
2192
2239
  name: "initCollapsed",
2193
2240
  kind: "input",
2194
- type: "boolean",
2241
+ type: "unknown",
2195
2242
  required: false,
2196
- default: "false",
2243
+ default: "false, { transform: booleanAttribute }",
2197
2244
  description: ""
2198
2245
  },
2199
2246
  {
@@ -2219,7 +2266,7 @@ var uni_index_default = {
2219
2266
  title: "Primary",
2220
2267
  framework: "angular",
2221
2268
  code: `<!-- Storybook story: Primary -->
2222
- <uni-expand-area title="\${title}" padding="\${padding}" initCollapsed="\${initCollapsed}" #expandArea>
2269
+ <uni-expand-area title="\${title}" padding="\${padding}" [initCollapsed]="initCollapsed" #expandArea>
2223
2270
  <button text-button (click)="expandArea.toggleExpand()" size="md" variant="ghost" symbolLeft="collapse_all">Collapse area</button>
2224
2271
  </uni-expand-area>
2225
2272
  <!-- args:
@@ -2232,7 +2279,7 @@ var uni_index_default = {
2232
2279
  }
2233
2280
  ],
2234
2281
  guidelines: {
2235
- whenToUse: "",
2282
+ 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.",
2236
2283
  dos: [],
2237
2284
  donts: [],
2238
2285
  accessibility: []
@@ -2246,7 +2293,7 @@ var uni_index_default = {
2246
2293
  summary: "",
2247
2294
  description: "",
2248
2295
  category: "forms",
2249
- version: "6.0.0",
2296
+ version: "7.0.0",
2250
2297
  bindings: {
2251
2298
  angular: {
2252
2299
  importPath: "@uni-design-system/uni-angular",
@@ -2278,7 +2325,7 @@ var uni_index_default = {
2278
2325
  }
2279
2326
  ],
2280
2327
  guidelines: {
2281
- whenToUse: "",
2328
+ 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.',
2282
2329
  dos: [],
2283
2330
  donts: [],
2284
2331
  accessibility: []
@@ -2292,7 +2339,7 @@ var uni_index_default = {
2292
2339
  summary: "",
2293
2340
  description: "",
2294
2341
  category: "forms",
2295
- version: "6.0.0",
2342
+ version: "7.0.0",
2296
2343
  bindings: {
2297
2344
  angular: {
2298
2345
  importPath: "@uni-design-system/uni-angular",
@@ -2434,10 +2481,12 @@ var uni_index_default = {
2434
2481
  }
2435
2482
  ],
2436
2483
  guidelines: {
2437
- whenToUse: "",
2484
+ whenToUse: "The File Drop Zone component is used in uploading files.",
2438
2485
  dos: [],
2439
2486
  donts: [],
2440
- accessibility: []
2487
+ accessibility: [
2488
+ 'Without a browse button, the zone itself is `role="button"` with `tabindex="0"` and Enter/Space activation.'
2489
+ ]
2441
2490
  },
2442
2491
  relatedTokens: []
2443
2492
  },
@@ -2448,7 +2497,7 @@ var uni_index_default = {
2448
2497
  summary: "",
2449
2498
  description: "",
2450
2499
  category: "layout",
2451
- version: "6.0.0",
2500
+ version: "7.0.0",
2452
2501
  bindings: {
2453
2502
  angular: {
2454
2503
  importPath: "@uni-design-system/uni-angular",
@@ -2531,7 +2580,7 @@ var uni_index_default = {
2531
2580
  }
2532
2581
  ],
2533
2582
  guidelines: {
2534
- whenToUse: "",
2583
+ 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.",
2535
2584
  dos: [],
2536
2585
  donts: [],
2537
2586
  accessibility: []
@@ -2545,7 +2594,7 @@ var uni_index_default = {
2545
2594
  summary: "",
2546
2595
  description: "",
2547
2596
  category: "layout",
2548
- version: "6.0.0",
2597
+ version: "7.0.0",
2549
2598
  bindings: {
2550
2599
  angular: {
2551
2600
  importPath: "@uni-design-system/uni-angular",
@@ -2577,7 +2626,7 @@ var uni_index_default = {
2577
2626
  summary: "",
2578
2627
  description: "",
2579
2628
  category: "primitives",
2580
- version: "6.0.0",
2629
+ version: "7.0.0",
2581
2630
  bindings: {
2582
2631
  angular: {
2583
2632
  importPath: "@uni-design-system/uni-angular",
@@ -2593,7 +2642,7 @@ var uni_index_default = {
2593
2642
  {
2594
2643
  name: "name",
2595
2644
  kind: "input",
2596
- type: "keyof Icons",
2645
+ type: "IconName",
2597
2646
  required: true,
2598
2647
  description: ""
2599
2648
  }
@@ -2608,10 +2657,13 @@ var uni_index_default = {
2608
2657
  }
2609
2658
  ],
2610
2659
  guidelines: {
2611
- whenToUse: "",
2660
+ 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.",
2612
2661
  dos: [],
2613
2662
  donts: [],
2614
- accessibility: []
2663
+ accessibility: [
2664
+ "Icons are decorative (`aria-hidden`) \u2014 the parent control carries the accessible name.",
2665
+ "Icons come from the theme's `icons` map (masked with `currentColor`); unknown names render nothing."
2666
+ ]
2615
2667
  },
2616
2668
  relatedTokens: []
2617
2669
  },
@@ -2622,7 +2674,7 @@ var uni_index_default = {
2622
2674
  summary: "",
2623
2675
  description: "",
2624
2676
  category: "primitives",
2625
- version: "6.0.0",
2677
+ version: "7.0.0",
2626
2678
  bindings: {
2627
2679
  angular: {
2628
2680
  importPath: "@uni-design-system/uni-angular",
@@ -2708,10 +2760,13 @@ var uni_index_default = {
2708
2760
  }
2709
2761
  ],
2710
2762
  guidelines: {
2711
- whenToUse: "",
2763
+ 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`.",
2712
2764
  dos: [],
2713
2765
  donts: [],
2714
- accessibility: []
2766
+ accessibility: [
2767
+ "Icon-only buttons need a name: project text (rendered visually hidden) or set `ariaLabel`.",
2768
+ "The icon/symbol itself is decorative (`aria-hidden`)."
2769
+ ]
2715
2770
  },
2716
2771
  relatedTokens: []
2717
2772
  },
@@ -2722,7 +2777,7 @@ var uni_index_default = {
2722
2777
  summary: "",
2723
2778
  description: "",
2724
2779
  category: "forms",
2725
- version: "6.0.0",
2780
+ version: "7.0.0",
2726
2781
  bindings: {
2727
2782
  angular: {
2728
2783
  importPath: "@uni-design-system/uni-angular",
@@ -2834,10 +2889,15 @@ var uni_index_default = {
2834
2889
  }
2835
2890
  ],
2836
2891
  guidelines: {
2837
- whenToUse: "",
2892
+ 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.",
2838
2893
  dos: [],
2839
2894
  donts: [],
2840
- accessibility: []
2895
+ accessibility: [
2896
+ "`label` is required and becomes the accessible name (`aria-label`).",
2897
+ "`aria-invalid` reflects the error state once the field was touched or is dirty.",
2898
+ "`aria-required` mirrors the `required` state synced from validators.",
2899
+ "Link external error text with `ariaDescribedBy`."
2900
+ ]
2841
2901
  },
2842
2902
  relatedTokens: [
2843
2903
  "input.behavior.typeFace",
@@ -2862,7 +2922,7 @@ var uni_index_default = {
2862
2922
  summary: "",
2863
2923
  description: "",
2864
2924
  category: "forms",
2865
- version: "6.0.0",
2925
+ version: "7.0.0",
2866
2926
  bindings: {
2867
2927
  angular: {
2868
2928
  importPath: "@uni-design-system/uni-angular",
@@ -2921,7 +2981,7 @@ var uni_index_default = {
2921
2981
  }
2922
2982
  ],
2923
2983
  guidelines: {
2924
- whenToUse: "",
2984
+ 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.",
2925
2985
  dos: [],
2926
2986
  donts: [],
2927
2987
  accessibility: []
@@ -2935,7 +2995,7 @@ var uni_index_default = {
2935
2995
  summary: "",
2936
2996
  description: "",
2937
2997
  category: "components",
2938
- version: "6.0.0",
2998
+ version: "7.0.0",
2939
2999
  bindings: {
2940
3000
  angular: {
2941
3001
  importPath: "@uni-design-system/uni-angular",
@@ -2991,7 +3051,7 @@ var uni_index_default = {
2991
3051
  }
2992
3052
  ],
2993
3053
  guidelines: {
2994
- whenToUse: "",
3054
+ 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.",
2995
3055
  dos: [],
2996
3056
  donts: [],
2997
3057
  accessibility: []
@@ -3005,7 +3065,7 @@ var uni_index_default = {
3005
3065
  summary: "",
3006
3066
  description: "",
3007
3067
  category: "layout",
3008
- version: "6.0.0",
3068
+ version: "7.0.0",
3009
3069
  bindings: {
3010
3070
  angular: {
3011
3071
  importPath: "@uni-design-system/uni-angular",
@@ -3065,10 +3125,13 @@ var uni_index_default = {
3065
3125
  }
3066
3126
  ],
3067
3127
  guidelines: {
3068
- whenToUse: "",
3128
+ 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```",
3069
3129
  dos: [],
3070
3130
  donts: [],
3071
- accessibility: []
3131
+ accessibility: [
3132
+ "Full ARIA menu pattern: arrows and Home/End move, first-letter typeahead jumps, Enter/Space activates.",
3133
+ "ArrowDown/ArrowUp on the trigger opens onto the first/last item; focus returns to the trigger on close."
3134
+ ]
3072
3135
  },
3073
3136
  relatedTokens: []
3074
3137
  },
@@ -3079,7 +3142,7 @@ var uni_index_default = {
3079
3142
  summary: "",
3080
3143
  description: "",
3081
3144
  category: "layout",
3082
- version: "6.0.0",
3145
+ version: "7.0.0",
3083
3146
  bindings: {
3084
3147
  angular: {
3085
3148
  importPath: "@uni-design-system/uni-angular",
@@ -3195,7 +3258,7 @@ var uni_index_default = {
3195
3258
  summary: "",
3196
3259
  description: "",
3197
3260
  category: "forms",
3198
- version: "6.0.0",
3261
+ version: "7.0.0",
3199
3262
  bindings: {
3200
3263
  angular: {
3201
3264
  importPath: "@uni-design-system/uni-angular",
@@ -3266,10 +3329,13 @@ var uni_index_default = {
3266
3329
  }
3267
3330
  ],
3268
3331
  guidelines: {
3269
- whenToUse: "",
3332
+ 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.",
3270
3333
  dos: [],
3271
3334
  donts: [],
3272
- accessibility: []
3335
+ accessibility: [
3336
+ "Options are real checkboxes in a labelled group \u2014 Space toggles, Tab moves between them.",
3337
+ "Selection state is announced per option."
3338
+ ]
3273
3339
  },
3274
3340
  relatedTokens: []
3275
3341
  },
@@ -3280,7 +3346,7 @@ var uni_index_default = {
3280
3346
  summary: "",
3281
3347
  description: "",
3282
3348
  category: "forms",
3283
- version: "6.0.0",
3349
+ version: "7.0.0",
3284
3350
  bindings: {
3285
3351
  angular: {
3286
3352
  importPath: "@uni-design-system/uni-angular",
@@ -3397,10 +3463,14 @@ var uni_index_default = {
3397
3463
  }
3398
3464
  ],
3399
3465
  guidelines: {
3400
- whenToUse: "",
3466
+ 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.",
3401
3467
  dos: [],
3402
3468
  donts: [],
3403
- accessibility: []
3469
+ accessibility: [
3470
+ 'The trigger is a disclosure (`aria-haspopup="dialog"`, `aria-expanded`); the popover contains native focusables Tab reaches normally.',
3471
+ "The search input is labelled; options are real checkboxes announced with their state.",
3472
+ "Escape closes the popover and returns focus to the trigger."
3473
+ ]
3404
3474
  },
3405
3475
  relatedTokens: []
3406
3476
  },
@@ -3411,7 +3481,7 @@ var uni_index_default = {
3411
3481
  summary: "",
3412
3482
  description: "",
3413
3483
  category: "feedback",
3414
- version: "6.0.0",
3484
+ version: "7.0.0",
3415
3485
  bindings: {
3416
3486
  angular: {
3417
3487
  importPath: "@uni-design-system/uni-angular",
@@ -3636,10 +3706,15 @@ var uni_index_default = {
3636
3706
  }
3637
3707
  ],
3638
3708
  guidelines: {
3639
- whenToUse: "",
3709
+ 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.',
3640
3710
  dos: [],
3641
- donts: [],
3642
- accessibility: []
3711
+ donts: [
3712
+ "Convey urgency by color alone \u2014 the count/dot shape carries the signal"
3713
+ ],
3714
+ accessibility: [
3715
+ 'The visual badge is hidden from assistive tech; a visually-hidden text announcement carries the meaning ("3 notifications").',
3716
+ "Provide `ariaLabel` context when the wrapped control's purpose isn't obvious from its own name."
3717
+ ]
3643
3718
  },
3644
3719
  relatedTokens: []
3645
3720
  },
@@ -3650,7 +3725,7 @@ var uni_index_default = {
3650
3725
  summary: "",
3651
3726
  description: "",
3652
3727
  category: "feedback",
3653
- version: "6.0.0",
3728
+ version: "7.0.0",
3654
3729
  bindings: {
3655
3730
  angular: {
3656
3731
  importPath: "@uni-design-system/uni-angular",
@@ -3674,7 +3749,7 @@ var uni_index_default = {
3674
3749
  summary: "",
3675
3750
  description: "",
3676
3751
  category: "data",
3677
- version: "6.0.0",
3752
+ version: "7.0.0",
3678
3753
  bindings: {
3679
3754
  angular: {
3680
3755
  importPath: "@uni-design-system/uni-angular",
@@ -3734,10 +3809,13 @@ var uni_index_default = {
3734
3809
  }
3735
3810
  ],
3736
3811
  guidelines: {
3737
- whenToUse: "",
3812
+ 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.",
3738
3813
  dos: [],
3739
3814
  donts: [],
3740
- accessibility: []
3815
+ accessibility: [
3816
+ 'A `role="navigation"` landmark; pages are real buttons with `aria-current="page"` on the active one.',
3817
+ "The page-number input is labelled."
3818
+ ]
3741
3819
  },
3742
3820
  relatedTokens: [
3743
3821
  "paginator.behavior.gap",
@@ -3756,7 +3834,7 @@ var uni_index_default = {
3756
3834
  summary: "",
3757
3835
  description: "",
3758
3836
  category: "layout",
3759
- version: "6.0.0",
3837
+ version: "7.0.0",
3760
3838
  bindings: {
3761
3839
  angular: {
3762
3840
  importPath: "@uni-design-system/uni-angular",
@@ -3789,10 +3867,12 @@ var uni_index_default = {
3789
3867
  }
3790
3868
  ],
3791
3869
  guidelines: {
3792
- whenToUse: "",
3870
+ 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.",
3793
3871
  dos: [],
3794
3872
  donts: [],
3795
- accessibility: []
3873
+ accessibility: [
3874
+ "The trigger carries `aria-expanded` and `aria-controls`; light-dismiss comes from the native popover."
3875
+ ]
3796
3876
  },
3797
3877
  relatedTokens: []
3798
3878
  },
@@ -3803,7 +3883,7 @@ var uni_index_default = {
3803
3883
  summary: "",
3804
3884
  description: "",
3805
3885
  category: "feedback",
3806
- version: "6.0.0",
3886
+ version: "7.0.0",
3807
3887
  bindings: {
3808
3888
  angular: {
3809
3889
  importPath: "@uni-design-system/uni-angular",
@@ -3851,10 +3931,12 @@ var uni_index_default = {
3851
3931
  }
3852
3932
  ],
3853
3933
  guidelines: {
3854
- whenToUse: "",
3934
+ whenToUse: "The progress bar is a graphical way of representing progress to completion.",
3855
3935
  dos: [],
3856
3936
  donts: [],
3857
- accessibility: []
3937
+ accessibility: [
3938
+ '`role="progressbar"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`.'
3939
+ ]
3858
3940
  },
3859
3941
  relatedTokens: []
3860
3942
  },
@@ -3865,7 +3947,7 @@ var uni_index_default = {
3865
3947
  summary: "",
3866
3948
  description: "",
3867
3949
  category: "feedback",
3868
- version: "6.0.0",
3950
+ version: "7.0.0",
3869
3951
  bindings: {
3870
3952
  angular: {
3871
3953
  importPath: "@uni-design-system/uni-angular",
@@ -3905,10 +3987,12 @@ var uni_index_default = {
3905
3987
  }
3906
3988
  ],
3907
3989
  guidelines: {
3908
- whenToUse: "",
3990
+ whenToUse: "The progress gauge is a graphical way of representing progress to completion as well as scoring or ranking.",
3909
3991
  dos: [],
3910
3992
  donts: [],
3911
- accessibility: []
3993
+ accessibility: [
3994
+ '`role="progressbar"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`. The SVG is decorative.'
3995
+ ]
3912
3996
  },
3913
3997
  relatedTokens: []
3914
3998
  },
@@ -3919,7 +4003,7 @@ var uni_index_default = {
3919
4003
  summary: "",
3920
4004
  description: "",
3921
4005
  category: "forms",
3922
- version: "6.0.0",
4006
+ version: "7.0.0",
3923
4007
  bindings: {
3924
4008
  angular: {
3925
4009
  importPath: "@uni-design-system/uni-angular",
@@ -4044,10 +4128,18 @@ var uni_index_default = {
4044
4128
  }
4045
4129
  ],
4046
4130
  guidelines: {
4047
- whenToUse: "",
4048
- dos: [],
4049
- donts: [],
4050
- accessibility: []
4131
+ 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.",
4132
+ dos: [
4133
+ "Use for 2\u20135 mutually exclusive options that should all be visible"
4134
+ ],
4135
+ donts: [
4136
+ "Use for long option lists \u2014 that is a select"
4137
+ ],
4138
+ accessibility: [
4139
+ '`role="radiogroup"` labelled by the group label via `aria-labelledby`.',
4140
+ "Native radio inputs: arrow keys move selection within the group, Tab moves out.",
4141
+ "`aria-invalid` reflects the error state once the group was touched or is dirty."
4142
+ ]
4051
4143
  },
4052
4144
  relatedTokens: [
4053
4145
  "radio.behavior.size",
@@ -4062,7 +4154,7 @@ var uni_index_default = {
4062
4154
  summary: "",
4063
4155
  description: "",
4064
4156
  category: "directives",
4065
- version: "6.0.0",
4157
+ version: "7.0.0",
4066
4158
  bindings: {
4067
4159
  angular: {
4068
4160
  importPath: "@uni-design-system/uni-angular",
@@ -4086,7 +4178,7 @@ var uni_index_default = {
4086
4178
  summary: "",
4087
4179
  description: "",
4088
4180
  category: "layout",
4089
- version: "6.0.0",
4181
+ version: "7.0.0",
4090
4182
  bindings: {
4091
4183
  angular: {
4092
4184
  importPath: "@uni-design-system/uni-angular",
@@ -4127,7 +4219,7 @@ var uni_index_default = {
4127
4219
  }
4128
4220
  ],
4129
4221
  guidelines: {
4130
- whenToUse: "",
4222
+ 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.",
4131
4223
  dos: [],
4132
4224
  donts: [],
4133
4225
  accessibility: []
@@ -4141,7 +4233,7 @@ var uni_index_default = {
4141
4233
  summary: "",
4142
4234
  description: "",
4143
4235
  category: "layout",
4144
- version: "6.0.0",
4236
+ version: "7.0.0",
4145
4237
  bindings: {
4146
4238
  angular: {
4147
4239
  importPath: "@uni-design-system/uni-angular",
@@ -4274,7 +4366,7 @@ var uni_index_default = {
4274
4366
  }
4275
4367
  ],
4276
4368
  guidelines: {
4277
- whenToUse: "",
4369
+ 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.",
4278
4370
  dos: [],
4279
4371
  donts: [],
4280
4372
  accessibility: []
@@ -4288,7 +4380,7 @@ var uni_index_default = {
4288
4380
  summary: "",
4289
4381
  description: "",
4290
4382
  category: "forms",
4291
- version: "6.0.0",
4383
+ version: "7.0.0",
4292
4384
  bindings: {
4293
4385
  angular: {
4294
4386
  importPath: "@uni-design-system/uni-angular",
@@ -4381,10 +4473,14 @@ var uni_index_default = {
4381
4473
  }
4382
4474
  ],
4383
4475
  guidelines: {
4384
- whenToUse: "",
4476
+ 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.",
4385
4477
  dos: [],
4386
4478
  donts: [],
4387
- accessibility: []
4479
+ accessibility: [
4480
+ "The field is an ARIA combobox: `aria-expanded`, `aria-controls`, and `aria-activedescendant` track the suggestion listbox.",
4481
+ "ArrowUp/ArrowDown move the active option, Enter selects, Escape closes the list first and clears the query second.",
4482
+ 'The magnifier is decorative; the clear button has an accessible name ("Clear search").'
4483
+ ]
4388
4484
  },
4389
4485
  relatedTokens: []
4390
4486
  },
@@ -4395,7 +4491,7 @@ var uni_index_default = {
4395
4491
  summary: "",
4396
4492
  description: "",
4397
4493
  category: "forms",
4398
- version: "6.0.0",
4494
+ version: "7.0.0",
4399
4495
  bindings: {
4400
4496
  angular: {
4401
4497
  importPath: "@uni-design-system/uni-angular",
@@ -4514,10 +4610,13 @@ var uni_index_default = {
4514
4610
  }
4515
4611
  ],
4516
4612
  guidelines: {
4517
- whenToUse: "",
4613
+ 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.",
4518
4614
  dos: [],
4519
4615
  donts: [],
4520
- accessibility: []
4616
+ accessibility: [
4617
+ "Native `<select>`: platform keyboard interaction and mobile pickers for free.",
4618
+ "`label` becomes the accessible name; `aria-invalid` reflects the touched error state."
4619
+ ]
4521
4620
  },
4522
4621
  relatedTokens: []
4523
4622
  },
@@ -4528,7 +4627,7 @@ var uni_index_default = {
4528
4627
  summary: "",
4529
4628
  description: "",
4530
4629
  category: "components",
4531
- version: "6.0.0",
4630
+ version: "7.0.0",
4532
4631
  bindings: {
4533
4632
  angular: {
4534
4633
  importPath: "@uni-design-system/uni-angular",
@@ -4598,10 +4697,15 @@ var uni_index_default = {
4598
4697
  }
4599
4698
  ],
4600
4699
  guidelines: {
4601
- whenToUse: "",
4700
+ 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.",
4602
4701
  dos: [],
4603
- donts: [],
4604
- accessibility: []
4702
+ donts: [
4703
+ "Announce individual skeletons to assistive tech \u2014 they are decorative placeholders"
4704
+ ],
4705
+ accessibility: [
4706
+ "Skeletons are `aria-hidden` \u2014 announce loading on the container (e.g. `aria-busy`) where your app knows what is loading.",
4707
+ "The shimmer respects `prefers-reduced-motion`, degrading to static blocks."
4708
+ ]
4605
4709
  },
4606
4710
  relatedTokens: [
4607
4711
  "skeleton.behavior.color",
@@ -4619,7 +4723,7 @@ var uni_index_default = {
4619
4723
  summary: "",
4620
4724
  description: "",
4621
4725
  category: "forms",
4622
- version: "6.0.0",
4726
+ version: "7.0.0",
4623
4727
  bindings: {
4624
4728
  angular: {
4625
4729
  importPath: "@uni-design-system/uni-angular",
@@ -4732,10 +4836,14 @@ var uni_index_default = {
4732
4836
  }
4733
4837
  ],
4734
4838
  guidelines: {
4735
- whenToUse: "",
4839
+ 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.',
4736
4840
  dos: [],
4737
4841
  donts: [],
4738
- accessibility: []
4842
+ accessibility: [
4843
+ '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.',
4844
+ "`label` is required and becomes the accessible name.",
4845
+ "Expose the current value textually nearby and link it with `ariaDescribedBy` when the number matters."
4846
+ ]
4739
4847
  },
4740
4848
  relatedTokens: [
4741
4849
  "slider.behavior.color",
@@ -4752,7 +4860,7 @@ var uni_index_default = {
4752
4860
  summary: "",
4753
4861
  description: "",
4754
4862
  category: "feedback",
4755
- version: "6.0.0",
4863
+ version: "7.0.0",
4756
4864
  bindings: {
4757
4865
  angular: {
4758
4866
  importPath: "@uni-design-system/uni-angular",
@@ -4826,7 +4934,7 @@ var uni_index_default = {
4826
4934
  }
4827
4935
  ],
4828
4936
  guidelines: {
4829
- whenToUse: "",
4937
+ 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).",
4830
4938
  dos: [],
4831
4939
  donts: [],
4832
4940
  accessibility: []
@@ -4844,7 +4952,7 @@ var uni_index_default = {
4844
4952
  summary: "",
4845
4953
  description: "",
4846
4954
  category: "data",
4847
- version: "6.0.0",
4955
+ version: "7.0.0",
4848
4956
  bindings: {
4849
4957
  angular: {
4850
4958
  importPath: "@uni-design-system/uni-angular",
@@ -4889,7 +4997,7 @@ var uni_index_default = {
4889
4997
  }
4890
4998
  ],
4891
4999
  guidelines: {
4892
- whenToUse: "",
5000
+ 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`.",
4893
5001
  dos: [],
4894
5002
  donts: [],
4895
5003
  accessibility: []
@@ -4903,7 +5011,7 @@ var uni_index_default = {
4903
5011
  summary: "",
4904
5012
  description: "",
4905
5013
  category: "layout",
4906
- version: "6.0.0",
5014
+ version: "7.0.0",
4907
5015
  bindings: {
4908
5016
  angular: {
4909
5017
  importPath: "@uni-design-system/uni-angular",
@@ -4944,7 +5052,7 @@ var uni_index_default = {
4944
5052
  }
4945
5053
  ],
4946
5054
  guidelines: {
4947
- whenToUse: "",
5055
+ 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.",
4948
5056
  dos: [],
4949
5057
  donts: [],
4950
5058
  accessibility: []
@@ -4958,7 +5066,7 @@ var uni_index_default = {
4958
5066
  summary: "",
4959
5067
  description: "",
4960
5068
  category: "components",
4961
- version: "6.0.0",
5069
+ version: "7.0.0",
4962
5070
  bindings: {
4963
5071
  angular: {
4964
5072
  importPath: "@uni-design-system/uni-angular",
@@ -5029,10 +5137,15 @@ var uni_index_default = {
5029
5137
  }
5030
5138
  ],
5031
5139
  guidelines: {
5032
- whenToUse: "",
5140
+ 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.',
5033
5141
  dos: [],
5034
- donts: [],
5035
- accessibility: []
5142
+ donts: [
5143
+ "Rely on delta color alone \u2014 the arrow + wording carry direction for everyone"
5144
+ ],
5145
+ accessibility: [
5146
+ 'The delta arrow is decorative; screen readers hear "up"/"down" in words instead.',
5147
+ "The sparkline is `aria-hidden` \u2014 the value and delta carry the information."
5148
+ ]
5036
5149
  },
5037
5150
  relatedTokens: [
5038
5151
  "stat.behavior.labelTypeface",
@@ -5055,7 +5168,7 @@ var uni_index_default = {
5055
5168
  summary: "",
5056
5169
  description: "",
5057
5170
  category: "primitives",
5058
- version: "6.0.0",
5171
+ version: "7.0.0",
5059
5172
  bindings: {
5060
5173
  angular: {
5061
5174
  importPath: "@uni-design-system/uni-angular",
@@ -5107,10 +5220,12 @@ var uni_index_default = {
5107
5220
  }
5108
5221
  ],
5109
5222
  guidelines: {
5110
- whenToUse: "",
5223
+ 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).",
5111
5224
  dos: [],
5112
5225
  donts: [],
5113
- accessibility: []
5226
+ accessibility: [
5227
+ "Symbols are decorative (`aria-hidden`) \u2014 the parent control carries the accessible name."
5228
+ ]
5114
5229
  },
5115
5230
  relatedTokens: [
5116
5231
  "symbol.behavior.fill",
@@ -5126,7 +5241,7 @@ var uni_index_default = {
5126
5241
  summary: "",
5127
5242
  description: "",
5128
5243
  category: "components",
5129
- version: "6.0.0",
5244
+ version: "7.0.0",
5130
5245
  bindings: {
5131
5246
  angular: {
5132
5247
  importPath: "@uni-design-system/uni-angular",
@@ -5166,7 +5281,7 @@ var uni_index_default = {
5166
5281
  summary: "",
5167
5282
  description: "",
5168
5283
  category: "components",
5169
- version: "6.0.0",
5284
+ version: "7.0.0",
5170
5285
  bindings: {
5171
5286
  angular: {
5172
5287
  importPath: "@uni-design-system/uni-angular",
@@ -5196,10 +5311,20 @@ var uni_index_default = {
5196
5311
  }
5197
5312
  ],
5198
5313
  guidelines: {
5199
- whenToUse: "",
5200
- dos: [],
5201
- donts: [],
5202
- accessibility: []
5314
+ 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.",
5315
+ dos: [
5316
+ "Use for peer views of the same subject (details, activity, settings)",
5317
+ "Keep labels to one or two words"
5318
+ ],
5319
+ donts: [
5320
+ "Nest tabs inside tabs",
5321
+ "Use tabs for sequential steps \u2014 that is a stepper"
5322
+ ],
5323
+ accessibility: [
5324
+ "Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired",
5325
+ "Arrow keys move between tabs with selection following focus, wrapping at the ends;",
5326
+ "Roving tabindex: only the selected tab sits in the tab order; the panel itself is"
5327
+ ]
5203
5328
  },
5204
5329
  relatedTokens: [
5205
5330
  "tabs.behavior.typeface",
@@ -5220,7 +5345,7 @@ var uni_index_default = {
5220
5345
  summary: "",
5221
5346
  description: "",
5222
5347
  category: "data",
5223
- version: "6.0.0",
5348
+ version: "7.0.0",
5224
5349
  bindings: {
5225
5350
  angular: {
5226
5351
  importPath: "@uni-design-system/uni-angular",
@@ -5273,7 +5398,7 @@ var uni_index_default = {
5273
5398
  }
5274
5399
  ],
5275
5400
  guidelines: {
5276
- whenToUse: "",
5401
+ 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.",
5277
5402
  dos: [],
5278
5403
  donts: [],
5279
5404
  accessibility: []
@@ -5287,7 +5412,7 @@ var uni_index_default = {
5287
5412
  summary: "",
5288
5413
  description: "",
5289
5414
  category: "primitives",
5290
- version: "6.0.0",
5415
+ version: "7.0.0",
5291
5416
  bindings: {
5292
5417
  angular: {
5293
5418
  importPath: "@uni-design-system/uni-angular",
@@ -5368,10 +5493,17 @@ var uni_index_default = {
5368
5493
  }
5369
5494
  ],
5370
5495
  guidelines: {
5371
- whenToUse: "",
5372
- dos: [],
5373
- donts: [],
5374
- accessibility: []
5496
+ 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.',
5497
+ dos: [
5498
+ "Reach for semantic elements first and let the element-aware defaults set the type"
5499
+ ],
5500
+ donts: [
5501
+ 'Use `span uni-text="headline-large"` where a real heading belongs'
5502
+ ],
5503
+ accessibility: [
5504
+ "Text never replaces your elements \u2014 headings stay `h1`\u2013`h6`, paragraphs stay `p`,",
5505
+ "Type is styling only: pick the element for meaning, the typeface for appearance"
5506
+ ]
5375
5507
  },
5376
5508
  relatedTokens: []
5377
5509
  },
@@ -5382,7 +5514,7 @@ var uni_index_default = {
5382
5514
  summary: "",
5383
5515
  description: "",
5384
5516
  category: "primitives",
5385
- version: "6.0.0",
5517
+ version: "7.0.0",
5386
5518
  bindings: {
5387
5519
  angular: {
5388
5520
  importPath: "@uni-design-system/uni-angular",
@@ -5492,10 +5624,13 @@ var uni_index_default = {
5492
5624
  }
5493
5625
  ],
5494
5626
  guidelines: {
5495
- whenToUse: "",
5627
+ 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.",
5496
5628
  dos: [],
5497
5629
  donts: [],
5498
- accessibility: []
5630
+ accessibility: [
5631
+ "`label` is required and becomes the accessible name (`aria-label`).",
5632
+ "Error state is exposed as `aria-invalid` once the field was touched or is dirty; wire your error text with `ariaDescribedBy`."
5633
+ ]
5499
5634
  },
5500
5635
  relatedTokens: [
5501
5636
  "textarea.behavior.rows",
@@ -5509,7 +5644,7 @@ var uni_index_default = {
5509
5644
  summary: "",
5510
5645
  description: "",
5511
5646
  category: "primitives",
5512
- version: "6.0.0",
5647
+ version: "7.0.0",
5513
5648
  bindings: {
5514
5649
  angular: {
5515
5650
  importPath: "@uni-design-system/uni-angular",
@@ -5532,6 +5667,64 @@ var uni_index_default = {
5532
5667
  },
5533
5668
  relatedTokens: []
5534
5669
  },
5670
+ {
5671
+ id: "theme-switch",
5672
+ name: "ThemeSwitch",
5673
+ status: "stable",
5674
+ summary: "",
5675
+ description: "",
5676
+ category: "components",
5677
+ version: "7.0.0",
5678
+ bindings: {
5679
+ angular: {
5680
+ importPath: "@uni-design-system/uni-angular",
5681
+ selectorOrTag: "uni-theme-switch",
5682
+ api: [
5683
+ {
5684
+ name: "ariaLabel",
5685
+ kind: "input",
5686
+ type: "string",
5687
+ required: false,
5688
+ default: "'Theme'",
5689
+ description: "Accessible name for the underlying select."
5690
+ },
5691
+ {
5692
+ name: "themeChanged",
5693
+ kind: "output",
5694
+ type: "ThemeName",
5695
+ required: false,
5696
+ description: "Emits the selected theme key after it has been applied."
5697
+ }
5698
+ ]
5699
+ }
5700
+ },
5701
+ examples: [
5702
+ {
5703
+ title: "Primary",
5704
+ framework: "angular",
5705
+ code: '<!-- Storybook story: Primary -->\n<div stack-layout gap="md" [width]="420">\n<uni-theme-switch></uni-theme-switch>\n<uni-card>\n <uni-card-header>Live preview</uni-card-header>\n <uni-card-content>\n <div stack-layout gap="md">\n <span uni-text typeface="body-2-long">\n Pick a theme above \u2014 every registered theme (UNI_THEMES) restyles\n this card and these buttons instantly.\n </span>\n <div row-layout gap="sm">\n <button text-button variant="primary">Primary</button>\n <button text-button variant="secondary">Secondary</button>\n <button text-button variant="warn">Danger</button>\n </div>\n </div>\n </uni-card-content>\n</uni-card>\n</div>\n<!-- args:\n{}\n-->'
5706
+ }
5707
+ ],
5708
+ guidelines: {
5709
+ whenToUse: "Drop-in switcher for every theme registered via `UNI_THEMES`. Renders a `uni-select` over\n`ThemeService.themeOptions` and applies the choice through `ThemeService.selectTheme`, so the\nselection persists across reloads exactly like any other theme change. Use it wherever an app\noffers a theme choice \u2014 a settings page, an app-bar action, or a light/dark toggle backed by two\nregistered themes. Because it reads the registry from the injected `UNI_THEMES` token, adding a\nnew theme to the registry is all it takes for the switcher to offer it.",
5710
+ dos: [
5711
+ "Register every selectable theme in `UNI_THEMES`; the switcher derives its options from the registry.",
5712
+ 'Give the control a meaningful `ariaLabel` when "Theme" is ambiguous in context (e.g. "Editor color theme").',
5713
+ "Use `themeChanged` for side effects like analytics or syncing a user preference to a backend."
5714
+ ],
5715
+ donts: [
5716
+ "Don't call `ThemeService.theme.set()` alongside the switcher \u2014 bypassing `selectTheme` skips persistence and leaves the select out of sync.",
5717
+ "Don't hardcode theme ids in app logic; read `ThemeService.selectedThemeKey()` instead.",
5718
+ "Don't use it for the palette-generation workflow \u2014 that's the Theme Builder; the switcher only picks among registered themes."
5719
+ ],
5720
+ accessibility: [
5721
+ "Built on a native `<select>` (via `uni-select`), so keyboard and screen-reader interaction come from the platform.",
5722
+ 'Exposes `ariaLabel` (default "Theme") as the accessible name for the control.',
5723
+ "Theme changes restyle in place without moving focus or reloading, so context is preserved for assistive tech."
5724
+ ]
5725
+ },
5726
+ relatedTokens: []
5727
+ },
5535
5728
  {
5536
5729
  id: "toggle",
5537
5730
  name: "Toggle",
@@ -5539,7 +5732,7 @@ var uni_index_default = {
5539
5732
  summary: "",
5540
5733
  description: "",
5541
5734
  category: "forms",
5542
- version: "6.0.0",
5735
+ version: "7.0.0",
5543
5736
  bindings: {
5544
5737
  angular: {
5545
5738
  importPath: "@uni-design-system/uni-angular",
@@ -5643,10 +5836,18 @@ var uni_index_default = {
5643
5836
  }
5644
5837
  ],
5645
5838
  guidelines: {
5646
- whenToUse: "",
5647
- dos: [],
5648
- donts: [],
5649
- accessibility: []
5839
+ 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.",
5840
+ dos: [
5841
+ "Use for instant on/off effects (settings, feature switches)"
5842
+ ],
5843
+ donts: [
5844
+ "Use in submitted forms where nothing happens until save \u2014 that is a checkbox"
5845
+ ],
5846
+ accessibility: [
5847
+ 'Semantic `<input type="checkbox">` with `role="switch"`, properly associated with its label.',
5848
+ "Space toggles; focus indicators are provided for keyboard navigation.",
5849
+ "Screen readers announce the label and on/off state."
5850
+ ]
5650
5851
  },
5651
5852
  relatedTokens: [
5652
5853
  "toggle.behavior.size",
@@ -5661,7 +5862,7 @@ var uni_index_default = {
5661
5862
  summary: "",
5662
5863
  description: "",
5663
5864
  category: "feedback",
5664
- version: "6.0.0",
5865
+ version: "7.0.0",
5665
5866
  bindings: {
5666
5867
  angular: {
5667
5868
  importPath: "@uni-design-system/uni-angular",
@@ -5717,10 +5918,14 @@ var uni_index_default = {
5717
5918
  }
5718
5919
  ],
5719
5920
  guidelines: {
5720
- whenToUse: "",
5921
+ 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`.",
5721
5922
  dos: [],
5722
5923
  donts: [],
5723
- accessibility: []
5924
+ accessibility: [
5925
+ '`role="tooltip"` linked to the trigger via `aria-describedby` (wired once \u2014 the bubble is always in the DOM).',
5926
+ "Shows on keyboard focus, hides on blur and Escape; stays open while hovered (WCAG 1.4.13).",
5927
+ 'Non-focusable triggers get `tabindex="0"` so keyboard users can reach the tooltip.'
5928
+ ]
5724
5929
  },
5725
5930
  relatedTokens: [
5726
5931
  "tooltip.behavior.borderRadius",
@@ -5736,7 +5941,7 @@ var uni_index_default = {
5736
5941
  summary: "",
5737
5942
  description: "",
5738
5943
  category: "layout",
5739
- version: "6.0.0",
5944
+ version: "7.0.0",
5740
5945
  bindings: {
5741
5946
  angular: {
5742
5947
  importPath: "@uni-design-system/uni-angular",
@@ -5769,7 +5974,7 @@ var uni_index_default = {
5769
5974
  }
5770
5975
  ],
5771
5976
  guidelines: {
5772
- whenToUse: "",
5977
+ whenToUse: "Used to add space between elements and wraps automatically if there isn't enough space.",
5773
5978
  dos: [],
5774
5979
  donts: [],
5775
5980
  accessibility: []
@@ -6693,13 +6898,13 @@ var uni_index_default = {
6693
6898
  },
6694
6899
  {
6695
6900
  id: "spacing.none",
6696
- value: "none",
6901
+ value: 0,
6697
6902
  type: "spacing",
6698
6903
  kind: "style",
6699
6904
  target: "emotion-css",
6700
6905
  themeValues: {
6701
- LightTheme: "none",
6702
- DarkTheme: "none"
6906
+ LightTheme: 0,
6907
+ DarkTheme: 0
6703
6908
  }
6704
6909
  },
6705
6910
  {
@@ -7758,6 +7963,114 @@ var uni_index_default = {
7758
7963
  DarkTheme: '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}'
7759
7964
  }
7760
7965
  },
7966
+ {
7967
+ id: "dialogButtons.behavior.gap",
7968
+ value: "md",
7969
+ type: "string",
7970
+ kind: "behavioral",
7971
+ target: "component-prop",
7972
+ appliesTo: "dialogButtons",
7973
+ themeValues: {
7974
+ LightTheme: "md",
7975
+ DarkTheme: "md"
7976
+ }
7977
+ },
7978
+ {
7979
+ id: "dialogButtons.behavior.padding",
7980
+ value: "md",
7981
+ type: "string",
7982
+ kind: "behavioral",
7983
+ target: "component-prop",
7984
+ appliesTo: "dialogButtons",
7985
+ themeValues: {
7986
+ LightTheme: "md",
7987
+ DarkTheme: "md"
7988
+ }
7989
+ },
7990
+ {
7991
+ id: "dialogButtons.behavior.paddingBottom",
7992
+ value: "lg",
7993
+ type: "string",
7994
+ kind: "behavioral",
7995
+ target: "component-prop",
7996
+ appliesTo: "dialogButtons",
7997
+ themeValues: {
7998
+ LightTheme: "lg",
7999
+ DarkTheme: "lg"
8000
+ }
8001
+ },
8002
+ {
8003
+ id: "dialogButtons.behavior.justifyContent",
8004
+ value: "center",
8005
+ type: "string",
8006
+ kind: "behavioral",
8007
+ target: "component-prop",
8008
+ appliesTo: "dialogButtons",
8009
+ themeValues: {
8010
+ LightTheme: "center",
8011
+ DarkTheme: "center"
8012
+ }
8013
+ },
8014
+ {
8015
+ id: "dialogButtons.behavior.confirmButtonVariant",
8016
+ value: "primary",
8017
+ type: "string",
8018
+ kind: "behavioral",
8019
+ target: "component-prop",
8020
+ appliesTo: "dialogButtons",
8021
+ themeValues: {
8022
+ LightTheme: "primary",
8023
+ DarkTheme: "primary"
8024
+ }
8025
+ },
8026
+ {
8027
+ id: "dialogButtons.behavior.cancelButtonVariant",
8028
+ value: "warn",
8029
+ type: "string",
8030
+ kind: "behavioral",
8031
+ target: "component-prop",
8032
+ appliesTo: "dialogButtons",
8033
+ themeValues: {
8034
+ LightTheme: "warn",
8035
+ DarkTheme: "warn"
8036
+ }
8037
+ },
8038
+ {
8039
+ id: "dialogButtons.behavior.buttonSize",
8040
+ value: "lg",
8041
+ type: "string",
8042
+ kind: "behavioral",
8043
+ target: "component-prop",
8044
+ appliesTo: "dialogButtons",
8045
+ themeValues: {
8046
+ LightTheme: "lg",
8047
+ DarkTheme: "lg"
8048
+ }
8049
+ },
8050
+ {
8051
+ id: "dialogButtons.behavior.stretch",
8052
+ value: false,
8053
+ type: "boolean",
8054
+ kind: "behavioral",
8055
+ target: "component-prop",
8056
+ appliesTo: "dialogButtons",
8057
+ themeValues: {
8058
+ LightTheme: false,
8059
+ DarkTheme: false
8060
+ }
8061
+ },
8062
+ {
8063
+ id: "dialogButtons.behavior.reverseOrder",
8064
+ value: false,
8065
+ type: "boolean",
8066
+ kind: "behavioral",
8067
+ target: "component-prop",
8068
+ appliesTo: "dialogButtons",
8069
+ themeValues: {
8070
+ LightTheme: false,
8071
+ DarkTheme: false
8072
+ }
8073
+ },
7761
8074
  {
7762
8075
  id: "dialogHeader.behavior.borderRadius",
7763
8076
  value: "max",
@@ -9288,7 +9601,7 @@ var uni_index_default = {
9288
9601
  "radius.md": "24px",
9289
9602
  "radius.lg": "32px",
9290
9603
  "radius.max": "999px",
9291
- "spacing.none": "none",
9604
+ "spacing.none": 0,
9292
9605
  "spacing.xxs": "2px",
9293
9606
  "spacing.xs": "4px",
9294
9607
  "spacing.sm": "8px",
@@ -9403,6 +9716,17 @@ var uni_index_default = {
9403
9716
  elevation: "dialog",
9404
9717
  backdrop: '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}'
9405
9718
  },
9719
+ dialogButtons: {
9720
+ gap: "md",
9721
+ padding: "md",
9722
+ paddingBottom: "lg",
9723
+ justifyContent: "center",
9724
+ confirmButtonVariant: "primary",
9725
+ cancelButtonVariant: "warn",
9726
+ buttonSize: "lg",
9727
+ stretch: false,
9728
+ reverseOrder: false
9729
+ },
9406
9730
  dialogHeader: {
9407
9731
  borderRadius: "max",
9408
9732
  color: "primary",
@@ -9658,7 +9982,7 @@ var uni_index_default = {
9658
9982
  "radius.md": "24px",
9659
9983
  "radius.lg": "32px",
9660
9984
  "radius.max": "999px",
9661
- "spacing.none": "none",
9985
+ "spacing.none": 0,
9662
9986
  "spacing.xxs": "2px",
9663
9987
  "spacing.xs": "4px",
9664
9988
  "spacing.sm": "8px",
@@ -9773,6 +10097,17 @@ var uni_index_default = {
9773
10097
  elevation: "dialog",
9774
10098
  backdrop: '{"background":"rgba(255, 255, 255, 0.6)","backdropFilter":"blur(2px)"}'
9775
10099
  },
10100
+ dialogButtons: {
10101
+ gap: "md",
10102
+ padding: "md",
10103
+ paddingBottom: "lg",
10104
+ justifyContent: "center",
10105
+ confirmButtonVariant: "primary",
10106
+ cancelButtonVariant: "warn",
10107
+ buttonSize: "lg",
10108
+ stretch: false,
10109
+ reverseOrder: false
10110
+ },
9776
10111
  dialogHeader: {
9777
10112
  borderRadius: "max",
9778
10113
  color: "primary",
@@ -10667,16 +11002,39 @@ var generateShadows = (colors, mode = "light") => {
10667
11002
  };
10668
11003
  };
10669
11004
  var BaseIcons = {
10670
- 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",
10671
- 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",
10672
- 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",
10673
- 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",
10674
- 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",
10675
- 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",
10676
- 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",
10677
- 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",
10678
- 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",
10679
- 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",
11005
+ menu: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-254.62v-59.99h680v59.99H140ZM140-450v-60h680v60H140Zm0-195.39v-59.99h680v59.99H140Z'/%3e%3c/svg%3e",
11006
+ chevronUp: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z'/%3e%3c/svg%3e",
11007
+ chevronDown: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z'/%3e%3c/svg%3e",
11008
+ chevronLeft: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M560-253.85 333.85-480 560-706.15 602.15-664l-184 184 184 184L560-253.85Z'/%3e%3c/svg%3e",
11009
+ chevronRight: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m517.85-480-184-184L376-706.15 602.15-480 376-253.85 333.85-296l184-184Z'/%3e%3c/svg%3e",
11010
+ arrowLeft: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m294.92-450 227.85 227.85L480-180 180-480l300-300 42.77 42.15L294.92-510H780v60H294.92Z'/%3e%3c/svg%3e",
11011
+ arrowRight: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M665.08-450H180v-60h485.08L437.23-737.85 480-780l300 300-300 300-42.77-42.15L665.08-450Z'/%3e%3c/svg%3e",
11012
+ home: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M240-200h133.85v-237.69h212.3V-200H720v-360L480-740.77 240-560v360Zm-60 60v-450l300-225.77L780-590v450H526.15v-237.69h-92.3V-140H180Zm300-330.38Z'/%3e%3c/svg%3e",
11013
+ externalLink: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-140Q182-140 161-161q-21-21-21-51.31v-535.38Q140-778 161-799q21-21 51.31-21h252.3v60h-252.3q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-252.3h60v252.3Q820-182 799-161q-21 21-51.31 21H212.31Zm176.46-206.62-42.15-42.15L717.85-760H560v-60h260v260h-60v-157.85L388.77-346.62Z'/%3e%3c/svg%3e",
11014
+ search: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M781.69-136.92 530.46-388.16q-30 24.77-69 38.77-39 14-80.69 14-102.46 0-173.54-71.07-71.07-71.08-71.07-173.54t71.07-173.54q71.08-71.07 173.54-71.07t173.54 71.07q71.07 71.08 71.07 173.54 0 42.85-14.38 81.85-14.39 39-38.39 67.84l251.23 251.23-42.15 42.16ZM380.77-395.38q77.31 0 130.96-53.66 53.66-53.65 53.66-130.96t-53.66-130.96q-53.65-53.66-130.96-53.66t-130.96 53.66Q196.15-657.31 196.15-580t53.66 130.96q53.65 53.66 130.96 53.66Z'/%3e%3c/svg%3e",
11015
+ close: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M256-213.85 213.85-256l224-224-224-224L256-746.15l224 224 224-224L746.15-704l-224 224 224 224L704-213.85l-224-224-224 224Z'/%3e%3c/svg%3e",
11016
+ plus: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-450H220v-60h230v-230h60v230h230v60H510v230h-60v-230Z'/%3e%3c/svg%3e",
11017
+ minus: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M220-450v-60h520v60H220Z'/%3e%3c/svg%3e",
11018
+ more: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-189.23q-24.75 0-42.37-17.63Q420-224.48 420-249.23q0-24.75 17.63-42.38 17.62-17.62 42.37-17.62 24.75 0 42.37 17.62Q540-273.98 540-249.23q0 24.75-17.63 42.37-17.62 17.63-42.37 17.63ZM480-420q-24.75 0-42.37-17.63Q420-455.25 420-480q0-24.75 17.63-42.37Q455.25-540 480-540q24.75 0 42.37 17.63Q540-504.75 540-480q0 24.75-17.63 42.37Q504.75-420 480-420Zm0-230.77q-24.75 0-42.37-17.62Q420-686.02 420-710.77q0-24.75 17.63-42.37 17.62-17.63 42.37-17.63 24.75 0 42.37 17.63Q540-735.52 540-710.77q0 24.75-17.63 42.38-17.62 17.62-42.37 17.62Z'/%3e%3c/svg%3e",
11019
+ delete: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M292.31-140q-29.92 0-51.12-21.19Q220-182.39 220-212.31V-720h-40v-60h180v-35.38h240V-780h180v60h-40v507.69Q740-182 719-161q-21 21-51.31 21H292.31ZM680-720H280v507.69q0 5.39 3.46 8.85t8.85 3.46h375.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46V-720ZM376.16-280h59.99v-360h-59.99v360Zm147.69 0h59.99v-360h-59.99v360ZM280-720v520-520Z'/%3e%3c/svg%3e",
11020
+ edit: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M200-200h50.46l409.46-409.46-50.46-50.46L200-250.46V-200Zm-60 60v-135.38l527.62-527.39q9.07-8.24 20.03-12.73 10.97-4.5 23-4.5t23.3 4.27q11.28 4.27 19.97 13.58l48.85 49.46q9.31 8.69 13.27 20 3.96 11.31 3.96 22.62 0 12.07-4.12 23.03-4.12 10.97-13.11 20.04L275.38-140H140Zm620.38-570.15-50.23-50.23 50.23 50.23Zm-126.13 75.9-24.79-25.67 50.46 50.46-25.67-24.79Z'/%3e%3c/svg%3e",
11021
+ download: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-328.46 309.23-499.23l42.16-43.38L450-444v-336h60v336l98.61-98.61 42.16 43.38L480-328.46ZM252.31-180Q222-180 201-201q-21-21-21-51.31v-108.46h60v108.46q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h455.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-108.46h60v108.46Q780-222 759-201q-21 21-51.31 21H252.31Z'/%3e%3c/svg%3e",
11022
+ upload: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-328.46v-336l-98.61 98.61-42.16-43.38L480-780l170.77 170.77-42.16 43.38L510-664.46v336h-60ZM252.31-180Q222-180 201-201q-21-21-21-51.31v-108.46h60v108.46q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h455.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-108.46h60v108.46Q780-222 759-201q-21 21-51.31 21H252.31Z'/%3e%3c/svg%3e",
11023
+ share: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M672.22-100q-44.91 0-76.26-31.41-31.34-31.41-31.34-76.28 0-6 4.15-29.16L284.31-404.31q-14.46 15-34.36 23.5t-42.64 8.5q-44.71 0-76.01-31.54Q100-435.39 100-480q0-44.61 31.3-76.15 31.3-31.54 76.01-31.54 22.74 0 42.64 8.5 19.9 8.5 34.36 23.5l284.46-167.08q-2.38-7.38-3.27-14.46-.88-7.08-.88-15.08 0-44.87 31.43-76.28Q627.49-860 672.4-860t76.25 31.44Q780-797.13 780-752.22q0 44.91-31.41 76.26-31.41 31.34-76.28 31.34-22.85 0-42.5-8.69Q610.15-662 595.69-677L311.23-509.54q2.38 7.39 3.27 14.46.88 7.08.88 15.08t-.88 15.08q-.89 7.07-3.27 14.46L595.69-283q14.46-15 34.12-23.69 19.65-8.69 42.5-8.69 44.87 0 76.28 31.43Q780-252.51 780-207.6t-31.44 76.25Q717.13-100 672.22-100Zm.09-60q20.27 0 33.98-13.71Q720-187.42 720-207.69q0-20.27-13.71-33.98-13.71-13.72-33.98-13.72-20.27 0-33.98 13.72-13.72 13.71-13.72 33.98 0 20.27 13.72 33.98Q652.04-160 672.31-160Zm-465-272.31q20.43 0 34.25-13.8 13.83-13.81 13.83-33.89t-13.83-33.89q-13.82-13.8-34.25-13.8-20.11 0-33.71 13.8Q160-500.08 160-480t13.6 33.89q13.6 13.8 33.71 13.8Zm498.88-286.02Q720-732.04 720-752.31q0-20.27-13.71-33.98Q692.58-800 672.31-800q-20.27 0-33.98 13.71-13.72 13.71-13.72 33.98 0 20.27 13.81 33.98 13.81 13.72 33.89 13.72 20.07 0 33.88-13.72Zm-33.88 510.64ZM207.69-480Zm464.62-272.31Z'/%3e%3c/svg%3e",
11024
+ filter: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M411.15-260v-60h137.31v60H411.15ZM256.16-450v-60h447.3v60h-447.3ZM140-640v-60h680v60H140Z'/%3e%3c/svg%3e",
11025
+ check: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M382-253.85 168.62-467.23 211.38-510 382-339.38 748.62-706l42.76 42.77L382-253.85Z'/%3e%3c/svg%3e",
11026
+ checkCircle: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m423.23-309.85 268.92-268.92L650-620.92 423.23-394.15l-114-114L267.08-466l156.15 156.15ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e",
11027
+ xCircle: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m336-293.85 144-144 144 144L666.15-336l-144-144 144-144L624-666.15l-144 144-144-144L293.85-624l144 144-144 144L336-293.85ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e",
11028
+ alertCircle: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M502.92-300.15q9.39-9.39 9.39-22.93T502.92-346q-9.38-9.38-22.92-9.38-13.54 0-22.92 9.38-9.39 9.38-9.39 22.92 0 13.54 9.39 22.93 9.38 9.38 22.92 9.38 13.54 0 22.92-9.38ZM450-436.92h60v-240h-60v240ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e",
11029
+ info: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-290h60v-230h-60v230Zm52.92-307.75q9.39-9.29 9.39-23.02t-9.29-23.02q-9.29-9.28-23.02-9.28t-23.02 9.28q-9.29 9.29-9.29 23.02t9.39 23.02q9.38 9.29 22.92 9.29 13.54 0 22.92-9.29ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e",
11030
+ warning: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M74.62-140 480-840l405.38 700H74.62ZM178-200h604L480-720 178-200Zm324.92-57.08q9.39-9.38 9.39-22.92 0-13.54-9.39-22.92-9.38-9.39-22.92-9.39-13.54 0-22.92 9.39-9.39 9.38-9.39 22.92 0 13.54 9.39 22.92 9.38 9.39 22.92 9.39 13.54 0 22.92-9.39ZM450-352.31h60v-200h-60v200ZM480-460Z'/%3e%3c/svg%3e",
11031
+ lock: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M252.31-100q-29.92 0-51.12-21.19Q180-142.39 180-172.31v-375.38q0-29.92 21.19-51.12Q222.39-620 252.31-620H300v-80q0-74.92 52.54-127.46Q405.08-880 480-880q74.92 0 127.46 52.54Q660-774.92 660-700v80h47.69q29.92 0 51.12 21.19Q780-577.61 780-547.69v375.38q0 29.92-21.19 51.12Q737.61-100 707.69-100H252.31Zm0-60h455.38q5.39 0 8.85-3.46t3.46-8.85v-375.38q0-5.39-3.46-8.85t-8.85-3.46H252.31q-5.39 0-8.85 3.46t-3.46 8.85v375.38q0 5.39 3.46 8.85t8.85 3.46Zm277.27-150.42Q550-330.85 550-360t-20.42-49.58Q509.15-430 480-430t-49.58 20.42Q410-389.15 410-360t20.42 49.58Q450.85-290 480-290t49.58-20.42ZM360-620h240v-80q0-50-35-85t-85-35q-50 0-85 35t-35 85v80ZM240-160v-400 400Z'/%3e%3c/svg%3e",
11032
+ profile: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M381.04-533.35Q340-574.38 340-632.31q0-57.92 41.04-98.96 41.04-41.04 98.96-41.04 57.92 0 98.96 41.04Q620-690.23 620-632.31q0 57.93-41.04 98.96-41.04 41.04-98.96 41.04-57.92 0-98.96-41.04ZM180-187.69v-88.93q0-29.38 15.96-54.42 15.96-25.04 42.66-38.5 59.3-29.07 119.65-43.61 60.35-14.54 121.73-14.54t121.73 14.54q60.35 14.54 119.65 43.61 26.7 13.46 42.66 38.5Q780-306 780-276.62v88.93H180Zm60-60h480v-28.93q0-12.15-7.04-22.5-7.04-10.34-19.11-16.88-51.7-25.46-105.42-38.58Q534.7-367.69 480-367.69q-54.7 0-108.43 13.11-53.72 13.12-105.42 38.58-12.07 6.54-19.11 16.88-7.04 10.35-7.04 22.5v28.93Zm296.5-328.12q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5Zm-56.5-56.5Zm0 384.62Z'/%3e%3c/svg%3e",
11033
+ settings: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m387.69-100-15.23-121.85q-16.07-5.38-32.96-15.07-16.88-9.7-30.19-20.77L196.46-210l-92.3-160 97.61-73.77q-1.38-8.92-1.96-17.92-.58-9-.58-17.93 0-8.53.58-17.34t1.96-19.27L104.16-590l92.3-159.23 112.46 47.31q14.47-11.46 30.89-20.96t32.27-15.27L387.69-860h184.62l15.23 122.23q18 6.54 32.57 15.27 14.58 8.73 29.43 20.58l114-47.31L855.84-590l-99.15 74.92q2.15 9.69 2.35 18.12.19 8.42.19 16.96 0 8.15-.39 16.58-.38 8.42-2.76 19.27L854.46-370l-92.31 160-112.61-48.08q-14.85 11.85-30.31 20.96-15.46 9.12-31.69 14.89L572.31-100H387.69ZM440-160h78.62L533-267.15q30.62-8 55.96-22.73 25.35-14.74 48.89-37.89L737.23-286l39.39-68-86.77-65.38q5-15.54 6.8-30.47 1.81-14.92 1.81-30.15 0-15.62-1.81-30.15-1.8-14.54-6.8-29.7L777.38-606 738-674l-100.54 42.38q-20.08-21.46-48.11-37.92-28.04-16.46-56.73-23.31L520-800h-79.38l-13.24 106.77q-30.61 7.23-56.53 22.15-25.93 14.93-49.47 38.46L222-674l-39.38 68L269-541.62q-5 14.24-7 29.62t-2 32.38q0 15.62 2 30.62 2 15 6.62 29.62l-86 65.38L222-286l99-42q22.77 23.38 48.69 38.31 25.93 14.92 57.31 22.92L440-160Zm40.46-200q49.92 0 84.96-35.04 35.04-35.04 35.04-84.96 0-49.92-35.04-84.96Q530.38-600 480.46-600q-50.54 0-85.27 35.04T360.46-480q0 49.92 34.73 84.96Q429.92-360 480.46-360ZM480-480Z'/%3e%3c/svg%3e",
11034
+ notification: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M180-204.62v-59.99h72.31v-298.47q0-80.69 49.81-142.69 49.8-62 127.88-79.31V-810q0-20.83 14.57-35.42Q459.14-860 479.95-860q20.82 0 35.43 14.58Q530-830.83 530-810v24.92q78.08 17.31 127.88 79.31 49.81 62 49.81 142.69v298.47H780v59.99H180Zm300-293.07Zm-.07 405.38q-29.85 0-51.04-21.24-21.2-21.24-21.2-51.07h144.62q0 29.93-21.26 51.12-21.26 21.19-51.12 21.19Zm-167.62-172.3h335.38v-298.47q0-69.46-49.11-118.57-49.12-49.12-118.58-49.12-69.46 0-118.58 49.12-49.11 49.11-49.11 118.57v298.47Z'/%3e%3c/svg%3e",
11035
+ favorite: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m480-146.93-44.15-39.69q-99.46-90.23-164.5-155.07-65.04-64.85-103.08-115.43-38.04-50.57-53.15-92.27Q100-591.08 100-634q0-85.15 57.42-142.58Q214.85-834 300-834q52.38 0 99 24.5t81 70.27q34.38-45.77 81-70.27 46.62-24.5 99-24.5 85.15 0 142.58 57.42Q860-719.15 860-634q0 42.92-15.12 84.61-15.11 41.7-53.15 92.27-38.04 50.58-102.89 115.43Q624-276.85 524.15-186.62L480-146.93Zm0-81.07q96-86.38 158-148.08 62-61.69 98-107.19t50-80.81q14-35.3 14-69.92 0-60-40-100t-100-40q-47.38 0-87.58 26.88-40.19 26.89-63.65 74.81h-57.54q-23.85-48.31-63.85-75Q347.38-774 300-774q-59.62 0-99.81 40Q160-694 160-634q0 34.62 14 69.92 14 35.31 50 80.81t98 107q62 61.5 158 148.27Zm0-273Z'/%3e%3c/svg%3e",
11036
+ help: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M508.5-267.21q11.81-11.83 11.81-28.97 0-17.13-11.83-28.94-11.83-11.8-28.96-11.8-17.13 0-28.94 11.83-11.81 11.83-11.81 28.96 0 17.13 11.83 28.94 11.83 11.8 28.96 11.8 17.13 0 28.94-11.82Zm-57.27-131.41h56.31q.77-29.53 8.65-47.19 7.89-17.65 38.27-46.8 26.39-26.39 40.42-48.74 14.04-22.34 14.04-52.77 0-51.65-37.11-80.69-37.12-29.03-87.81-29.03-50.08 0-82.88 26.73-32.81 26.73-46.81 62.96l51.38 20.61q7.31-19.92 25-38.81 17.69-18.88 52.54-18.88 35.46 0 52.42 19.42 16.97 19.43 16.97 42.73 0 20.39-11.62 37.31-11.61 16.92-29.61 32.69-39.39 35.54-49.77 56.7-10.39 21.15-10.39 63.76ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e",
11037
+ calendar: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-100Q182-100 161-121q-21-21-21-51.31v-535.38Q140-738 161-759q21-21 51.31-21h55.38v-84.61h61.54V-780h303.08v-84.61h60V-780h55.38Q778-780 799-759q21 21 21 51.31v535.38Q820-142 799-121q-21 21-51.31 21H212.31Zm0-60h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-375.38H200v375.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85ZM200-607.69h560v-100q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H212.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v100Zm0 0V-720v112.31Zm280 210.77q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35Zm-185.04-10.35q-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35t-25.04-10.35ZM640-396.92q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35ZM480-240q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q494.69-240 480-240Zm-185.04-10.35q-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q334.69-240 320-240t-25.04-10.35ZM640-240q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q654.69-240 640-240Z'/%3e%3c/svg%3e",
10680
11038
  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 "
10681
11039
  };
10682
11040
  var BaseTypography = {
@@ -10842,7 +11200,7 @@ var BaseShadows = {
10842
11200
  warn: "0 0 5px rgba(255, 0, 0, 0.5), inset 0 0 5px rgba(255, 0, 0, 0.3)"
10843
11201
  };
10844
11202
  var BaseSpacing = {
10845
- none: "none",
11203
+ none: 0,
10846
11204
  xxs: "2px",
10847
11205
  xs: "4px",
10848
11206
  sm: "8px",
@@ -10994,6 +11352,17 @@ var buildComponents = (c) => ({
10994
11352
  backdropFilter: "blur(2px)"
10995
11353
  }
10996
11354
  } },
11355
+ dialogButtons: { options: {
11356
+ gap: "md",
11357
+ padding: "md",
11358
+ paddingBottom: "lg",
11359
+ justifyContent: "center",
11360
+ confirmButtonVariant: "primary",
11361
+ cancelButtonVariant: "warn",
11362
+ buttonSize: "lg",
11363
+ stretch: false,
11364
+ reverseOrder: false
11365
+ } },
10997
11366
  dialogHeader: { options: {
10998
11367
  borderRadius: "max",
10999
11368
  color: "primary",
@@ -11592,11 +11961,22 @@ ${recordLiteral(shadows, " ")}
11592
11961
  "const components = (colors: Colors): ComponentThemes => ({});",
11593
11962
  "",
11594
11963
  "/**",
11595
- " * Icon primitives, merged over the built-in set (close, search, spinner,",
11596
- " * chevrons, \u2026). Define an icon ONCE here as an inline SVG data URI \u2014 it is",
11597
- " * masked with currentColor, so it recolors with the theme \u2014 and render it",
11598
- " * anywhere via `<uni-icon name='\u2026'/>`. Never inline SVG in components.",
11599
- ` * Example: logo: "data:image/svg+xml,%3Csvg xmlns='\u2026' viewBox='0 0 24 24'%3E\u2026%3C/svg%3E",`,
11964
+ " * Icon primitives, merged over the built-in 34-icon set per name: reuse a",
11965
+ " * built-in name to reskin it, or add any new name. Define an icon ONCE here",
11966
+ " * and render it anywhere via `<uni-icon name='\u2026'/>` \u2014 never inline SVG in",
11967
+ " * components.",
11968
+ " *",
11969
+ " * Encode your own SVGs with `svgToIconUri` rather than by hand \u2014 it strips",
11970
+ " * fixed width/height, escapes the URI and rejects artwork that cannot",
11971
+ " * survive masking:",
11972
+ " *",
11973
+ " * import { svgToIconUri } from '@uni-design-system/uni-core';",
11974
+ " * const icons: Icons = { logo: svgToIconUri(readFileSync('logo.svg', 'utf8')) };",
11975
+ " *",
11976
+ " * Icons are masked with currentColor, so they recolor with the theme \u2014 but",
11977
+ " * that also means they are MONOCHROME: the mask uses the alpha channel, so a",
11978
+ " * multi-color mark flattens to its silhouette. Keep one grid (viewBox) across",
11979
+ " * your set, or the glyphs will not share an optical weight.",
11600
11980
  " */",
11601
11981
  "const icons: Icons = {};",
11602
11982
  "",
@@ -11624,6 +12004,48 @@ ${recordLiteral(radii, " ")}
11624
12004
  reportSummary
11625
12005
  };
11626
12006
  };
12007
+ var BLANK_PAINT = /* @__PURE__ */ new Set([
12008
+ "none",
12009
+ "transparent",
12010
+ "inherit",
12011
+ ""
12012
+ ]);
12013
+ function paintValues(svg) {
12014
+ const found = /* @__PURE__ */ new Set();
12015
+ for (const [, value] of svg.matchAll(/\b(?:fill|stroke)\s*=\s*["']([^"']*)["']/g)) {
12016
+ const paint = value.trim().toLowerCase();
12017
+ if (!BLANK_PAINT.has(paint)) found.add(paint);
12018
+ }
12019
+ for (const [, , value] of svg.matchAll(/\b(fill|stroke)\s*:\s*([^;"'}]+)/g)) {
12020
+ const paint = value.trim().toLowerCase();
12021
+ if (!BLANK_PAINT.has(paint)) found.add(paint);
12022
+ }
12023
+ return [...found];
12024
+ }
12025
+ function normalize(svg) {
12026
+ return svg.replace(/<\?xml[^>]*\?>/g, "").replace(/<!DOCTYPE[^>]*>/gi, "").replace(/<!--[\s\S]*?-->/g, "").replace(/\s(width|height)\s*=\s*["'][^"']*["']/g, "").replace(/\s+/g, " ").replace(/>\s+</g, "><").trim();
12027
+ }
12028
+ function encode(svg) {
12029
+ return "data:image/svg+xml," + svg.replace(/"/g, "'").replace(/%/g, "%25").replace(/#/g, "%23").replace(/</g, "%3c").replace(/>/g, "%3e");
12030
+ }
12031
+ function svgToIconUri(svg, options = {}) {
12032
+ const label = options.name ? `${options.name}: ` : "";
12033
+ const fail = (message) => {
12034
+ throw new Error(`${label}${message}`);
12035
+ };
12036
+ if (typeof svg !== "string" || !svg.trim()) fail("empty SVG source");
12037
+ const normalized = normalize(svg);
12038
+ if (!/^<svg[\s>]/i.test(normalized) || !/<\/svg>$/i.test(normalized)) fail("not a complete <svg> document");
12039
+ if (!/\bviewBox\s*=\s*["'][^"']+["']/i.test(normalized)) fail("no viewBox \u2014 the icon could not scale to its container");
12040
+ if (/<image\b/i.test(normalized)) fail("contains a raster <image>; masks need vector artwork");
12041
+ if (/\b(?:xlink:)?href\s*=\s*["'](?!#)/i.test(normalized)) fail("references an external resource, which a masked SVG cannot load");
12042
+ if (!options.allowMultiColor) {
12043
+ const paints = paintValues(normalized);
12044
+ if (paints.some((p) => p.startsWith("url("))) fail("paints with a gradient or pattern \u2014 masks use the alpha channel only, so it would flatten to a silhouette. Pass { allowMultiColor: true } to accept that.");
12045
+ if (paints.length > 1) fail(`paints in ${paints.length} colors (${paints.join(", ")}) \u2014 masks use the alpha channel only, so it would flatten to a silhouette in currentColor. Pass { allowMultiColor: true } to accept that.`);
12046
+ }
12047
+ return encode(normalized);
12048
+ }
11627
12049
  var GetBoxShadow = ({ offset, blur, opacity }) => {
11628
12050
  return `0 ${offset}px ${blur}px rgba(0,0,0,0.${opacity})`;
11629
12051
  };
@@ -11774,25 +12196,119 @@ ${failing.map((f) => `- ${f.mode} \`${f.foreground}\` on \`${f.background}\`: ${
11774
12196
  "- **Icons**: never inline SVG in components. Define an icon ONCE in the theme file's",
11775
12197
  " `icons` map as an inline SVG data URI \u2014 it is masked with `currentColor`, so it",
11776
12198
  " recolors with the theme \u2014 then render it anywhere with `<uni-icon name='\u2026'/>`.",
11777
- " A built-in set (close, search, spinner, chevrons, \u2026) ships with every theme.",
12199
+ " A built-in set of 34 icons ships with every theme (navigation, actions, feedback,",
12200
+ " user/system) \u2014 check `BaseIcons` before adding one; names are flat camelCase",
12201
+ " (`chevronDown`, `checkCircle`, `externalLink`) and `IconName` autocompletes them.",
12202
+ " To add your own, encode with `svgToIconUri` from uni-core rather than hand-writing",
12203
+ " a data URI \u2014 it strips fixed width/height, escapes the URI, and throws on artwork",
12204
+ " that cannot be masked. Icons are MONOCHROME (the mask uses the alpha channel), so a",
12205
+ " multi-color logo flattens to a silhouette; keep one viewBox grid across the set.",
11778
12206
  "- Never hardcode hex values in application components: style through `ThemeService`",
11779
12207
  " accessors and semantic token names so themes stay swappable."
11780
12208
  ].join("\n");
11781
12209
  }
11782
12210
 
12211
+ // src/server/icons.ts
12212
+ var DATA_URI = /^data:image\/svg\+xml[^,]*,/;
12213
+ function toCamelCase(name) {
12214
+ const cleaned = name.trim().replace(/\.svg$/i, "").replace(/[^A-Za-z0-9]+(.)?/g, (_, chr) => chr ? chr.toUpperCase() : "");
12215
+ return cleaned.charAt(0).toLowerCase() + cleaned.slice(1);
12216
+ }
12217
+ var decode = (uri) => decodeURIComponent(uri.replace(DATA_URI, ""));
12218
+ var viewBoxOf = (svg) => svg.match(/viewBox\s*=\s*["']([^"']+)["']/i)?.[1] ?? "unknown";
12219
+ var BASE_GRID = viewBoxOf(decode(BaseIcons.chevronDown));
12220
+ function formatIconTokens(icons) {
12221
+ if (!icons.length) {
12222
+ return "No icons supplied. Pass `icons: [{ name, svg }]` \u2014 `svg` may be raw SVG source or an already-encoded data URI.";
12223
+ }
12224
+ const encoded = [];
12225
+ const rejected = [];
12226
+ for (const { name, svg, allowMultiColor } of icons) {
12227
+ const tokenName = toCamelCase(name);
12228
+ const source = DATA_URI.test(svg.trim()) ? decode(svg.trim()) : svg;
12229
+ try {
12230
+ const uri = svgToIconUri(source, { name: tokenName, allowMultiColor });
12231
+ encoded.push({ name: tokenName, originalName: name, uri, viewBox: viewBoxOf(decode(uri)) });
12232
+ } catch (error) {
12233
+ const reason = error.message.replace(`${tokenName}: `, "").replace(
12234
+ /Pass \{ allowMultiColor: true \} to accept that\./,
12235
+ `Set \`allowMultiColor: true\` on \`${tokenName}\` and call again if a silhouette is intended.`
12236
+ );
12237
+ rejected.push({ name: tokenName, reason });
12238
+ }
12239
+ }
12240
+ const out = [];
12241
+ out.push(`# Icon tokens \u2014 ${encoded.length} of ${icons.length} encoded`);
12242
+ out.push("");
12243
+ if (encoded.length) {
12244
+ out.push("## Add to `uni-theme.ts`");
12245
+ out.push("");
12246
+ out.push("Merge these into the `icons` const. They are merged over the built-in set per");
12247
+ out.push('name, then rendered anywhere with `<uni-icon name="\u2026" />` \u2014 delete the inline');
12248
+ out.push("`<svg>` from the component.");
12249
+ out.push("");
12250
+ out.push("```ts");
12251
+ out.push("const icons: Icons = {");
12252
+ for (const { name, uri } of encoded) out.push(` ${name}: "${uri}",`);
12253
+ out.push("};");
12254
+ out.push("```");
12255
+ out.push("");
12256
+ }
12257
+ if (rejected.length) {
12258
+ out.push("## Not encoded");
12259
+ out.push("");
12260
+ out.push("These cannot render as a mask. Fix the artwork and call again.");
12261
+ out.push("");
12262
+ for (const { name, reason } of rejected) out.push(`- \`${name}\` \u2014 ${reason}`);
12263
+ out.push("");
12264
+ }
12265
+ const notes = [];
12266
+ const renamed = encoded.filter((e) => e.name !== e.originalName);
12267
+ if (renamed.length) {
12268
+ notes.push(
12269
+ `Renamed to the set's flat camelCase convention: ${renamed.map((e) => `\`${e.originalName}\` \u2192 \`${e.name}\``).join(", ")}.`
12270
+ );
12271
+ }
12272
+ const overrides = encoded.filter((e) => e.name in BaseIcons);
12273
+ if (overrides.length) {
12274
+ notes.push(
12275
+ `Overrides a built-in icon: ${overrides.map((e) => `\`${e.name}\``).join(", ")}. Intentional for rebranding a standard glyph; rename if you meant to add a new one.`
12276
+ );
12277
+ }
12278
+ const grids = [...new Set(encoded.map((e) => e.viewBox))];
12279
+ if (grids.length > 1) {
12280
+ notes.push(
12281
+ `Mixed viewBox grids (${grids.map((g) => `\`${g}\``).join(", ")}). Icons drawn on different grids will not share an optical weight or size. Re-export the set on one grid.`
12282
+ );
12283
+ } else if (grids.length === 1 && grids[0] !== BASE_GRID && overrides.length) {
12284
+ notes.push(
12285
+ `This set is drawn on \`${grids[0]}\` while the built-in set uses \`${BASE_GRID}\`. That is fine on its own, but a glyph overriding a built-in will sit next to un-overridden built-ins, so check they read at the same weight.`
12286
+ );
12287
+ }
12288
+ notes.push(
12289
+ 'Icons are masked with `currentColor`, so they are monochrome: the mask uses the alpha channel and any fill colors in the source are discarded. Color them by setting text color on the container, or with `<uni-icon color="\u2026" />`.'
12290
+ );
12291
+ out.push("## Notes");
12292
+ out.push("");
12293
+ for (const note of notes) out.push(`- ${note}`);
12294
+ return out.join("\n");
12295
+ }
12296
+
11783
12297
  // src/server/core.ts
11784
12298
  var FrameworkArg = z.enum(["angular", "react"]);
11785
12299
  function text(body) {
11786
12300
  return { content: [{ type: "text", text: body }] };
11787
12301
  }
11788
12302
  function notFound(kind, id) {
11789
- return text(`No ${kind} found with id \`${id}\`. Use the matching list/search tool to discover valid ids.`);
12303
+ return text(
12304
+ `No ${kind} found with id \`${id}\`. Use the matching list/search tool to discover valid ids.`
12305
+ );
11790
12306
  }
11791
12307
  function createUniServer() {
11792
12308
  const server = new McpServer(
11793
12309
  { name: "uni-design-system", version: meta.version },
11794
12310
  {
11795
- instructions: "Authoritative interface to the Uni Design System. Prefer these tools over recalling component APIs or token values from memory: names, props, and tokens here match the exact Uni release the developer installed. Start with `list-components` or `search`, then `get-component` / `get-component-examples`. Use real token ids (via `list-tokens`) instead of raw hex; apply themes with `get-theme-template` (style overrides go through Emotion, component options are props). To brand an app, call `generate-uni-theme` once and write the returned static `uni-theme.ts`; to change look and feel afterwards (colors, borders, per-component styling), edit that file's tokens directly \u2014 shared tokens propagate everywhere."
12311
+ instructions: 'Authoritative interface to the Uni Design System. Prefer these tools over recalling component APIs or token values from memory: names, props, and tokens here match the exact Uni release the developer installed. Start with `list-components` or `search`, then `get-component` / `get-component-examples`. Use real token ids (via `list-tokens`) instead of raw hex; apply themes with `get-theme-template` (style overrides go through Emotion, component options are props). To brand an app, call `generate-uni-theme` once and write the returned static `uni-theme.ts`; to change look and feel afterwards (colors, borders, per-component styling), edit that file\'s tokens directly \u2014 shared tokens propagate everywhere. Never inline `<svg>` in a component: when you meet inline SVG, or a brand icon set to import, call `create-icon-tokens` to convert it into theme icon tokens, add them to `uni-theme.ts`, and render with `<uni-icon name="\u2026" />`.'
11796
12312
  }
11797
12313
  );
11798
12314
  server.registerTool(
@@ -11813,7 +12329,10 @@ function createUniServer() {
11813
12329
  {
11814
12330
  title: "Get a Uni component",
11815
12331
  description: "Full reference for one component: description, per-framework import + selector/tag, complete API (inputs/outputs or props/events), related tokens, and a sample. Pass `framework` to scope to Angular or React.",
11816
- inputSchema: { id: z.string().describe('component id, e.g. "button"'), framework: FrameworkArg.optional() }
12332
+ inputSchema: {
12333
+ id: z.string().describe('component id, e.g. "button"'),
12334
+ framework: FrameworkArg.optional()
12335
+ }
11817
12336
  },
11818
12337
  async ({ id, framework }) => {
11819
12338
  const c = getComponent(id);
@@ -11850,7 +12369,9 @@ function createUniServer() {
11850
12369
  {
11851
12370
  title: "Get a design token",
11852
12371
  description: "Resolved value, type, style/behavioral classification, alias chain, and per-theme values for one token.",
11853
- inputSchema: { id: z.string().describe('token id, e.g. "color.primary" or "input.behavior.height"') }
12372
+ inputSchema: {
12373
+ id: z.string().describe('token id, e.g. "color.primary" or "input.behavior.height"')
12374
+ }
11854
12375
  },
11855
12376
  async ({ id }) => {
11856
12377
  const t = getToken(id);
@@ -11871,7 +12392,11 @@ function createUniServer() {
11871
12392
  );
11872
12393
  server.registerTool(
11873
12394
  "list-themes",
11874
- { title: "List theme templates", description: "Available Uni theme templates.", inputSchema: {} },
12395
+ {
12396
+ title: "List theme templates",
12397
+ description: "Available Uni theme templates.",
12398
+ inputSchema: {}
12399
+ },
11875
12400
  async () => text(formatThemeList(listThemes()))
11876
12401
  );
11877
12402
  server.registerTool(
@@ -11892,9 +12417,13 @@ function createUniServer() {
11892
12417
  title: "Generate a Uni brand theme file",
11893
12418
  description: "Generate a complete, WCAG-AA light+dark Uni theme from brand hex color(s) and return the static `uni-theme.ts` file content (write it to `src/app/uni-theme.ts`), the `UNI_THEMES` provider registration snippet, and a contrast report. The file is plain editable data and becomes the source of truth: later restyling means editing its tokens (colors, named border primitives, sparse component overrides) \u2014 not calling this tool again. Never hardcode hex in components; reference theme tokens.",
11894
12419
  inputSchema: {
11895
- brand: z.union([z.string(), z.array(z.string()).min(1).max(3)]).describe('Brand hex color(s), e.g. "#0052FF". 2\u20133 colors map to primary/secondary/tertiary.'),
12420
+ brand: z.union([z.string(), z.array(z.string()).min(1).max(3)]).describe(
12421
+ 'Brand hex color(s), e.g. "#0052FF". 2\u20133 colors map to primary/secondary/tertiary.'
12422
+ ),
11896
12423
  vibe: z.enum(["jewel", "pastel", "earth", "neutral", "florescent"]).optional().describe("Tonal character; defaults to a category inferred from the seed chroma."),
11897
- scheme: z.enum(["monochromatic", "analogous", "complimentary", "splitComplimentary", "triadic"]).optional().describe("Hue-wheel relationship for generated roles; auto-classified for multi-color input."),
12424
+ scheme: z.enum(["monochromatic", "analogous", "complimentary", "splitComplimentary", "triadic"]).optional().describe(
12425
+ "Hue-wheel relationship for generated roles; auto-classified for multi-color input."
12426
+ ),
11898
12427
  shape: z.enum(["sharp", "modern", "playful"]).optional().describe("Shape language \u2014 emits a radii override into the file."),
11899
12428
  name: z.string().optional().describe('Theme display name, defaults to "Brand".'),
11900
12429
  darkMode: z.boolean().optional().describe("Emit the dark theme too. Defaults to true.")
@@ -11902,6 +12431,25 @@ function createUniServer() {
11902
12431
  },
11903
12432
  async (args) => text(formatGeneratedTheme(args))
11904
12433
  );
12434
+ server.registerTool(
12435
+ "create-icon-tokens",
12436
+ {
12437
+ title: "Convert SVGs into Uni icon tokens",
12438
+ description: 'Convert raw SVG source into theme icon tokens and return a paste-ready `icons` map for `uni-theme.ts`. Use this whenever an app has inline `<svg>` in a component, or a brand icon set to import: move the artwork into the theme once, then render it anywhere with `<uni-icon name="\u2026" />`. Encodes to a `currentColor`-masked data URI (identical to the built-in set), reports which names override built-ins, flags artwork that cannot be masked (multi-color, gradients, no viewBox, raster or external references), and warns when a set mixes viewBox grids. Icons are monochrome \u2014 a multi-color logo flattens to a silhouette. Safe to re-run: already-encoded data URIs pass through unchanged.',
12439
+ inputSchema: {
12440
+ icons: z.array(
12441
+ z.object({
12442
+ name: z.string().describe('Token name, e.g. "acmeLogo". Converted to flat camelCase if needed.'),
12443
+ svg: z.string().describe("Raw SVG source, or an already-encoded data:image/svg+xml URI."),
12444
+ allowMultiColor: z.boolean().optional().describe(
12445
+ "Accept multi-color artwork, knowing the mask flattens it to a silhouette."
12446
+ )
12447
+ })
12448
+ ).min(1).describe("The icons to convert. Pass the whole set at once so grids can be compared.")
12449
+ }
12450
+ },
12451
+ async ({ icons }) => text(formatIconTokens(icons))
12452
+ );
11905
12453
  server.registerTool(
11906
12454
  "search",
11907
12455
  {
@@ -11921,9 +12469,15 @@ function registerResources(server) {
11921
12469
  server.registerResource(
11922
12470
  "meta",
11923
12471
  "uni://meta",
11924
- { title: "Uni index metadata", description: "Index version, Uni release, framework coverage, counts, build time.", mimeType: "application/json" },
12472
+ {
12473
+ title: "Uni index metadata",
12474
+ description: "Index version, Uni release, framework coverage, counts, build time.",
12475
+ mimeType: "application/json"
12476
+ },
11925
12477
  async (uri) => ({
11926
- contents: [{ uri: uri.href, mimeType: "application/json", text: JSON.stringify(meta, null, 2) }]
12478
+ contents: [
12479
+ { uri: uri.href, mimeType: "application/json", text: JSON.stringify(meta, null, 2) }
12480
+ ]
11927
12481
  })
11928
12482
  );
11929
12483
  server.registerResource(
@@ -11933,23 +12487,47 @@ function registerResources(server) {
11933
12487
  resources: listComponents().map((c) => ({ uri: `uni://components/${c.id}`, name: c.name, description: c.summary }))
11934
12488
  })
11935
12489
  }),
11936
- { title: "Uni component", description: "A component reference card.", mimeType: "text/markdown" },
12490
+ {
12491
+ title: "Uni component",
12492
+ description: "A component reference card.",
12493
+ mimeType: "text/markdown"
12494
+ },
11937
12495
  async (uri, { id }) => {
11938
12496
  const c = getComponent(String(id));
11939
- return { contents: [{ uri: uri.href, mimeType: "text/markdown", text: c ? formatComponent(c) : `Unknown component: ${id}` }] };
12497
+ return {
12498
+ contents: [
12499
+ {
12500
+ uri: uri.href,
12501
+ mimeType: "text/markdown",
12502
+ text: c ? formatComponent(c) : `Unknown component: ${id}`
12503
+ }
12504
+ ]
12505
+ };
11940
12506
  }
11941
12507
  );
11942
12508
  server.registerResource(
11943
12509
  "token",
11944
12510
  new ResourceTemplate("uni://tokens/{id}", {
11945
12511
  list: async () => ({
11946
- resources: listTokens().map((t) => ({ uri: `uni://tokens/${t.id}`, name: t.id, description: `${t.type} = ${t.value}` }))
12512
+ resources: listTokens().map((t) => ({
12513
+ uri: `uni://tokens/${t.id}`,
12514
+ name: t.id,
12515
+ description: `${t.type} = ${t.value}`
12516
+ }))
11947
12517
  })
11948
12518
  }),
11949
12519
  { title: "Uni token", description: "A design token.", mimeType: "text/markdown" },
11950
12520
  async (uri, { id }) => {
11951
12521
  const t = getToken(String(id));
11952
- return { contents: [{ uri: uri.href, mimeType: "text/markdown", text: t ? formatToken(t) : `Unknown token: ${id}` }] };
12522
+ return {
12523
+ contents: [
12524
+ {
12525
+ uri: uri.href,
12526
+ mimeType: "text/markdown",
12527
+ text: t ? formatToken(t) : `Unknown token: ${id}`
12528
+ }
12529
+ ]
12530
+ };
11953
12531
  }
11954
12532
  );
11955
12533
  server.registerResource(
@@ -11959,23 +12537,51 @@ function registerResources(server) {
11959
12537
  resources: listThemes().map((t) => ({ uri: `uni://themes/${t.id}`, name: t.name, description: t.description }))
11960
12538
  })
11961
12539
  }),
11962
- { title: "Uni theme template", description: "A theme template (style + component options).", mimeType: "text/markdown" },
12540
+ {
12541
+ title: "Uni theme template",
12542
+ description: "A theme template (style + component options).",
12543
+ mimeType: "text/markdown"
12544
+ },
11963
12545
  async (uri, { id }) => {
11964
12546
  const t = getTheme(String(id));
11965
- return { contents: [{ uri: uri.href, mimeType: "text/markdown", text: t ? formatTheme(t) : `Unknown theme: ${id}` }] };
12547
+ return {
12548
+ contents: [
12549
+ {
12550
+ uri: uri.href,
12551
+ mimeType: "text/markdown",
12552
+ text: t ? formatTheme(t) : `Unknown theme: ${id}`
12553
+ }
12554
+ ]
12555
+ };
11966
12556
  }
11967
12557
  );
11968
12558
  server.registerResource(
11969
12559
  "guidelines",
11970
12560
  new ResourceTemplate("uni://guidelines/{id}", {
11971
12561
  list: async () => ({
11972
- resources: listComponents().map((c) => ({ uri: `uni://guidelines/${c.id}`, name: `${c.name} guidelines`, description: c.summary }))
12562
+ resources: listComponents().map((c) => ({
12563
+ uri: `uni://guidelines/${c.id}`,
12564
+ name: `${c.name} guidelines`,
12565
+ description: c.summary
12566
+ }))
11973
12567
  })
11974
12568
  }),
11975
- { title: "Uni guidelines", description: "Authored usage guidance for a component.", mimeType: "text/markdown" },
12569
+ {
12570
+ title: "Uni guidelines",
12571
+ description: "Authored usage guidance for a component.",
12572
+ mimeType: "text/markdown"
12573
+ },
11976
12574
  async (uri, { id }) => {
11977
12575
  const c = getComponent(String(id));
11978
- return { contents: [{ uri: uri.href, mimeType: "text/markdown", text: c ? formatGuidelines(c) : `Unknown component: ${id}` }] };
12576
+ return {
12577
+ contents: [
12578
+ {
12579
+ uri: uri.href,
12580
+ mimeType: "text/markdown",
12581
+ text: c ? formatGuidelines(c) : `Unknown component: ${id}`
12582
+ }
12583
+ ]
12584
+ };
11979
12585
  }
11980
12586
  );
11981
12587
  }
@@ -11984,4 +12590,4 @@ export {
11984
12590
  meta,
11985
12591
  createUniServer
11986
12592
  };
11987
- //# sourceMappingURL=chunk-VQE52XFX.js.map
12593
+ //# sourceMappingURL=chunk-252ZWTTU.js.map