@uni-design-system/uni-mcp 4.4.0 → 4.6.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: "7.0.0",
11
- builtAt: "2026-07-29T15:41:45.453Z",
10
+ version: "8.0.0",
11
+ builtAt: "2026-08-11T20:20:04.699Z",
12
12
  frameworks: [
13
13
  "angular"
14
14
  ],
15
15
  counts: {
16
- components: 71,
17
- tokens: 305,
16
+ components: 72,
17
+ tokens: 331,
18
18
  themes: 2,
19
- examples: 133
19
+ examples: 150
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: "7.0.0",
30
+ version: "8.0.0",
31
31
  bindings: {
32
32
  angular: {
33
33
  importPath: "@uni-design-system/uni-angular",
@@ -101,7 +101,7 @@ var uni_index_default = {
101
101
  summary: "",
102
102
  description: "",
103
103
  category: "components",
104
- version: "7.0.0",
104
+ version: "8.0.0",
105
105
  bindings: {
106
106
  angular: {
107
107
  importPath: "@uni-design-system/uni-angular",
@@ -158,7 +158,7 @@ var uni_index_default = {
158
158
  summary: "",
159
159
  description: "",
160
160
  category: "components",
161
- version: "7.0.0",
161
+ version: "8.0.0",
162
162
  bindings: {
163
163
  angular: {
164
164
  importPath: "@uni-design-system/uni-angular",
@@ -237,7 +237,7 @@ var uni_index_default = {
237
237
  summary: "",
238
238
  description: "",
239
239
  category: "components",
240
- version: "7.0.0",
240
+ version: "8.0.0",
241
241
  bindings: {
242
242
  angular: {
243
243
  importPath: "@uni-design-system/uni-angular",
@@ -270,7 +270,7 @@ var uni_index_default = {
270
270
  summary: "",
271
271
  description: "",
272
272
  category: "primitives",
273
- version: "7.0.0",
273
+ version: "8.0.0",
274
274
  bindings: {
275
275
  angular: {
276
276
  importPath: "@uni-design-system/uni-angular",
@@ -351,7 +351,7 @@ var uni_index_default = {
351
351
  summary: "",
352
352
  description: "",
353
353
  category: "feedback",
354
- version: "7.0.0",
354
+ version: "8.0.0",
355
355
  bindings: {
356
356
  angular: {
357
357
  importPath: "@uni-design-system/uni-angular",
@@ -432,7 +432,7 @@ var uni_index_default = {
432
432
  summary: "",
433
433
  description: "",
434
434
  category: "directives",
435
- version: "7.0.0",
435
+ version: "8.0.0",
436
436
  bindings: {
437
437
  angular: {
438
438
  importPath: "@uni-design-system/uni-angular",
@@ -456,7 +456,7 @@ var uni_index_default = {
456
456
  summary: "",
457
457
  description: "",
458
458
  category: "layout",
459
- version: "7.0.0",
459
+ version: "8.0.0",
460
460
  bindings: {
461
461
  angular: {
462
462
  importPath: "@uni-design-system/uni-angular",
@@ -819,7 +819,7 @@ var uni_index_default = {
819
819
  summary: "",
820
820
  description: "",
821
821
  category: "components",
822
- version: "7.0.0",
822
+ version: "8.0.0",
823
823
  bindings: {
824
824
  angular: {
825
825
  importPath: "@uni-design-system/uni-angular",
@@ -888,7 +888,7 @@ var uni_index_default = {
888
888
  summary: "",
889
889
  description: "",
890
890
  category: "primitives",
891
- version: "7.0.0",
891
+ version: "8.0.0",
892
892
  bindings: {
893
893
  angular: {
894
894
  importPath: "@uni-design-system/uni-angular",
@@ -1031,7 +1031,7 @@ var uni_index_default = {
1031
1031
  summary: "",
1032
1032
  description: "",
1033
1033
  category: "primitives",
1034
- version: "7.0.0",
1034
+ version: "8.0.0",
1035
1035
  bindings: {
1036
1036
  angular: {
1037
1037
  importPath: "@uni-design-system/uni-angular",
@@ -1063,7 +1063,7 @@ var uni_index_default = {
1063
1063
  summary: "",
1064
1064
  description: "",
1065
1065
  category: "layout",
1066
- version: "7.0.0",
1066
+ version: "8.0.0",
1067
1067
  bindings: {
1068
1068
  angular: {
1069
1069
  importPath: "@uni-design-system/uni-angular",
@@ -1108,7 +1108,7 @@ var uni_index_default = {
1108
1108
  summary: "",
1109
1109
  description: "",
1110
1110
  category: "layout",
1111
- version: "7.0.0",
1111
+ version: "8.0.0",
1112
1112
  bindings: {
1113
1113
  angular: {
1114
1114
  importPath: "@uni-design-system/uni-angular",
@@ -1132,7 +1132,7 @@ var uni_index_default = {
1132
1132
  summary: "",
1133
1133
  description: "",
1134
1134
  category: "layout",
1135
- version: "7.0.0",
1135
+ version: "8.0.0",
1136
1136
  bindings: {
1137
1137
  angular: {
1138
1138
  importPath: "@uni-design-system/uni-angular",
@@ -1173,7 +1173,7 @@ var uni_index_default = {
1173
1173
  summary: "",
1174
1174
  description: "",
1175
1175
  category: "layout",
1176
- version: "7.0.0",
1176
+ version: "8.0.0",
1177
1177
  bindings: {
1178
1178
  angular: {
1179
1179
  importPath: "@uni-design-system/uni-angular",
@@ -1228,7 +1228,7 @@ var uni_index_default = {
1228
1228
  summary: "",
1229
1229
  description: "",
1230
1230
  category: "forms",
1231
- version: "7.0.0",
1231
+ version: "8.0.0",
1232
1232
  bindings: {
1233
1233
  angular: {
1234
1234
  importPath: "@uni-design-system/uni-angular",
@@ -1365,7 +1365,7 @@ var uni_index_default = {
1365
1365
  summary: "",
1366
1366
  description: "",
1367
1367
  category: "feedback",
1368
- version: "7.0.0",
1368
+ version: "8.0.0",
1369
1369
  bindings: {
1370
1370
  angular: {
1371
1371
  importPath: "@uni-design-system/uni-angular",
@@ -1412,7 +1412,7 @@ var uni_index_default = {
1412
1412
  summary: "",
1413
1413
  description: "",
1414
1414
  category: "forms",
1415
- version: "7.0.0",
1415
+ version: "8.0.0",
1416
1416
  bindings: {
1417
1417
  angular: {
1418
1418
  importPath: "@uni-design-system/uni-angular",
@@ -1481,7 +1481,7 @@ var uni_index_default = {
1481
1481
  }
1482
1482
  ],
1483
1483
  guidelines: {
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.',
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-display-data-table--data-table) \u2014 see its\n"With Search" story.',
1485
1485
  dos: [],
1486
1486
  donts: [],
1487
1487
  accessibility: []
@@ -1495,7 +1495,7 @@ var uni_index_default = {
1495
1495
  summary: "",
1496
1496
  description: "",
1497
1497
  category: "data",
1498
- version: "7.0.0",
1498
+ version: "8.0.0",
1499
1499
  bindings: {
1500
1500
  angular: {
1501
1501
  importPath: "@uni-design-system/uni-angular",
@@ -1596,7 +1596,7 @@ var uni_index_default = {
1596
1596
  summary: "",
1597
1597
  description: "",
1598
1598
  category: "forms",
1599
- version: "7.0.0",
1599
+ version: "8.0.0",
1600
1600
  bindings: {
1601
1601
  angular: {
1602
1602
  importPath: "@uni-design-system/uni-angular",
@@ -1705,7 +1705,7 @@ var uni_index_default = {
1705
1705
  }
1706
1706
  ],
1707
1707
  guidelines: {
1708
- whenToUse: "A themed text input that emits its `change` output only after the user pauses typing\n(400 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.",
1708
+ whenToUse: "A themed text input that emits its `change` output only after the user pauses typing\n(400 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--search-input), which\nprojects its magnifier and clear button through the slots and drives the combobox\nARIA through the passthroughs.",
1709
1709
  dos: [],
1710
1710
  donts: [],
1711
1711
  accessibility: [
@@ -1722,7 +1722,7 @@ var uni_index_default = {
1722
1722
  summary: "",
1723
1723
  description: "",
1724
1724
  category: "feedback",
1725
- version: "7.0.0",
1725
+ version: "8.0.0",
1726
1726
  bindings: {
1727
1727
  angular: {
1728
1728
  importPath: "@uni-design-system/uni-angular",
@@ -1800,7 +1800,7 @@ var uni_index_default = {
1800
1800
  summary: "",
1801
1801
  description: "",
1802
1802
  category: "feedback",
1803
- version: "7.0.0",
1803
+ version: "8.0.0",
1804
1804
  bindings: {
1805
1805
  angular: {
1806
1806
  importPath: "@uni-design-system/uni-angular",
@@ -1888,7 +1888,7 @@ var uni_index_default = {
1888
1888
  summary: "",
1889
1889
  description: "",
1890
1890
  category: "feedback",
1891
- version: "7.0.0",
1891
+ version: "8.0.0",
1892
1892
  bindings: {
1893
1893
  angular: {
1894
1894
  importPath: "@uni-design-system/uni-angular",
@@ -1912,7 +1912,7 @@ var uni_index_default = {
1912
1912
  summary: "",
1913
1913
  description: "",
1914
1914
  category: "layout",
1915
- version: "7.0.0",
1915
+ version: "8.0.0",
1916
1916
  bindings: {
1917
1917
  angular: {
1918
1918
  importPath: "@uni-design-system/uni-angular",
@@ -1968,7 +1968,7 @@ var uni_index_default = {
1968
1968
  summary: "",
1969
1969
  description: "",
1970
1970
  category: "directives",
1971
- version: "7.0.0",
1971
+ version: "8.0.0",
1972
1972
  bindings: {
1973
1973
  angular: {
1974
1974
  importPath: "@uni-design-system/uni-angular",
@@ -2000,7 +2000,7 @@ var uni_index_default = {
2000
2000
  summary: "",
2001
2001
  description: "",
2002
2002
  category: "components",
2003
- version: "7.0.0",
2003
+ version: "8.0.0",
2004
2004
  bindings: {
2005
2005
  angular: {
2006
2006
  importPath: "@uni-design-system/uni-angular",
@@ -2079,7 +2079,7 @@ var uni_index_default = {
2079
2079
  summary: "",
2080
2080
  description: "",
2081
2081
  category: "components",
2082
- version: "7.0.0",
2082
+ version: "8.0.0",
2083
2083
  bindings: {
2084
2084
  angular: {
2085
2085
  importPath: "@uni-design-system/uni-angular",
@@ -2130,6 +2130,34 @@ var uni_index_default = {
2130
2130
  required: false,
2131
2131
  description: ""
2132
2132
  },
2133
+ {
2134
+ name: "border",
2135
+ kind: "input",
2136
+ type: "Border | undefined",
2137
+ required: false,
2138
+ description: ""
2139
+ },
2140
+ {
2141
+ name: "borderRadius",
2142
+ kind: "input",
2143
+ type: "Radius | undefined",
2144
+ required: false,
2145
+ description: ""
2146
+ },
2147
+ {
2148
+ name: "shadow",
2149
+ kind: "input",
2150
+ type: "Shadow | undefined",
2151
+ required: false,
2152
+ description: ""
2153
+ },
2154
+ {
2155
+ name: "color",
2156
+ kind: "input",
2157
+ type: "ContainerColorToken | undefined",
2158
+ required: false,
2159
+ description: ""
2160
+ },
2133
2161
  {
2134
2162
  name: "dropdownShowing",
2135
2163
  kind: "output",
@@ -2168,7 +2196,7 @@ var uni_index_default = {
2168
2196
  summary: "",
2169
2197
  description: "",
2170
2198
  category: "layout",
2171
- version: "7.0.0",
2199
+ version: "8.0.0",
2172
2200
  bindings: {
2173
2201
  angular: {
2174
2202
  importPath: "@uni-design-system/uni-angular",
@@ -2181,6 +2209,13 @@ var uni_index_default = {
2181
2209
  required: false,
2182
2210
  default: "true",
2183
2211
  description: ""
2212
+ },
2213
+ {
2214
+ name: "transitionSpeed",
2215
+ kind: "input",
2216
+ type: "number",
2217
+ required: false,
2218
+ description: "Exact per-instance duration in seconds. Bypasses size-aware scaling \u2014 an explicit number means the consumer wants that number. Omitted, the duration derives from the `expand` theme options' `transitionSpeed` scaled by content height (see `duration`)."
2184
2219
  }
2185
2220
  ]
2186
2221
  }
@@ -2191,8 +2226,8 @@ var uni_index_default = {
2191
2226
  framework: "angular",
2192
2227
  code: `<!-- Storybook story: Primary -->
2193
2228
  <uni-card>
2194
- <uni-card-header title="Expandable Card"><uni-expand-toggle #toggle /></uni-card-header>
2195
- <uni-expand [collapsed]="toggle.collapsed()">
2229
+ <uni-card-header title="Expandable Card"><uni-expand-toggle #toggle [transitionSpeed]="expand.duration()" /></uni-card-header>
2230
+ <uni-expand #expand [collapsed]="toggle.collapsed()" [transitionSpeed]="transitionSpeed">
2196
2231
  <uni-card-content>
2197
2232
  <span uni-text>\${ngContent}</span>
2198
2233
  </uni-card-content>
@@ -2203,6 +2238,30 @@ var uni_index_default = {
2203
2238
  ngContent: 'Expandable Content',
2204
2239
  }
2205
2240
  -->`
2241
+ },
2242
+ {
2243
+ title: "Snappy",
2244
+ framework: "angular",
2245
+ code: `<!-- Storybook story: Snappy -->
2246
+ <uni-card>
2247
+ <uni-card-header title="Expandable Card"><uni-expand-toggle #toggle [transitionSpeed]="expand.duration()" /></uni-card-header>
2248
+ <uni-expand #expand [collapsed]="toggle.collapsed()" [transitionSpeed]="transitionSpeed">
2249
+ <uni-card-content>
2250
+ <span uni-text>\${ngContent}</span>
2251
+ </uni-card-content>
2252
+ </uni-expand>
2253
+ </uni-card>
2254
+ <!-- args:
2255
+ {
2256
+ ngContent: 'Reveals in exactly 150ms, regardless of content height.',
2257
+ transitionSpeed: 0.15,
2258
+ }
2259
+ -->`
2260
+ },
2261
+ {
2262
+ title: "Tall",
2263
+ framework: "angular",
2264
+ code: '<!-- Storybook story: Tall -->\n<uni-card>\n<uni-card-header title="Expandable Card"><uni-expand-toggle #toggle [transitionSpeed]="expand.duration()" /></uni-card-header>\n<uni-expand #expand [collapsed]="toggle.collapsed()" [transitionSpeed]="transitionSpeed">\n <uni-card-content>\n <span uni-text>${ngContent}</span>\n </uni-card-content>\n</uni-expand>\n</uni-card>\n<!-- args:\n{\n ngContent: Array.from(\n { length: 12 },\n (_, i) => `Row ${i + 1} of a tall reveal, timed to its height.`,\n ).join(\'<br>\'),\n }\n-->'
2206
2265
  }
2207
2266
  ],
2208
2267
  guidelines: {
@@ -2210,10 +2269,13 @@ var uni_index_default = {
2210
2269
  dos: [],
2211
2270
  donts: [],
2212
2271
  accessibility: [
2213
- "The toggle carries `aria-expanded` and `aria-controls` for its region (wired automatically inside Expand Area)."
2272
+ "The toggle carries `aria-expanded` and `aria-controls` for its region (wired automatically inside Expand Area).",
2273
+ "The reveal is motion-safe (WCAG 2.3.3): under `prefers-reduced-motion` the"
2214
2274
  ]
2215
2275
  },
2216
- relatedTokens: []
2276
+ relatedTokens: [
2277
+ "expand.behavior.transitionSpeed"
2278
+ ]
2217
2279
  },
2218
2280
  {
2219
2281
  id: "expand-area",
@@ -2222,7 +2284,7 @@ var uni_index_default = {
2222
2284
  summary: "",
2223
2285
  description: "",
2224
2286
  category: "layout",
2225
- version: "7.0.0",
2287
+ version: "8.0.0",
2226
2288
  bindings: {
2227
2289
  angular: {
2228
2290
  importPath: "@uni-design-system/uni-angular",
@@ -2293,7 +2355,7 @@ var uni_index_default = {
2293
2355
  summary: "",
2294
2356
  description: "",
2295
2357
  category: "forms",
2296
- version: "7.0.0",
2358
+ version: "8.0.0",
2297
2359
  bindings: {
2298
2360
  angular: {
2299
2361
  importPath: "@uni-design-system/uni-angular",
@@ -2313,6 +2375,27 @@ var uni_index_default = {
2313
2375
  type: "string",
2314
2376
  required: false,
2315
2377
  description: "Id of the Expand region this toggle controls (see UniExpandComponent.regionId)."
2378
+ },
2379
+ {
2380
+ name: "label",
2381
+ kind: "input",
2382
+ type: "string",
2383
+ required: false,
2384
+ description: "Names the region. Setting it switches the toggle to its labelled shape."
2385
+ },
2386
+ {
2387
+ name: "sublabel",
2388
+ kind: "input",
2389
+ type: "string",
2390
+ required: false,
2391
+ description: 'Muted qualifier beside the label ("for POs & custom orders"). Needs `label`.'
2392
+ },
2393
+ {
2394
+ name: "transitionSpeed",
2395
+ kind: "input",
2396
+ type: "number",
2397
+ required: false,
2398
+ description: "Rotation duration in seconds. Expand Area binds the region's resolved `duration` here so chevron and reveal share one clock even when the region is size-scaled or overridden per instance."
2316
2399
  }
2317
2400
  ]
2318
2401
  }
@@ -2322,13 +2405,31 @@ var uni_index_default = {
2322
2405
  title: "Primary",
2323
2406
  framework: "angular",
2324
2407
  code: '<!-- Storybook story: Primary -->\n<uni-expand-toggle [collapsed]="collapsed" #toggle />\n<div>Collapsed: {{ toggle.collapsed() }}</div>\n<!-- args:\n{\n collapsed: true,\n }\n-->'
2408
+ },
2409
+ {
2410
+ title: "Labelled",
2411
+ framework: "angular",
2412
+ code: `<!-- Storybook story: Labelled -->
2413
+ <uni-expand-toggle [collapsed]="collapsed" #toggle />
2414
+ <div>Collapsed: {{ toggle.collapsed() }}</div>
2415
+ <!-- args:
2416
+ {
2417
+ collapsed: true,
2418
+ label: 'Dimensions & Materials',
2419
+ sublabel: 'for POs & custom orders',
2420
+ }
2421
+ -->`
2325
2422
  }
2326
2423
  ],
2327
2424
  guidelines: {
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.',
2425
+ whenToUse: 'The Expand Toggle is a chevron icon button that controls collapsed/expanded state. It pairs\nwith the [Expand](?path=/docs/components-surfaces-expand--expand) 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.\nThe transform is applied to the glyph, not to the component host \u2014 the host is\nthe tooltip\'s anchor, so rotating it would carry the bubble around with it.',
2329
2426
  dos: [],
2330
2427
  donts: [],
2331
- accessibility: []
2428
+ accessibility: [
2429
+ "`aria-expanded` is set for you from `collapsed`.",
2430
+ "Pass `ariaControls` the Expand's `regionId` so the trigger points at its",
2431
+ "Rotation is motion-safe \u2014 it does not animate under `prefers-reduced-motion`."
2432
+ ]
2332
2433
  },
2333
2434
  relatedTokens: []
2334
2435
  },
@@ -2339,7 +2440,7 @@ var uni_index_default = {
2339
2440
  summary: "",
2340
2441
  description: "",
2341
2442
  category: "forms",
2342
- version: "7.0.0",
2443
+ version: "8.0.0",
2343
2444
  bindings: {
2344
2445
  angular: {
2345
2446
  importPath: "@uni-design-system/uni-angular",
@@ -2497,7 +2598,7 @@ var uni_index_default = {
2497
2598
  summary: "",
2498
2599
  description: "",
2499
2600
  category: "layout",
2500
- version: "7.0.0",
2601
+ version: "8.0.0",
2501
2602
  bindings: {
2502
2603
  angular: {
2503
2604
  importPath: "@uni-design-system/uni-angular",
@@ -2594,7 +2695,7 @@ var uni_index_default = {
2594
2695
  summary: "",
2595
2696
  description: "",
2596
2697
  category: "layout",
2597
- version: "7.0.0",
2698
+ version: "8.0.0",
2598
2699
  bindings: {
2599
2700
  angular: {
2600
2701
  importPath: "@uni-design-system/uni-angular",
@@ -2626,7 +2727,7 @@ var uni_index_default = {
2626
2727
  summary: "",
2627
2728
  description: "",
2628
2729
  category: "primitives",
2629
- version: "7.0.0",
2730
+ version: "8.0.0",
2630
2731
  bindings: {
2631
2732
  angular: {
2632
2733
  importPath: "@uni-design-system/uni-angular",
@@ -2645,6 +2746,13 @@ var uni_index_default = {
2645
2746
  type: "IconName",
2646
2747
  required: true,
2647
2748
  description: ""
2749
+ },
2750
+ {
2751
+ name: "size",
2752
+ kind: "input",
2753
+ type: "CssLength",
2754
+ required: false,
2755
+ description: "Explicit square size. Bare numbers are px; strings pass through, so any CSS length works (`'1.25rem'`, `'1em'`, `'clamp(\u2026)'`). Leave it unset to keep the default behaviour \u2014 the icon fills its container, which is what lets a themed control size its own glyph through padding. Set it at call sites that would otherwise need a width/height rule just to size one icon."
2648
2756
  }
2649
2757
  ]
2650
2758
  }
@@ -2653,11 +2761,16 @@ var uni_index_default = {
2653
2761
  {
2654
2762
  title: "Primary",
2655
2763
  framework: "angular",
2656
- code: '<!-- Storybook story: Primary -->\n<div box-layout height="${size}px">\n <uni-icon name="${name}" color="${color}" />\n </div>\n<!-- args:\n{\n name: \'checkCircle\',\n }\n-->'
2764
+ code: '<!-- Storybook story: Primary -->\n<div box-layout height="${containerSize}px">\n <uni-icon name="${name}" color="${color}" ${size ?\n<!-- args:\n{\n name: \'checkCircle\',\n }\n-->'
2765
+ },
2766
+ {
2767
+ title: "Explicit Size",
2768
+ framework: "angular",
2769
+ code: '<!-- Storybook story: Explicit Size -->\n<div box-layout height="${containerSize}px">\n <uni-icon name="${name}" color="${color}" ${size ?\n<!-- args:\n{\n name: \'checkCircle\',\n size: 20,\n containerSize: 48,\n }\n-->'
2657
2770
  }
2658
2771
  ],
2659
2772
  guidelines: {
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.",
2773
+ whenToUse: "Icons are adaptive svg images. By default they grow to the space allotted to them and\nuse the current color of the parent element \u2014 so a themed control can size its own glyph\nthrough padding, and recoloring the container recolors the icon.\nBoth defaults can be overridden:\n- `color` statically sets the icon color, ignoring `currentColor`.\n- `size` sets an explicit square size, for call sites that would otherwise need a\n width/height CSS rule just to size one icon. Bare numbers are px; strings pass\n through, so any CSS length works.\n```html\n```\nLeave `size` off wherever the container already defines the box \u2014 that is still the\npreferred form, and it is what keeps a themed `icon-button` in control of its glyph.",
2661
2774
  dos: [],
2662
2775
  donts: [],
2663
2776
  accessibility: [
@@ -2674,7 +2787,7 @@ var uni_index_default = {
2674
2787
  summary: "",
2675
2788
  description: "",
2676
2789
  category: "primitives",
2677
- version: "7.0.0",
2790
+ version: "8.0.0",
2678
2791
  bindings: {
2679
2792
  angular: {
2680
2793
  importPath: "@uni-design-system/uni-angular",
@@ -2777,7 +2890,7 @@ var uni_index_default = {
2777
2890
  summary: "",
2778
2891
  description: "",
2779
2892
  category: "forms",
2780
- version: "7.0.0",
2893
+ version: "8.0.0",
2781
2894
  bindings: {
2782
2895
  angular: {
2783
2896
  importPath: "@uni-design-system/uni-angular",
@@ -2922,7 +3035,7 @@ var uni_index_default = {
2922
3035
  summary: "",
2923
3036
  description: "",
2924
3037
  category: "forms",
2925
- version: "7.0.0",
3038
+ version: "8.0.0",
2926
3039
  bindings: {
2927
3040
  angular: {
2928
3041
  importPath: "@uni-design-system/uni-angular",
@@ -2981,7 +3094,7 @@ var uni_index_default = {
2981
3094
  }
2982
3095
  ],
2983
3096
  guidelines: {
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.",
3097
+ whenToUse: "The Input Box is the themed shell shared by all text-like form controls\n([Input](?path=/docs/components-forms-input--input),\n[Select](?path=/docs/components-forms-select--select), 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.",
2985
3098
  dos: [],
2986
3099
  donts: [],
2987
3100
  accessibility: []
@@ -2995,7 +3108,7 @@ var uni_index_default = {
2995
3108
  summary: "",
2996
3109
  description: "",
2997
3110
  category: "components",
2998
- version: "7.0.0",
3111
+ version: "8.0.0",
2999
3112
  bindings: {
3000
3113
  angular: {
3001
3114
  importPath: "@uni-design-system/uni-angular",
@@ -3065,7 +3178,7 @@ var uni_index_default = {
3065
3178
  summary: "",
3066
3179
  description: "",
3067
3180
  category: "layout",
3068
- version: "7.0.0",
3181
+ version: "8.0.0",
3069
3182
  bindings: {
3070
3183
  angular: {
3071
3184
  importPath: "@uni-design-system/uni-angular",
@@ -3121,11 +3234,32 @@ var uni_index_default = {
3121
3234
  { label: 'Logout', symbolName: 'logout' },
3122
3235
  ],
3123
3236
  }
3237
+ -->`
3238
+ },
3239
+ {
3240
+ title: "Tones",
3241
+ framework: "angular",
3242
+ code: `<!-- Storybook story: Tones -->
3243
+ <div box-layout color="primary" padding="sm">
3244
+ <uni-menu \${argsToTemplate(props)}>
3245
+ <button text-button variant="ghost" symbolRight="arrow_drop_down">Menu</button>
3246
+ </uni-menu>
3247
+ </div>
3248
+ <!-- args:
3249
+ {
3250
+ menuItems: [
3251
+ { label: 'Rename', symbolName: 'edit' },
3252
+ { label: 'Duplicate', symbolName: 'content_copy' },
3253
+ { label: 'Share', symbolName: 'share', disabled: true },
3254
+ { divider: true },
3255
+ { label: 'Delete', symbolName: 'delete', variant: 'warn' },
3256
+ ],
3257
+ }
3124
3258
  -->`
3125
3259
  }
3126
3260
  ],
3127
3261
  guidelines: {
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```",
3262
+ 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\nAn item is either a labeled action, a templated action, or a divider:\n```\nMenuItem =\n | { label: string; symbolName?: string; action?: () => void;\n variant?: Variant; disabled?: boolean }\n | { template: TemplateRef<T>; context: T; symbolName?: string;\n action?: () => void; variant?: Variant; disabled?: boolean }\n | { divider: true }\n```\n- `variant` routes through the theme's `menuItem` variants \u2014 e.g. `variant: 'warn'`\n renders the item in the theme's destructive tone.\n- `disabled` items render with the disabled color and are skipped by keyboard\n navigation.\n- `{ divider: true }` renders a `role=\"separator\"` rule styled by the `menu`\n theme options.",
3129
3263
  dos: [],
3130
3264
  donts: [],
3131
3265
  accessibility: [
@@ -3133,7 +3267,13 @@ var uni_index_default = {
3133
3267
  "ArrowDown/ArrowUp on the trigger opens onto the first/last item; focus returns to the trigger on close."
3134
3268
  ]
3135
3269
  },
3136
- relatedTokens: []
3270
+ relatedTokens: [
3271
+ "menu.behavior.minWidth",
3272
+ "menu.behavior.paddingVertical",
3273
+ "menu.behavior.paddingHorizontal",
3274
+ "menu.behavior.dividerBorder",
3275
+ "menu.behavior.dividerSpacing"
3276
+ ]
3137
3277
  },
3138
3278
  {
3139
3279
  id: "menu-item",
@@ -3142,52 +3282,12 @@ var uni_index_default = {
3142
3282
  summary: "",
3143
3283
  description: "",
3144
3284
  category: "layout",
3145
- version: "7.0.0",
3285
+ version: "8.0.0",
3146
3286
  bindings: {
3147
3287
  angular: {
3148
3288
  importPath: "@uni-design-system/uni-angular",
3149
3289
  selectorOrTag: "[uni-menu-item], [menu-item]",
3150
3290
  api: [
3151
- {
3152
- name: "display",
3153
- kind: "input",
3154
- type: "OptionalDisplay",
3155
- required: false,
3156
- default: "'flex'",
3157
- description: ""
3158
- },
3159
- {
3160
- name: "flexDirection",
3161
- kind: "input",
3162
- type: "OptionalFlexDirection",
3163
- required: false,
3164
- default: "'row'",
3165
- description: ""
3166
- },
3167
- {
3168
- name: "alignItems",
3169
- kind: "input",
3170
- type: "OptionalAlignItems",
3171
- required: false,
3172
- default: "'center'",
3173
- description: ""
3174
- },
3175
- {
3176
- name: "paddingHorizontal",
3177
- kind: "input",
3178
- type: "OptionalSize",
3179
- required: false,
3180
- default: "'md'",
3181
- description: ""
3182
- },
3183
- {
3184
- name: "gap",
3185
- kind: "input",
3186
- type: "OptionalSize",
3187
- required: false,
3188
- default: "'md'",
3189
- description: ""
3190
- },
3191
3291
  {
3192
3292
  name: "label",
3193
3293
  kind: "input",
@@ -3223,13 +3323,19 @@ var uni_index_default = {
3223
3323
  required: false,
3224
3324
  description: ""
3225
3325
  },
3326
+ {
3327
+ name: "variant",
3328
+ kind: "input",
3329
+ type: "Variant | undefined",
3330
+ required: false,
3331
+ description: "Tone routed through the theme's `menuItem` variants (e.g. 'warn')."
3332
+ },
3226
3333
  {
3227
3334
  name: "hoverColor",
3228
3335
  kind: "input",
3229
- type: "ContainerColorToken",
3336
+ type: "ContainerColorToken | undefined",
3230
3337
  required: false,
3231
- default: "'primary-container'",
3232
- description: ""
3338
+ description: "Per-instance override of the theme's `menuItem.hoverColor`."
3233
3339
  },
3234
3340
  {
3235
3341
  name: "disabled",
@@ -3258,7 +3364,7 @@ var uni_index_default = {
3258
3364
  summary: "",
3259
3365
  description: "",
3260
3366
  category: "forms",
3261
- version: "7.0.0",
3367
+ version: "8.0.0",
3262
3368
  bindings: {
3263
3369
  angular: {
3264
3370
  importPath: "@uni-design-system/uni-angular",
@@ -3346,7 +3452,7 @@ var uni_index_default = {
3346
3452
  summary: "",
3347
3453
  description: "",
3348
3454
  category: "forms",
3349
- version: "7.0.0",
3455
+ version: "8.0.0",
3350
3456
  bindings: {
3351
3457
  angular: {
3352
3458
  importPath: "@uni-design-system/uni-angular",
@@ -3421,6 +3527,21 @@ var uni_index_default = {
3421
3527
  required: false,
3422
3528
  default: "''",
3423
3529
  description: ""
3530
+ },
3531
+ {
3532
+ name: "label",
3533
+ kind: "input",
3534
+ type: "string",
3535
+ required: false,
3536
+ description: 'What the field is for, e.g. "Fruits". Rendered visually hidden inside the trigger so its accessible name reads "Fruits, Apple, Pear" \u2014 without it a screen reader announces only the current selection, with no clue which field it belongs to.'
3537
+ },
3538
+ {
3539
+ name: "debounceTime",
3540
+ kind: "input",
3541
+ type: "number",
3542
+ required: false,
3543
+ default: "200",
3544
+ description: "Debounce for the filter box, matching the library's input debounce."
3424
3545
  }
3425
3546
  ]
3426
3547
  }
@@ -3481,7 +3602,7 @@ var uni_index_default = {
3481
3602
  summary: "",
3482
3603
  description: "",
3483
3604
  category: "feedback",
3484
- version: "7.0.0",
3605
+ version: "8.0.0",
3485
3606
  bindings: {
3486
3607
  angular: {
3487
3608
  importPath: "@uni-design-system/uni-angular",
@@ -3725,7 +3846,7 @@ var uni_index_default = {
3725
3846
  summary: "",
3726
3847
  description: "",
3727
3848
  category: "feedback",
3728
- version: "7.0.0",
3849
+ version: "8.0.0",
3729
3850
  bindings: {
3730
3851
  angular: {
3731
3852
  importPath: "@uni-design-system/uni-angular",
@@ -3749,7 +3870,7 @@ var uni_index_default = {
3749
3870
  summary: "",
3750
3871
  description: "",
3751
3872
  category: "data",
3752
- version: "7.0.0",
3873
+ version: "8.0.0",
3753
3874
  bindings: {
3754
3875
  angular: {
3755
3876
  importPath: "@uni-design-system/uni-angular",
@@ -3809,7 +3930,7 @@ var uni_index_default = {
3809
3930
  }
3810
3931
  ],
3811
3932
  guidelines: {
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.",
3933
+ 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-display-data-table--data-table) stories use one paginator in the header\nfor page size and another in the footer for page numbers.",
3813
3934
  dos: [],
3814
3935
  donts: [],
3815
3936
  accessibility: [
@@ -3834,7 +3955,7 @@ var uni_index_default = {
3834
3955
  summary: "",
3835
3956
  description: "",
3836
3957
  category: "layout",
3837
- version: "7.0.0",
3958
+ version: "8.0.0",
3838
3959
  bindings: {
3839
3960
  angular: {
3840
3961
  importPath: "@uni-design-system/uni-angular",
@@ -3883,7 +4004,7 @@ var uni_index_default = {
3883
4004
  summary: "",
3884
4005
  description: "",
3885
4006
  category: "feedback",
3886
- version: "7.0.0",
4007
+ version: "8.0.0",
3887
4008
  bindings: {
3888
4009
  angular: {
3889
4010
  importPath: "@uni-design-system/uni-angular",
@@ -3947,7 +4068,7 @@ var uni_index_default = {
3947
4068
  summary: "",
3948
4069
  description: "",
3949
4070
  category: "feedback",
3950
- version: "7.0.0",
4071
+ version: "8.0.0",
3951
4072
  bindings: {
3952
4073
  angular: {
3953
4074
  importPath: "@uni-design-system/uni-angular",
@@ -4003,7 +4124,7 @@ var uni_index_default = {
4003
4124
  summary: "",
4004
4125
  description: "",
4005
4126
  category: "forms",
4006
- version: "7.0.0",
4127
+ version: "8.0.0",
4007
4128
  bindings: {
4008
4129
  angular: {
4009
4130
  importPath: "@uni-design-system/uni-angular",
@@ -4154,7 +4275,7 @@ var uni_index_default = {
4154
4275
  summary: "",
4155
4276
  description: "",
4156
4277
  category: "directives",
4157
- version: "7.0.0",
4278
+ version: "8.0.0",
4158
4279
  bindings: {
4159
4280
  angular: {
4160
4281
  importPath: "@uni-design-system/uni-angular",
@@ -4178,7 +4299,7 @@ var uni_index_default = {
4178
4299
  summary: "",
4179
4300
  description: "",
4180
4301
  category: "layout",
4181
- version: "7.0.0",
4302
+ version: "8.0.0",
4182
4303
  bindings: {
4183
4304
  angular: {
4184
4305
  importPath: "@uni-design-system/uni-angular",
@@ -4233,7 +4354,7 @@ var uni_index_default = {
4233
4354
  summary: "",
4234
4355
  description: "",
4235
4356
  category: "layout",
4236
- version: "7.0.0",
4357
+ version: "8.0.0",
4237
4358
  bindings: {
4238
4359
  angular: {
4239
4360
  importPath: "@uni-design-system/uni-angular",
@@ -4380,7 +4501,7 @@ var uni_index_default = {
4380
4501
  summary: "",
4381
4502
  description: "",
4382
4503
  category: "forms",
4383
- version: "7.0.0",
4504
+ version: "8.0.0",
4384
4505
  bindings: {
4385
4506
  angular: {
4386
4507
  importPath: "@uni-design-system/uni-angular",
@@ -4491,7 +4612,7 @@ var uni_index_default = {
4491
4612
  summary: "",
4492
4613
  description: "",
4493
4614
  category: "forms",
4494
- version: "7.0.0",
4615
+ version: "8.0.0",
4495
4616
  bindings: {
4496
4617
  angular: {
4497
4618
  importPath: "@uni-design-system/uni-angular",
@@ -4627,7 +4748,7 @@ var uni_index_default = {
4627
4748
  summary: "",
4628
4749
  description: "",
4629
4750
  category: "components",
4630
- version: "7.0.0",
4751
+ version: "8.0.0",
4631
4752
  bindings: {
4632
4753
  angular: {
4633
4754
  importPath: "@uni-design-system/uni-angular",
@@ -4723,7 +4844,7 @@ var uni_index_default = {
4723
4844
  summary: "",
4724
4845
  description: "",
4725
4846
  category: "forms",
4726
- version: "7.0.0",
4847
+ version: "8.0.0",
4727
4848
  bindings: {
4728
4849
  angular: {
4729
4850
  importPath: "@uni-design-system/uni-angular",
@@ -4860,7 +4981,7 @@ var uni_index_default = {
4860
4981
  summary: "",
4861
4982
  description: "",
4862
4983
  category: "feedback",
4863
- version: "7.0.0",
4984
+ version: "8.0.0",
4864
4985
  bindings: {
4865
4986
  angular: {
4866
4987
  importPath: "@uni-design-system/uni-angular",
@@ -4952,7 +5073,7 @@ var uni_index_default = {
4952
5073
  summary: "",
4953
5074
  description: "",
4954
5075
  category: "data",
4955
- version: "7.0.0",
5076
+ version: "8.0.0",
4956
5077
  bindings: {
4957
5078
  angular: {
4958
5079
  importPath: "@uni-design-system/uni-angular",
@@ -4997,7 +5118,7 @@ var uni_index_default = {
4997
5118
  }
4998
5119
  ],
4999
5120
  guidelines: {
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`.",
5121
+ 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-display-data-table--data-table)\nfor sortable columns, but can wrap any header content bound to a `UniDatasource`.",
5001
5122
  dos: [],
5002
5123
  donts: [],
5003
5124
  accessibility: []
@@ -5011,7 +5132,7 @@ var uni_index_default = {
5011
5132
  summary: "",
5012
5133
  description: "",
5013
5134
  category: "layout",
5014
- version: "7.0.0",
5135
+ version: "8.0.0",
5015
5136
  bindings: {
5016
5137
  angular: {
5017
5138
  importPath: "@uni-design-system/uni-angular",
@@ -5066,7 +5187,7 @@ var uni_index_default = {
5066
5187
  summary: "",
5067
5188
  description: "",
5068
5189
  category: "components",
5069
- version: "7.0.0",
5190
+ version: "8.0.0",
5070
5191
  bindings: {
5071
5192
  angular: {
5072
5193
  importPath: "@uni-design-system/uni-angular",
@@ -5168,7 +5289,7 @@ var uni_index_default = {
5168
5289
  summary: "",
5169
5290
  description: "",
5170
5291
  category: "primitives",
5171
- version: "7.0.0",
5292
+ version: "8.0.0",
5172
5293
  bindings: {
5173
5294
  angular: {
5174
5295
  importPath: "@uni-design-system/uni-angular",
@@ -5241,7 +5362,7 @@ var uni_index_default = {
5241
5362
  summary: "",
5242
5363
  description: "",
5243
5364
  category: "components",
5244
- version: "7.0.0",
5365
+ version: "8.0.0",
5245
5366
  bindings: {
5246
5367
  angular: {
5247
5368
  importPath: "@uni-design-system/uni-angular",
@@ -5281,7 +5402,7 @@ var uni_index_default = {
5281
5402
  summary: "",
5282
5403
  description: "",
5283
5404
  category: "components",
5284
- version: "7.0.0",
5405
+ version: "8.0.0",
5285
5406
  bindings: {
5286
5407
  angular: {
5287
5408
  importPath: "@uni-design-system/uni-angular",
@@ -5345,12 +5466,28 @@ var uni_index_default = {
5345
5466
  summary: "",
5346
5467
  description: "",
5347
5468
  category: "data",
5348
- version: "7.0.0",
5469
+ version: "8.0.0",
5349
5470
  bindings: {
5350
5471
  angular: {
5351
5472
  importPath: "@uni-design-system/uni-angular",
5352
5473
  selectorOrTag: "uni-tag",
5353
5474
  api: [
5475
+ {
5476
+ name: "size",
5477
+ kind: "input",
5478
+ type: "Size",
5479
+ required: false,
5480
+ default: "'md'",
5481
+ description: ""
5482
+ },
5483
+ {
5484
+ name: "tone",
5485
+ kind: "input",
5486
+ type: "TagTone",
5487
+ required: false,
5488
+ default: "'soft'",
5489
+ description: ""
5490
+ },
5354
5491
  {
5355
5492
  name: "label",
5356
5493
  kind: "input",
@@ -5366,118 +5503,714 @@ var uni_index_default = {
5366
5503
  description: ""
5367
5504
  },
5368
5505
  {
5369
- name: "close",
5370
- kind: "output",
5506
+ name: "maxWidth",
5507
+ kind: "input",
5371
5508
  type: "string | number",
5372
5509
  required: false,
5510
+ description: "Truncation budget, e.g. `'14ch'`. A number is treated as px."
5511
+ },
5512
+ {
5513
+ name: "avatarSrc",
5514
+ kind: "input",
5515
+ type: "string",
5516
+ required: false,
5373
5517
  description: ""
5374
- }
5375
- ]
5376
- }
5377
- },
5378
- examples: [
5379
- {
5380
- title: "Primary",
5381
- framework: "angular",
5382
- code: "<!-- Storybook story: Primary -->\n<!-- args:\n{\n label: 'Primary Tag',\n value: '1',\n }\n-->"
5383
- },
5384
- {
5385
- title: "Numeric Value",
5386
- framework: "angular",
5387
- code: "<!-- Storybook story: Numeric Value -->\n<!-- args:\n{\n label: 'Numeric Tag',\n value: 42,\n }\n-->"
5388
- },
5389
- {
5390
- title: "Long Label",
5391
- framework: "angular",
5392
- code: "<!-- Storybook story: Long Label -->\n<!-- args:\n{\n label: 'This is a very long tag label that might need truncation',\n value: 'long',\n }\n-->"
5393
- },
5394
- {
5395
- title: "Without Value",
5396
- framework: "angular",
5397
- code: "<!-- Storybook story: Without Value -->\n<!-- args:\n{\n label: 'Tag without value',\n }\n-->"
5398
- }
5399
- ],
5400
- guidelines: {
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.",
5402
- dos: [],
5403
- donts: [],
5404
- accessibility: []
5405
- },
5406
- relatedTokens: []
5407
- },
5408
- {
5409
- id: "text",
5410
- name: "Text",
5411
- status: "stable",
5412
- summary: "",
5413
- description: "",
5414
- category: "primitives",
5415
- version: "7.0.0",
5416
- bindings: {
5417
- angular: {
5418
- importPath: "@uni-design-system/uni-angular",
5419
- selectorOrTag: "[uni-text]",
5420
- api: [
5518
+ },
5421
5519
  {
5422
- name: "uniText",
5520
+ name: "avatarName",
5423
5521
  kind: "input",
5424
- type: "Typeface | ''",
5522
+ type: "string",
5425
5523
  required: false,
5426
- default: "'', { alias: 'uni-text' }",
5427
- description: 'Typeface via the selector attribute: `uni-text="headline-large"`.'
5524
+ description: "Initials fallback when `avatarSrc` is absent or fails to load."
5428
5525
  },
5429
5526
  {
5430
- name: "typeface",
5527
+ name: "iconName",
5431
5528
  kind: "input",
5432
- type: "Typeface | undefined",
5529
+ type: "IconName",
5433
5530
  required: false,
5434
- default: "undefined",
5435
- description: "Explicit typeface; the attribute value wins when both are set."
5531
+ description: "Theme icon primitive \u2014 the preferred glyph path."
5436
5532
  },
5437
5533
  {
5438
- name: "color",
5534
+ name: "symbolName",
5439
5535
  kind: "input",
5440
- type: "ColorKey",
5536
+ type: "string",
5441
5537
  required: false,
5442
- description: ""
5538
+ description: "Material Symbols ligature, for glyphs the theme's icon set doesn't carry."
5443
5539
  },
5444
5540
  {
5445
- name: "display",
5541
+ name: "dot",
5446
5542
  kind: "input",
5447
- type: "OptionalDisplay",
5543
+ type: "boolean",
5448
5544
  required: false,
5449
- description: ""
5545
+ default: "false",
5546
+ description: "Status dot in the current colour."
5450
5547
  },
5451
5548
  {
5452
- name: "align",
5549
+ name: "removable",
5453
5550
  kind: "input",
5454
- type: "OptionalTextAlign",
5551
+ type: "boolean",
5455
5552
  required: false,
5553
+ default: "false",
5456
5554
  description: ""
5457
5555
  },
5458
5556
  {
5459
- name: "nowrap",
5557
+ name: "interactive",
5460
5558
  kind: "input",
5461
5559
  type: "boolean",
5462
5560
  required: false,
5561
+ default: "false",
5463
5562
  description: ""
5464
5563
  },
5465
5564
  {
5466
- name: "maxWidth",
5565
+ name: "selected",
5467
5566
  kind: "input",
5468
- type: "number",
5567
+ type: "boolean | undefined",
5469
5568
  required: false,
5470
- description: ""
5569
+ default: "undefined",
5570
+ description: 'Toggle state. Left undefined the chip carries no `aria-pressed` at all \u2014 an interactive chip is not always a toggle (inside a tag input it is focusable so it can be removed), and announcing "not pressed" on a recipient chip is worse than announcing nothing.'
5471
5571
  },
5472
5572
  {
5473
- name: "ellipsis",
5573
+ name: "invalid",
5474
5574
  kind: "input",
5475
5575
  type: "boolean",
5476
5576
  required: false,
5477
5577
  default: "false",
5478
5578
  description: ""
5479
- }
5480
- ]
5579
+ },
5580
+ {
5581
+ name: "disabled",
5582
+ kind: "input",
5583
+ type: "boolean",
5584
+ required: false,
5585
+ default: "false",
5586
+ description: ""
5587
+ },
5588
+ {
5589
+ name: "removeLabel",
5590
+ kind: "input",
5591
+ type: "string",
5592
+ required: false,
5593
+ description: "Accessible-name override for the remove button."
5594
+ },
5595
+ {
5596
+ name: "controlTabIndex",
5597
+ kind: "input",
5598
+ type: "number",
5599
+ required: false,
5600
+ default: "0",
5601
+ description: "Tab position of the chip's controls. A composite that owns its own roving focus \u2014 `uni-tag-input`, where the whole field is one tab stop \u2014 passes `-1` so Tab does not walk through every chip to reach the next control."
5602
+ },
5603
+ {
5604
+ name: "removed",
5605
+ kind: "output",
5606
+ type: "UniTagValue",
5607
+ required: false,
5608
+ description: ""
5609
+ },
5610
+ {
5611
+ name: "activated",
5612
+ kind: "output",
5613
+ type: "UniTagValue",
5614
+ required: false,
5615
+ description: ""
5616
+ }
5617
+ ]
5618
+ }
5619
+ },
5620
+ examples: [
5621
+ {
5622
+ title: "Primary",
5623
+ framework: "angular",
5624
+ code: `<!-- Storybook story: Primary -->
5625
+ <div box-layout gap="sm">
5626
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5627
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5628
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5629
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5630
+ }
5631
+ </div>
5632
+ }
5633
+ </div>
5634
+ <!-- args:
5635
+ { removable: true }
5636
+ -->`
5637
+ },
5638
+ {
5639
+ title: "Variants And Tones",
5640
+ framework: "angular",
5641
+ code: `<!-- Storybook story: Variants And Tones -->
5642
+ <div box-layout gap="sm">
5643
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5644
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5645
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5646
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5647
+ }
5648
+ </div>
5649
+ }
5650
+ </div>
5651
+ <!-- args:
5652
+ { removable: true }
5653
+ -->`
5654
+ },
5655
+ {
5656
+ title: "Sizes",
5657
+ framework: "angular",
5658
+ code: `<!-- Storybook story: Sizes -->
5659
+ <div box-layout gap="sm">
5660
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5661
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5662
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5663
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5664
+ }
5665
+ </div>
5666
+ }
5667
+ </div>
5668
+ <!-- args:
5669
+ { removable: true }
5670
+ -->`
5671
+ },
5672
+ {
5673
+ title: "Removable",
5674
+ framework: "angular",
5675
+ code: `<!-- Storybook story: Removable -->
5676
+ <div box-layout gap="sm">
5677
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5678
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5679
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5680
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5681
+ }
5682
+ </div>
5683
+ }
5684
+ </div>
5685
+ <!-- args:
5686
+ { removable: true }
5687
+ -->`
5688
+ },
5689
+ {
5690
+ title: "Interactive",
5691
+ framework: "angular",
5692
+ code: `<!-- Storybook story: Interactive -->
5693
+ <div box-layout gap="sm">
5694
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5695
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5696
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5697
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5698
+ }
5699
+ </div>
5700
+ }
5701
+ </div>
5702
+ <!-- args:
5703
+ { interactive: true, removable: true, selected: false }
5704
+ -->`
5705
+ },
5706
+ {
5707
+ title: "Selected",
5708
+ framework: "angular",
5709
+ code: `<!-- Storybook story: Selected -->
5710
+ <div box-layout gap="sm">
5711
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5712
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5713
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5714
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5715
+ }
5716
+ </div>
5717
+ }
5718
+ </div>
5719
+ <!-- args:
5720
+ { interactive: true, selected: true, tone: 'solid' }
5721
+ -->`
5722
+ },
5723
+ {
5724
+ title: "Lead Elements",
5725
+ framework: "angular",
5726
+ code: `<!-- Storybook story: Lead Elements -->
5727
+ <div box-layout gap="sm">
5728
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5729
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5730
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5731
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5732
+ }
5733
+ </div>
5734
+ }
5735
+ </div>
5736
+ <!-- args:
5737
+ { label: 'nope@@x', invalid: true, removable: true, variant: 'warn' }
5738
+ -->`
5739
+ },
5740
+ {
5741
+ title: "Invalid",
5742
+ framework: "angular",
5743
+ code: `<!-- Storybook story: Invalid -->
5744
+ <div box-layout gap="sm">
5745
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5746
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5747
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5748
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5749
+ }
5750
+ </div>
5751
+ }
5752
+ </div>
5753
+ <!-- args:
5754
+ { label: 'nope@@x', invalid: true, removable: true, variant: 'warn' }
5755
+ -->`
5756
+ },
5757
+ {
5758
+ title: "Disabled",
5759
+ framework: "angular",
5760
+ code: `<!-- Storybook story: Disabled -->
5761
+ <div box-layout gap="sm">
5762
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5763
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5764
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5765
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5766
+ }
5767
+ </div>
5768
+ }
5769
+ </div>
5770
+ <!-- args:
5771
+ { label: 'Locked', disabled: true, removable: true }
5772
+ -->`
5773
+ },
5774
+ {
5775
+ title: "Truncated",
5776
+ framework: "angular",
5777
+ code: `<!-- Storybook story: Truncated -->
5778
+ <div box-layout gap="sm">
5779
+ @for (tone of ['soft', 'solid', 'outline']; track tone) {
5780
+ <div row-layout gap="sm" alignItems="center" style="margin-bottom:8px">
5781
+ @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {
5782
+ <uni-tag [variant]="variant" [tone]="tone" [label]="variant" />
5783
+ }
5784
+ </div>
5785
+ }
5786
+ </div>
5787
+ <!-- args:
5788
+ {
5789
+ label: 'A very long tag label that has to be truncated somewhere',
5790
+ maxWidth: '18ch',
5791
+ removable: true,
5792
+ }
5793
+ -->`
5794
+ }
5795
+ ],
5796
+ guidelines: {
5797
+ whenToUse: "Compact chip for categories, states, filters and tokens. Two orthogonal style\naxes: **`variant`** picks the colour role and **`tone`** picks the archetype\n(`soft`, `solid`, `outline`). Both resolve from the theme's `tag` entry, so a\ntheme restyles every chip in the app without touching markup.",
5798
+ dos: [
5799
+ "Use `variant` for meaning (a `warn` chip for a problem) and `tone` for emphasis.",
5800
+ "Give `removable` chips a `value` so the handler knows which one to drop.",
5801
+ "Set `maxWidth` when user-supplied text could be arbitrarily long."
5802
+ ],
5803
+ donts: [
5804
+ "Don't make a whole chip clickable *and* nest the remove control inside it \u2014",
5805
+ "Don't rely on chip colour alone to convey state.",
5806
+ "Don't put a remove control on a chip that is purely a label."
5807
+ ],
5808
+ accessibility: [
5809
+ "A static tag is **text, not a widget**: no role, no tab stop. Screen readers",
5810
+ "`removable` adds one real `<button>` named `Remove {label}`, overridable with",
5811
+ '`interactive` makes the body a `<button type="button">`; `selected` maps to',
5812
+ "Icons, avatars, initials and dots are `aria-hidden` \u2014 the chip's text is its",
5813
+ "`invalid` sets `aria-invalid` and adds a non-colour cue."
5814
+ ]
5815
+ },
5816
+ relatedTokens: [
5817
+ "tag.behavior.borderRadius",
5818
+ "tag.behavior.typeface",
5819
+ "tag.behavior.gap",
5820
+ "tag.behavior.removeIcon",
5821
+ "tag.behavior.selectedIcon"
5822
+ ]
5823
+ },
5824
+ {
5825
+ id: "tag-input",
5826
+ name: "TagInput",
5827
+ status: "stable",
5828
+ summary: "",
5829
+ description: "",
5830
+ category: "forms",
5831
+ version: "8.0.0",
5832
+ bindings: {
5833
+ angular: {
5834
+ importPath: "@uni-design-system/uni-angular",
5835
+ selectorOrTag: "uni-tag-input",
5836
+ api: [
5837
+ {
5838
+ name: "value",
5839
+ kind: "model",
5840
+ type: "UniTagItem[]",
5841
+ required: false,
5842
+ default: "[]",
5843
+ description: ""
5844
+ },
5845
+ {
5846
+ name: "disabled",
5847
+ kind: "input",
5848
+ type: "boolean",
5849
+ required: false,
5850
+ default: "false",
5851
+ description: ""
5852
+ },
5853
+ {
5854
+ name: "touched",
5855
+ kind: "model",
5856
+ type: "boolean",
5857
+ required: false,
5858
+ default: "false",
5859
+ description: ""
5860
+ },
5861
+ {
5862
+ name: "invalid",
5863
+ kind: "input",
5864
+ type: "boolean",
5865
+ required: false,
5866
+ default: "false",
5867
+ description: ""
5868
+ },
5869
+ {
5870
+ name: "dirty",
5871
+ kind: "input",
5872
+ type: "boolean",
5873
+ required: false,
5874
+ default: "false",
5875
+ description: ""
5876
+ },
5877
+ {
5878
+ name: "required",
5879
+ kind: "input",
5880
+ type: "boolean",
5881
+ required: false,
5882
+ default: "false",
5883
+ description: ""
5884
+ },
5885
+ {
5886
+ name: "ariaDescribedBy",
5887
+ kind: "input",
5888
+ type: "string",
5889
+ required: false,
5890
+ description: ""
5891
+ },
5892
+ {
5893
+ name: "label",
5894
+ kind: "input",
5895
+ type: "string",
5896
+ required: true,
5897
+ description: 'Accessible name for the field, e.g. "To".'
5898
+ },
5899
+ {
5900
+ name: "placeholder",
5901
+ kind: "input",
5902
+ type: "string",
5903
+ required: false,
5904
+ description: ""
5905
+ },
5906
+ {
5907
+ name: "preset",
5908
+ kind: "input",
5909
+ type: "'text' | 'email'",
5910
+ required: false,
5911
+ default: "'text'",
5912
+ description: "`email` wires an address validator, paste parser and space separator."
5913
+ },
5914
+ {
5915
+ name: "separators",
5916
+ kind: "input",
5917
+ type: "string[]",
5918
+ required: false,
5919
+ default: "[',', ';']",
5920
+ description: ""
5921
+ },
5922
+ {
5923
+ name: "commitOnBlur",
5924
+ kind: "input",
5925
+ type: "boolean",
5926
+ required: false,
5927
+ default: "true",
5928
+ description: ""
5929
+ },
5930
+ {
5931
+ name: "allowDuplicates",
5932
+ kind: "input",
5933
+ type: "boolean",
5934
+ required: false,
5935
+ default: "false",
5936
+ description: ""
5937
+ },
5938
+ {
5939
+ name: "max",
5940
+ kind: "input",
5941
+ type: "number",
5942
+ required: false,
5943
+ description: ""
5944
+ },
5945
+ {
5946
+ name: "tagVariant",
5947
+ kind: "input",
5948
+ type: "Variant",
5949
+ required: false,
5950
+ default: "'primary'",
5951
+ description: ""
5952
+ },
5953
+ {
5954
+ name: "tagTone",
5955
+ kind: "input",
5956
+ type: "TagTone",
5957
+ required: false,
5958
+ default: "'soft'",
5959
+ description: ""
5960
+ },
5961
+ {
5962
+ name: "tagSize",
5963
+ kind: "input",
5964
+ type: "Size",
5965
+ required: false,
5966
+ description: ""
5967
+ },
5968
+ {
5969
+ name: "suggestions",
5970
+ kind: "input",
5971
+ type: "UniTagSuggestion[]",
5972
+ required: false,
5973
+ default: "[]",
5974
+ description: ""
5975
+ },
5976
+ {
5977
+ name: "query",
5978
+ kind: "output",
5979
+ type: "string",
5980
+ required: false,
5981
+ description: "Debounced text the app should filter `suggestions` from."
5982
+ },
5983
+ {
5984
+ name: "debounceTime",
5985
+ kind: "input",
5986
+ type: "number",
5987
+ required: false,
5988
+ default: "250",
5989
+ description: ""
5990
+ },
5991
+ {
5992
+ name: "added",
5993
+ kind: "output",
5994
+ type: "UniTagItem",
5995
+ required: false,
5996
+ description: ""
5997
+ },
5998
+ {
5999
+ name: "removed",
6000
+ kind: "output",
6001
+ type: "UniTagItem",
6002
+ required: false,
6003
+ description: ""
6004
+ },
6005
+ {
6006
+ name: "rejected",
6007
+ kind: "output",
6008
+ type: "UniTagRejection",
6009
+ required: false,
6010
+ description: ""
6011
+ }
6012
+ ]
6013
+ }
6014
+ },
6015
+ examples: [
6016
+ {
6017
+ title: "Primary",
6018
+ framework: "angular",
6019
+ code: `<!-- Storybook story: Primary -->
6020
+ <uni-tag-input
6021
+ label="To"
6022
+ preset="email"
6023
+ placeholder="Name or address\u2026"
6024
+ [value]="value"
6025
+ [suggestions]="suggestions"
6026
+ (query)="onQuery($event)"
6027
+ />
6028
+ <!-- args:
6029
+ { value: [{ value: 'alice@uni.dev', label: 'Alice Chen' }] }
6030
+ -->`
6031
+ },
6032
+ {
6033
+ title: "Email Recipients",
6034
+ framework: "angular",
6035
+ code: `<!-- Storybook story: Email Recipients -->
6036
+ <uni-tag-input
6037
+ label="To"
6038
+ preset="email"
6039
+ placeholder="Name or address\u2026"
6040
+ [value]="value"
6041
+ [suggestions]="suggestions"
6042
+ (query)="onQuery($event)"
6043
+ />
6044
+ <!-- args:
6045
+ { value: [{ value: 'alice@uni.dev', label: 'Alice Chen' }] }
6046
+ -->`
6047
+ },
6048
+ {
6049
+ title: "Invalid Entry",
6050
+ framework: "angular",
6051
+ code: `<!-- Storybook story: Invalid Entry -->
6052
+ <uni-tag-input
6053
+ label="To"
6054
+ preset="email"
6055
+ placeholder="Name or address\u2026"
6056
+ [value]="value"
6057
+ [suggestions]="suggestions"
6058
+ (query)="onQuery($event)"
6059
+ />
6060
+ <!-- args:
6061
+ {
6062
+ preset: 'email',
6063
+ value: [
6064
+ { value: 'alice@uni.dev', label: 'Alice Chen' },
6065
+ { value: 'nope@@x', invalid: true },
6066
+ ],
6067
+ }
6068
+ -->`
6069
+ },
6070
+ {
6071
+ title: "Locked Entry",
6072
+ framework: "angular",
6073
+ code: `<!-- Storybook story: Locked Entry -->
6074
+ <uni-tag-input
6075
+ label="To"
6076
+ preset="email"
6077
+ placeholder="Name or address\u2026"
6078
+ [value]="value"
6079
+ [suggestions]="suggestions"
6080
+ (query)="onQuery($event)"
6081
+ />
6082
+ <!-- args:
6083
+ {
6084
+ value: [
6085
+ { value: 'owner@uni.dev', label: 'Thread owner', disabled: true },
6086
+ { value: 'bob@uni.dev', label: 'Bob Ferrari' },
6087
+ ],
6088
+ }
6089
+ -->`
6090
+ },
6091
+ {
6092
+ title: "With Maximum",
6093
+ framework: "angular",
6094
+ code: `<!-- Storybook story: With Maximum -->
6095
+ <uni-tag-input
6096
+ label="To"
6097
+ preset="email"
6098
+ placeholder="Name or address\u2026"
6099
+ [value]="value"
6100
+ [suggestions]="suggestions"
6101
+ (query)="onQuery($event)"
6102
+ />
6103
+ <!-- args:
6104
+ { max: 3, value: [{ value: 'alpha' }, { value: 'beta' }] }
6105
+ -->`
6106
+ },
6107
+ {
6108
+ title: "Disabled",
6109
+ framework: "angular",
6110
+ code: `<!-- Storybook story: Disabled -->
6111
+ <uni-tag-input
6112
+ label="To"
6113
+ preset="email"
6114
+ placeholder="Name or address\u2026"
6115
+ [value]="value"
6116
+ [suggestions]="suggestions"
6117
+ (query)="onQuery($event)"
6118
+ />
6119
+ <!-- args:
6120
+ { disabled: true, value: [{ value: 'alpha' }, { value: 'beta' }] }
6121
+ -->`
6122
+ }
6123
+ ],
6124
+ guidelines: {
6125
+ whenToUse: "Type-to-add chip field: recipients, filters, labels. It is the **open-set**\ncontrol \u2014 anything the user types can become a token, whether or not it matches\na suggestion. For picking from a fixed list, use `uni-select` or\n`uni-multi-select-dropdown` instead.",
6126
+ dos: [],
6127
+ donts: [
6128
+ "Don't use it to pick from a closed list \u2014 that is `uni-multi-select-dropdown`.",
6129
+ "Don't filter `suggestions` inside the component; drive them from `(query)`.",
6130
+ "Don't set `preset=\"email\"` for people's names: Space would split them."
6131
+ ],
6132
+ accessibility: [
6133
+ 'The text input is `role="combobox"` with `aria-expanded`, `aria-controls` and',
6134
+ 'Every add, remove and rejection announces through a `role="status"` live',
6135
+ "The removal route is described **once** for the field through",
6136
+ "`aria-invalid` is gated on `invalid && (touched || dirty)`, per the library's"
6137
+ ]
6138
+ },
6139
+ relatedTokens: []
6140
+ },
6141
+ {
6142
+ id: "text",
6143
+ name: "Text",
6144
+ status: "stable",
6145
+ summary: "",
6146
+ description: "",
6147
+ category: "primitives",
6148
+ version: "8.0.0",
6149
+ bindings: {
6150
+ angular: {
6151
+ importPath: "@uni-design-system/uni-angular",
6152
+ selectorOrTag: "[uni-text]",
6153
+ api: [
6154
+ {
6155
+ name: "uniText",
6156
+ kind: "input",
6157
+ type: "Typeface | ''",
6158
+ required: false,
6159
+ default: "'', { alias: 'uni-text' }",
6160
+ description: 'Typeface via the selector attribute: `uni-text="headline-large"`.'
6161
+ },
6162
+ {
6163
+ name: "typeface",
6164
+ kind: "input",
6165
+ type: "Typeface | undefined",
6166
+ required: false,
6167
+ default: "undefined",
6168
+ description: "Explicit typeface; the attribute value wins when both are set."
6169
+ },
6170
+ {
6171
+ name: "color",
6172
+ kind: "input",
6173
+ type: "ColorKey",
6174
+ required: false,
6175
+ description: ""
6176
+ },
6177
+ {
6178
+ name: "display",
6179
+ kind: "input",
6180
+ type: "OptionalDisplay",
6181
+ required: false,
6182
+ description: ""
6183
+ },
6184
+ {
6185
+ name: "align",
6186
+ kind: "input",
6187
+ type: "OptionalTextAlign",
6188
+ required: false,
6189
+ description: ""
6190
+ },
6191
+ {
6192
+ name: "nowrap",
6193
+ kind: "input",
6194
+ type: "boolean",
6195
+ required: false,
6196
+ description: ""
6197
+ },
6198
+ {
6199
+ name: "maxWidth",
6200
+ kind: "input",
6201
+ type: "number",
6202
+ required: false,
6203
+ description: ""
6204
+ },
6205
+ {
6206
+ name: "ellipsis",
6207
+ kind: "input",
6208
+ type: "boolean",
6209
+ required: false,
6210
+ default: "false",
6211
+ description: ""
6212
+ }
6213
+ ]
5481
6214
  }
5482
6215
  },
5483
6216
  examples: [
@@ -5514,7 +6247,7 @@ var uni_index_default = {
5514
6247
  summary: "",
5515
6248
  description: "",
5516
6249
  category: "primitives",
5517
- version: "7.0.0",
6250
+ version: "8.0.0",
5518
6251
  bindings: {
5519
6252
  angular: {
5520
6253
  importPath: "@uni-design-system/uni-angular",
@@ -5644,7 +6377,7 @@ var uni_index_default = {
5644
6377
  summary: "",
5645
6378
  description: "",
5646
6379
  category: "primitives",
5647
- version: "7.0.0",
6380
+ version: "8.0.0",
5648
6381
  bindings: {
5649
6382
  angular: {
5650
6383
  importPath: "@uni-design-system/uni-angular",
@@ -5674,7 +6407,7 @@ var uni_index_default = {
5674
6407
  summary: "",
5675
6408
  description: "",
5676
6409
  category: "components",
5677
- version: "7.0.0",
6410
+ version: "8.0.0",
5678
6411
  bindings: {
5679
6412
  angular: {
5680
6413
  importPath: "@uni-design-system/uni-angular",
@@ -5708,12 +6441,12 @@ var uni_index_default = {
5708
6441
  guidelines: {
5709
6442
  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
6443
  dos: [
5711
- "Register every selectable theme in `UNI_THEMES`; the switcher derives its options from the registry.",
6444
+ "Register every selectable theme in `UNI_THEMES` (bootstrap) or via `registerTheme` (runtime); the switcher derives its options from the registry.",
5712
6445
  'Give the control a meaningful `ariaLabel` when "Theme" is ambiguous in context (e.g. "Editor color theme").',
5713
6446
  "Use `themeChanged` for side effects like analytics or syncing a user preference to a backend."
5714
6447
  ],
5715
6448
  donts: [
5716
- "Don't call `ThemeService.theme.set()` alongside the switcher \u2014 bypassing `selectTheme` skips persistence and leaves the select out of sync.",
6449
+ "Don't try to write `ThemeService.theme` directly \u2014 it's a readonly signal. Go through `selectTheme`/`registerTheme` (persisted, listed) or `setTheme` (validated, unlisted) instead.",
5717
6450
  "Don't hardcode theme ids in app logic; read `ThemeService.selectedThemeKey()` instead.",
5718
6451
  "Don't use it for the palette-generation workflow \u2014 that's the Theme Builder; the switcher only picks among registered themes."
5719
6452
  ],
@@ -5732,7 +6465,7 @@ var uni_index_default = {
5732
6465
  summary: "",
5733
6466
  description: "",
5734
6467
  category: "forms",
5735
- version: "7.0.0",
6468
+ version: "8.0.0",
5736
6469
  bindings: {
5737
6470
  angular: {
5738
6471
  importPath: "@uni-design-system/uni-angular",
@@ -5862,7 +6595,7 @@ var uni_index_default = {
5862
6595
  summary: "",
5863
6596
  description: "",
5864
6597
  category: "feedback",
5865
- version: "7.0.0",
6598
+ version: "8.0.0",
5866
6599
  bindings: {
5867
6600
  angular: {
5868
6601
  importPath: "@uni-design-system/uni-angular",
@@ -5918,7 +6651,7 @@ var uni_index_default = {
5918
6651
  }
5919
6652
  ],
5920
6653
  guidelines: {
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`.",
6654
+ 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`.\nWrapping an interactive control (a button, a link) is supported: activating\nthe control hides the bubble and keeps it hidden until the pointer leaves and\nreturns, so a label that changes with the control\'s state ("Expand" \u2192\n"Collapse") never blinks back mid-interaction. Tapping a non-interactive\ntooltip (inline text) still toggles the bubble.',
5922
6655
  dos: [],
5923
6656
  donts: [],
5924
6657
  accessibility: [
@@ -5941,7 +6674,7 @@ var uni_index_default = {
5941
6674
  summary: "",
5942
6675
  description: "",
5943
6676
  category: "layout",
5944
- version: "7.0.0",
6677
+ version: "8.0.0",
5945
6678
  bindings: {
5946
6679
  angular: {
5947
6680
  importPath: "@uni-design-system/uni-angular",
@@ -8043,164 +8776,332 @@ var uni_index_default = {
8043
8776
  target: "component-prop",
8044
8777
  appliesTo: "dialogButtons",
8045
8778
  themeValues: {
8046
- LightTheme: "lg",
8047
- DarkTheme: "lg"
8779
+ LightTheme: "lg",
8780
+ DarkTheme: "lg"
8781
+ }
8782
+ },
8783
+ {
8784
+ id: "dialogButtons.behavior.stretch",
8785
+ value: false,
8786
+ type: "boolean",
8787
+ kind: "behavioral",
8788
+ target: "component-prop",
8789
+ appliesTo: "dialogButtons",
8790
+ themeValues: {
8791
+ LightTheme: false,
8792
+ DarkTheme: false
8793
+ }
8794
+ },
8795
+ {
8796
+ id: "dialogButtons.behavior.reverseOrder",
8797
+ value: false,
8798
+ type: "boolean",
8799
+ kind: "behavioral",
8800
+ target: "component-prop",
8801
+ appliesTo: "dialogButtons",
8802
+ themeValues: {
8803
+ LightTheme: false,
8804
+ DarkTheme: false
8805
+ }
8806
+ },
8807
+ {
8808
+ id: "dialogHeader.behavior.borderRadius",
8809
+ value: "max",
8810
+ type: "string",
8811
+ kind: "behavioral",
8812
+ target: "component-prop",
8813
+ appliesTo: "dialogHeader",
8814
+ themeValues: {
8815
+ LightTheme: "max",
8816
+ DarkTheme: "max"
8817
+ }
8818
+ },
8819
+ {
8820
+ id: "dialogHeader.behavior.color",
8821
+ value: "primary",
8822
+ type: "string",
8823
+ kind: "behavioral",
8824
+ target: "component-prop",
8825
+ appliesTo: "dialogHeader",
8826
+ themeValues: {
8827
+ LightTheme: "primary",
8828
+ DarkTheme: "primary"
8829
+ }
8830
+ },
8831
+ {
8832
+ id: "dialogHeader.behavior.height",
8833
+ value: 48,
8834
+ type: "number",
8835
+ kind: "behavioral",
8836
+ target: "component-prop",
8837
+ appliesTo: "dialogHeader",
8838
+ themeValues: {
8839
+ LightTheme: 48,
8840
+ DarkTheme: 48
8841
+ }
8842
+ },
8843
+ {
8844
+ id: "dialogHeader.behavior.textRole",
8845
+ value: "title-large",
8846
+ type: "string",
8847
+ kind: "behavioral",
8848
+ target: "component-prop",
8849
+ appliesTo: "dialogHeader",
8850
+ themeValues: {
8851
+ LightTheme: "title-large",
8852
+ DarkTheme: "title-large"
8853
+ }
8854
+ },
8855
+ {
8856
+ id: "dialogHeader.behavior.textAlign",
8857
+ value: "center",
8858
+ type: "string",
8859
+ kind: "behavioral",
8860
+ target: "component-prop",
8861
+ appliesTo: "dialogHeader",
8862
+ themeValues: {
8863
+ LightTheme: "center",
8864
+ DarkTheme: "center"
8865
+ }
8866
+ },
8867
+ {
8868
+ id: "dialogHeader.behavior.closeButtonIcon",
8869
+ value: "close",
8870
+ type: "string",
8871
+ kind: "behavioral",
8872
+ target: "component-prop",
8873
+ appliesTo: "dialogHeader",
8874
+ themeValues: {
8875
+ LightTheme: "close",
8876
+ DarkTheme: "close"
8877
+ }
8878
+ },
8879
+ {
8880
+ id: "dialogHeader.behavior.closeButtonSize",
8881
+ value: "md",
8882
+ type: "string",
8883
+ kind: "behavioral",
8884
+ target: "component-prop",
8885
+ appliesTo: "dialogHeader",
8886
+ themeValues: {
8887
+ LightTheme: "md",
8888
+ DarkTheme: "md"
8889
+ }
8890
+ },
8891
+ {
8892
+ id: "dropdown.behavior.border",
8893
+ value: "none",
8894
+ type: "string",
8895
+ kind: "behavioral",
8896
+ target: "component-prop",
8897
+ appliesTo: "dropdown",
8898
+ themeValues: {
8899
+ LightTheme: "none",
8900
+ DarkTheme: "none"
8901
+ }
8902
+ },
8903
+ {
8904
+ id: "dropdown.behavior.borderRadius",
8905
+ value: "xxs",
8906
+ type: "string",
8907
+ kind: "behavioral",
8908
+ target: "component-prop",
8909
+ appliesTo: "dropdown",
8910
+ themeValues: {
8911
+ LightTheme: "xxs",
8912
+ DarkTheme: "xxs"
8913
+ }
8914
+ },
8915
+ {
8916
+ id: "dropdown.behavior.color",
8917
+ value: "primary-surface",
8918
+ type: "string",
8919
+ kind: "behavioral",
8920
+ target: "component-prop",
8921
+ appliesTo: "dropdown",
8922
+ themeValues: {
8923
+ LightTheme: "primary-surface",
8924
+ DarkTheme: "primary-surface"
8048
8925
  }
8049
8926
  },
8050
8927
  {
8051
- id: "dialogButtons.behavior.stretch",
8052
- value: false,
8053
- type: "boolean",
8928
+ id: "dropdown.behavior.shadow",
8929
+ value: "menu",
8930
+ type: "string",
8054
8931
  kind: "behavioral",
8055
8932
  target: "component-prop",
8056
- appliesTo: "dialogButtons",
8933
+ appliesTo: "dropdown",
8057
8934
  themeValues: {
8058
- LightTheme: false,
8059
- DarkTheme: false
8935
+ LightTheme: "menu",
8936
+ DarkTheme: "menu"
8060
8937
  }
8061
8938
  },
8062
8939
  {
8063
- id: "dialogButtons.behavior.reverseOrder",
8064
- value: false,
8065
- type: "boolean",
8940
+ id: "menu.behavior.minWidth",
8941
+ value: 184,
8942
+ type: "number",
8066
8943
  kind: "behavioral",
8067
8944
  target: "component-prop",
8068
- appliesTo: "dialogButtons",
8945
+ appliesTo: "menu",
8069
8946
  themeValues: {
8070
- LightTheme: false,
8071
- DarkTheme: false
8947
+ LightTheme: 184,
8948
+ DarkTheme: 184
8072
8949
  }
8073
8950
  },
8074
8951
  {
8075
- id: "dialogHeader.behavior.borderRadius",
8076
- value: "max",
8952
+ id: "menu.behavior.paddingVertical",
8953
+ value: "xs",
8077
8954
  type: "string",
8078
8955
  kind: "behavioral",
8079
8956
  target: "component-prop",
8080
- appliesTo: "dialogHeader",
8957
+ appliesTo: "menu",
8081
8958
  themeValues: {
8082
- LightTheme: "max",
8083
- DarkTheme: "max"
8959
+ LightTheme: "xs",
8960
+ DarkTheme: "xs"
8084
8961
  }
8085
8962
  },
8086
8963
  {
8087
- id: "dialogHeader.behavior.color",
8088
- value: "primary",
8964
+ id: "menu.behavior.paddingHorizontal",
8965
+ value: "none",
8089
8966
  type: "string",
8090
8967
  kind: "behavioral",
8091
8968
  target: "component-prop",
8092
- appliesTo: "dialogHeader",
8969
+ appliesTo: "menu",
8093
8970
  themeValues: {
8094
- LightTheme: "primary",
8095
- DarkTheme: "primary"
8971
+ LightTheme: "none",
8972
+ DarkTheme: "none"
8096
8973
  }
8097
8974
  },
8098
8975
  {
8099
- id: "dialogHeader.behavior.height",
8100
- value: 48,
8101
- type: "number",
8976
+ id: "menu.behavior.dividerBorder",
8977
+ value: "light",
8978
+ type: "string",
8102
8979
  kind: "behavioral",
8103
8980
  target: "component-prop",
8104
- appliesTo: "dialogHeader",
8981
+ appliesTo: "menu",
8105
8982
  themeValues: {
8106
- LightTheme: 48,
8107
- DarkTheme: 48
8983
+ LightTheme: "light",
8984
+ DarkTheme: "light"
8108
8985
  }
8109
8986
  },
8110
8987
  {
8111
- id: "dialogHeader.behavior.textRole",
8112
- value: "title-large",
8988
+ id: "menu.behavior.dividerSpacing",
8989
+ value: "xs",
8113
8990
  type: "string",
8114
8991
  kind: "behavioral",
8115
8992
  target: "component-prop",
8116
- appliesTo: "dialogHeader",
8993
+ appliesTo: "menu",
8117
8994
  themeValues: {
8118
- LightTheme: "title-large",
8119
- DarkTheme: "title-large"
8995
+ LightTheme: "xs",
8996
+ DarkTheme: "xs"
8120
8997
  }
8121
8998
  },
8122
8999
  {
8123
- id: "dialogHeader.behavior.textAlign",
8124
- value: "center",
8125
- type: "string",
9000
+ id: "menuItem.behavior.height",
9001
+ value: 38,
9002
+ type: "number",
8126
9003
  kind: "behavioral",
8127
9004
  target: "component-prop",
8128
- appliesTo: "dialogHeader",
9005
+ appliesTo: "menuItem",
8129
9006
  themeValues: {
8130
- LightTheme: "center",
8131
- DarkTheme: "center"
9007
+ LightTheme: 38,
9008
+ DarkTheme: 38
8132
9009
  }
8133
9010
  },
8134
9011
  {
8135
- id: "dialogHeader.behavior.closeButtonIcon",
8136
- value: "close",
9012
+ id: "menuItem.behavior.paddingHorizontal",
9013
+ value: "md",
8137
9014
  type: "string",
8138
9015
  kind: "behavioral",
8139
9016
  target: "component-prop",
8140
- appliesTo: "dialogHeader",
9017
+ appliesTo: "menuItem",
8141
9018
  themeValues: {
8142
- LightTheme: "close",
8143
- DarkTheme: "close"
9019
+ LightTheme: "md",
9020
+ DarkTheme: "md"
8144
9021
  }
8145
9022
  },
8146
9023
  {
8147
- id: "dialogHeader.behavior.closeButtonSize",
9024
+ id: "menuItem.behavior.gap",
8148
9025
  value: "md",
8149
9026
  type: "string",
8150
9027
  kind: "behavioral",
8151
9028
  target: "component-prop",
8152
- appliesTo: "dialogHeader",
9029
+ appliesTo: "menuItem",
8153
9030
  themeValues: {
8154
9031
  LightTheme: "md",
8155
9032
  DarkTheme: "md"
8156
9033
  }
8157
9034
  },
8158
9035
  {
8159
- id: "dropdown.behavior.border",
9036
+ id: "menuItem.behavior.borderRadius",
8160
9037
  value: "none",
8161
9038
  type: "string",
8162
9039
  kind: "behavioral",
8163
9040
  target: "component-prop",
8164
- appliesTo: "dropdown",
9041
+ appliesTo: "menuItem",
8165
9042
  themeValues: {
8166
9043
  LightTheme: "none",
8167
9044
  DarkTheme: "none"
8168
9045
  }
8169
9046
  },
8170
9047
  {
8171
- id: "dropdown.behavior.borderRadius",
8172
- value: "xxs",
9048
+ id: "menuItem.behavior.typeface",
9049
+ value: "label",
8173
9050
  type: "string",
8174
9051
  kind: "behavioral",
8175
9052
  target: "component-prop",
8176
- appliesTo: "dropdown",
9053
+ appliesTo: "menuItem",
8177
9054
  themeValues: {
8178
- LightTheme: "xxs",
8179
- DarkTheme: "xxs"
9055
+ LightTheme: "label",
9056
+ DarkTheme: "label"
8180
9057
  }
8181
9058
  },
8182
9059
  {
8183
- id: "dropdown.behavior.color",
8184
- value: "primary-surface",
9060
+ id: "menuItem.behavior.hoverColor",
9061
+ value: "primary-container",
8185
9062
  type: "string",
8186
9063
  kind: "behavioral",
8187
9064
  target: "component-prop",
8188
- appliesTo: "dropdown",
9065
+ appliesTo: "menuItem",
8189
9066
  themeValues: {
8190
- LightTheme: "primary-surface",
8191
- DarkTheme: "primary-surface"
9067
+ LightTheme: "primary-container",
9068
+ DarkTheme: "primary-container"
8192
9069
  }
8193
9070
  },
8194
9071
  {
8195
- id: "dropdown.behavior.shadow",
8196
- value: "menu",
9072
+ id: "menuItem.behavior.activeSymbol",
9073
+ value: "check",
8197
9074
  type: "string",
8198
9075
  kind: "behavioral",
8199
9076
  target: "component-prop",
8200
- appliesTo: "dropdown",
9077
+ appliesTo: "menuItem",
8201
9078
  themeValues: {
8202
- LightTheme: "menu",
8203
- DarkTheme: "menu"
9079
+ LightTheme: "check",
9080
+ DarkTheme: "check"
9081
+ }
9082
+ },
9083
+ {
9084
+ id: "menuItem.behavior.transitionSpeed",
9085
+ value: 0.35,
9086
+ type: "number",
9087
+ kind: "behavioral",
9088
+ target: "component-prop",
9089
+ appliesTo: "menuItem",
9090
+ themeValues: {
9091
+ LightTheme: 0.35,
9092
+ DarkTheme: 0.35
9093
+ }
9094
+ },
9095
+ {
9096
+ id: "expand.behavior.transitionSpeed",
9097
+ value: 0.35,
9098
+ type: "number",
9099
+ kind: "behavioral",
9100
+ target: "component-prop",
9101
+ appliesTo: "expand",
9102
+ themeValues: {
9103
+ LightTheme: 0.35,
9104
+ DarkTheme: 0.35
8204
9105
  }
8205
9106
  },
8206
9107
  {
@@ -8504,135 +9405,279 @@ var uni_index_default = {
8504
9405
  }
8505
9406
  },
8506
9407
  {
8507
- id: "tabs.behavior.gap",
8508
- value: "sm",
9408
+ id: "tabs.behavior.gap",
9409
+ value: "sm",
9410
+ type: "string",
9411
+ kind: "behavioral",
9412
+ target: "component-prop",
9413
+ appliesTo: "tabs",
9414
+ themeValues: {
9415
+ LightTheme: "sm",
9416
+ DarkTheme: "sm"
9417
+ }
9418
+ },
9419
+ {
9420
+ id: "tabs.behavior.borderRadius",
9421
+ value: "none",
9422
+ type: "string",
9423
+ kind: "behavioral",
9424
+ target: "component-prop",
9425
+ appliesTo: "tabs",
9426
+ themeValues: {
9427
+ LightTheme: "none",
9428
+ DarkTheme: "none"
9429
+ }
9430
+ },
9431
+ {
9432
+ id: "tabs.behavior.padding",
9433
+ value: "md",
9434
+ type: "string",
9435
+ kind: "behavioral",
9436
+ target: "component-prop",
9437
+ appliesTo: "tabs",
9438
+ themeValues: {
9439
+ LightTheme: "md",
9440
+ DarkTheme: "md"
9441
+ }
9442
+ },
9443
+ {
9444
+ id: "multiSelectDropdown.behavior.textRole",
9445
+ value: "input",
9446
+ type: "string",
9447
+ kind: "behavioral",
9448
+ target: "component-prop",
9449
+ appliesTo: "multiSelectDropdown",
9450
+ themeValues: {
9451
+ LightTheme: "input",
9452
+ DarkTheme: "input"
9453
+ }
9454
+ },
9455
+ {
9456
+ id: "multiSelectDropdown.behavior.textColor",
9457
+ value: "on-primary-surface",
9458
+ type: "string",
9459
+ kind: "behavioral",
9460
+ target: "component-prop",
9461
+ appliesTo: "multiSelectDropdown",
9462
+ themeValues: {
9463
+ LightTheme: "on-primary-surface",
9464
+ DarkTheme: "on-primary-surface"
9465
+ }
9466
+ },
9467
+ {
9468
+ id: "multiSelectDropdown.behavior.dividerBorder",
9469
+ value: "light",
9470
+ type: "string",
9471
+ kind: "behavioral",
9472
+ target: "component-prop",
9473
+ appliesTo: "multiSelectDropdown",
9474
+ themeValues: {
9475
+ LightTheme: "light",
9476
+ DarkTheme: "light"
9477
+ }
9478
+ },
9479
+ {
9480
+ id: "multiSelectDropdown.behavior.searchInputBorder",
9481
+ value: "light",
9482
+ type: "string",
9483
+ kind: "behavioral",
9484
+ target: "component-prop",
9485
+ appliesTo: "multiSelectDropdown",
9486
+ themeValues: {
9487
+ LightTheme: "light",
9488
+ DarkTheme: "light"
9489
+ }
9490
+ },
9491
+ {
9492
+ id: "multiSelectDropdown.behavior.searchInputBorderRadius",
9493
+ value: "xxs",
9494
+ type: "string",
9495
+ kind: "behavioral",
9496
+ target: "component-prop",
9497
+ appliesTo: "multiSelectDropdown",
9498
+ themeValues: {
9499
+ LightTheme: "xxs",
9500
+ DarkTheme: "xxs"
9501
+ }
9502
+ },
9503
+ {
9504
+ id: "multiSelectDropdown.behavior.focusOutline",
9505
+ value: "2px solid #6A6F8F",
9506
+ type: "string",
9507
+ kind: "behavioral",
9508
+ target: "component-prop",
9509
+ appliesTo: "multiSelectDropdown",
9510
+ themeValues: {
9511
+ LightTheme: "2px solid #6A6F8F",
9512
+ DarkTheme: "2px solid #AFB5D8"
9513
+ }
9514
+ },
9515
+ {
9516
+ id: "multiSelectDropdown.behavior.focusOutlineOffset",
9517
+ value: 2,
9518
+ type: "number",
9519
+ kind: "behavioral",
9520
+ target: "component-prop",
9521
+ appliesTo: "multiSelectDropdown",
9522
+ themeValues: {
9523
+ LightTheme: 2,
9524
+ DarkTheme: 2
9525
+ }
9526
+ },
9527
+ {
9528
+ id: "badge.behavior.borderRadius",
9529
+ value: "xxs",
9530
+ type: "string",
9531
+ kind: "behavioral",
9532
+ target: "component-prop",
9533
+ appliesTo: "badge",
9534
+ themeValues: {
9535
+ LightTheme: "xxs",
9536
+ DarkTheme: "xxs"
9537
+ }
9538
+ },
9539
+ {
9540
+ id: "tag.behavior.borderRadius",
9541
+ value: "max",
9542
+ type: "string",
9543
+ kind: "behavioral",
9544
+ target: "component-prop",
9545
+ appliesTo: "tag",
9546
+ themeValues: {
9547
+ LightTheme: "max",
9548
+ DarkTheme: "max"
9549
+ }
9550
+ },
9551
+ {
9552
+ id: "tag.behavior.typeface",
9553
+ value: "tag",
8509
9554
  type: "string",
8510
9555
  kind: "behavioral",
8511
9556
  target: "component-prop",
8512
- appliesTo: "tabs",
9557
+ appliesTo: "tag",
8513
9558
  themeValues: {
8514
- LightTheme: "sm",
8515
- DarkTheme: "sm"
9559
+ LightTheme: "tag",
9560
+ DarkTheme: "tag"
8516
9561
  }
8517
9562
  },
8518
9563
  {
8519
- id: "tabs.behavior.borderRadius",
8520
- value: "none",
9564
+ id: "tag.behavior.gap",
9565
+ value: "xs",
8521
9566
  type: "string",
8522
9567
  kind: "behavioral",
8523
9568
  target: "component-prop",
8524
- appliesTo: "tabs",
9569
+ appliesTo: "tag",
8525
9570
  themeValues: {
8526
- LightTheme: "none",
8527
- DarkTheme: "none"
9571
+ LightTheme: "xs",
9572
+ DarkTheme: "xs"
8528
9573
  }
8529
9574
  },
8530
9575
  {
8531
- id: "tabs.behavior.padding",
8532
- value: "md",
9576
+ id: "tag.behavior.removeIcon",
9577
+ value: "close",
8533
9578
  type: "string",
8534
9579
  kind: "behavioral",
8535
9580
  target: "component-prop",
8536
- appliesTo: "tabs",
9581
+ appliesTo: "tag",
8537
9582
  themeValues: {
8538
- LightTheme: "md",
8539
- DarkTheme: "md"
9583
+ LightTheme: "close",
9584
+ DarkTheme: "close"
8540
9585
  }
8541
9586
  },
8542
9587
  {
8543
- id: "multiSelectDropdown.behavior.textRole",
8544
- value: "input",
9588
+ id: "tag.behavior.selectedIcon",
9589
+ value: "check",
8545
9590
  type: "string",
8546
9591
  kind: "behavioral",
8547
9592
  target: "component-prop",
8548
- appliesTo: "multiSelectDropdown",
9593
+ appliesTo: "tag",
8549
9594
  themeValues: {
8550
- LightTheme: "input",
8551
- DarkTheme: "input"
9595
+ LightTheme: "check",
9596
+ DarkTheme: "check"
8552
9597
  }
8553
9598
  },
8554
9599
  {
8555
- id: "multiSelectDropdown.behavior.textColor",
8556
- value: "on-primary-surface",
9600
+ id: "tagInput.behavior.chipGap",
9601
+ value: "xs",
8557
9602
  type: "string",
8558
9603
  kind: "behavioral",
8559
9604
  target: "component-prop",
8560
- appliesTo: "multiSelectDropdown",
9605
+ appliesTo: "tagInput",
8561
9606
  themeValues: {
8562
- LightTheme: "on-primary-surface",
8563
- DarkTheme: "on-primary-surface"
9607
+ LightTheme: "xs",
9608
+ DarkTheme: "xs"
8564
9609
  }
8565
9610
  },
8566
9611
  {
8567
- id: "multiSelectDropdown.behavior.dividerBorder",
8568
- value: "light",
9612
+ id: "tagInput.behavior.chipSize",
9613
+ value: "md",
8569
9614
  type: "string",
8570
9615
  kind: "behavioral",
8571
9616
  target: "component-prop",
8572
- appliesTo: "multiSelectDropdown",
9617
+ appliesTo: "tagInput",
8573
9618
  themeValues: {
8574
- LightTheme: "light",
8575
- DarkTheme: "light"
9619
+ LightTheme: "md",
9620
+ DarkTheme: "md"
8576
9621
  }
8577
9622
  },
8578
9623
  {
8579
- id: "multiSelectDropdown.behavior.searchInputBorder",
8580
- value: "light",
9624
+ id: "tagInput.behavior.minInputWidth",
9625
+ value: "12ch",
8581
9626
  type: "string",
8582
9627
  kind: "behavioral",
8583
9628
  target: "component-prop",
8584
- appliesTo: "multiSelectDropdown",
9629
+ appliesTo: "tagInput",
8585
9630
  themeValues: {
8586
- LightTheme: "light",
8587
- DarkTheme: "light"
9631
+ LightTheme: "12ch",
9632
+ DarkTheme: "12ch"
8588
9633
  }
8589
9634
  },
8590
9635
  {
8591
- id: "multiSelectDropdown.behavior.searchInputBorderRadius",
8592
- value: "xxs",
9636
+ id: "tagInput.behavior.listColor",
9637
+ value: "primary-surface",
8593
9638
  type: "string",
8594
9639
  kind: "behavioral",
8595
9640
  target: "component-prop",
8596
- appliesTo: "multiSelectDropdown",
9641
+ appliesTo: "tagInput",
8597
9642
  themeValues: {
8598
- LightTheme: "xxs",
8599
- DarkTheme: "xxs"
9643
+ LightTheme: "primary-surface",
9644
+ DarkTheme: "primary-surface"
8600
9645
  }
8601
9646
  },
8602
9647
  {
8603
- id: "multiSelectDropdown.behavior.focusOutline",
8604
- value: "2px solid #6A6F8F",
9648
+ id: "tagInput.behavior.listShadow",
9649
+ value: "menu",
8605
9650
  type: "string",
8606
9651
  kind: "behavioral",
8607
9652
  target: "component-prop",
8608
- appliesTo: "multiSelectDropdown",
9653
+ appliesTo: "tagInput",
8609
9654
  themeValues: {
8610
- LightTheme: "2px solid #6A6F8F",
8611
- DarkTheme: "2px solid #AFB5D8"
9655
+ LightTheme: "menu",
9656
+ DarkTheme: "menu"
8612
9657
  }
8613
9658
  },
8614
9659
  {
8615
- id: "multiSelectDropdown.behavior.focusOutlineOffset",
8616
- value: 2,
8617
- type: "number",
9660
+ id: "tagInput.behavior.listBorderRadius",
9661
+ value: "xs",
9662
+ type: "string",
8618
9663
  kind: "behavioral",
8619
9664
  target: "component-prop",
8620
- appliesTo: "multiSelectDropdown",
9665
+ appliesTo: "tagInput",
8621
9666
  themeValues: {
8622
- LightTheme: 2,
8623
- DarkTheme: 2
9667
+ LightTheme: "xs",
9668
+ DarkTheme: "xs"
8624
9669
  }
8625
9670
  },
8626
9671
  {
8627
- id: "badge.behavior.borderRadius",
8628
- value: "xxs",
8629
- type: "string",
9672
+ id: "tagInput.behavior.maxSuggestions",
9673
+ value: 8,
9674
+ type: "number",
8630
9675
  kind: "behavioral",
8631
9676
  target: "component-prop",
8632
- appliesTo: "badge",
9677
+ appliesTo: "tagInput",
8633
9678
  themeValues: {
8634
- LightTheme: "xxs",
8635
- DarkTheme: "xxs"
9679
+ LightTheme: 8,
9680
+ DarkTheme: 8
8636
9681
  }
8637
9682
  },
8638
9683
  {
@@ -9742,6 +10787,26 @@ var uni_index_default = {
9742
10787
  color: "primary-surface",
9743
10788
  shadow: "menu"
9744
10789
  },
10790
+ menu: {
10791
+ minWidth: 184,
10792
+ paddingVertical: "xs",
10793
+ paddingHorizontal: "none",
10794
+ dividerBorder: "light",
10795
+ dividerSpacing: "xs"
10796
+ },
10797
+ menuItem: {
10798
+ height: 38,
10799
+ paddingHorizontal: "md",
10800
+ gap: "md",
10801
+ borderRadius: "none",
10802
+ typeface: "label",
10803
+ hoverColor: "primary-container",
10804
+ activeSymbol: "check",
10805
+ transitionSpeed: 0.35
10806
+ },
10807
+ expand: {
10808
+ transitionSpeed: 0.35
10809
+ },
9745
10810
  footer: {
9746
10811
  height: 52,
9747
10812
  color: "primary",
@@ -9790,6 +10855,22 @@ var uni_index_default = {
9790
10855
  badge: {
9791
10856
  borderRadius: "xxs"
9792
10857
  },
10858
+ tag: {
10859
+ borderRadius: "max",
10860
+ typeface: "tag",
10861
+ gap: "xs",
10862
+ removeIcon: "close",
10863
+ selectedIcon: "check"
10864
+ },
10865
+ tagInput: {
10866
+ chipGap: "xs",
10867
+ chipSize: "md",
10868
+ minInputWidth: "12ch",
10869
+ listColor: "primary-surface",
10870
+ listShadow: "menu",
10871
+ listBorderRadius: "xs",
10872
+ maxSuggestions: 8
10873
+ },
9793
10874
  button: {
9794
10875
  borderRadius: "max",
9795
10876
  typeface: "button"
@@ -10123,6 +11204,26 @@ var uni_index_default = {
10123
11204
  color: "primary-surface",
10124
11205
  shadow: "menu"
10125
11206
  },
11207
+ menu: {
11208
+ minWidth: 184,
11209
+ paddingVertical: "xs",
11210
+ paddingHorizontal: "none",
11211
+ dividerBorder: "light",
11212
+ dividerSpacing: "xs"
11213
+ },
11214
+ menuItem: {
11215
+ height: 38,
11216
+ paddingHorizontal: "md",
11217
+ gap: "md",
11218
+ borderRadius: "none",
11219
+ typeface: "label",
11220
+ hoverColor: "primary-container",
11221
+ activeSymbol: "check",
11222
+ transitionSpeed: 0.35
11223
+ },
11224
+ expand: {
11225
+ transitionSpeed: 0.35
11226
+ },
10126
11227
  footer: {
10127
11228
  height: 52,
10128
11229
  color: "primary",
@@ -10171,6 +11272,22 @@ var uni_index_default = {
10171
11272
  badge: {
10172
11273
  borderRadius: "xxs"
10173
11274
  },
11275
+ tag: {
11276
+ borderRadius: "max",
11277
+ typeface: "tag",
11278
+ gap: "xs",
11279
+ removeIcon: "close",
11280
+ selectedIcon: "check"
11281
+ },
11282
+ tagInput: {
11283
+ chipGap: "xs",
11284
+ chipSize: "md",
11285
+ minInputWidth: "12ch",
11286
+ listColor: "primary-surface",
11287
+ listShadow: "menu",
11288
+ listBorderRadius: "xs",
11289
+ maxSuggestions: 8
11290
+ },
10174
11291
  button: {
10175
11292
  borderRadius: "max",
10176
11293
  typeface: "button"
@@ -10499,6 +11616,11 @@ ${rows.join("\n")}${more}`;
10499
11616
  }
10500
11617
 
10501
11618
  // ../core/dist/esm/index.js
11619
+ var EXPAND_DEFAULT_SPEED = 0.35;
11620
+ var EXPAND_MIN_DURATION = 0.15;
11621
+ var EXPAND_MAX_DURATION = 0.6;
11622
+ var MIN_SCALE = EXPAND_MIN_DURATION / EXPAND_DEFAULT_SPEED;
11623
+ var MAX_SCALE = EXPAND_MAX_DURATION / EXPAND_DEFAULT_SPEED;
10502
11624
  var cycle = (angle) => {
10503
11625
  if (angle > 360) return angle - 360;
10504
11626
  if (angle < 0) return angle + 360;
@@ -11010,18 +12132,30 @@ var BaseIcons = {
11010
12132
  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
12133
  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
12134
  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",
12135
+ building: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M130-136.92v-540h160v-160h380v320h160v380H530v-160H430v160H130Zm60-60h100v-100H190v100Zm0-160h100v-100H190v100Zm0-160h100v-100H190v100Zm160 160h100v-100H350v100Zm0-160h100v-100H350v100Zm0-160h100v-100H350v100Zm160 320h100v-100H510v100Zm0-160h100v-100H510v100Zm0-160h100v-100H510v100Zm160 480h100v-100H670v100Zm0-160h100v-100H670v100Z'/%3e%3c/svg%3e",
11013
12136
  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",
12137
+ link: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M432.31-298.46H281.54q-75.34 0-128.44-53.1Q100-404.65 100-479.98q0-75.33 53.1-128.44 53.1-53.12 128.44-53.12h150.77v60H281.54q-50.39 0-85.96 35.58Q160-530.38 160-480q0 50.38 35.58 85.96 35.57 35.58 85.96 35.58h150.77v60ZM330-450v-60h300v60H330Zm197.69 151.54v-60h150.77q50.39 0 85.96-35.58Q800-429.62 800-480q0-50.38-35.58-85.96-35.57-35.58-85.96-35.58H527.69v-60h150.77q75.34 0 128.44 53.1Q860-555.35 860-480.02q0 75.33-53.1 128.44-53.1 53.12-128.44 53.12H527.69Z'/%3e%3c/svg%3e",
12138
+ expand: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-140v-300h60v198.23L718.23-760H520v-60h300v300h-60v-198.23L241.77-200H440v60H140Z'/%3e%3c/svg%3e",
12139
+ gridView: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-520v-300h300v300H140Zm0 380v-300h300v300H140Zm380-380v-300h300v300H520Zm0 380v-300h300v300H520ZM200-580h180v-180H200v180Zm380 0h180v-180H580v180Zm0 380h180v-180H580v180Zm-380 0h180v-180H200v180Zm380-380Zm0 200Zm-200 0Zm0-200Z'/%3e%3c/svg%3e",
12140
+ listView: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M293.08-597.69v-60H820v60H293.08Zm0 147.69v-60H820v60H293.08Zm0 147.69v-60H820v60H293.08ZM172.31-595.38q-13.73 0-23.02-9.4t-9.29-23.3q0-13.56 9.29-22.74 9.29-9.18 23.02-9.18t23.02 9.18q9.29 9.18 9.29 22.74 0 13.9-9.29 23.3t-23.02 9.4Zm0 147.3q-13.73 0-23.02-9.18Q140-466.43 140-480q0-14.31 9.29-23.5t23.02-9.19q13.73 0 23.02 9.19t9.29 23.5q0 13.57-9.29 22.74-9.29 9.18-23.02 9.18Zm0 148.08q-13.73 0-23.02-9.4T140-332.69q0-13.57 9.29-22.75t23.02-9.18q13.73 0 23.02 9.18t9.29 22.75q0 13.89-9.29 23.29-9.29 9.4-23.02 9.4Z'/%3e%3c/svg%3e",
11014
12141
  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
12142
  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
12143
  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
12144
  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
12145
  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",
12146
+ moreHorizontal: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M249.23-420q-24.75 0-42.37-17.63-17.63-17.62-17.63-42.37 0-24.75 17.63-42.37Q224.48-540 249.23-540q24.75 0 42.38 17.63 17.62 17.62 17.62 42.37 0 24.75-17.62 42.37Q273.98-420 249.23-420ZM480-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-420Zm230.77 0q-24.75 0-42.38-17.63-17.62-17.62-17.62-42.37 0-24.75 17.62-42.37Q686.02-540 710.77-540q24.75 0 42.37 17.63 17.63 17.62 17.63 42.37 0 24.75-17.63 42.37Q735.52-420 710.77-420Z'/%3e%3c/svg%3e",
11019
12147
  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
12148
  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",
12149
+ copy: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M362.31-260Q332-260 311-281q-21-21-21-51.31v-455.38Q290-818 311-839q21-21 51.31-21h335.38Q728-860 749-839q21 21 21 51.31v455.38Q770-302 749-281q-21 21-51.31 21H362.31Zm0-60h335.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-455.38q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H362.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v455.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85Zm-140 200Q192-120 171-141q-21-21-21-51.31v-515.38h60v515.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h395.38v60H222.31ZM350-320v-480 480Z'/%3e%3c/svg%3e",
11021
12150
  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
12151
  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
12152
  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",
12153
+ send: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-190v-580l688.46 290L140-190Zm60-90 474-200-474-200v147.69L416.92-480 200-427.69V-280Zm0 0v-400 400Z'/%3e%3c/svg%3e",
11024
12154
  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",
12155
+ funnel: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M455.39-180q-15.08 0-25.23-10.16Q420-200.31 420-215.39v-231.53L196.08-731.38q-11.54-15.39-3.35-32 8.2-16.62 27.66-16.62h519.22q19.46 0 27.66 16.62 8.19 16.61-3.35 32L540-446.92v231.53q0 15.08-10.16 25.23Q519.69-180 504.61-180h-49.22ZM480-468l198-252H282l198 252Zm0 0Z'/%3e%3c/svg%3e",
12156
+ refresh: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M481.54-180q-125.63 0-212.81-87.17-87.19-87.17-87.19-212.77 0-125.6 87.19-212.83Q355.91-780 481.54-780q70.15 0 132.77 31.19 62.61 31.2 104.15 88.04V-780h60v244.61H533.85v-59.99h158q-31.62-57.93-87.7-91.27Q548.08-720 481.54-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h63.23q-27.23 97.92-107.27 158.96Q583.46-180 481.54-180Z'/%3e%3c/svg%3e",
12157
+ dragHandle: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M360-175.39q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm-240-240q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm-240-240q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Z'/%3e%3c/svg%3e",
12158
+ qrCode: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-520v-300h300v300H140Zm60-60h180v-180H200v180Zm-60 440v-300h300v300H140Zm60-60h180v-180H200v180Zm320-320v-300h300v300H520Zm60-60h180v-180H580v180Zm165 440v-75h75v75h-75ZM520-365v-75h75v75h-75Zm75 75v-75h75v75h-75Zm-75 75v-75h75v75h-75Zm75 75v-75h75v75h-75Zm75-75v-75h75v75h-75Zm0-150v-75h75v75h-75Zm75 75v-75h75v75h-75Z'/%3e%3c/svg%3e",
11025
12159
  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
12160
  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
12161
  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",
@@ -11029,14 +12163,30 @@ var BaseIcons = {
11029
12163
  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
12164
  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
12165
  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",
12166
+ star: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-91 125.46 57.31-246.77-191.46-165.92 252.61-21.92L480-828.84l98.54 232.69 252.61 21.92-191.46 165.92L697-161.54 480-292.46 263-161.54ZM480-470Z'/%3e%3c/svg%3e",
12167
+ verified: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m352.46-85.39-71.38-120.3-135.54-29.7 13.23-139.53L66.93-480l91.84-105.08-13.23-139.53 135.54-29.7 71.38-120.3L480-820.46l127.54-54.15 71.38 120.3 135.54 29.7-13.23 139.53L893.07-480l-91.84 105.08 13.23 139.53-135.54 29.7-71.38 120.3L480-139.54 352.46-85.39ZM378-162l102-43.23L583.23-162 640-258l110-25.23L740-396l74-84-74-85.23L750-678l-110-24-58-96-102 43.23L376.77-798 320-702l-110 24 10 112.77L146-480l74 84-10 114 110 24 58 96Zm102-318Zm-42 128.15L650.15-564 608-607.38l-170 170-86-84.77L309.85-480 438-351.85Z'/%3e%3c/svg%3e",
11032
12168
  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",
12169
+ group: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M71.93-187.69v-88.93q0-30.92 15.96-55.19 15.96-24.27 42.63-37.76 57.02-27.89 114.67-43.01 57.66-15.11 126.73-15.11 69.08 0 126.73 15.11 57.66 15.12 114.68 43.01 26.67 13.49 42.63 37.76 15.96 24.27 15.96 55.19v88.93H71.93Zm679.99 0v-93.85q0-39.38-19.28-75.07-19.29-35.68-54.72-61.23 40.23 6 76.39 18.57 36.15 12.58 69 29.73 31 16.54 47.88 38.99 16.88 22.44 16.88 49.01v93.85H751.92ZM272.96-533.35q-41.03-41.03-41.03-98.96 0-57.92 41.03-98.96 41.04-41.04 98.96-41.04 57.93 0 98.96 41.04 41.04 41.04 41.04 98.96 0 57.93-41.04 98.96-41.03 41.04-98.96 41.04-57.92 0-98.96-41.04Zm403.22 0q-41.12 41.04-98.87 41.04-6.77 0-17.23-1.54-10.47-1.54-17.23-3.38 23.66-28.45 36.37-63.12 12.7-34.67 12.7-72 0-37.34-12.96-71.73-12.96-34.38-36.11-63.3 8.61-3.08 17.23-4 8.61-.93 17.23-.93 57.75 0 98.87 41.04 41.12 41.04 41.12 98.96 0 57.93-41.12 98.96ZM131.92-247.69h480v-28.93q0-12.53-6.27-22.3-6.26-9.77-19.88-17.08-49.38-25.46-101.69-38.58-52.31-13.11-112.16-13.11-59.84 0-112.15 13.11-52.31 13.12-101.69 38.58-13.62 7.31-19.89 17.08-6.27 9.77-6.27 22.3v28.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 328.12Zm0-384.62Z'/%3e%3c/svg%3e",
12170
+ shieldPerson: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M387.62-487.62Q350-525.23 350-580q0-54.77 37.62-92.38Q425.23-710 480-710q54.77 0 92.38 37.62Q610-634.77 610-580q0 54.77-37.62 92.38Q534.77-450 480-450q-54.77 0-92.38-37.62Zm142.3-42.46Q550-550.15 550-580t-20.08-49.92Q509.85-650 480-650t-49.92 20.08Q410-609.85 410-580t20.08 49.92Q450.15-510 480-510t49.92-20.08ZM480-100.77q-129.77-35.39-214.88-152.77Q180-370.92 180-516v-230.15l300-112.31 300 112.31V-516q0 145.08-85.12 262.46Q609.77-136.16 480-100.77Zm0-378.85Zm0-315L240-705v189q0 57.08 16.35 110.39 16.34 53.3 45.42 99.46 40.46-20.62 84.73-32.23Q430.77-350 480-350t93.5 11.62q44.27 11.61 84.73 32.23 29.08-46.16 45.42-99.46Q720-458.92 720-516v-189l-240-89.62Zm-74.42 513q-35.73 8.39-67.5 23.54 29.77 33.08 65.5 57.2Q439.31-176.77 480-164q40.69-12.77 76.23-36.88 35.54-24.12 65.31-57.2-31.77-15.15-67.31-23.54Q518.69-290 480-290q-38.69 0-74.42 8.38Z'/%3e%3c/svg%3e",
11033
12171
  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
12172
  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
12173
  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
12174
  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
12175
  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",
12176
+ clock: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m618.92-298.92 42.16-42.16L510-492.16V-680h-60v212.15l168.92 168.93ZM480.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-100ZM480-480Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z'/%3e%3c/svg%3e",
12177
+ mail: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M172.31-180Q142-180 121-201q-21-21-21-51.31v-455.38Q100-738 121-759q21-21 51.31-21h615.38Q818-780 839-759q21 21 21 51.31v455.38Q860-222 839-201q-21 21-51.31 21H172.31ZM480-457.69 160-662.31v410q0 5.39 3.46 8.85t8.85 3.46h615.38q5.39 0 8.85-3.46t3.46-8.85v-410L480-457.69Zm0-62.31 313.85-200h-627.7L480-520ZM160-662.31V-720v467.69q0 5.39 3.46 8.85t8.85 3.46H160v-422.31Z'/%3e%3c/svg%3e",
12178
+ chat: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M250-410h300v-60H250v60Zm0-120h460v-60H250v60Zm0-120h460v-60H250v60ZM100-118.46v-669.23Q100-818 121-839q21-21 51.31-21h615.38Q818-860 839-839q21 21 21 51.31v455.38Q860-302 839-281q-21 21-51.31 21H241.54L100-118.46ZM216-320h571.69q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-455.38q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H172.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v523.08L216-320Zm-56 0v-480 480Z'/%3e%3c/svg%3e",
12179
+ image: "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-21h535.38Q778-820 799-799q21 21 21 51.31v535.38Q820-182 799-161q-21 21-51.31 21H212.31Zm0-60h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-535.38q0-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.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85ZM270-290h423.07L561.54-465.38 449.23-319.23l-80-102.31L270-290Zm-70 90v-560 560Z'/%3e%3c/svg%3e",
12180
+ document: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M330-250h300v-60H330v60Zm0-160h300v-60H330v60Zm-77.69 310Q222-100 201-121q-21-21-21-51.31v-615.38Q180-818 201-839q21-21 51.31-21H570l210 210v477.69Q780-142 759-121q-21 21-51.31 21H252.31ZM540-620v-180H252.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v615.38q0 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-620H540ZM240-800v180-180V-160v-640Z'/%3e%3c/svg%3e",
12181
+ payment: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M550-451.54q-41.92 0-70.96-29.04Q450-509.62 450-551.54q0-41.92 29.04-70.96 29.04-29.04 70.96-29.04 41.92 0 70.96 29.04Q650-593.46 650-551.54q0 41.92-29.04 70.96-29.04 29.04-70.96 29.04ZM286.15-327.69q-29.82 0-51.06-21.24-21.24-21.24-21.24-51.07v-303.08q0-29.82 21.24-51.06 21.24-21.24 51.06-21.24h527.69q29.83 0 51.07 21.24 21.24 21.24 21.24 51.06V-400q0 29.83-21.24 51.07-21.24 21.24-51.07 21.24H286.15Zm60-60h407.7q0-29.92 21.24-51.12Q796.33-460 826.15-460v-183.08q-29.92 0-51.11-21.24-21.19-21.24-21.19-51.06h-407.7q0 29.92-21.24 51.11-21.24 21.19-51.06 21.19V-460q29.92 0 51.11 21.24 21.19 21.24 21.19 51.07Zm420.77 200H146.16q-29.83 0-51.07-21.24Q73.85-230.17 73.85-260v-396.15h60V-260q0 4.61 3.84 8.46 3.85 3.85 8.47 3.85h620.76v60Zm-480.77-200h-12.3V-715.38h12.3q-5 0-8.65 3.65-3.65 3.65-3.65 8.65V-400q0 5 3.65 8.65 3.65 3.66 8.65 3.66Z'/%3e%3c/svg%3e",
12182
+ bank: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M230-280v-300h60v300h-60Zm220 0v-300h60v300h-60ZM110.77-140v-60h738.46v60H110.77ZM670-280v-300h60v300h-60ZM110.77-660v-56.92L480-897.69l369.23 180.77V-660H110.77Zm141.84-60h454.78-454.78Zm0 0h454.78L480-830 252.61-720Z'/%3e%3c/svg%3e",
12183
+ trendingUp: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M142.15-258.08 100-300.23l274.08-276.08 160 160 224.54-221.77H640v-60h220v220h-60v-117.84L534.08-330l-160-160-231.93 231.92Z'/%3e%3c/svg%3e",
12184
+ extension: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M208.85-197.69h504.61q3.85 0 6.35-2.69 2.5-2.7 2.5-6.54v-176.31l36.92-15.85q18.31-6.84 29.54-23.53Q800-439.31 800-461.15q0-21.62-11.23-38.43t-29.54-24.04l-36.92-15.23v-176.53q0-4.24-2.5-6.74t-6.35-2.5H534.92l-7.3-51.07q-3.77-25.85-22.39-43.92-18.61-18.08-44.08-18.08-26.07 0-44.69 18.08-18.61 18.07-22.38 43.92l-7.31 51.07H208.46q-3.46 0-5.96 2.5t-2.5 6.74V-624q51.77 17.15 84.15 62.04 32.39 44.88 32.39 100.81 0 57.3-32.19 102.19-32.2 44.88-84.35 61.27v90.77q0 3.84 2.5 6.54 2.5 2.69 6.35 2.69Zm0 60q-29 0-48.93-20.12Q140-177.92 140-206.92V-347q48-1.54 82.27-33.58 34.27-32.04 34.27-80.57 0-45.62-34.46-78.12-34.46-32.5-82.08-36.42v-139.69q0-28.77 20.04-49t48.42-20.23h126.23q6.62-47.93 42.16-80.5 35.54-32.58 84.3-32.58 48.16 0 83.7 32.58 35.53 32.57 42.76 80.5h125.85q28.39 0 48.62 20.23 20.23 20.23 20.23 49v136.69q34.84 14.15 56.27 46.23Q860-500.38 860-461.15q0 39.07-21.42 70.96-21.43 31.88-56.27 46.57v136.7q0 29-20.23 49.11-20.23 20.12-48.62 20.12H208.85ZM500-461.15Z'/%3e%3c/svg%3e",
12185
+ webhook: "data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M280-130q-78.77 0-134.38-55.62Q90-241.23 90-320q0-66.08 39.54-116.35 39.54-50.26 100.46-66.19v63q-35 14.31-57.5 46.85T150-320q0 53.85 38.08 91.92Q226.15-190 280-190t91.92-38.08Q410-266.15 410-320v-30h225.38q6.85-10.92 18.54-17.77 11.7-6.84 26.08-6.84 22.69 0 38.65 15.96 15.96 15.96 15.96 38.65 0 22.69-15.96 38.65-15.96 15.96-38.65 15.96-14.77 0-26.27-6.65T635.38-290H467.54q-11.69 71.31-65.04 115.65Q349.15-130 280-130Zm400 0q-49.08 0-89.96-22.89-40.88-22.88-67.27-61.72h81.61q15.16 11.53 34.85 18.07Q658.92-190 680-190q53.85 0 91.92-38.08Q810-266.15 810-320t-38.08-91.92Q733.85-450 680-450q-18.85 0-34.88 4.73-16.04 4.73-30.66 13.81l-117-194.93q-21-.53-36.54-15.57Q445.39-657 445.39-680q0-22.69 15.96-38.65 15.96-15.96 38.65-15.96 22.69 0 38.65 15.96 15.96 15.96 15.96 38.65 0 6.15-1.15 11.38-1.15 5.24-4.31 10.24L640-505.85q9.15-2 19.12-3.07Q669.08-510 680-510q78.77 0 134.38 55.62Q870-398.77 870-320t-55.62 134.38Q758.77-130 680-130ZM280-265.39q-22.69 0-38.65-15.96-15.96-15.96-15.96-38.65 0-21.23 14.57-36.85 14.58-15.61 36.89-16.76l98.23-163.31q-31.31-26.62-48.19-63.73Q310-637.77 310-680q0-78.77 55.62-134.38Q421.23-870 500-870t134.38 55.62Q690-758.77 690-680h-60q0-53.85-38.08-91.92Q553.85-810 500-810t-91.92 38.08Q370-733.85 370-680q0 42.62 24.08 75.5 24.07 32.88 63.3 46.89L328.54-342.62q3.15 5.39 4.61 10.93 1.46 5.54 1.46 11.69 0 22.69-15.96 38.65-15.96 15.96-38.65 15.96Z'/%3e%3c/svg%3e",
12186
+ logout: "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-21h268.07v60H212.31q-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.85h268.07v60H212.31Zm436.92-169.23-41.54-43.39L705.08-450H363.85v-60h341.23l-97.39-97.38 41.54-43.39L820-480 649.23-309.23Z'/%3e%3c/svg%3e",
11038
12187
  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 "
11039
12188
  };
12189
+ var HOVER_OR_KEYBOARD_FOCUS = "&:hover, &:focus-visible";
11040
12190
  var BaseTypography = {
11041
12191
  "display-large": {
11042
12192
  fontFamily: "Red Hat Display",
@@ -11233,6 +12383,19 @@ var buildBorders = (c) => ({
11233
12383
  dark: `1px solid ${c["on-background"]}`,
11234
12384
  dotted: `1px dotted ${c["on-background"]}`
11235
12385
  });
12386
+ var tagVariant = (c, role) => ({ [role]: {
12387
+ backgroundColor: c[`${role}-container`],
12388
+ color: c[`on-${role}-container`],
12389
+ "&.tone-solid": {
12390
+ backgroundColor: c[role],
12391
+ color: c[`on-${role}`]
12392
+ },
12393
+ "&.tone-outline": {
12394
+ backgroundColor: "transparent",
12395
+ color: c[role],
12396
+ borderColor: c[`on-${role}-container-border`] ?? c[role]
12397
+ }
12398
+ } });
11236
12399
  var buildComponents = (c) => ({
11237
12400
  alert: { options: {
11238
12401
  topPosition: 40,
@@ -11378,6 +12541,38 @@ var buildComponents = (c) => ({
11378
12541
  color: "primary-surface",
11379
12542
  shadow: "menu"
11380
12543
  } },
12544
+ menu: { options: {
12545
+ minWidth: 184,
12546
+ color: void 0,
12547
+ border: void 0,
12548
+ borderRadius: void 0,
12549
+ shadow: void 0,
12550
+ paddingVertical: "xs",
12551
+ paddingHorizontal: "none",
12552
+ dividerBorder: "light",
12553
+ dividerSpacing: "xs"
12554
+ } },
12555
+ menuItem: {
12556
+ options: {
12557
+ height: 38,
12558
+ paddingHorizontal: "md",
12559
+ gap: "md",
12560
+ borderRadius: "none",
12561
+ typeface: "label",
12562
+ textColor: void 0,
12563
+ hoverColor: "primary-container",
12564
+ activeSymbol: "check",
12565
+ transitionSpeed: 0.35
12566
+ },
12567
+ variants: { warn: {
12568
+ color: c.warn,
12569
+ [HOVER_OR_KEYBOARD_FOCUS]: {
12570
+ backgroundColor: c["warn-container"],
12571
+ color: c["on-warn-container"]
12572
+ }
12573
+ } }
12574
+ },
12575
+ expand: { options: { transitionSpeed: 0.35 } },
11381
12576
  footer: { options: {
11382
12577
  height: 52,
11383
12578
  color: "primary",
@@ -11425,6 +12620,79 @@ var buildComponents = (c) => ({
11425
12620
  focusOutlineOffset: 2
11426
12621
  } },
11427
12622
  badge: { options: { borderRadius: "xxs" } },
12623
+ tag: {
12624
+ options: {
12625
+ borderRadius: "max",
12626
+ typeface: "tag",
12627
+ gap: "xs",
12628
+ removeIcon: "close",
12629
+ selectedIcon: "check"
12630
+ },
12631
+ fixed: {
12632
+ display: "inline-flex",
12633
+ alignItems: "center",
12634
+ maxWidth: "100%",
12635
+ border: "1px solid transparent",
12636
+ transition: "background-color .2s ease, color .2s ease"
12637
+ },
12638
+ variants: {
12639
+ ...tagVariant(c, "primary"),
12640
+ ...tagVariant(c, "secondary"),
12641
+ ...tagVariant(c, "tertiary"),
12642
+ ...tagVariant(c, "warn"),
12643
+ ...tagVariant(c, "success"),
12644
+ ghost: {
12645
+ backgroundColor: "transparent",
12646
+ color: c["on-background"],
12647
+ "&.tone-solid": {
12648
+ backgroundColor: c["surface-variant"],
12649
+ color: c["on-surface-variant"]
12650
+ },
12651
+ "&.tone-outline": {
12652
+ backgroundColor: "transparent",
12653
+ borderColor: c.outline
12654
+ }
12655
+ },
12656
+ disabled: {
12657
+ backgroundColor: c["disabled-container"],
12658
+ color: c["on-disabled"],
12659
+ "&.tone-solid": {
12660
+ backgroundColor: c.disabled,
12661
+ color: c["on-disabled"]
12662
+ },
12663
+ "&.tone-outline": {
12664
+ backgroundColor: "transparent",
12665
+ borderColor: c.disabled
12666
+ }
12667
+ }
12668
+ },
12669
+ sizes: {
12670
+ sm: {
12671
+ height: 20,
12672
+ fontSize: 12,
12673
+ padding: "0 8px"
12674
+ },
12675
+ md: {
12676
+ height: 24,
12677
+ fontSize: 13,
12678
+ padding: "0 10px"
12679
+ },
12680
+ lg: {
12681
+ height: 32,
12682
+ fontSize: 15,
12683
+ padding: "0 12px"
12684
+ }
12685
+ }
12686
+ },
12687
+ tagInput: { options: {
12688
+ chipGap: "xs",
12689
+ chipSize: "md",
12690
+ minInputWidth: "12ch",
12691
+ listColor: "primary-surface",
12692
+ listShadow: "menu",
12693
+ listBorderRadius: "xs",
12694
+ maxSuggestions: 8
12695
+ } },
11428
12696
  button: {
11429
12697
  options: {
11430
12698
  borderRadius: "max",
@@ -11728,11 +12996,11 @@ var buildComponents = (c) => ({
11728
12996
  typeface: "label"
11729
12997
  } }
11730
12998
  });
11731
- var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
12999
+ var isRecord$1 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
11732
13000
  var deepMerge = (base, override) => {
11733
13001
  if (!override) return base;
11734
13002
  const out = { ...base };
11735
- for (const [key, value] of Object.entries(override)) out[key] = isRecord(value) && isRecord(out[key]) ? deepMerge(out[key], value) : value;
13003
+ for (const [key, value] of Object.entries(override)) out[key] = isRecord$1(value) && isRecord$1(out[key]) ? deepMerge(out[key], value) : value;
11736
13004
  return out;
11737
13005
  };
11738
13006
  var createTheme = ({ id, name, colors, icons = {}, radii = BaseRadii, shadows = BaseShadows, borders, components }) => ({
@@ -11751,6 +13019,10 @@ var createTheme = ({ id, name, colors, icons = {}, radii = BaseRadii, shadows =
11751
13019
  },
11752
13020
  components: deepMerge(buildComponents(colors), components)
11753
13021
  });
13022
+ var dehydrateTheme = (theme) => ({
13023
+ ...theme,
13024
+ icons: Object.fromEntries(Object.entries(theme.icons).filter(([name, uri]) => BaseIcons[name] !== uri))
13025
+ });
11754
13026
  var BASE_PALETTE_CONFIG = {
11755
13027
  seed: "#4F46E5",
11756
13028
  scheme: "triadic",
@@ -11860,6 +13132,29 @@ var generateThemes = (input) => {
11860
13132
  }
11861
13133
  };
11862
13134
  };
13135
+ var summarizeContrast = (report) => `${report.checks.length} contrast pairs checked \xB7 worst ${report.worstRatio}:1 \xB7 ${report.pass ? "all AA" : `${report.checks.filter((check) => !check.pass).length} failing`}`;
13136
+ var generateUniThemes = (input) => {
13137
+ const { lightColors: lightColors2, darkColors: darkColors2, radii, lightShadows, darkShadows, report } = generateThemes(input);
13138
+ const name = input.name ?? "Brand";
13139
+ const id = name.replace(/\W+/g, "") || "Brand";
13140
+ return {
13141
+ light: createTheme({
13142
+ id: `${id}Light`,
13143
+ name: `${name} Light`,
13144
+ colors: lightColors2,
13145
+ radii,
13146
+ shadows: lightShadows
13147
+ }),
13148
+ dark: createTheme({
13149
+ id: `${id}Dark`,
13150
+ name: `${name} Dark`,
13151
+ colors: darkColors2,
13152
+ radii,
13153
+ shadows: darkShadows
13154
+ }),
13155
+ report
13156
+ };
13157
+ };
11863
13158
  var IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
11864
13159
  var asKey = (k) => IDENT.test(k) ? k : `'${k}'`;
11865
13160
  var recordLiteral = (record, indent) => Object.entries(record).map(([k, v]) => `${indent}${asKey(k)}: '${v}',`).join("\n");
@@ -11905,7 +13200,7 @@ var emitThemeFile = (input) => {
11905
13200
  input.shape && `--shape=${input.shape}`,
11906
13201
  !darkMode && "--dark-mode=false"
11907
13202
  ].filter(Boolean).join(" ");
11908
- const reportSummary = `${report.checks.length} contrast pairs checked \xB7 worst ${report.worstRatio}:1 \xB7 ${report.pass ? "all AA" : `${report.checks.filter((c) => !c.pass).length} failing`}`;
13203
+ const reportSummary = summarizeContrast(report);
11909
13204
  const modes = [{
11910
13205
  exportName: `${id}Light`,
11911
13206
  displayName: `${name} Light`,
@@ -11961,7 +13256,7 @@ ${recordLiteral(shadows, " ")}
11961
13256
  "const components = (colors: Colors): ComponentThemes => ({});",
11962
13257
  "",
11963
13258
  "/**",
11964
- " * Icon primitives, merged over the built-in 34-icon set per name: reuse a",
13259
+ " * Icon primitives, merged over the built-in 61-icon set per name: reuse a",
11965
13260
  " * built-in name to reskin it, or add any new name. Define an icon ONCE here",
11966
13261
  " * and render it anywhere via `<uni-icon name='\u2026'/>` \u2014 never inline SVG in",
11967
13262
  " * components.",
@@ -12142,20 +13437,236 @@ var UniThemes = {
12142
13437
  DarkTheme
12143
13438
  };
12144
13439
  var DefaultThemeId = Object.keys(UniThemes)[0];
13440
+ var REQUIRED_COLOR_TOKENS = [
13441
+ "primary",
13442
+ "on-primary",
13443
+ "primary-container",
13444
+ "on-primary-container",
13445
+ "primary-surface",
13446
+ "on-primary-surface",
13447
+ "surface",
13448
+ "on-surface",
13449
+ "background",
13450
+ "on-background",
13451
+ "warn",
13452
+ "on-warn",
13453
+ "disabled",
13454
+ "on-disabled",
13455
+ "outline",
13456
+ "transparent"
13457
+ ];
13458
+ var REQUIRED_TEXT_ROLES = [
13459
+ "display-large",
13460
+ "display-medium",
13461
+ "display-small",
13462
+ "headline-large",
13463
+ "headline-medium",
13464
+ "headline-small",
13465
+ "title-large",
13466
+ "title-medium",
13467
+ "title-small",
13468
+ "body-1-long",
13469
+ "body-1-short",
13470
+ "body-2-long",
13471
+ "body-2-short",
13472
+ "subtitle-1",
13473
+ "subtitle-2",
13474
+ "label",
13475
+ "button",
13476
+ "caption",
13477
+ "overline",
13478
+ "paragraph",
13479
+ "quote",
13480
+ "note"
13481
+ ];
13482
+ var REQUIRED_SPACING_SIZES = [
13483
+ "none",
13484
+ "xxs",
13485
+ "xs",
13486
+ "sm",
13487
+ "md",
13488
+ "lg",
13489
+ "xl"
13490
+ ];
13491
+ var REQUIRED_RADII_SIZES = [
13492
+ "none",
13493
+ "xxs",
13494
+ "xs",
13495
+ "sm",
13496
+ "md",
13497
+ "lg",
13498
+ "max"
13499
+ ];
13500
+ var REQUIRED_SHADOWS = [
13501
+ "raised",
13502
+ "menu",
13503
+ "dialog",
13504
+ "warn"
13505
+ ];
13506
+ var REQUIRED_THICKNESSES = [
13507
+ "thin",
13508
+ "standard",
13509
+ "thick"
13510
+ ];
13511
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
13512
+ var isCssValue = (value) => typeof value === "string" || typeof value === "number";
13513
+ var checkStyleExpression = (value, path, issues) => {
13514
+ if (!isRecord(value)) {
13515
+ issues.push({
13516
+ path,
13517
+ message: "must be a style object"
13518
+ });
13519
+ return;
13520
+ }
13521
+ for (const [key, entry] of Object.entries(value)) {
13522
+ if (entry === void 0 || isCssValue(entry)) continue;
13523
+ if (isRecord(entry)) checkStyleExpression(entry, `${path}.${key}`, issues);
13524
+ else issues.push({
13525
+ path: `${path}.${key}`,
13526
+ message: "must be a string, number, or nested style object"
13527
+ });
13528
+ }
13529
+ };
13530
+ var checkStringRecord = (value, path, issues, required = [], allowNumbers = false) => {
13531
+ if (!isRecord(value)) {
13532
+ issues.push({
13533
+ path,
13534
+ message: "must be an object"
13535
+ });
13536
+ return;
13537
+ }
13538
+ for (const key of required) if (!(key in value)) issues.push({
13539
+ path: `${path}.${key}`,
13540
+ message: "is required"
13541
+ });
13542
+ for (const [key, entry] of Object.entries(value)) {
13543
+ if (entry === void 0) continue;
13544
+ if (!(allowNumbers ? isCssValue(entry) : typeof entry === "string")) issues.push({
13545
+ path: `${path}.${key}`,
13546
+ message: allowNumbers ? "must be a string or number" : "must be a string"
13547
+ });
13548
+ }
13549
+ };
13550
+ var checkTypography = (value, issues) => {
13551
+ if (!isRecord(value)) {
13552
+ issues.push({
13553
+ path: "typography",
13554
+ message: "must be an object"
13555
+ });
13556
+ return;
13557
+ }
13558
+ for (const role of REQUIRED_TEXT_ROLES) if (!(role in value)) issues.push({
13559
+ path: `typography.${role}`,
13560
+ message: "is required"
13561
+ });
13562
+ for (const [role, style] of Object.entries(value)) {
13563
+ if (!isRecord(style)) {
13564
+ issues.push({
13565
+ path: `typography.${role}`,
13566
+ message: "must be a TextStyle object"
13567
+ });
13568
+ continue;
13569
+ }
13570
+ if (typeof style["fontFamily"] !== "string") issues.push({
13571
+ path: `typography.${role}.fontFamily`,
13572
+ message: "must be a string"
13573
+ });
13574
+ for (const field of ["fontSize", "lineHeight"]) if (!isCssValue(style[field])) issues.push({
13575
+ path: `typography.${role}.${field}`,
13576
+ message: "must be a string or number"
13577
+ });
13578
+ }
13579
+ };
13580
+ var checkComponents = (value, issues) => {
13581
+ if (!isRecord(value)) {
13582
+ issues.push({
13583
+ path: "components",
13584
+ message: "must be an object"
13585
+ });
13586
+ return;
13587
+ }
13588
+ for (const [name, entry] of Object.entries(value)) {
13589
+ if (entry === void 0) continue;
13590
+ if (!isRecord(entry)) {
13591
+ issues.push({
13592
+ path: `components.${name}`,
13593
+ message: "must be a component theme object"
13594
+ });
13595
+ continue;
13596
+ }
13597
+ if (entry["fixed"] !== void 0) checkStyleExpression(entry["fixed"], `components.${name}.fixed`, issues);
13598
+ for (const section of ["variants", "sizes"]) {
13599
+ const styles = entry[section];
13600
+ if (styles === void 0) continue;
13601
+ if (!isRecord(styles)) {
13602
+ issues.push({
13603
+ path: `components.${name}.${section}`,
13604
+ message: "must be an object"
13605
+ });
13606
+ continue;
13607
+ }
13608
+ for (const [key, style] of Object.entries(styles)) if (style !== void 0) checkStyleExpression(style, `components.${name}.${section}.${key}`, issues);
13609
+ }
13610
+ if (entry["options"] !== void 0 && !isRecord(entry["options"])) issues.push({
13611
+ path: `components.${name}.options`,
13612
+ message: "must be an object"
13613
+ });
13614
+ }
13615
+ };
13616
+ var parseTheme = (input) => {
13617
+ const issues = [];
13618
+ if (!isRecord(input)) return {
13619
+ success: false,
13620
+ issues: [{
13621
+ path: "",
13622
+ message: "theme must be an object"
13623
+ }]
13624
+ };
13625
+ for (const field of ["id", "name"]) if (typeof input[field] !== "string" || input[field] === "") issues.push({
13626
+ path: field,
13627
+ message: "must be a non-empty string"
13628
+ });
13629
+ checkStringRecord(input["colors"], "colors", issues, REQUIRED_COLOR_TOKENS);
13630
+ checkTypography(input["typography"], issues);
13631
+ checkStringRecord(input["borders"], "borders", issues);
13632
+ checkStringRecord(input["radii"], "radii", issues, REQUIRED_RADII_SIZES);
13633
+ checkStringRecord(input["shadows"], "shadows", issues, REQUIRED_SHADOWS);
13634
+ checkStringRecord(input["spacing"], "spacing", issues, REQUIRED_SPACING_SIZES, true);
13635
+ checkStringRecord(input["thicknesses"], "thicknesses", issues, REQUIRED_THICKNESSES, true);
13636
+ checkStringRecord(input["icons"], "icons", issues);
13637
+ checkComponents(input["components"], issues);
13638
+ return issues.length === 0 ? {
13639
+ success: true,
13640
+ theme: input,
13641
+ issues: []
13642
+ } : {
13643
+ success: false,
13644
+ issues
13645
+ };
13646
+ };
13647
+ var formatThemeIssues = (issues) => issues.map(({ path, message }) => path ? `${path} ${message}` : message).join("; ");
12145
13648
 
12146
13649
  // src/server/generate.ts
12147
13650
  var HEX = /^#[0-9a-fA-F]{6}$/;
12148
- function formatGeneratedTheme(args) {
12149
- const seeds = (Array.isArray(args.brand) ? args.brand : [args.brand]).map(
13651
+ function resolveSeed(brand) {
13652
+ const seeds = (Array.isArray(brand) ? brand : [brand]).map(
12150
13653
  (s) => s.startsWith("#") ? s : `#${s}`
12151
13654
  );
12152
13655
  const invalid = seeds.filter((s) => !HEX.test(s));
12153
13656
  if (invalid.length) {
12154
- return `Invalid brand color(s): ${invalid.join(", ")}. Pass 6-digit hex values, e.g. "#0052FF" (1\u20133 colors: primary, secondary, tertiary).`;
13657
+ return {
13658
+ ok: false,
13659
+ error: `Invalid brand color(s): ${invalid.join(", ")}. Pass 6-digit hex values, e.g. "#0052FF" (1\u20133 colors: primary, secondary, tertiary).`
13660
+ };
12155
13661
  }
13662
+ return { ok: true, seed: seeds.length === 1 ? seeds[0] : seeds };
13663
+ }
13664
+ function formatGeneratedTheme(args) {
13665
+ const resolved = resolveSeed(args.brand);
13666
+ if (!resolved.ok) return resolved.error;
12156
13667
  const { content, providerSnippet, reportSummary, report } = emitThemeFile({
12157
13668
  ...args,
12158
- seed: seeds.length === 1 ? seeds[0] : seeds
13669
+ seed: resolved.seed
12159
13670
  });
12160
13671
  const failing = report.checks.filter((c) => !c.pass);
12161
13672
  const failLines = failing.length ? `
@@ -12196,7 +13707,7 @@ ${failing.map((f) => `- ${f.mode} \`${f.foreground}\` on \`${f.background}\`: ${
12196
13707
  "- **Icons**: never inline SVG in components. Define an icon ONCE in the theme file's",
12197
13708
  " `icons` map as an inline SVG data URI \u2014 it is masked with `currentColor`, so it",
12198
13709
  " recolors with the theme \u2014 then render it anywhere with `<uni-icon name='\u2026'/>`.",
12199
- " A built-in set of 34 icons ships with every theme (navigation, actions, feedback,",
13710
+ " A built-in set of 61 icons ships with every theme (navigation, actions, feedback,",
12200
13711
  " user/system) \u2014 check `BaseIcons` before adding one; names are flat camelCase",
12201
13712
  " (`chevronDown`, `checkCircle`, `externalLink`) and `IconName` autocompletes them.",
12202
13713
  " To add your own, encode with `svgToIconUri` from uni-core rather than hand-writing",
@@ -12241,11 +13752,19 @@ function formatIconTokens(icons) {
12241
13752
  out.push(`# Icon tokens \u2014 ${encoded.length} of ${icons.length} encoded`);
12242
13753
  out.push("");
12243
13754
  if (encoded.length) {
13755
+ out.push("## First: are any of these already built in?");
13756
+ out.push("");
13757
+ out.push("Every theme ships these icons. If a glyph below *depicts* one of them, do not");
13758
+ out.push('add a token \u2014 delete the inline `<svg>` and use `<uni-icon name="\u2026" />` with the');
13759
+ out.push("built-in name. Only genuinely app-specific artwork belongs in `icons`.");
13760
+ out.push("");
13761
+ out.push(`> ${Object.keys(BaseIcons).join(", ")}`);
13762
+ out.push("");
12244
13763
  out.push("## Add to `uni-theme.ts`");
12245
13764
  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.");
13765
+ out.push("Merge whatever survives that check into the `icons` const. They are merged over");
13766
+ out.push('the built-in set per name, then rendered anywhere with `<uni-icon name="\u2026" />` \u2014');
13767
+ out.push("delete the inline `<svg>` from the component.");
12249
13768
  out.push("");
12250
13769
  out.push("```ts");
12251
13770
  out.push("const icons: Icons = {");
@@ -12294,11 +13813,141 @@ function formatIconTokens(icons) {
12294
13813
  return out.join("\n");
12295
13814
  }
12296
13815
 
13816
+ // src/server/theme-json.ts
13817
+ var APPLY_SNIPPET = [
13818
+ "// Angular \u2014 ThemeService from @uni-design-system/uni-angular",
13819
+ "const result = themeService.registerTheme(theme, { select: true });",
13820
+ "if (!result.success) console.warn(result.issues);"
13821
+ ].join("\n");
13822
+ var APPLY_NOTE = "Each `theme` is a complete, validated UniTheme with the built-in icon set elided. ThemeService restores it on register (the theme's own icons win). Outside Angular, call `hydrateTheme(theme)` from @uni-design-system/uni-core before use, and `parseTheme` if the payload crossed a trust boundary.";
13823
+ function envelope(themes, report) {
13824
+ for (const { id, theme } of themes) {
13825
+ const result = parseTheme(theme);
13826
+ if (!result.success) {
13827
+ return { ok: false, error: `Generated theme \`${id}\` failed validation: ${formatThemeIssues(result.issues)}` };
13828
+ }
13829
+ }
13830
+ return {
13831
+ ok: true,
13832
+ envelope: {
13833
+ themes,
13834
+ ...report ? {
13835
+ contrast: {
13836
+ summary: summarizeContrast(report),
13837
+ pass: report.pass,
13838
+ worstRatio: report.worstRatio,
13839
+ failing: report.checks.filter((check) => !check.pass).map(({ mode, foreground, background, ratio, required }) => ({
13840
+ mode,
13841
+ foreground,
13842
+ background,
13843
+ ratio,
13844
+ required
13845
+ }))
13846
+ }
13847
+ } : {},
13848
+ apply: { snippet: APPLY_SNIPPET, note: APPLY_NOTE },
13849
+ iconsElided: true
13850
+ }
13851
+ };
13852
+ }
13853
+ function buildGeneratedTheme(args) {
13854
+ const resolved = resolveSeed(args.brand);
13855
+ if (!resolved.ok) return resolved;
13856
+ const { light, dark, report } = generateUniThemes({ ...args, seed: resolved.seed });
13857
+ const themes = [
13858
+ { id: light.id, name: light.name, mode: "light", theme: dehydrateTheme(light) }
13859
+ ];
13860
+ if (args.darkMode !== false) {
13861
+ themes.push({ id: dark.id, name: dark.name, mode: "dark", theme: dehydrateTheme(dark) });
13862
+ }
13863
+ return envelope(themes, report);
13864
+ }
13865
+ function listRuntimeThemes() {
13866
+ return Object.entries(UniThemes).map(([id, theme]) => ({
13867
+ id,
13868
+ name: theme.name,
13869
+ mode: modeOf(id)
13870
+ }));
13871
+ }
13872
+ var modeOf = (id) => /dark/i.test(id) ? "dark" : "light";
13873
+ function buildStoredTheme(id) {
13874
+ const theme = UniThemes[id];
13875
+ if (!theme) {
13876
+ const ids = Object.keys(UniThemes).join(", ");
13877
+ return { ok: false, error: `No theme found with id \`${id}\`. Available: ${ids}.` };
13878
+ }
13879
+ return envelope([
13880
+ { id: theme.id, name: theme.name, mode: modeOf(id), theme: dehydrateTheme(theme) }
13881
+ ]);
13882
+ }
13883
+ function summarizeEnvelope(env) {
13884
+ const list = env.themes.map((t) => `\`${t.id}\` (${t.mode})`).join(", ");
13885
+ const failing = env.contrast?.failing.length ? `
13886
+
13887
+ Failing pairs:
13888
+ ${env.contrast.failing.map((f) => `- ${f.mode} \`${f.foreground}\` on \`${f.background}\`: ${f.ratio}:1 (needs ${f.required}:1)`).join("\n")}` : "";
13889
+ return [
13890
+ `# Runtime theme JSON \u2014 ${env.themes.length} theme${env.themes.length === 1 ? "" : "s"}`,
13891
+ "",
13892
+ `${list}. The full validated theme data is in this result's structured content.`,
13893
+ ...env.contrast ? ["", `${env.contrast.summary}.${failing}`] : [],
13894
+ "",
13895
+ "## Apply",
13896
+ "",
13897
+ "```ts",
13898
+ env.apply.snippet,
13899
+ "```",
13900
+ "",
13901
+ env.apply.note,
13902
+ "",
13903
+ "To brand an app permanently instead, use `generate-uni-theme` \u2014 it returns an editable `uni-theme.ts` that becomes the source of truth. Use this tool when the theme should apply immediately without a build step."
13904
+ ].join("\n");
13905
+ }
13906
+
12297
13907
  // src/server/core.ts
12298
13908
  var FrameworkArg = z.enum(["angular", "react"]);
12299
13909
  function text(body) {
12300
13910
  return { content: [{ type: "text", text: body }] };
12301
13911
  }
13912
+ var ThemeGenerationInput = {
13913
+ 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.'),
13914
+ vibe: z.enum(["jewel", "pastel", "earth", "neutral", "florescent"]).optional().describe("Tonal character; defaults to a category inferred from the seed chroma."),
13915
+ scheme: z.enum(["monochromatic", "analogous", "complimentary", "splitComplimentary", "triadic"]).optional().describe("Hue-wheel relationship for generated roles; auto-classified for multi-color input."),
13916
+ name: z.string().optional().describe('Theme display name, defaults to "Brand".')
13917
+ };
13918
+ var RuntimeThemeOutput = {
13919
+ themes: z.array(
13920
+ z.object({
13921
+ id: z.string(),
13922
+ name: z.string(),
13923
+ mode: z.enum(["light", "dark"]),
13924
+ theme: z.record(z.string(), z.unknown()).describe("A validated UniTheme with the built-in icon set elided.")
13925
+ })
13926
+ ).describe("Registration-ready themes."),
13927
+ contrast: z.object({
13928
+ summary: z.string(),
13929
+ pass: z.boolean(),
13930
+ worstRatio: z.number(),
13931
+ failing: z.array(
13932
+ z.object({
13933
+ mode: z.string(),
13934
+ foreground: z.string(),
13935
+ background: z.string(),
13936
+ ratio: z.number(),
13937
+ required: z.number()
13938
+ })
13939
+ )
13940
+ }).optional().describe("WCAG audit of the generated colors; absent for themes that ship with Uni."),
13941
+ apply: z.object({ snippet: z.string(), note: z.string() }).describe("How to register the theme, including the icon-hydration rule."),
13942
+ iconsElided: z.literal(true)
13943
+ };
13944
+ function runtimeTheme(result) {
13945
+ if (!result.ok) return { content: [{ type: "text", text: result.error }], isError: true };
13946
+ return {
13947
+ content: [{ type: "text", text: summarizeEnvelope(result.envelope) }],
13948
+ structuredContent: result.envelope
13949
+ };
13950
+ }
12302
13951
  function notFound(kind, id) {
12303
13952
  return text(
12304
13953
  `No ${kind} found with id \`${id}\`. Use the matching list/search tool to discover valid ids.`
@@ -12308,7 +13957,7 @@ function createUniServer() {
12308
13957
  const server = new McpServer(
12309
13958
  { name: "uni-design-system", version: meta.version },
12310
13959
  {
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" />`.'
13960
+ 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. Theming has four tools, split by what you need: to brand an app permanently, call `generate-uni-theme` once and write the returned static `uni-theme.ts` \u2014 then change look and feel by editing that file's tokens directly, since shared tokens propagate everywhere; to apply a theme immediately with no build step (previews, per-tenant theming, generated UI), call `generate-runtime-theme` or `get-runtime-theme` and register the JSON they return; to read a theme's token values without applying one, use `get-theme-template`. 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\" />`."
12312
13961
  }
12313
13962
  );
12314
13963
  server.registerTool(
@@ -12417,20 +14066,39 @@ function createUniServer() {
12417
14066
  title: "Generate a Uni brand theme file",
12418
14067
  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.",
12419
14068
  inputSchema: {
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
- ),
12423
- vibe: z.enum(["jewel", "pastel", "earth", "neutral", "florescent"]).optional().describe("Tonal character; defaults to a category inferred from the seed chroma."),
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
- ),
14069
+ ...ThemeGenerationInput,
12427
14070
  shape: z.enum(["sharp", "modern", "playful"]).optional().describe("Shape language \u2014 emits a radii override into the file."),
12428
- name: z.string().optional().describe('Theme display name, defaults to "Brand".'),
12429
14071
  darkMode: z.boolean().optional().describe("Emit the dark theme too. Defaults to true.")
12430
14072
  }
12431
14073
  },
12432
14074
  async (args) => text(formatGeneratedTheme(args))
12433
14075
  );
14076
+ server.registerTool(
14077
+ "generate-runtime-theme",
14078
+ {
14079
+ title: "Generate a Uni brand theme as runtime JSON",
14080
+ description: "Generate a WCAG-AA light+dark Uni theme from brand hex color(s) and return it as validated JSON data, ready to register live via `ThemeService.registerTheme(theme, { select: true })` \u2014 no file to write, no rebuild. Use this when a theme should apply immediately (previewing a brand, per-tenant theming, generated UI). To brand an app permanently, use `generate-uni-theme` instead: it returns an editable `uni-theme.ts` that becomes the source of truth. The built-in icon set is elided from the payload and restored on registration.",
14081
+ inputSchema: {
14082
+ ...ThemeGenerationInput,
14083
+ shape: z.enum(["sharp", "modern", "playful"]).optional().describe("Shape language \u2014 sets the radii scale on the returned themes."),
14084
+ darkMode: z.boolean().optional().describe("Include the dark theme too. Defaults to true.")
14085
+ },
14086
+ outputSchema: RuntimeThemeOutput
14087
+ },
14088
+ async (args) => runtimeTheme(buildGeneratedTheme(args))
14089
+ );
14090
+ server.registerTool(
14091
+ "get-runtime-theme",
14092
+ {
14093
+ title: "Get a built-in Uni theme as runtime JSON",
14094
+ description: "A theme that ships with Uni, as a complete validated `UniTheme` ready to register at runtime. Differs from `get-theme-template`, which returns a flat read-only projection of token values for inspection \u2014 this returns the real theme object. The built-in icon set is elided from the payload and restored on registration.",
14095
+ inputSchema: {
14096
+ id: z.string().describe('Theme id, e.g. "LightTheme" or "DarkTheme".')
14097
+ },
14098
+ outputSchema: RuntimeThemeOutput
14099
+ },
14100
+ async ({ id }) => runtimeTheme(buildStoredTheme(id))
14101
+ );
12434
14102
  server.registerTool(
12435
14103
  "create-icon-tokens",
12436
14104
  {
@@ -12588,6 +14256,8 @@ function registerResources(server) {
12588
14256
 
12589
14257
  export {
12590
14258
  meta,
14259
+ listRuntimeThemes,
14260
+ buildStoredTheme,
12591
14261
  createUniServer
12592
14262
  };
12593
- //# sourceMappingURL=chunk-252ZWTTU.js.map
14263
+ //# sourceMappingURL=chunk-GT3T5DVX.js.map