@urbicon-ui/design-content 6.2.0 → 6.3.3

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.
Files changed (51) hide show
  1. package/content/auth/components/register-page/llm.txt +1 -0
  2. package/content/blocks/components/calendar/llm.txt +1 -1
  3. package/content/blocks/components/command-palette/llm.txt +1 -4
  4. package/content/blocks/components/composition-bar/llm.txt +1 -4
  5. package/content/blocks/components/date-range-picker/llm.txt +49 -0
  6. package/content/blocks/components/empty-state/llm.txt +1 -1
  7. package/content/blocks/components/file-upload/llm.txt +1 -1
  8. package/content/blocks/components/guide/llm.txt +1 -4
  9. package/content/blocks/components/guide-article/llm.txt +1 -4
  10. package/content/blocks/components/guide-beacon/llm.txt +1 -4
  11. package/content/blocks/components/guide-hint/llm.txt +1 -4
  12. package/content/blocks/components/guide-marker/llm.txt +1 -4
  13. package/content/blocks/components/guide-mention/llm.txt +1 -4
  14. package/content/blocks/components/guide-panel/llm.txt +1 -4
  15. package/content/blocks/components/planner/llm.txt +1 -1
  16. package/content/blocks/components/sankey/llm.txt +1 -4
  17. package/content/blocks/components/theme-switcher/llm.txt +5 -6
  18. package/content/blocks/primitives/accordion/llm.txt +2 -5
  19. package/content/blocks/primitives/alert/llm.txt +1 -4
  20. package/content/blocks/primitives/avatar/llm.txt +1 -4
  21. package/content/blocks/primitives/badge/llm.txt +1 -4
  22. package/content/blocks/primitives/breadcrumb/llm.txt +1 -4
  23. package/content/blocks/primitives/button/llm.txt +1 -4
  24. package/content/blocks/primitives/button-group/llm.txt +1 -4
  25. package/content/blocks/primitives/card/llm.txt +1 -4
  26. package/content/blocks/primitives/checkbox/llm.txt +1 -4
  27. package/content/blocks/primitives/collapsible/llm.txt +1 -4
  28. package/content/blocks/primitives/combobox/llm.txt +1 -4
  29. package/content/blocks/primitives/dialog/llm.txt +1 -4
  30. package/content/blocks/primitives/drawer/llm.txt +1 -4
  31. package/content/blocks/primitives/input/llm.txt +1 -4
  32. package/content/blocks/primitives/pagination/llm.txt +1 -4
  33. package/content/blocks/primitives/progress/llm.txt +1 -4
  34. package/content/blocks/primitives/radio-group/llm.txt +1 -4
  35. package/content/blocks/primitives/segment-group/llm.txt +1 -4
  36. package/content/blocks/primitives/select/llm.txt +1 -4
  37. package/content/blocks/primitives/sidebar/llm.txt +1 -4
  38. package/content/blocks/primitives/skeleton/llm.txt +1 -4
  39. package/content/blocks/primitives/slider/llm.txt +1 -4
  40. package/content/blocks/primitives/spinner/llm.txt +1 -4
  41. package/content/blocks/primitives/stepper/llm.txt +1 -4
  42. package/content/blocks/primitives/tab/llm.txt +1 -4
  43. package/content/blocks/primitives/textarea/llm.txt +1 -4
  44. package/content/blocks/primitives/toast/llm.txt +1 -4
  45. package/content/blocks/primitives/toggle/llm.txt +1 -4
  46. package/content/blocks/primitives/toolbar/llm.txt +1 -4
  47. package/content/blocks/primitives/tooltip/llm.txt +1 -4
  48. package/content/component-catalog.json +94 -359
  49. package/content/design-system/principles.md +2 -1
  50. package/content/meta.json +3 -3
  51. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated": "2026-06-22T17:04:55.710Z",
2
+ "generated": "2026-06-24T07:50:05.631Z",
3
3
  "version": "0.2.38",
4
4
  "components": [
5
5
  {
@@ -51,14 +51,7 @@
51
51
  "value": "string | string[]",
52
52
  "variant": "'default' | 'separated' | 'ghost'"
53
53
  },
54
- "slots": [
55
- "base",
56
- "item",
57
- "trigger",
58
- "chevron",
59
- "content",
60
- "contentInner"
61
- ],
54
+ "slots": [],
62
55
  "hasExamples": true,
63
56
  "relatedComponents": [
64
57
  "Collapsible",
@@ -170,15 +163,7 @@
170
163
  "size": "'sm' | 'md' | 'lg'",
171
164
  "variant": "'soft' | 'inline' | 'filled'"
172
165
  },
173
- "slots": [
174
- "base",
175
- "icon",
176
- "content",
177
- "title",
178
- "description",
179
- "actions",
180
- "dismissButton"
181
- ],
166
+ "slots": [],
182
167
  "hasExamples": true,
183
168
  "relatedComponents": [
184
169
  "Toast",
@@ -334,12 +319,7 @@
334
319
  "status": "'away' | 'busy' | 'offline' | 'online'",
335
320
  "statusPosition": "'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'"
336
321
  },
337
- "slots": [
338
- "base",
339
- "image",
340
- "fallback",
341
- "status"
342
- ],
322
+ "slots": [],
343
323
  "hasExamples": true,
344
324
  "relatedComponents": [
345
325
  "Badge"
@@ -474,12 +454,7 @@
474
454
  "size": "'lg' | 'md' | 'sm' | 'xs'",
475
455
  "tier": "'commit' | 'modify'"
476
456
  },
477
- "slots": [
478
- "base",
479
- "content",
480
- "removeButton",
481
- "removeIcon"
482
- ],
457
+ "slots": [],
483
458
  "hasExamples": true,
484
459
  "relatedComponents": [
485
460
  "Alert",
@@ -558,14 +533,7 @@
558
533
  "items": "BreadcrumbItem[]",
559
534
  "size": "'sm' | 'md' | 'lg'"
560
535
  },
561
- "slots": [
562
- "nav",
563
- "list",
564
- "item",
565
- "link",
566
- "currentPage",
567
- "separator"
568
- ],
536
+ "slots": [],
569
537
  "hasExamples": true,
570
538
  "relatedComponents": [
571
539
  "Tab",
@@ -684,11 +652,7 @@
684
652
  "buttonGroupConnected": "'true'",
685
653
  "tier": "'commit' | 'modify'"
686
654
  },
687
- "slots": [
688
- "base",
689
- "content",
690
- "spinner"
691
- ],
655
+ "slots": [],
692
656
  "hasExamples": true,
693
657
  "relatedComponents": [
694
658
  "ButtonGroup",
@@ -759,9 +723,7 @@
759
723
  "value": "ButtonGroupValue",
760
724
  "variant": "ButtonVariants['variant']"
761
725
  },
762
- "slots": [
763
- "base"
764
- ],
726
+ "slots": [],
765
727
  "hasExamples": true,
766
728
  "relatedComponents": [
767
729
  "Button",
@@ -915,12 +877,7 @@
915
877
  "dividers": "'true'",
916
878
  "padding": "'lg' | 'md' | 'none' | 'sm' | 'xl'"
917
879
  },
918
- "slots": [
919
- "base",
920
- "header",
921
- "content",
922
- "footer"
923
- ],
880
+ "slots": [],
924
881
  "hasExamples": true,
925
882
  "relatedComponents": [
926
883
  "Accordion",
@@ -1037,14 +994,7 @@
1037
994
  "variant": "'filled' | 'ghost' | 'outlined'",
1038
995
  "size": "'lg' | 'md' | 'sm' | 'xs'"
1039
996
  },
1040
- "slots": [
1041
- "wrapper",
1042
- "control",
1043
- "box",
1044
- "icon",
1045
- "label",
1046
- "message"
1047
- ],
997
+ "slots": [],
1048
998
  "hasExamples": true,
1049
999
  "relatedComponents": [
1050
1000
  "Toggle",
@@ -1098,13 +1048,7 @@
1098
1048
  "variant": "'card' | 'default' | 'ghost'",
1099
1049
  "size": "'lg' | 'md' | 'sm'"
1100
1050
  },
1101
- "slots": [
1102
- "base",
1103
- "trigger",
1104
- "chevron",
1105
- "content",
1106
- "contentInner"
1107
- ],
1051
+ "slots": [],
1108
1052
  "hasExamples": true,
1109
1053
  "relatedComponents": [
1110
1054
  "Accordion",
@@ -1176,22 +1120,7 @@
1176
1120
  "size": "'lg' | 'md' | 'sm'",
1177
1121
  "tier": "'commit' | 'modify'"
1178
1122
  },
1179
- "slots": [
1180
- "base",
1181
- "label",
1182
- "requiredMark",
1183
- "inputWrapper",
1184
- "input",
1185
- "message",
1186
- "hint",
1187
- "listbox",
1188
- "option",
1189
- "optionActive",
1190
- "optionSelected",
1191
- "noResults",
1192
- "clear",
1193
- "chevron"
1194
- ],
1123
+ "slots": [],
1195
1124
  "hasExamples": true,
1196
1125
  "relatedComponents": [
1197
1126
  "Select",
@@ -1241,25 +1170,7 @@
1241
1170
  "shortcut": "string | false",
1242
1171
  "size": "CommandPaletteVariants['size']"
1243
1172
  },
1244
- "slots": [
1245
- "wrapper",
1246
- "input",
1247
- "inputIcon",
1248
- "clearButton",
1249
- "list",
1250
- "group",
1251
- "groupLabel",
1252
- "item",
1253
- "itemHighlighted",
1254
- "itemDefault",
1255
- "itemDisabled",
1256
- "itemIcon",
1257
- "itemLabel",
1258
- "itemShortcut",
1259
- "empty",
1260
- "footer",
1261
- "kbd"
1262
- ],
1173
+ "slots": [],
1263
1174
  "hasExamples": true,
1264
1175
  "relatedComponents": [
1265
1176
  "Dialog"
@@ -1329,23 +1240,7 @@
1329
1240
  "legendPlacement": "'bottom' | 'left' | 'none' | 'right' | 'top'",
1330
1241
  "orientation": "'horizontal' | 'vertical'"
1331
1242
  },
1332
- "slots": [
1333
- "wrapper",
1334
- "barWrapper",
1335
- "bar",
1336
- "segment",
1337
- "segmentRest",
1338
- "tooltip",
1339
- "tooltipLabel",
1340
- "tooltipDetail",
1341
- "legend",
1342
- "legendItem",
1343
- "legendDot",
1344
- "legendLabel",
1345
- "legendValue",
1346
- "total",
1347
- "totalLabel"
1348
- ],
1243
+ "slots": [],
1349
1244
  "hasExamples": true,
1350
1245
  "relatedComponents": []
1351
1246
  },
@@ -1463,6 +1358,53 @@
1463
1358
  "Input"
1464
1359
  ]
1465
1360
  },
1361
+ {
1362
+ "name": "DateRangePicker",
1363
+ "slug": "date-range-picker",
1364
+ "package": "@urbicon-ui/blocks",
1365
+ "group": "components",
1366
+ "description": "Date range picker with a dual-calendar popup for selecting a start and end date — min/max constraints, disabled dates, and native form submission via paired hidden inputs.",
1367
+ "tags": [
1368
+ "form"
1369
+ ],
1370
+ "import": "import { DateRangePicker } from '@urbicon-ui/blocks';",
1371
+ "llmTxtPath": "components/date-range-picker/llm.txt",
1372
+ "variants": [],
1373
+ "keyProps": [
1374
+ "calendarVariant",
1375
+ "class",
1376
+ "clearable",
1377
+ "closeOnClickOutside",
1378
+ "closeOnEscape",
1379
+ "closeOnSelect",
1380
+ "defaultMonth",
1381
+ "defaultYear"
1382
+ ],
1383
+ "keyPropTypes": {
1384
+ "calendarVariant": "'default' | 'bordered' | 'ghost'",
1385
+ "defaultMonth": "MonthIndex",
1386
+ "disabledDates": "Date[]",
1387
+ "displayFormat": "DateFormatOptions",
1388
+ "inputVariant": "'outlined' | 'filled' | 'ghost' | 'underline'",
1389
+ "isDateDisabled": "(date: Date) => boolean",
1390
+ "maxDate": "Date",
1391
+ "minDate": "Date",
1392
+ "onClickOutside": "() => void",
1393
+ "onEscape": "() => void",
1394
+ "onOpenChange": "(open: boolean) => void",
1395
+ "onValueChange": "(value: DateRange | undefined) => void",
1396
+ "size": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
1397
+ "value": "DateRange",
1398
+ "valueFormat": "'date' | 'iso'",
1399
+ "weekStartsOn": "WeekdayIndex"
1400
+ },
1401
+ "slots": [],
1402
+ "hasExamples": false,
1403
+ "relatedComponents": [
1404
+ "DatePicker",
1405
+ "Calendar"
1406
+ ]
1407
+ },
1466
1408
  {
1467
1409
  "name": "Dialog",
1468
1410
  "slug": "dialog",
@@ -1525,16 +1467,7 @@
1525
1467
  "size": "DialogVariants['size']",
1526
1468
  "transitionEasing": "(t: number) => number"
1527
1469
  },
1528
- "slots": [
1529
- "dialog",
1530
- "backdrop",
1531
- "panel",
1532
- "content",
1533
- "header",
1534
- "title",
1535
- "body",
1536
- "footer"
1537
- ],
1470
+ "slots": [],
1538
1471
  "hasExamples": true,
1539
1472
  "relatedComponents": [
1540
1473
  "Drawer"
@@ -1637,15 +1570,7 @@
1637
1570
  "size": "DrawerVariants['size']",
1638
1571
  "transitionEasing": "(t: number) => number"
1639
1572
  },
1640
- "slots": [
1641
- "dialog",
1642
- "backdrop",
1643
- "panel",
1644
- "header",
1645
- "title",
1646
- "body",
1647
- "footer"
1648
- ],
1573
+ "slots": [],
1649
1574
  "hasExamples": true,
1650
1575
  "relatedComponents": [
1651
1576
  "Dialog",
@@ -1860,24 +1785,7 @@
1860
1785
  "keyPropTypes": {
1861
1786
  "placement": "Placement"
1862
1787
  },
1863
- "slots": [
1864
- "container",
1865
- "scrim",
1866
- "bubble",
1867
- "arrow",
1868
- "title",
1869
- "body",
1870
- "progress",
1871
- "dots",
1872
- "dot",
1873
- "dotActive",
1874
- "stepText",
1875
- "footer",
1876
- "spacer",
1877
- "skip",
1878
- "prev",
1879
- "next"
1880
- ],
1788
+ "slots": [],
1881
1789
  "hasExamples": true,
1882
1790
  "relatedComponents": [
1883
1791
  "GuideProvider",
@@ -1907,9 +1815,7 @@
1907
1815
  "unstyled"
1908
1816
  ],
1909
1817
  "keyPropTypes": {},
1910
- "slots": [
1911
- "article"
1912
- ],
1818
+ "slots": [],
1913
1819
  "hasExamples": true,
1914
1820
  "relatedComponents": [
1915
1821
  "GuidePanel",
@@ -1953,11 +1859,7 @@
1953
1859
  "size": "GuideBeaconVariants['size']",
1954
1860
  "tour": "GuideTour"
1955
1861
  },
1956
- "slots": [
1957
- "beacon",
1958
- "ping",
1959
- "dot"
1960
- ],
1862
+ "slots": [],
1961
1863
  "hasExamples": true,
1962
1864
  "relatedComponents": [
1963
1865
  "Guide",
@@ -1993,13 +1895,7 @@
1993
1895
  "placement": "Placement",
1994
1896
  "trigger": "'mount' | 'manual'"
1995
1897
  },
1996
- "slots": [
1997
- "hint",
1998
- "title",
1999
- "body",
2000
- "dismiss",
2001
- "arrow"
2002
- ],
1898
+ "slots": [],
2003
1899
  "hasExamples": true,
2004
1900
  "relatedComponents": [
2005
1901
  "GuideProvider",
@@ -2043,10 +1939,7 @@
2043
1939
  "direction": "GuideDirection",
2044
1940
  "size": "GuideMarkerVariants['size']"
2045
1941
  },
2046
- "slots": [
2047
- "marker",
2048
- "icon"
2049
- ],
1942
+ "slots": [],
2050
1943
  "hasExamples": true,
2051
1944
  "relatedComponents": [
2052
1945
  "GuidePanel",
@@ -2079,9 +1972,7 @@
2079
1972
  "keyPropTypes": {
2080
1973
  "direction": "GuideDirection"
2081
1974
  },
2082
- "slots": [
2083
- "mention"
2084
- ],
1975
+ "slots": [],
2085
1976
  "hasExamples": true,
2086
1977
  "relatedComponents": [
2087
1978
  "GuideArticle",
@@ -2134,17 +2025,7 @@
2134
2025
  "placement": "GuidePanelVariants['placement']",
2135
2026
  "size": "GuidePanelVariants['size']"
2136
2027
  },
2137
- "slots": [
2138
- "panel",
2139
- "header",
2140
- "backButton",
2141
- "title",
2142
- "closeButton",
2143
- "body",
2144
- "list",
2145
- "listItem",
2146
- "footer"
2147
- ],
2028
+ "slots": [],
2148
2029
  "hasExamples": true,
2149
2030
  "relatedComponents": [
2150
2031
  "GuideProvider",
@@ -2308,14 +2189,7 @@
2308
2189
  "messageType": "'error' | 'helper'",
2309
2190
  "tier": "'commit' | 'modify'"
2310
2191
  },
2311
- "slots": [
2312
- "wrapper",
2313
- "container",
2314
- "base",
2315
- "label",
2316
- "message",
2317
- "iconContainer"
2318
- ],
2192
+ "slots": [],
2319
2193
  "hasExamples": true,
2320
2194
  "relatedComponents": [
2321
2195
  "Textarea",
@@ -2730,12 +2604,7 @@
2730
2604
  "variant": "'outlined' | 'filled' | 'ghost'",
2731
2605
  "layout": "'default' | 'minimal' | 'navigation' | 'table'"
2732
2606
  },
2733
- "slots": [
2734
- "base",
2735
- "info",
2736
- "controls",
2737
- "ellipsis"
2738
- ],
2607
+ "slots": [],
2739
2608
  "hasExamples": true,
2740
2609
  "relatedComponents": [
2741
2610
  "Table"
@@ -2970,18 +2839,7 @@
2970
2839
  "size": "'lg' | 'md' | 'sm' | 'xs'",
2971
2840
  "indeterminate": "'true'"
2972
2841
  },
2973
- "slots": [
2974
- "wrapper",
2975
- "header",
2976
- "label",
2977
- "valueText",
2978
- "track",
2979
- "fill",
2980
- "circularWrapper",
2981
- "circularTrack",
2982
- "circularFill",
2983
- "circularLabel"
2984
- ],
2842
+ "slots": [],
2985
2843
  "hasExamples": true,
2986
2844
  "relatedComponents": [
2987
2845
  "Spinner",
@@ -3088,12 +2946,7 @@
3088
2946
  "tier": "InteractiveTier",
3089
2947
  "variant": "RadioItemVariants['variant']"
3090
2948
  },
3091
- "slots": [
3092
- "root",
3093
- "group",
3094
- "label",
3095
- "message"
3096
- ],
2949
+ "slots": [],
3097
2950
  "hasExamples": true,
3098
2951
  "relatedComponents": [
3099
2952
  "Checkbox",
@@ -3117,11 +2970,11 @@
3117
2970
  "apiPath",
3118
2971
  "class",
3119
2972
  "csrf",
2973
+ "defaultEmail",
3120
2974
  "fetcher",
3121
2975
  "footer",
3122
2976
  "header",
3123
- "links",
3124
- "loginUrl"
2977
+ "links"
3125
2978
  ],
3126
2979
  "keyPropTypes": {
3127
2980
  "csrf": "CsrfClientOptions",
@@ -3220,18 +3073,7 @@
3220
3073
  "onNodeClick": "(node: SankeyLaidOutNodeWithMeta) => void",
3221
3074
  "tooltip": "Snippet<[datum: SankeyLaidOutNodeWithMeta | SankeyLaidOutLinkWithMeta, kind: 'node' | 'link']>"
3222
3075
  },
3223
- "slots": [
3224
- "wrapper",
3225
- "svg",
3226
- "node",
3227
- "nodeRect",
3228
- "nodeLabel",
3229
- "nodeValue",
3230
- "link",
3231
- "tooltip",
3232
- "tooltipLabel",
3233
- "tooltipDetail"
3234
- ],
3076
+ "slots": [],
3235
3077
  "hasExamples": true,
3236
3078
  "relatedComponents": []
3237
3079
  },
@@ -3304,11 +3146,7 @@
3304
3146
  "fullWidth": "'true'",
3305
3147
  "tier": "'commit' | 'modify'"
3306
3148
  },
3307
- "slots": [
3308
- "base",
3309
- "indicator",
3310
- "item"
3311
- ],
3149
+ "slots": [],
3312
3150
  "hasExamples": true,
3313
3151
  "relatedComponents": [
3314
3152
  "ButtonGroup",
@@ -3427,23 +3265,7 @@
3427
3265
  "selected": "'true'",
3428
3266
  "tier": "'commit' | 'modify'"
3429
3267
  },
3430
- "slots": [
3431
- "wrapper",
3432
- "base",
3433
- "trigger",
3434
- "triggerText",
3435
- "placeholder",
3436
- "chevron",
3437
- "clear",
3438
- "listbox",
3439
- "option",
3440
- "optionCheck",
3441
- "optionCheckbox",
3442
- "group",
3443
- "groupLabel",
3444
- "label",
3445
- "message"
3446
- ],
3268
+ "slots": [],
3447
3269
  "hasExamples": true,
3448
3270
  "relatedComponents": []
3449
3271
  },
@@ -3583,13 +3405,7 @@
3583
3405
  "onOpenChange": "(open: boolean) => void",
3584
3406
  "side": "SidebarVariants['side']"
3585
3407
  },
3586
- "slots": [
3587
- "backdrop",
3588
- "panel",
3589
- "header",
3590
- "content",
3591
- "footer"
3592
- ],
3408
+ "slots": [],
3593
3409
  "hasExamples": true,
3594
3410
  "relatedComponents": [
3595
3411
  "SidebarLayout",
@@ -3711,10 +3527,7 @@
3711
3527
  "size": "SkeletonVariants['size']",
3712
3528
  "variant": "SkeletonVariants['variant']"
3713
3529
  },
3714
- "slots": [
3715
- "base",
3716
- "wrapper"
3717
- ],
3530
+ "slots": [],
3718
3531
  "hasExamples": true,
3719
3532
  "relatedComponents": [
3720
3533
  "Spinner",
@@ -3802,21 +3615,7 @@
3802
3615
  "appearance": "'default' | 'rail'",
3803
3616
  "messageType": "'error' | 'helper'"
3804
3617
  },
3805
- "slots": [
3806
- "wrapper",
3807
- "header",
3808
- "label",
3809
- "valueText",
3810
- "base",
3811
- "track",
3812
- "range",
3813
- "thumb",
3814
- "mark",
3815
- "boundaryTick",
3816
- "rangeStatus",
3817
- "rangeStatusIcon",
3818
- "message"
3819
- ],
3618
+ "slots": [],
3820
3619
  "hasExamples": true,
3821
3620
  "relatedComponents": []
3822
3621
  },
@@ -3925,23 +3724,7 @@
3925
3724
  "speed": "SpinnerVariants['speed']",
3926
3725
  "variant": "SpinnerVariants['variant']"
3927
3726
  },
3928
- "slots": [
3929
- "base",
3930
- "svg",
3931
- "svgCircle",
3932
- "svgPath",
3933
- "dots",
3934
- "dot",
3935
- "pulse",
3936
- "pulseCenter",
3937
- "pulseRing",
3938
- "ring",
3939
- "ringElement",
3940
- "bars",
3941
- "bar",
3942
- "content",
3943
- "srOnly"
3944
- ],
3727
+ "slots": [],
3945
3728
  "hasExamples": true,
3946
3729
  "relatedComponents": [
3947
3730
  "Progress",
@@ -4013,18 +3796,7 @@
4013
3796
  "tier": "InteractiveTier",
4014
3797
  "variant": "'default' | 'outlined' | 'minimal'"
4015
3798
  },
4016
- "slots": [
4017
- "base",
4018
- "stepItem",
4019
- "step",
4020
- "indicatorColumn",
4021
- "indicator",
4022
- "labelGroup",
4023
- "label",
4024
- "description",
4025
- "separator",
4026
- "content"
4027
- ],
3799
+ "slots": [],
4028
3800
  "hasExamples": true,
4029
3801
  "relatedComponents": [
4030
3802
  "Tab"
@@ -4102,13 +3874,7 @@
4102
3874
  "variant": "'enclosed' | 'line' | 'pills' | 'solid'",
4103
3875
  "size": "'lg' | 'md' | 'sm'"
4104
3876
  },
4105
- "slots": [
4106
- "base",
4107
- "list",
4108
- "trigger",
4109
- "panel",
4110
- "indicator"
4111
- ],
3877
+ "slots": [],
4112
3878
  "hasExamples": true,
4113
3879
  "relatedComponents": [
4114
3880
  "Stepper\n\nTab props are a discriminated union on `orientation`. `fullWidth` is\nonly available on horizontal tabs — combining it with `orientation=\"vertical\"`\nfails type-check, since vertical triggers are already full-width by design."
@@ -4257,14 +4023,7 @@
4257
4023
  "messageType": "'error' | 'helper'",
4258
4024
  "tier": "'commit' | 'modify'"
4259
4025
  },
4260
- "slots": [
4261
- "wrapper",
4262
- "base",
4263
- "label",
4264
- "footer",
4265
- "message",
4266
- "counter"
4267
- ],
4026
+ "slots": [],
4268
4027
  "hasExamples": true,
4269
4028
  "relatedComponents": []
4270
4029
  },
@@ -4273,7 +4032,7 @@
4273
4032
  "slug": "theme-switcher",
4274
4033
  "package": "@urbicon-ui/blocks",
4275
4034
  "group": "components",
4276
- "description": "Cycles between light, dark, and system color schemes.\nApplies light/dark classes on the html element and persists to localStorage.",
4035
+ "description": "Cycles between light, dark, and system color schemes. Sets a\n`light`/`dark` class on the `<html>` element for explicit choices and clears\nit in system mode (so the CSS `light-dark()` function follows the OS natively).\nPersists the choice to localStorage.",
4277
4036
  "tags": [
4278
4037
  "action"
4279
4038
  ],
@@ -4324,10 +4083,7 @@
4324
4083
  "theme": "Theme",
4325
4084
  "variant": "ThemeSwitcherVariants['variant']"
4326
4085
  },
4327
- "slots": [
4328
- "button",
4329
- "icon"
4330
- ],
4086
+ "slots": [],
4331
4087
  "hasExamples": true,
4332
4088
  "relatedComponents": [
4333
4089
  "LocaleSwitcher"
@@ -4383,16 +4139,7 @@
4383
4139
  "placement": "ToastPlacement",
4384
4140
  "intent": "'danger' | 'info' | 'neutral' | 'primary' | 'success' | 'warning'"
4385
4141
  },
4386
- "slots": [
4387
- "container",
4388
- "toast",
4389
- "icon",
4390
- "content",
4391
- "title",
4392
- "description",
4393
- "dismissButton",
4394
- "progress"
4395
- ],
4142
+ "slots": [],
4396
4143
  "hasExamples": true,
4397
4144
  "relatedComponents": [
4398
4145
  "Alert"
@@ -4481,14 +4228,7 @@
4481
4228
  "intent": "'danger' | 'neutral' | 'primary' | 'secondary' | 'success' | 'warning'",
4482
4229
  "size": "'lg' | 'md' | 'sm' | 'xs'"
4483
4230
  },
4484
- "slots": [
4485
- "wrapper",
4486
- "control",
4487
- "track",
4488
- "thumb",
4489
- "label",
4490
- "message"
4491
- ],
4231
+ "slots": [],
4492
4232
  "hasExamples": true,
4493
4233
  "relatedComponents": [
4494
4234
  "Checkbox"
@@ -4564,9 +4304,7 @@
4564
4304
  "orientation": "'horizontal' | 'vertical'",
4565
4305
  "padding": "'lg' | 'md' | 'sm' | 'xl' | 'xs'"
4566
4306
  },
4567
- "slots": [
4568
- "base"
4569
- ],
4307
+ "slots": [],
4570
4308
  "hasExamples": true,
4571
4309
  "relatedComponents": [
4572
4310
  "Button",
@@ -4633,10 +4371,7 @@
4633
4371
  "size": "'lg' | 'md' | 'sm'",
4634
4372
  "visible": "'false' | 'true'"
4635
4373
  },
4636
- "slots": [
4637
- "base",
4638
- "arrow"
4639
- ],
4374
+ "slots": [],
4640
4375
  "hasExamples": true,
4641
4376
  "relatedComponents": [
4642
4377
  "Popover"
@@ -4793,7 +4528,7 @@
4793
4528
  "Progress",
4794
4529
  "Tooltip"
4795
4530
  ],
4796
- "code": "<script lang=\"ts\">\n import {\n Avatar, Badge, Button, Card, Progress, Tooltip,\n SidebarLayout, MenuIcon, HomeIcon, BarChartIcon, UsersIcon, SettingsIcon\n } from '@urbicon-ui/blocks';\n\n let sidebarOpen = $state(false);\n let activeRoute = $state('dashboard');\n\n const navItems = [\n { id: 'dashboard', label: 'Dashboard', icon: HomeIcon },\n { id: 'analytics', label: 'Analytics', icon: BarChartIcon },\n { id: 'users', label: 'Users', icon: UsersIcon },\n { id: 'settings', label: 'Settings', icon: SettingsIcon }\n ];\n\n const stats = [\n { label: 'Total Users', value: '12,847', change: '+12.5%', intent: 'success' as const, progress: 78, tooltip: 'Target: 16,500 users by Q2' },\n { label: 'Revenue', value: '$48,392', change: '+8.2%', intent: 'success' as const, progress: 64, tooltip: 'Target: $75,000 monthly' },\n { label: 'Active Sessions', value: '1,429', change: '-3.1%', intent: 'danger' as const, progress: 45, tooltip: 'Down from 1,475 last week' },\n { label: 'Conversion', value: '3.24%', change: '+0.8%', intent: 'success' as const, progress: 81, tooltip: 'Target: 4.0% conversion rate' }\n ];\n\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const chartData = [40, 65, 45, 80, 55, 70, 85, 60, 90, 75, 95, 88];\n\n const recentActivity = [\n { user: 'Sarah Chen', action: 'Purchased Pro plan', time: '2 min ago' },\n { user: 'Marcus Rivera', action: 'Submitted support ticket', time: '15 min ago' },\n { user: 'Aisha Patel', action: 'Updated profile settings', time: '1 hour ago' },\n { user: 'Tom Weber', action: 'Exported analytics report', time: '2 hours ago' },\n { user: 'Lisa Kim', action: 'Added team member', time: '3 hours ago' }\n ];\n</script>\n\n<SidebarLayout bind:open={sidebarOpen} sidebarWidth=\"14rem\" data-design-pattern=\"dashboard\">\n {#snippet sidebarHeader()}\n <a href=\"/\" class=\"flex h-14 items-center px-4 font-bold text-primary\">Acme Inc</a>\n {/snippet}\n\n {#snippet sidebar()}\n <nav class=\"flex flex-col gap-1 p-3\">\n {#each navItems as item (item.id)}\n {@const Icon = item.icon}\n <button\n type=\"button\"\n onclick={() => (activeRoute = item.id)}\n class={activeRoute === item.id\n ? 'flex items-center gap-2.5 rounded-lg bg-primary-subtle px-3 py-2 text-sm font-medium text-primary'\n : 'flex items-center gap-2.5 rounded-lg px-3 py-2 text-sm text-text-secondary hover:bg-surface-hover hover:text-text-primary'}\n >\n <Icon class=\"h-4 w-4 shrink-0\" />\n <span>{item.label}</span>\n </button>\n {/each}\n </nav>\n {/snippet}\n\n {#snippet sidebarFooter()}\n <div class=\"flex items-center gap-3 p-3\">\n <Avatar name=\"Mara Cohen\" size=\"sm\" />\n <div class=\"min-w-0\">\n <div class=\"truncate text-xs font-medium text-text-primary\">Mara C</div>\n <div class=\"truncate text-[10px] text-text-tertiary\">Admin</div>\n </div>\n </div>\n {/snippet}\n\n {#snippet mobileHeader({ openSidebar })}\n <Button variant=\"ghost\" size=\"sm\" onclick={openSidebar} aria-label=\"Open menu\">\n <MenuIcon class=\"h-5 w-5\" />\n </Button>\n <span class=\"font-semibold\">Acme Inc</span>\n {/snippet}\n\n <div class=\"space-y-6\">\n <div class=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-2xl font-bold text-text-primary\">Dashboard</h1>\n <p class=\"text-sm text-text-tertiary\">Welcome back, Mara</p>\n </div>\n <Button size=\"sm\" intent=\"primary\">Export Report</Button>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {#each stats as stat (stat.label)}\n <Card class=\"h-full\" variant=\"elevated\">\n <Tooltip label={stat.tooltip} placement=\"top\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"min-h-8 text-xs font-medium text-text-tertiary\">{stat.label}</p>\n <div class=\"flex items-baseline gap-2\">\n <span class=\"text-2xl font-bold tabular-nums text-text-primary\">{stat.value}</span>\n <Badge variant=\"soft\" intent={stat.intent} size=\"sm\">{stat.change}</Badge>\n </div>\n <Progress\n value={stat.progress}\n size=\"xs\"\n intent={stat.intent === 'danger' ? 'danger' : 'primary'}\n />\n </div>\n </Tooltip>\n </Card>\n {/each}\n </div>\n\n <Card>\n <div class=\"space-y-4\">\n <h3 class=\"text-sm font-semibold text-text-primary\">Revenue Overview</h3>\n <div class=\"flex h-48 items-end gap-2\">\n {#each chartData as height, i (i)}\n <div\n class=\"flex-1 rounded-t transition-all duration-(--blocks-duration-fast) hover:opacity-80\"\n style=\"height: {height}%; background: {i === chartData.length - 1\n ? 'var(--color-primary)'\n : 'var(--color-primary-subtle)'}\"\n ></div>\n {/each}\n </div>\n <div class=\"flex justify-between gap-1 text-[10px] text-text-quaternary\">\n {#each months as month (month)}\n <span>{month}</span>\n {/each}\n </div>\n </div>\n </Card>\n\n <Card>\n <div class=\"space-y-4\">\n <h3 class=\"text-sm font-semibold text-text-primary\">Recent Activity</h3>\n <div class=\"space-y-3\">\n {#each recentActivity as activity (activity.user)}\n <div class=\"flex items-start gap-3\">\n <Avatar name={activity.user} size=\"sm\" />\n <div class=\"min-w-0 flex-1\">\n <p class=\"truncate text-sm font-medium text-text-primary\">{activity.user}</p>\n <p class=\"text-xs text-text-tertiary\">{activity.action} · {activity.time}</p>\n </div>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n </div>\n</SidebarLayout>",
4531
+ "code": "<script lang=\"ts\">\n import {\n Avatar, Badge, BarChart, Button, Card, Progress, Tooltip,\n SidebarLayout, MenuIcon, HomeIcon, BarChartIcon, UsersIcon, SettingsIcon\n } from '@urbicon-ui/blocks';\n\n let sidebarOpen = $state(false);\n let activeRoute = $state('dashboard');\n\n const navItems = [\n { id: 'dashboard', label: 'Dashboard', icon: HomeIcon },\n { id: 'analytics', label: 'Analytics', icon: BarChartIcon },\n { id: 'users', label: 'Users', icon: UsersIcon },\n { id: 'settings', label: 'Settings', icon: SettingsIcon }\n ];\n\n const stats = [\n { label: 'Total Users', value: '12,847', change: '+12.5%', intent: 'success' as const, progress: 78, tooltip: 'Target: 16,500 users by Q2' },\n { label: 'Revenue', value: '$48,392', change: '+8.2%', intent: 'success' as const, progress: 64, tooltip: 'Target: $75,000 monthly' },\n { label: 'Active Sessions', value: '1,429', change: '-3.1%', intent: 'danger' as const, progress: 45, tooltip: 'Down from 1,475 last week' },\n { label: 'Conversion', value: '3.24%', change: '+0.8%', intent: 'success' as const, progress: 81, tooltip: 'Target: 4.0% conversion rate' }\n ];\n\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const chartData = [40, 65, 45, 80, 55, 70, 85, 60, 90, 75, 95, 88];\n const revenue = months.map((label, i) => ({ label, values: [chartData[i]] }));\n\n const recentActivity = [\n { user: 'Sarah Chen', action: 'Purchased Pro plan', time: '2 min ago' },\n { user: 'Marcus Rivera', action: 'Submitted support ticket', time: '15 min ago' },\n { user: 'Aisha Patel', action: 'Updated profile settings', time: '1 hour ago' },\n { user: 'Tom Weber', action: 'Exported analytics report', time: '2 hours ago' },\n { user: 'Lisa Kim', action: 'Added team member', time: '3 hours ago' }\n ];\n</script>\n\n<SidebarLayout bind:open={sidebarOpen} sidebarWidth=\"14rem\" data-design-pattern=\"dashboard\">\n {#snippet sidebarHeader()}\n <a href=\"/\" class=\"flex h-14 items-center px-4 font-bold text-primary\">Acme Inc</a>\n {/snippet}\n\n {#snippet sidebar()}\n <nav class=\"flex flex-col gap-1 p-3\">\n {#each navItems as item (item.id)}\n {@const Icon = item.icon}\n <button\n type=\"button\"\n onclick={() => (activeRoute = item.id)}\n class={activeRoute === item.id\n ? 'flex items-center gap-2.5 rounded-lg bg-primary-subtle px-3 py-2 text-sm font-medium text-primary'\n : 'flex items-center gap-2.5 rounded-lg px-3 py-2 text-sm text-text-secondary hover:bg-surface-hover hover:text-text-primary'}\n >\n <Icon class=\"h-4 w-4 shrink-0\" />\n <span>{item.label}</span>\n </button>\n {/each}\n </nav>\n {/snippet}\n\n {#snippet sidebarFooter()}\n <div class=\"flex items-center gap-3 p-3\">\n <Avatar name=\"Mara Cohen\" size=\"sm\" />\n <div class=\"min-w-0\">\n <div class=\"truncate text-xs font-medium text-text-primary\">Mara C</div>\n <div class=\"truncate text-[10px] text-text-tertiary\">Admin</div>\n </div>\n </div>\n {/snippet}\n\n {#snippet mobileHeader({ openSidebar })}\n <Button variant=\"ghost\" size=\"sm\" onclick={openSidebar} aria-label=\"Open menu\">\n <MenuIcon class=\"h-5 w-5\" />\n </Button>\n <span class=\"font-semibold\">Acme Inc</span>\n {/snippet}\n\n <div class=\"space-y-6\">\n <div class=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 class=\"text-2xl font-bold text-text-primary\">Dashboard</h1>\n <p class=\"text-sm text-text-tertiary\">Welcome back, Mara</p>\n </div>\n <Button size=\"sm\" intent=\"primary\">Export Report</Button>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n {#each stats as stat (stat.label)}\n <Card class=\"h-full\" variant=\"elevated\">\n <Tooltip label={stat.tooltip} placement=\"top\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"min-h-8 text-xs font-medium text-text-tertiary\">{stat.label}</p>\n <div class=\"flex items-baseline gap-2\">\n <span class=\"text-2xl font-bold tabular-nums text-text-primary\">{stat.value}</span>\n <Badge variant=\"soft\" intent={stat.intent} size=\"sm\">{stat.change}</Badge>\n </div>\n <Progress\n value={stat.progress}\n size=\"xs\"\n intent={stat.intent === 'danger' ? 'danger' : 'primary'}\n />\n </div>\n </Tooltip>\n </Card>\n {/each}\n </div>\n\n <Card>\n <div class=\"space-y-4\">\n <h2 class=\"text-sm font-semibold text-text-primary\">Revenue Overview</h2>\n <BarChart\n data={revenue}\n series={[{ label: 'Revenue' }]}\n height={192}\n showLegend={false}\n ariaLabel=\"Monthly revenue\"\n />\n </div>\n </Card>\n\n <Card>\n <div class=\"space-y-4\">\n <h2 class=\"text-sm font-semibold text-text-primary\">Recent Activity</h2>\n <div class=\"space-y-3\">\n {#each recentActivity as activity (activity.user)}\n <div class=\"flex items-start gap-3\">\n <Avatar name={activity.user} size=\"sm\" />\n <div class=\"min-w-0 flex-1\">\n <p class=\"truncate text-sm font-medium text-text-primary\">{activity.user}</p>\n <p class=\"text-xs text-text-tertiary\">{activity.action} · {activity.time}</p>\n </div>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n </div>\n</SidebarLayout>",
4797
4532
  "features": [
4798
4533
  "SidebarLayout as the app shell — responsive sidebar with mobile hamburger overlay",
4799
4534
  "Stat cards with equal height and baseline-aligned values",
@@ -4816,7 +4551,7 @@
4816
4551
  "Alert",
4817
4552
  "Separator"
4818
4553
  ],
4819
- "code": "<script lang=\"ts\">\n import { Button, Input, Checkbox, Card, Alert } from '@urbicon-ui/blocks';\n\n let email = $state('');\n let password = $state('');\n let rememberMe = $state(false);\n let loading = $state(false);\n let error = $state('');\n\n let emailValid = $derived(\n email === '' || /^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)\n );\n let canSubmit = $derived(email !== '' && password.length >= 8 && emailValid);\n\n async function handleLogin() {\n if (!canSubmit) return;\n loading = true;\n error = '';\n await new Promise((r) => setTimeout(r, 1500));\n // Replace with your auth logic\n if (email === 'demo@example.com' && password === 'password123') {\n window.location.href = '/dashboard';\n } else {\n error = 'Invalid credentials';\n }\n loading = false;\n }\n</script>\n\n<Card class=\"mx-auto max-w-sm shadow-lg\">\n <div class=\"p-8\">\n <h3 class=\"mb-6 text-center text-xl font-bold\">Sign In</h3>\n\n {#if error}\n <Alert intent=\"danger\" variant=\"soft\" size=\"sm\" dismissible\n onDismiss={() => (error = '')}>{error}</Alert>\n {/if}\n\n <form onsubmit={(e) => { e.preventDefault(); handleLogin(); }}>\n <Input label=\"Email\" type=\"email\" placeholder=\"you@example.com\"\n bind:value={email}\n error={!emailValid ? 'Invalid email' : undefined} />\n\n <Input label=\"Password\" type=\"password\"\n bind:value={password} class=\"mt-4\" />\n\n <div class=\"mt-4 flex items-center justify-between\">\n <Checkbox label=\"Remember me\" bind:checked={rememberMe} />\n <a href=\"/forgot\" class=\"text-sm text-primary\">Forgot?</a>\n </div>\n\n <Button intent=\"primary\" class=\"mt-6 w-full\"\n disabled={!canSubmit} {loading}>\n Sign in\n </Button>\n </form>\n </div>\n</Card>",
4554
+ "code": "<script lang=\"ts\">\n import { Button, Input, Checkbox, Card, Alert } from '@urbicon-ui/blocks';\n\n let email = $state('');\n let password = $state('');\n let rememberMe = $state(false);\n let loading = $state(false);\n let error = $state('');\n\n let emailValid = $derived(\n email === '' || /^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)\n );\n let canSubmit = $derived(email !== '' && password.length >= 8 && emailValid);\n\n async function handleLogin() {\n if (!canSubmit) return;\n loading = true;\n error = '';\n await new Promise((r) => setTimeout(r, 1500));\n // Replace with your auth logic\n if (email === 'demo@example.com' && password === 'password123') {\n window.location.href = '/dashboard';\n } else {\n error = 'Invalid credentials';\n }\n loading = false;\n }\n</script>\n\n<Card class=\"mx-auto max-w-sm shadow-lg\">\n <div class=\"p-8\">\n <h3 class=\"mb-6 text-center text-xl font-bold\">Sign In</h3>\n\n {#if error}\n <Alert intent=\"danger\" variant=\"soft\" size=\"sm\" dismissible\n onDismiss={() => (error = '')}>{error}</Alert>\n {/if}\n\n <form onsubmit={(e) => { e.preventDefault(); handleLogin(); }}>\n <Input label=\"Email\" type=\"email\" placeholder=\"you@example.com\"\n bind:value={email}\n error={!emailValid ? 'Invalid email' : undefined} />\n\n <Input label=\"Password\" type=\"password\"\n bind:value={password} class=\"mt-4\" />\n\n <div class=\"mt-4 flex items-center justify-between\">\n <Checkbox label=\"Remember me\" bind:checked={rememberMe} />\n <a href=\"/forgot\" class=\"text-sm text-primary\">Forgot?</a>\n </div>\n\n <Button intent=\"primary\" class=\"mt-6 w-full\" type=\"submit\"\n disabled={loading} {loading}>\n Sign in\n </Button>\n </form>\n </div>\n</Card>",
4820
4555
  "features": [
4821
4556
  "Client-side email and password validation",
4822
4557
  "Show/hide password toggle",