@sakaniui/react 0.8.10 → 0.8.11

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.
@@ -1,7 +1,7 @@
1
1
  {
2
- "schemaVersion": 4,
2
+ "schemaVersion": 5,
3
3
  "name": "@sakaniui/react",
4
- "version": "0.8.10",
4
+ "version": "0.8.11",
5
5
  "description": "Machine-readable contract of the SakaniUI React library, generated from its TypeScript source.",
6
6
  "docs": "https://www.sakaniui.com",
7
7
  "guide": "https://www.sakaniui.com/llms-full.txt",
@@ -23,12 +23,13 @@
23
23
  "@sakaniui/react/icons": "Tabler icons: IconName and IconNameFilled, one module each (5184 outline, 1054 filled)."
24
24
  },
25
25
  "conventions": {
26
- "version": "This manifest describes @sakaniui/react@0.8.10. Each component has `since`, the first release that contained it; a prop added later has its own `since`, and a value added later is listed in the prop's `valuesSince`. If the project has an older version installed, anything newer than that does not exist there.",
26
+ "version": "This manifest describes @sakaniui/react@0.8.11. Each component has `since`, the first release that contained it; a prop added later has its own `since`, and a value added later is listed in the prop's `valuesSince`. If the project has an older version installed, anything newer than that does not exist there.",
27
27
  "acceptsNativeProps": "Components forward native HTML attributes (className, style, aria-*, event handlers) to their root element unless a prop says otherwise; only the props that are specific to SakaniUI are listed here.",
28
28
  "accessibleName": "When `contract.requiresAccessibleName` is true, a required prop (aria-label, aria-labelledby or an alt text) is the only thing that names the control or image. Do not omit it.",
29
29
  "tokens": "Use only the token names listed under `tokens`. Colour tokens follow the theme (the `.dark` class flips them); do not hard-code colours.",
30
30
  "icons": "Icon props take the component itself (IconSettings), not an element (<IconSettings />). Only names in icon-index.json exist; search them (MCP: search_icons) instead of guessing.",
31
31
  "examples": "Each component has `example`: its imports and the element with every required prop filled in, type-checked against this build. Start from it.",
32
+ "shapes": "A prop with a `shape` takes an object (collection \"object\") or an array of objects (collection \"array\") with exactly those fields; `required` fields must be present. In a generic shape (`typeParameters: [\"T\"]`) T is the type of your own data: `key: keyof T & string` means the key must be a field of your row type. `recipes` hold patterns the types alone do not teach.",
32
33
  "literals": "Prop `values` keep their real type: a number is a number (columns: 2), a string is a string (\"md\")."
33
34
  },
34
35
  "nativeAttributes": [
@@ -532,7 +533,52 @@
532
533
  {
533
534
  "name": "items",
534
535
  "type": "ActivityFeedItem[]",
535
- "required": true
536
+ "required": true,
537
+ "shape": {
538
+ "type": "ActivityFeedItem",
539
+ "collection": "array",
540
+ "fields": [
541
+ {
542
+ "name": "id",
543
+ "type": "string | number",
544
+ "required": false
545
+ },
546
+ {
547
+ "name": "actor",
548
+ "type": "string",
549
+ "required": true,
550
+ "description": "Who performed the action — rendered in fg/default, the rest in fg/muted."
551
+ },
552
+ {
553
+ "name": "description",
554
+ "type": "ReactNode",
555
+ "required": true,
556
+ "description": "Rest of the sentence, e.g. \"commented on Design Review\". Wrap the object/target span in `ActivityFeedHighlight` to color it fg/default."
557
+ },
558
+ {
559
+ "name": "timestamp",
560
+ "type": "string",
561
+ "required": true
562
+ },
563
+ {
564
+ "name": "icon",
565
+ "type": "ReactNode",
566
+ "required": false,
567
+ "description": "Rail dot icon (variant=\"default\"). Rendered at 16px, colored fg/muted."
568
+ },
569
+ {
570
+ "name": "avatarSrc",
571
+ "type": "string",
572
+ "required": false,
573
+ "description": "Avatar image (variant=\"compact\")."
574
+ },
575
+ {
576
+ "name": "avatarAlt",
577
+ "type": "string",
578
+ "required": false
579
+ }
580
+ ]
581
+ }
536
582
  },
537
583
  {
538
584
  "name": "variant",
@@ -691,7 +737,29 @@
691
737
  {
692
738
  "name": "data",
693
739
  "type": "AreaChartDatum[]",
694
- "required": true
740
+ "required": true,
741
+ "shape": {
742
+ "type": "AreaChartDatum",
743
+ "collection": "array",
744
+ "fields": [
745
+ {
746
+ "name": "label",
747
+ "type": "string",
748
+ "required": true
749
+ },
750
+ {
751
+ "name": "value",
752
+ "type": "number",
753
+ "required": true
754
+ },
755
+ {
756
+ "name": "value2",
757
+ "type": "number",
758
+ "required": false,
759
+ "description": "Renders a second area, stacked on top of `value` when `variant=\"stacked\"`."
760
+ }
761
+ ]
762
+ }
695
763
  },
696
764
  {
697
765
  "name": "variant",
@@ -832,7 +900,28 @@
832
900
  "name": "avatars",
833
901
  "type": "{ src?: string | undefined; initials?: string | undefined; alt?: string | undefined; }[]",
834
902
  "required": true,
835
- "description": "Avatar definitions."
903
+ "description": "Avatar definitions.",
904
+ "shape": {
905
+ "type": "{ src?: string | undefined; initials?: string | undefined; alt?: string | undefined; }",
906
+ "collection": "array",
907
+ "fields": [
908
+ {
909
+ "name": "src",
910
+ "type": "string",
911
+ "required": false
912
+ },
913
+ {
914
+ "name": "initials",
915
+ "type": "string",
916
+ "required": false
917
+ },
918
+ {
919
+ "name": "alt",
920
+ "type": "string",
921
+ "required": false
922
+ }
923
+ ]
924
+ }
836
925
  },
837
926
  {
838
927
  "name": "className",
@@ -998,7 +1087,30 @@
998
1087
  {
999
1088
  "name": "change",
1000
1089
  "type": "BalanceChangeInfo",
1001
- "required": false
1090
+ "required": false,
1091
+ "shape": {
1092
+ "type": "BalanceChangeInfo",
1093
+ "collection": "object",
1094
+ "fields": [
1095
+ {
1096
+ "name": "value",
1097
+ "type": "string",
1098
+ "required": true,
1099
+ "description": "e.g. \"+$1,240.50\" -- sign/formatting is the caller's responsibility."
1100
+ },
1101
+ {
1102
+ "name": "label",
1103
+ "type": "string",
1104
+ "required": false,
1105
+ "description": "Defaults to \"this month\"."
1106
+ },
1107
+ {
1108
+ "name": "direction",
1109
+ "type": "\"up\" | \"down\"",
1110
+ "required": false
1111
+ }
1112
+ ]
1113
+ }
1002
1114
  },
1003
1115
  {
1004
1116
  "name": "progress",
@@ -1042,7 +1154,28 @@
1042
1154
  {
1043
1155
  "name": "data",
1044
1156
  "type": "BarChartDatum[]",
1045
- "required": true
1157
+ "required": true,
1158
+ "shape": {
1159
+ "type": "BarChartDatum",
1160
+ "collection": "array",
1161
+ "fields": [
1162
+ {
1163
+ "name": "label",
1164
+ "type": "string",
1165
+ "required": true
1166
+ },
1167
+ {
1168
+ "name": "value",
1169
+ "type": "number",
1170
+ "required": true
1171
+ },
1172
+ {
1173
+ "name": "value2",
1174
+ "type": "number",
1175
+ "required": false
1176
+ }
1177
+ ]
1178
+ }
1046
1179
  },
1047
1180
  {
1048
1181
  "name": "variant",
@@ -1108,7 +1241,34 @@
1108
1241
  "name": "author",
1109
1242
  "type": "BlogBlockquoteAuthor",
1110
1243
  "required": false,
1111
- "description": "Presence switches to the card + quote-mark-glyphs + attribution-row treatment."
1244
+ "description": "Presence switches to the card + quote-mark-glyphs + attribution-row treatment.",
1245
+ "shape": {
1246
+ "type": "BlogBlockquoteAuthor",
1247
+ "collection": "object",
1248
+ "fields": [
1249
+ {
1250
+ "name": "name",
1251
+ "type": "string",
1252
+ "required": true
1253
+ },
1254
+ {
1255
+ "name": "role",
1256
+ "type": "string",
1257
+ "required": true,
1258
+ "description": "e.g. \"Founder at Loopline\" -- rendered after the name as \", {role}\"."
1259
+ },
1260
+ {
1261
+ "name": "avatarSrc",
1262
+ "type": "string",
1263
+ "required": false
1264
+ },
1265
+ {
1266
+ "name": "avatarAlt",
1267
+ "type": "string",
1268
+ "required": false
1269
+ }
1270
+ ]
1271
+ }
1112
1272
  },
1113
1273
  {
1114
1274
  "name": "className",
@@ -1252,7 +1412,34 @@
1252
1412
  {
1253
1413
  "name": "author",
1254
1414
  "type": "BlogListingCardAuthor",
1255
- "required": true
1415
+ "required": true,
1416
+ "shape": {
1417
+ "type": "BlogListingCardAuthor",
1418
+ "collection": "object",
1419
+ "fields": [
1420
+ {
1421
+ "name": "name",
1422
+ "type": "string",
1423
+ "required": true
1424
+ },
1425
+ {
1426
+ "name": "date",
1427
+ "type": "string",
1428
+ "required": true,
1429
+ "description": "e.g. \"Aug 12, 2026\" -- rendered after the name as \" · {date}\"."
1430
+ },
1431
+ {
1432
+ "name": "avatarSrc",
1433
+ "type": "string",
1434
+ "required": false
1435
+ },
1436
+ {
1437
+ "name": "avatarAlt",
1438
+ "type": "string",
1439
+ "required": false
1440
+ }
1441
+ ]
1442
+ }
1256
1443
  },
1257
1444
  {
1258
1445
  "name": "layout",
@@ -1320,7 +1507,39 @@
1320
1507
  {
1321
1508
  "name": "author",
1322
1509
  "type": "BlogListingFeaturedCardAuthor",
1323
- "required": true
1510
+ "required": true,
1511
+ "shape": {
1512
+ "type": "BlogListingFeaturedCardAuthor",
1513
+ "collection": "object",
1514
+ "fields": [
1515
+ {
1516
+ "name": "name",
1517
+ "type": "string",
1518
+ "required": true
1519
+ },
1520
+ {
1521
+ "name": "date",
1522
+ "type": "string",
1523
+ "required": true,
1524
+ "description": "e.g. \"Aug 12, 2026\" -- rendered after the name as \" · {date}\"."
1525
+ },
1526
+ {
1527
+ "name": "avatarSrc",
1528
+ "type": "string",
1529
+ "required": false
1530
+ },
1531
+ {
1532
+ "name": "avatarAlt",
1533
+ "type": "string",
1534
+ "required": false
1535
+ },
1536
+ {
1537
+ "name": "initials",
1538
+ "type": "string",
1539
+ "required": false
1540
+ }
1541
+ ]
1542
+ }
1324
1543
  },
1325
1544
  {
1326
1545
  "name": "ctaLabel",
@@ -1536,7 +1755,23 @@
1536
1755
  {
1537
1756
  "name": "items",
1538
1757
  "type": "BreadcrumbItem[]",
1539
- "required": true
1758
+ "required": true,
1759
+ "shape": {
1760
+ "type": "BreadcrumbItem",
1761
+ "collection": "array",
1762
+ "fields": [
1763
+ {
1764
+ "name": "label",
1765
+ "type": "string",
1766
+ "required": true
1767
+ },
1768
+ {
1769
+ "name": "href",
1770
+ "type": "string",
1771
+ "required": false
1772
+ }
1773
+ ]
1774
+ }
1540
1775
  },
1541
1776
  {
1542
1777
  "name": "variant",
@@ -1664,7 +1899,23 @@
1664
1899
  "name": "range",
1665
1900
  "type": "DateRange",
1666
1901
  "required": false,
1667
- "description": "Selected range (range mode)."
1902
+ "description": "Selected range (range mode).",
1903
+ "shape": {
1904
+ "type": "DateRange",
1905
+ "collection": "object",
1906
+ "fields": [
1907
+ {
1908
+ "name": "from",
1909
+ "type": "Date",
1910
+ "required": false
1911
+ },
1912
+ {
1913
+ "name": "to",
1914
+ "type": "Date",
1915
+ "required": false
1916
+ }
1917
+ ]
1918
+ }
1668
1919
  },
1669
1920
  {
1670
1921
  "name": "onRangeChange",
@@ -2133,7 +2384,33 @@
2133
2384
  {
2134
2385
  "name": "options",
2135
2386
  "type": "ComboboxOption[]",
2136
- "required": true
2387
+ "required": true,
2388
+ "shape": {
2389
+ "type": "ComboboxOption",
2390
+ "collection": "array",
2391
+ "fields": [
2392
+ {
2393
+ "name": "value",
2394
+ "type": "string",
2395
+ "required": true
2396
+ },
2397
+ {
2398
+ "name": "label",
2399
+ "type": "string",
2400
+ "required": true
2401
+ },
2402
+ {
2403
+ "name": "icon",
2404
+ "type": "ReactNode",
2405
+ "required": false
2406
+ },
2407
+ {
2408
+ "name": "disabled",
2409
+ "type": "boolean",
2410
+ "required": false
2411
+ }
2412
+ ]
2413
+ }
2137
2414
  },
2138
2415
  {
2139
2416
  "name": "mode",
@@ -2330,7 +2607,23 @@
2330
2607
  {
2331
2608
  "name": "data",
2332
2609
  "type": "DonutDatum[]",
2333
- "required": true
2610
+ "required": true,
2611
+ "shape": {
2612
+ "type": "DonutDatum",
2613
+ "collection": "array",
2614
+ "fields": [
2615
+ {
2616
+ "name": "label",
2617
+ "type": "string",
2618
+ "required": true
2619
+ },
2620
+ {
2621
+ "name": "value",
2622
+ "type": "number",
2623
+ "required": true
2624
+ }
2625
+ ]
2626
+ }
2334
2627
  },
2335
2628
  {
2336
2629
  "name": "size",
@@ -2443,7 +2736,34 @@
2443
2736
  {
2444
2737
  "name": "categories",
2445
2738
  "type": "ExpenseCategory[]",
2446
- "required": true
2739
+ "required": true,
2740
+ "shape": {
2741
+ "type": "ExpenseCategory",
2742
+ "collection": "array",
2743
+ "fields": [
2744
+ {
2745
+ "name": "id",
2746
+ "type": "string | number",
2747
+ "required": false
2748
+ },
2749
+ {
2750
+ "name": "icon",
2751
+ "type": "ReactNode",
2752
+ "required": true
2753
+ },
2754
+ {
2755
+ "name": "label",
2756
+ "type": "string",
2757
+ "required": true
2758
+ },
2759
+ {
2760
+ "name": "amount",
2761
+ "type": "number",
2762
+ "required": true,
2763
+ "description": "Raw amount -- formatted for display via `formatAmount`."
2764
+ }
2765
+ ]
2766
+ }
2447
2767
  },
2448
2768
  {
2449
2769
  "name": "variant",
@@ -2661,18 +2981,71 @@
2661
2981
  {
2662
2982
  "name": "primaryCta",
2663
2983
  "type": "FirstPageHeadingCta",
2664
- "required": false
2984
+ "required": false,
2985
+ "shape": {
2986
+ "type": "FirstPageHeadingCta",
2987
+ "collection": "object",
2988
+ "fields": [
2989
+ {
2990
+ "name": "label",
2991
+ "type": "string",
2992
+ "required": true
2993
+ },
2994
+ {
2995
+ "name": "onClick",
2996
+ "type": "(() => void)",
2997
+ "required": false
2998
+ }
2999
+ ]
3000
+ }
2665
3001
  },
2666
3002
  {
2667
3003
  "name": "secondaryCta",
2668
3004
  "type": "FirstPageHeadingCta",
2669
- "required": false
3005
+ "required": false,
3006
+ "shape": {
3007
+ "type": "FirstPageHeadingCta",
3008
+ "collection": "object",
3009
+ "fields": [
3010
+ {
3011
+ "name": "label",
3012
+ "type": "string",
3013
+ "required": true
3014
+ },
3015
+ {
3016
+ "name": "onClick",
3017
+ "type": "(() => void)",
3018
+ "required": false
3019
+ }
3020
+ ]
3021
+ }
2670
3022
  },
2671
3023
  {
2672
3024
  "name": "avatars",
2673
3025
  "type": "{ src?: string; initials?: string; alt?: string | undefined; }[] | undefined",
2674
3026
  "required": false,
2675
- "description": "Presence (non-empty) renders the overlapping avatar stack."
3027
+ "description": "Presence (non-empty) renders the overlapping avatar stack.",
3028
+ "shape": {
3029
+ "type": "{ src?: string | undefined; initials?: string | undefined; alt?: string | undefined; }",
3030
+ "collection": "array",
3031
+ "fields": [
3032
+ {
3033
+ "name": "src",
3034
+ "type": "string",
3035
+ "required": false
3036
+ },
3037
+ {
3038
+ "name": "initials",
3039
+ "type": "string",
3040
+ "required": false
3041
+ },
3042
+ {
3043
+ "name": "alt",
3044
+ "type": "string",
3045
+ "required": false
3046
+ }
3047
+ ]
3048
+ }
2676
3049
  },
2677
3050
  {
2678
3051
  "name": "avatarsCaption",
@@ -2715,7 +3088,23 @@
2715
3088
  {
2716
3089
  "name": "data",
2717
3090
  "type": "FunnelDatum[]",
2718
- "required": true
3091
+ "required": true,
3092
+ "shape": {
3093
+ "type": "FunnelDatum",
3094
+ "collection": "array",
3095
+ "fields": [
3096
+ {
3097
+ "name": "label",
3098
+ "type": "string",
3099
+ "required": true
3100
+ },
3101
+ {
3102
+ "name": "value",
3103
+ "type": "number",
3104
+ "required": true
3105
+ }
3106
+ ]
3107
+ }
2719
3108
  },
2720
3109
  {
2721
3110
  "name": "size",
@@ -3800,7 +4189,28 @@
3800
4189
  {
3801
4190
  "name": "links",
3802
4191
  "type": "MobileNavLink[]",
3803
- "required": true
4192
+ "required": true,
4193
+ "shape": {
4194
+ "type": "MobileNavLink",
4195
+ "collection": "array",
4196
+ "fields": [
4197
+ {
4198
+ "name": "label",
4199
+ "type": "string",
4200
+ "required": true
4201
+ },
4202
+ {
4203
+ "name": "href",
4204
+ "type": "string",
4205
+ "required": false
4206
+ },
4207
+ {
4208
+ "name": "onClick",
4209
+ "type": "(() => void)",
4210
+ "required": false
4211
+ }
4212
+ ]
4213
+ }
3804
4214
  },
3805
4215
  {
3806
4216
  "name": "ctaLabel",
@@ -4105,7 +4515,23 @@
4105
4515
  {
4106
4516
  "name": "data",
4107
4517
  "type": "PieDatum[]",
4108
- "required": true
4518
+ "required": true,
4519
+ "shape": {
4520
+ "type": "PieDatum",
4521
+ "collection": "array",
4522
+ "fields": [
4523
+ {
4524
+ "name": "label",
4525
+ "type": "string",
4526
+ "required": true
4527
+ },
4528
+ {
4529
+ "name": "value",
4530
+ "type": "number",
4531
+ "required": true
4532
+ }
4533
+ ]
4534
+ }
4109
4535
  },
4110
4536
  {
4111
4537
  "name": "variant",
@@ -4359,7 +4785,47 @@
4359
4785
  "name": "colors",
4360
4786
  "type": "ProductCardColor[]",
4361
4787
  "required": false,
4362
- "default": "[]"
4788
+ "default": "[]",
4789
+ "shape": {
4790
+ "type": "ProductCardColor",
4791
+ "collection": "array",
4792
+ "fields": [
4793
+ {
4794
+ "name": "id",
4795
+ "type": "string",
4796
+ "required": false,
4797
+ "description": "Unique key for selection -- defaults to `label` if omitted."
4798
+ },
4799
+ {
4800
+ "name": "selected",
4801
+ "type": "boolean",
4802
+ "required": false
4803
+ },
4804
+ {
4805
+ "name": "className",
4806
+ "type": "string",
4807
+ "required": false
4808
+ },
4809
+ {
4810
+ "name": "color",
4811
+ "type": "string",
4812
+ "required": true,
4813
+ "description": "CSS color value for the swatch fill."
4814
+ },
4815
+ {
4816
+ "name": "label",
4817
+ "type": "string",
4818
+ "required": true,
4819
+ "description": "Accessible name, e.g. \"Navy\"."
4820
+ },
4821
+ {
4822
+ "name": "available",
4823
+ "type": "boolean",
4824
+ "required": false,
4825
+ "description": "Defaults to true. False renders a disabled, unclickable swatch."
4826
+ }
4827
+ ]
4828
+ }
4363
4829
  },
4364
4830
  {
4365
4831
  "name": "onColorSelect",
@@ -4426,7 +4892,23 @@
4426
4892
  {
4427
4893
  "name": "images",
4428
4894
  "type": "ProductGalleryImage[]",
4429
- "required": true
4895
+ "required": true,
4896
+ "shape": {
4897
+ "type": "ProductGalleryImage",
4898
+ "collection": "array",
4899
+ "fields": [
4900
+ {
4901
+ "name": "src",
4902
+ "type": "string",
4903
+ "required": true
4904
+ },
4905
+ {
4906
+ "name": "alt",
4907
+ "type": "string",
4908
+ "required": false
4909
+ }
4910
+ ]
4911
+ }
4430
4912
  },
4431
4913
  {
4432
4914
  "name": "thumbsPosition",
@@ -4507,7 +4989,34 @@
4507
4989
  "name": "socialLinks",
4508
4990
  "type": "ProfileCardSocialLink[]",
4509
4991
  "required": false,
4510
- "default": "[]"
4992
+ "default": "[]",
4993
+ "shape": {
4994
+ "type": "ProfileCardSocialLink",
4995
+ "collection": "array",
4996
+ "fields": [
4997
+ {
4998
+ "name": "icon",
4999
+ "type": "ReactNode",
5000
+ "required": true
5001
+ },
5002
+ {
5003
+ "name": "label",
5004
+ "type": "string",
5005
+ "required": true,
5006
+ "description": "Accessible name, e.g. \"X (Twitter)\"."
5007
+ },
5008
+ {
5009
+ "name": "href",
5010
+ "type": "string",
5011
+ "required": false
5012
+ },
5013
+ {
5014
+ "name": "onClick",
5015
+ "type": "(() => void)",
5016
+ "required": false
5017
+ }
5018
+ ]
5019
+ }
4511
5020
  },
4512
5021
  {
4513
5022
  "name": "className",
@@ -4732,7 +5241,29 @@
4732
5241
  {
4733
5242
  "name": "data",
4734
5243
  "type": "RadarDatum[]",
4735
- "required": true
5244
+ "required": true,
5245
+ "shape": {
5246
+ "type": "RadarDatum",
5247
+ "collection": "array",
5248
+ "fields": [
5249
+ {
5250
+ "name": "label",
5251
+ "type": "string",
5252
+ "required": true
5253
+ },
5254
+ {
5255
+ "name": "value",
5256
+ "type": "number",
5257
+ "required": true
5258
+ },
5259
+ {
5260
+ "name": "value2",
5261
+ "type": "number",
5262
+ "required": false,
5263
+ "description": "Second series (variant=\"multiple\")."
5264
+ }
5265
+ ]
5266
+ }
4736
5267
  },
4737
5268
  {
4738
5269
  "name": "variant",
@@ -4797,7 +5328,28 @@
4797
5328
  {
4798
5329
  "name": "data",
4799
5330
  "type": "RadialDatum[]",
4800
- "required": true
5331
+ "required": true,
5332
+ "shape": {
5333
+ "type": "RadialDatum",
5334
+ "collection": "array",
5335
+ "fields": [
5336
+ {
5337
+ "name": "label",
5338
+ "type": "string",
5339
+ "required": true
5340
+ },
5341
+ {
5342
+ "name": "value",
5343
+ "type": "number",
5344
+ "required": true
5345
+ },
5346
+ {
5347
+ "name": "max",
5348
+ "type": "number",
5349
+ "required": false
5350
+ }
5351
+ ]
5352
+ }
4801
5353
  },
4802
5354
  {
4803
5355
  "name": "variant",
@@ -5030,7 +5582,23 @@
5030
5582
  {
5031
5583
  "name": "options",
5032
5584
  "type": "SegmentedOption[]",
5033
- "required": true
5585
+ "required": true,
5586
+ "shape": {
5587
+ "type": "SegmentedOption",
5588
+ "collection": "array",
5589
+ "fields": [
5590
+ {
5591
+ "name": "value",
5592
+ "type": "string",
5593
+ "required": true
5594
+ },
5595
+ {
5596
+ "name": "label",
5597
+ "type": "string",
5598
+ "required": true
5599
+ }
5600
+ ]
5601
+ }
5034
5602
  },
5035
5603
  {
5036
5604
  "name": "value",
@@ -5110,7 +5678,28 @@
5110
5678
  {
5111
5679
  "name": "options",
5112
5680
  "type": "SelectOption[]",
5113
- "required": true
5681
+ "required": true,
5682
+ "shape": {
5683
+ "type": "SelectOption",
5684
+ "collection": "array",
5685
+ "fields": [
5686
+ {
5687
+ "name": "label",
5688
+ "type": "string",
5689
+ "required": true
5690
+ },
5691
+ {
5692
+ "name": "value",
5693
+ "type": "string",
5694
+ "required": true
5695
+ },
5696
+ {
5697
+ "name": "disabled",
5698
+ "type": "boolean",
5699
+ "required": false
5700
+ }
5701
+ ]
5702
+ }
5114
5703
  },
5115
5704
  {
5116
5705
  "name": "value",
@@ -5943,7 +6532,23 @@
5943
6532
  {
5944
6533
  "name": "steps",
5945
6534
  "type": "Step[]",
5946
- "required": true
6535
+ "required": true,
6536
+ "shape": {
6537
+ "type": "Step",
6538
+ "collection": "array",
6539
+ "fields": [
6540
+ {
6541
+ "name": "label",
6542
+ "type": "string",
6543
+ "required": true
6544
+ },
6545
+ {
6546
+ "name": "description",
6547
+ "type": "string",
6548
+ "required": false
6549
+ }
6550
+ ]
6551
+ }
5947
6552
  },
5948
6553
  {
5949
6554
  "name": "current",
@@ -6077,7 +6682,23 @@
6077
6682
  {
6078
6683
  "name": "change",
6079
6684
  "type": "StockMarketChange",
6080
- "required": true
6685
+ "required": true,
6686
+ "shape": {
6687
+ "type": "StockMarketChange",
6688
+ "collection": "object",
6689
+ "fields": [
6690
+ {
6691
+ "name": "amount",
6692
+ "type": "number",
6693
+ "required": true
6694
+ },
6695
+ {
6696
+ "name": "percent",
6697
+ "type": "number",
6698
+ "required": true
6699
+ }
6700
+ ]
6701
+ }
6081
6702
  },
6082
6703
  {
6083
6704
  "name": "formatAmount",
@@ -6088,7 +6709,28 @@
6088
6709
  "name": "chart",
6089
6710
  "type": "BarChartDatum[]",
6090
6711
  "required": false,
6091
- "description": "Presence switches to the expanded Full card with a bar chart."
6712
+ "description": "Presence switches to the expanded Full card with a bar chart.",
6713
+ "shape": {
6714
+ "type": "BarChartDatum",
6715
+ "collection": "array",
6716
+ "fields": [
6717
+ {
6718
+ "name": "label",
6719
+ "type": "string",
6720
+ "required": true
6721
+ },
6722
+ {
6723
+ "name": "value",
6724
+ "type": "number",
6725
+ "required": true
6726
+ },
6727
+ {
6728
+ "name": "value2",
6729
+ "type": "number",
6730
+ "required": false
6731
+ }
6732
+ ]
6733
+ }
6092
6734
  },
6093
6735
  {
6094
6736
  "name": "periodLabel",
@@ -6265,7 +6907,41 @@
6265
6907
  {
6266
6908
  "name": "columns",
6267
6909
  "type": "TableColumn<T>[]",
6268
- "required": true
6910
+ "required": true,
6911
+ "shape": {
6912
+ "type": "TableColumn<T>",
6913
+ "collection": "array",
6914
+ "fields": [
6915
+ {
6916
+ "name": "key",
6917
+ "type": "keyof T & string",
6918
+ "required": true
6919
+ },
6920
+ {
6921
+ "name": "header",
6922
+ "type": "string",
6923
+ "required": true
6924
+ },
6925
+ {
6926
+ "name": "render",
6927
+ "type": "((row: T) => ReactNode)",
6928
+ "required": false
6929
+ },
6930
+ {
6931
+ "name": "align",
6932
+ "type": "\"left\" | \"center\" | \"right\"",
6933
+ "required": false
6934
+ },
6935
+ {
6936
+ "name": "width",
6937
+ "type": "string",
6938
+ "required": false
6939
+ }
6940
+ ],
6941
+ "typeParameters": [
6942
+ "T"
6943
+ ]
6944
+ }
6269
6945
  },
6270
6946
  {
6271
6947
  "name": "rows",
@@ -6336,7 +7012,14 @@
6336
7012
  "requiresAccessibleName": false
6337
7013
  },
6338
7014
  "since": "0.1.0",
6339
- "example": "import { Table } from '@sakaniui/react';\n\n<Table columns={[]} rows={[{}]} />"
7015
+ "example": "import { Table } from '@sakaniui/react';\n\n<Table columns={[]} rows={[{}]} />",
7016
+ "recipes": [
7017
+ {
7018
+ "title": "A column that is not data (a delete button, a menu)",
7019
+ "description": "Every column `key` must be a field of the row type (`keyof T & string`), so a button column needs a key too. Give the row type an optional `never` field for it and render the control; do not invent a key that is not on the row type, it will not compile.",
7020
+ "code": "import { Table, IconButton, type TableColumn } from '@sakaniui/react';\nimport { IconTrash } from '@sakaniui/react/icons';\n\ntype Row = { id: number; name: string; actions?: never };\n\nconst rows: Row[] = [{ id: 1, name: 'Olivia Carter' }];\n\nconst columns: TableColumn<Row>[] = [\n { key: 'name', header: 'Customer' },\n {\n key: 'actions',\n header: '',\n align: 'right',\n render: (row) => <IconButton icon={IconTrash} variant=\"destructive\" size=\"sm\" aria-label={`Delete ${row.name}`} />,\n },\n];\n\nexport const Example = () => <Table columns={columns} rows={rows} />;"
7021
+ }
7022
+ ]
6340
7023
  },
6341
7024
  {
6342
7025
  "name": "Tabs",
@@ -6348,7 +7031,35 @@
6348
7031
  {
6349
7032
  "name": "items",
6350
7033
  "type": "TabItem[]",
6351
- "required": true
7034
+ "required": true,
7035
+ "shape": {
7036
+ "type": "TabItem",
7037
+ "collection": "array",
7038
+ "fields": [
7039
+ {
7040
+ "name": "value",
7041
+ "type": "string",
7042
+ "required": true,
7043
+ "description": "Unique key/value for the tab."
7044
+ },
7045
+ {
7046
+ "name": "label",
7047
+ "type": "string",
7048
+ "required": true,
7049
+ "description": "Visible label."
7050
+ },
7051
+ {
7052
+ "name": "icon",
7053
+ "type": "IconComponent",
7054
+ "required": false
7055
+ },
7056
+ {
7057
+ "name": "disabled",
7058
+ "type": "boolean",
7059
+ "required": false
7060
+ }
7061
+ ]
7062
+ }
6352
7063
  },
6353
7064
  {
6354
7065
  "name": "value",
@@ -6481,7 +7192,34 @@
6481
7192
  "name": "socialLinks",
6482
7193
  "type": "TeamCardSocialLink[]",
6483
7194
  "required": false,
6484
- "default": "[]"
7195
+ "default": "[]",
7196
+ "shape": {
7197
+ "type": "TeamCardSocialLink",
7198
+ "collection": "array",
7199
+ "fields": [
7200
+ {
7201
+ "name": "icon",
7202
+ "type": "ReactNode",
7203
+ "required": true
7204
+ },
7205
+ {
7206
+ "name": "label",
7207
+ "type": "string",
7208
+ "required": true,
7209
+ "description": "Accessible name, e.g. \"Instagram\"."
7210
+ },
7211
+ {
7212
+ "name": "href",
7213
+ "type": "string",
7214
+ "required": false
7215
+ },
7216
+ {
7217
+ "name": "onClick",
7218
+ "type": "(() => void)",
7219
+ "required": false
7220
+ }
7221
+ ]
7222
+ }
6485
7223
  },
6486
7224
  {
6487
7225
  "name": "className",
@@ -6541,7 +7279,23 @@
6541
7279
  {
6542
7280
  "name": "items",
6543
7281
  "type": "TickerItem[]",
6544
- "required": true
7282
+ "required": true,
7283
+ "shape": {
7284
+ "type": "TickerItem",
7285
+ "collection": "array",
7286
+ "fields": [
7287
+ {
7288
+ "name": "symbol",
7289
+ "type": "string",
7290
+ "required": true
7291
+ },
7292
+ {
7293
+ "name": "changePercent",
7294
+ "type": "number",
7295
+ "required": true
7296
+ }
7297
+ ]
7298
+ }
6545
7299
  },
6546
7300
  {
6547
7301
  "name": "speed",
@@ -6877,7 +7631,39 @@
6877
7631
  {
6878
7632
  "name": "transactions",
6879
7633
  "type": "Transaction[]",
6880
- "required": true
7634
+ "required": true,
7635
+ "shape": {
7636
+ "type": "Transaction",
7637
+ "collection": "array",
7638
+ "fields": [
7639
+ {
7640
+ "name": "id",
7641
+ "type": "string | number",
7642
+ "required": false
7643
+ },
7644
+ {
7645
+ "name": "name",
7646
+ "type": "string",
7647
+ "required": true
7648
+ },
7649
+ {
7650
+ "name": "category",
7651
+ "type": "string",
7652
+ "required": true
7653
+ },
7654
+ {
7655
+ "name": "amount",
7656
+ "type": "number",
7657
+ "required": true,
7658
+ "description": "Positive = income (success), negative = expense (danger)."
7659
+ },
7660
+ {
7661
+ "name": "icon",
7662
+ "type": "ReactNode",
7663
+ "required": true
7664
+ }
7665
+ ]
7666
+ }
6881
7667
  },
6882
7668
  {
6883
7669
  "name": "formatAmount",
@@ -7083,7 +7869,23 @@
7083
7869
  {
7084
7870
  "name": "breadcrumbs",
7085
7871
  "type": "BreadcrumbItem[]",
7086
- "required": true
7872
+ "required": true,
7873
+ "shape": {
7874
+ "type": "BreadcrumbItem",
7875
+ "collection": "array",
7876
+ "fields": [
7877
+ {
7878
+ "name": "label",
7879
+ "type": "string",
7880
+ "required": true
7881
+ },
7882
+ {
7883
+ "name": "href",
7884
+ "type": "string",
7885
+ "required": false
7886
+ }
7887
+ ]
7888
+ }
7087
7889
  },
7088
7890
  {
7089
7891
  "name": "title",
@@ -7099,7 +7901,34 @@
7099
7901
  "name": "actions",
7100
7902
  "type": "AppHeaderBlockAction[]",
7101
7903
  "required": false,
7102
- "default": "[]"
7904
+ "default": "[]",
7905
+ "shape": {
7906
+ "type": "AppHeaderBlockAction",
7907
+ "collection": "array",
7908
+ "fields": [
7909
+ {
7910
+ "name": "label",
7911
+ "type": "string",
7912
+ "required": true
7913
+ },
7914
+ {
7915
+ "name": "icon",
7916
+ "type": "ReactNode",
7917
+ "required": false
7918
+ },
7919
+ {
7920
+ "name": "onClick",
7921
+ "type": "(() => void)",
7922
+ "required": false
7923
+ },
7924
+ {
7925
+ "name": "variant",
7926
+ "type": "ButtonVariant",
7927
+ "required": false,
7928
+ "description": "Overrides the position-derived default (last action = primary, rest = secondary)."
7929
+ }
7930
+ ]
7931
+ }
7103
7932
  },
7104
7933
  {
7105
7934
  "name": "className",
@@ -7132,7 +7961,28 @@
7132
7961
  {
7133
7962
  "name": "countries",
7134
7963
  "type": "SelectOption[]",
7135
- "required": false
7964
+ "required": false,
7965
+ "shape": {
7966
+ "type": "SelectOption",
7967
+ "collection": "array",
7968
+ "fields": [
7969
+ {
7970
+ "name": "label",
7971
+ "type": "string",
7972
+ "required": true
7973
+ },
7974
+ {
7975
+ "name": "value",
7976
+ "type": "string",
7977
+ "required": true
7978
+ },
7979
+ {
7980
+ "name": "disabled",
7981
+ "type": "boolean",
7982
+ "required": false
7983
+ }
7984
+ ]
7985
+ }
7136
7986
  },
7137
7987
  {
7138
7988
  "name": "initialStatus",
@@ -7176,7 +8026,47 @@
7176
8026
  "name": "invoices",
7177
8027
  "type": "BillingHistoryInvoice[]",
7178
8028
  "required": false,
7179
- "default": "[]"
8029
+ "default": "[]",
8030
+ "shape": {
8031
+ "type": "BillingHistoryInvoice",
8032
+ "collection": "array",
8033
+ "fields": [
8034
+ {
8035
+ "name": "id",
8036
+ "type": "string",
8037
+ "required": false,
8038
+ "description": "Unique key for the list -- defaults to index if omitted."
8039
+ },
8040
+ {
8041
+ "name": "planLabel",
8042
+ "type": "string",
8043
+ "required": true,
8044
+ "description": "e.g. \"Pro plan — Monthly\""
8045
+ },
8046
+ {
8047
+ "name": "date",
8048
+ "type": "string",
8049
+ "required": true,
8050
+ "description": "e.g. \"Aug 1, 2026\""
8051
+ },
8052
+ {
8053
+ "name": "amount",
8054
+ "type": "string",
8055
+ "required": true,
8056
+ "description": "e.g. \"$29.00\""
8057
+ },
8058
+ {
8059
+ "name": "status",
8060
+ "type": "BillingHistoryStatus",
8061
+ "required": true
8062
+ },
8063
+ {
8064
+ "name": "onDownload",
8065
+ "type": "(() => void)",
8066
+ "required": false
8067
+ }
8068
+ ]
8069
+ }
7180
8070
  },
7181
8071
  {
7182
8072
  "name": "loading",
@@ -7225,12 +8115,99 @@
7225
8115
  {
7226
8116
  "name": "featuredPost",
7227
8117
  "type": "BlogListingFeaturedPost",
7228
- "required": true
8118
+ "required": true,
8119
+ "shape": {
8120
+ "type": "BlogListingFeaturedPost",
8121
+ "collection": "object",
8122
+ "fields": [
8123
+ {
8124
+ "name": "image",
8125
+ "type": "string",
8126
+ "required": true
8127
+ },
8128
+ {
8129
+ "name": "imageAlt",
8130
+ "type": "string",
8131
+ "required": false
8132
+ },
8133
+ {
8134
+ "name": "title",
8135
+ "type": "string",
8136
+ "required": true
8137
+ },
8138
+ {
8139
+ "name": "excerpt",
8140
+ "type": "string",
8141
+ "required": true
8142
+ },
8143
+ {
8144
+ "name": "author",
8145
+ "type": "BlogListingFeaturedCardAuthor",
8146
+ "required": true
8147
+ },
8148
+ {
8149
+ "name": "ctaLabel",
8150
+ "type": "string",
8151
+ "required": false
8152
+ },
8153
+ {
8154
+ "name": "onCtaClick",
8155
+ "type": "(() => void)",
8156
+ "required": false
8157
+ }
8158
+ ]
8159
+ }
7229
8160
  },
7230
8161
  {
7231
8162
  "name": "posts",
7232
8163
  "type": "BlogListingPost[]",
7233
- "required": true
8164
+ "required": true,
8165
+ "shape": {
8166
+ "type": "BlogListingPost",
8167
+ "collection": "array",
8168
+ "fields": [
8169
+ {
8170
+ "name": "id",
8171
+ "type": "string",
8172
+ "required": false
8173
+ },
8174
+ {
8175
+ "name": "image",
8176
+ "type": "string",
8177
+ "required": true
8178
+ },
8179
+ {
8180
+ "name": "imageAlt",
8181
+ "type": "string",
8182
+ "required": false
8183
+ },
8184
+ {
8185
+ "name": "category",
8186
+ "type": "string",
8187
+ "required": true
8188
+ },
8189
+ {
8190
+ "name": "readTime",
8191
+ "type": "string",
8192
+ "required": true
8193
+ },
8194
+ {
8195
+ "name": "title",
8196
+ "type": "string",
8197
+ "required": true
8198
+ },
8199
+ {
8200
+ "name": "excerpt",
8201
+ "type": "string",
8202
+ "required": true
8203
+ },
8204
+ {
8205
+ "name": "author",
8206
+ "type": "BlogListingCardAuthor",
8207
+ "required": true
8208
+ }
8209
+ ]
8210
+ }
7234
8211
  },
7235
8212
  {
7236
8213
  "name": "className",
@@ -7276,7 +8253,60 @@
7276
8253
  {
7277
8254
  "name": "jobs",
7278
8255
  "type": "CareersJob[]",
7279
- "required": true
8256
+ "required": true,
8257
+ "shape": {
8258
+ "type": "CareersJob",
8259
+ "collection": "array",
8260
+ "fields": [
8261
+ {
8262
+ "name": "id",
8263
+ "type": "string",
8264
+ "required": false,
8265
+ "description": "Unique key for the list -- defaults to `title` if omitted."
8266
+ },
8267
+ {
8268
+ "name": "description",
8269
+ "type": "string",
8270
+ "required": true
8271
+ },
8272
+ {
8273
+ "name": "location",
8274
+ "type": "string",
8275
+ "required": true
8276
+ },
8277
+ {
8278
+ "name": "title",
8279
+ "type": "string",
8280
+ "required": true
8281
+ },
8282
+ {
8283
+ "name": "department",
8284
+ "type": "string",
8285
+ "required": true
8286
+ },
8287
+ {
8288
+ "name": "employmentType",
8289
+ "type": "string",
8290
+ "required": true
8291
+ },
8292
+ {
8293
+ "name": "locationStatus",
8294
+ "type": "LocationDotStatus",
8295
+ "required": false,
8296
+ "description": "Drives LocationDot's color."
8297
+ },
8298
+ {
8299
+ "name": "onApply",
8300
+ "type": "(() => void)",
8301
+ "required": false
8302
+ },
8303
+ {
8304
+ "name": "applyLabel",
8305
+ "type": "string",
8306
+ "required": false
8307
+ }
8308
+ ]
8309
+ }
7280
8310
  },
7281
8311
  {
7282
8312
  "name": "className",
@@ -7335,7 +8365,48 @@
7335
8365
  {
7336
8366
  "name": "items",
7337
8367
  "type": "CheckoutFlowItem[]",
7338
- "required": true
8368
+ "required": true,
8369
+ "shape": {
8370
+ "type": "CheckoutFlowItem",
8371
+ "collection": "array",
8372
+ "fields": [
8373
+ {
8374
+ "name": "id",
8375
+ "type": "string",
8376
+ "required": false
8377
+ },
8378
+ {
8379
+ "name": "image",
8380
+ "type": "string",
8381
+ "required": true
8382
+ },
8383
+ {
8384
+ "name": "imageAlt",
8385
+ "type": "string",
8386
+ "required": false
8387
+ },
8388
+ {
8389
+ "name": "name",
8390
+ "type": "string",
8391
+ "required": true
8392
+ },
8393
+ {
8394
+ "name": "variant",
8395
+ "type": "string",
8396
+ "required": false
8397
+ },
8398
+ {
8399
+ "name": "price",
8400
+ "type": "number",
8401
+ "required": true
8402
+ },
8403
+ {
8404
+ "name": "quantity",
8405
+ "type": "number",
8406
+ "required": true
8407
+ }
8408
+ ]
8409
+ }
7339
8410
  },
7340
8411
  {
7341
8412
  "name": "shippingCost",
@@ -7425,12 +8496,44 @@
7425
8496
  {
7426
8497
  "name": "primaryAction",
7427
8498
  "type": "CtaBannerAction",
7428
- "required": true
8499
+ "required": true,
8500
+ "shape": {
8501
+ "type": "CtaBannerAction",
8502
+ "collection": "object",
8503
+ "fields": [
8504
+ {
8505
+ "name": "label",
8506
+ "type": "string",
8507
+ "required": true
8508
+ },
8509
+ {
8510
+ "name": "onClick",
8511
+ "type": "(() => void)",
8512
+ "required": false
8513
+ }
8514
+ ]
8515
+ }
7429
8516
  },
7430
8517
  {
7431
8518
  "name": "secondaryAction",
7432
8519
  "type": "CtaBannerAction",
7433
- "required": false
8520
+ "required": false,
8521
+ "shape": {
8522
+ "type": "CtaBannerAction",
8523
+ "collection": "object",
8524
+ "fields": [
8525
+ {
8526
+ "name": "label",
8527
+ "type": "string",
8528
+ "required": true
8529
+ },
8530
+ {
8531
+ "name": "onClick",
8532
+ "type": "(() => void)",
8533
+ "required": false
8534
+ }
8535
+ ]
8536
+ }
7434
8537
  },
7435
8538
  {
7436
8539
  "name": "secondaryActionIcon",
@@ -7689,7 +8792,29 @@
7689
8792
  {
7690
8793
  "name": "items",
7691
8794
  "type": "FaqItem[]",
7692
- "required": true
8795
+ "required": true,
8796
+ "shape": {
8797
+ "type": "FaqItem",
8798
+ "collection": "array",
8799
+ "fields": [
8800
+ {
8801
+ "name": "question",
8802
+ "type": "string",
8803
+ "required": true
8804
+ },
8805
+ {
8806
+ "name": "answer",
8807
+ "type": "string",
8808
+ "required": true
8809
+ },
8810
+ {
8811
+ "name": "defaultOpen",
8812
+ "type": "boolean",
8813
+ "required": false,
8814
+ "description": "Uncontrolled initial open state for this item."
8815
+ }
8816
+ ]
8817
+ }
7693
8818
  },
7694
8819
  {
7695
8820
  "name": "columns",
@@ -7727,7 +8852,33 @@
7727
8852
  {
7728
8853
  "name": "features",
7729
8854
  "type": "FeatureGridItem[]",
7730
- "required": true
8855
+ "required": true,
8856
+ "shape": {
8857
+ "type": "FeatureGridItem",
8858
+ "collection": "array",
8859
+ "fields": [
8860
+ {
8861
+ "name": "id",
8862
+ "type": "string",
8863
+ "required": false
8864
+ },
8865
+ {
8866
+ "name": "icon",
8867
+ "type": "ReactNode",
8868
+ "required": true
8869
+ },
8870
+ {
8871
+ "name": "title",
8872
+ "type": "string",
8873
+ "required": true
8874
+ },
8875
+ {
8876
+ "name": "description",
8877
+ "type": "string",
8878
+ "required": true
8879
+ }
8880
+ ]
8881
+ }
7731
8882
  },
7732
8883
  {
7733
8884
  "name": "columns",
@@ -7895,12 +9046,44 @@
7895
9046
  {
7896
9047
  "name": "primaryAction",
7897
9048
  "type": "HeroAction",
7898
- "required": true
9049
+ "required": true,
9050
+ "shape": {
9051
+ "type": "HeroAction",
9052
+ "collection": "object",
9053
+ "fields": [
9054
+ {
9055
+ "name": "label",
9056
+ "type": "string",
9057
+ "required": true
9058
+ },
9059
+ {
9060
+ "name": "onClick",
9061
+ "type": "(() => void)",
9062
+ "required": false
9063
+ }
9064
+ ]
9065
+ }
7899
9066
  },
7900
9067
  {
7901
9068
  "name": "secondaryAction",
7902
9069
  "type": "HeroAction",
7903
- "required": false
9070
+ "required": false,
9071
+ "shape": {
9072
+ "type": "HeroAction",
9073
+ "collection": "object",
9074
+ "fields": [
9075
+ {
9076
+ "name": "label",
9077
+ "type": "string",
9078
+ "required": true
9079
+ },
9080
+ {
9081
+ "name": "onClick",
9082
+ "type": "(() => void)",
9083
+ "required": false
9084
+ }
9085
+ ]
9086
+ }
7904
9087
  },
7905
9088
  {
7906
9089
  "name": "secondaryActionIcon",
@@ -8127,7 +9310,28 @@
8127
9310
  "name": "socialProviders",
8128
9311
  "type": "LoginSocialProvider[]",
8129
9312
  "required": false,
8130
- "default": "[]"
9313
+ "default": "[]",
9314
+ "shape": {
9315
+ "type": "LoginSocialProvider",
9316
+ "collection": "array",
9317
+ "fields": [
9318
+ {
9319
+ "name": "icon",
9320
+ "type": "ReactNode",
9321
+ "required": true
9322
+ },
9323
+ {
9324
+ "name": "label",
9325
+ "type": "string",
9326
+ "required": true
9327
+ },
9328
+ {
9329
+ "name": "onClick",
9330
+ "type": "(() => void)",
9331
+ "required": false
9332
+ }
9333
+ ]
9334
+ }
8131
9335
  },
8132
9336
  {
8133
9337
  "name": "onSubmit",
@@ -8248,7 +9452,38 @@
8248
9452
  {
8249
9453
  "name": "items",
8250
9454
  "type": "NotificationPanelItem[]",
8251
- "required": true
9455
+ "required": true,
9456
+ "shape": {
9457
+ "type": "NotificationPanelItem",
9458
+ "collection": "array",
9459
+ "fields": [
9460
+ {
9461
+ "name": "id",
9462
+ "type": "string",
9463
+ "required": true
9464
+ },
9465
+ {
9466
+ "name": "icon",
9467
+ "type": "ReactNode",
9468
+ "required": false
9469
+ },
9470
+ {
9471
+ "name": "title",
9472
+ "type": "string",
9473
+ "required": true
9474
+ },
9475
+ {
9476
+ "name": "timestamp",
9477
+ "type": "string",
9478
+ "required": true
9479
+ },
9480
+ {
9481
+ "name": "read",
9482
+ "type": "boolean",
9483
+ "required": false
9484
+ }
9485
+ ]
9486
+ }
8252
9487
  },
8253
9488
  {
8254
9489
  "name": "onMarkAllRead",
@@ -8286,7 +9521,24 @@
8286
9521
  {
8287
9522
  "name": "items",
8288
9523
  "type": "OnboardingProgressItem[]",
8289
- "required": true
9524
+ "required": true,
9525
+ "shape": {
9526
+ "type": "OnboardingProgressItem",
9527
+ "collection": "array",
9528
+ "fields": [
9529
+ {
9530
+ "name": "label",
9531
+ "type": "string",
9532
+ "required": true
9533
+ },
9534
+ {
9535
+ "name": "progress",
9536
+ "type": "number",
9537
+ "required": true,
9538
+ "description": "0-100."
9539
+ }
9540
+ ]
9541
+ }
8290
9542
  },
8291
9543
  {
8292
9544
  "name": "variant",
@@ -8328,7 +9580,43 @@
8328
9580
  {
8329
9581
  "name": "items",
8330
9582
  "type": "OrderConfirmationItem[]",
8331
- "required": true
9583
+ "required": true,
9584
+ "shape": {
9585
+ "type": "OrderConfirmationItem",
9586
+ "collection": "array",
9587
+ "fields": [
9588
+ {
9589
+ "name": "id",
9590
+ "type": "string",
9591
+ "required": false
9592
+ },
9593
+ {
9594
+ "name": "image",
9595
+ "type": "string",
9596
+ "required": true
9597
+ },
9598
+ {
9599
+ "name": "imageAlt",
9600
+ "type": "string",
9601
+ "required": false
9602
+ },
9603
+ {
9604
+ "name": "name",
9605
+ "type": "string",
9606
+ "required": true
9607
+ },
9608
+ {
9609
+ "name": "variant",
9610
+ "type": "string",
9611
+ "required": false
9612
+ },
9613
+ {
9614
+ "name": "price",
9615
+ "type": "number",
9616
+ "required": true
9617
+ }
9618
+ ]
9619
+ }
8332
9620
  },
8333
9621
  {
8334
9622
  "name": "total",
@@ -8384,7 +9672,35 @@
8384
9672
  "name": "card",
8385
9673
  "type": "PaymentMethodCard",
8386
9674
  "required": false,
8387
- "description": "Omit to show the Empty state."
9675
+ "description": "Omit to show the Empty state.",
9676
+ "shape": {
9677
+ "type": "PaymentMethodCard",
9678
+ "collection": "object",
9679
+ "fields": [
9680
+ {
9681
+ "name": "brand",
9682
+ "type": "PaymentMethodBrand",
9683
+ "required": true
9684
+ },
9685
+ {
9686
+ "name": "last4",
9687
+ "type": "string",
9688
+ "required": true,
9689
+ "description": "Last 4 digits, e.g. \"4242\"."
9690
+ },
9691
+ {
9692
+ "name": "expiry",
9693
+ "type": "string",
9694
+ "required": true,
9695
+ "description": "e.g. \"08/27\""
9696
+ },
9697
+ {
9698
+ "name": "status",
9699
+ "type": "PaymentMethodStatus",
9700
+ "required": false
9701
+ }
9702
+ ]
9703
+ }
8388
9704
  },
8389
9705
  {
8390
9706
  "name": "onUpdateCard",
@@ -8443,7 +9759,66 @@
8443
9759
  {
8444
9760
  "name": "plans",
8445
9761
  "type": "PricingPlan[]",
8446
- "required": true
9762
+ "required": true,
9763
+ "shape": {
9764
+ "type": "PricingPlan",
9765
+ "collection": "array",
9766
+ "fields": [
9767
+ {
9768
+ "name": "id",
9769
+ "type": "string",
9770
+ "required": false
9771
+ },
9772
+ {
9773
+ "name": "name",
9774
+ "type": "string",
9775
+ "required": true
9776
+ },
9777
+ {
9778
+ "name": "price",
9779
+ "type": "string",
9780
+ "required": true
9781
+ },
9782
+ {
9783
+ "name": "period",
9784
+ "type": "string",
9785
+ "required": false,
9786
+ "description": "Omit for a plan with no numeric period, e.g. \"Custom\"."
9787
+ },
9788
+ {
9789
+ "name": "description",
9790
+ "type": "string",
9791
+ "required": true
9792
+ },
9793
+ {
9794
+ "name": "ctaLabel",
9795
+ "type": "string",
9796
+ "required": true
9797
+ },
9798
+ {
9799
+ "name": "onCtaClick",
9800
+ "type": "(() => void)",
9801
+ "required": false
9802
+ },
9803
+ {
9804
+ "name": "features",
9805
+ "type": "string[]",
9806
+ "required": true
9807
+ },
9808
+ {
9809
+ "name": "highlighted",
9810
+ "type": "boolean",
9811
+ "required": false,
9812
+ "description": "Drives the \"Most popular\" badge, accent border/shadow, and primary CTA."
9813
+ },
9814
+ {
9815
+ "name": "badgeLabel",
9816
+ "type": "string",
9817
+ "required": false,
9818
+ "description": "Defaults to \"Most popular\" when highlighted."
9819
+ }
9820
+ ]
9821
+ }
8447
9822
  },
8448
9823
  {
8449
9824
  "name": "className",
@@ -8476,7 +9851,23 @@
8476
9851
  {
8477
9852
  "name": "images",
8478
9853
  "type": "ProductGalleryImage[]",
8479
- "required": true
9854
+ "required": true,
9855
+ "shape": {
9856
+ "type": "ProductGalleryImage",
9857
+ "collection": "array",
9858
+ "fields": [
9859
+ {
9860
+ "name": "src",
9861
+ "type": "string",
9862
+ "required": true
9863
+ },
9864
+ {
9865
+ "name": "alt",
9866
+ "type": "string",
9867
+ "required": false
9868
+ }
9869
+ ]
9870
+ }
8480
9871
  },
8481
9872
  {
8482
9873
  "name": "rating",
@@ -8513,13 +9904,50 @@
8513
9904
  "name": "colors",
8514
9905
  "type": "ProductDetailColorOption[]",
8515
9906
  "required": false,
8516
- "default": "[]"
9907
+ "default": "[]",
9908
+ "shape": {
9909
+ "type": "ProductDetailColorOption",
9910
+ "collection": "array",
9911
+ "fields": [
9912
+ {
9913
+ "name": "label",
9914
+ "type": "string",
9915
+ "required": true
9916
+ },
9917
+ {
9918
+ "name": "color",
9919
+ "type": "string",
9920
+ "required": true
9921
+ },
9922
+ {
9923
+ "name": "available",
9924
+ "type": "boolean",
9925
+ "required": false
9926
+ }
9927
+ ]
9928
+ }
8517
9929
  },
8518
9930
  {
8519
9931
  "name": "sizes",
8520
9932
  "type": "ProductDetailSizeOption[]",
8521
9933
  "required": false,
8522
- "default": "[]"
9934
+ "default": "[]",
9935
+ "shape": {
9936
+ "type": "ProductDetailSizeOption",
9937
+ "collection": "array",
9938
+ "fields": [
9939
+ {
9940
+ "name": "size",
9941
+ "type": "string",
9942
+ "required": true
9943
+ },
9944
+ {
9945
+ "name": "available",
9946
+ "type": "boolean",
9947
+ "required": false
9948
+ }
9949
+ ]
9950
+ }
8523
9951
  },
8524
9952
  {
8525
9953
  "name": "defaultColor",
@@ -8605,7 +10033,105 @@
8605
10033
  {
8606
10034
  "name": "products",
8607
10035
  "type": "ProductGridItem[]",
8608
- "required": true
10036
+ "required": true,
10037
+ "shape": {
10038
+ "type": "ProductGridItem",
10039
+ "collection": "array",
10040
+ "fields": [
10041
+ {
10042
+ "name": "id",
10043
+ "type": "string",
10044
+ "required": false,
10045
+ "description": "Unique key for the grid -- defaults to `name` if omitted."
10046
+ },
10047
+ {
10048
+ "name": "image",
10049
+ "type": "string",
10050
+ "required": true
10051
+ },
10052
+ {
10053
+ "name": "imageAlt",
10054
+ "type": "string",
10055
+ "required": false
10056
+ },
10057
+ {
10058
+ "name": "name",
10059
+ "type": "string",
10060
+ "required": true
10061
+ },
10062
+ {
10063
+ "name": "description",
10064
+ "type": "string",
10065
+ "required": false
10066
+ },
10067
+ {
10068
+ "name": "price",
10069
+ "type": "number",
10070
+ "required": true
10071
+ },
10072
+ {
10073
+ "name": "compareAtPrice",
10074
+ "type": "number",
10075
+ "required": false,
10076
+ "description": "Presence switches to the sale badge + struck-original/danger-current price."
10077
+ },
10078
+ {
10079
+ "name": "rating",
10080
+ "type": "number",
10081
+ "required": false
10082
+ },
10083
+ {
10084
+ "name": "reviewCount",
10085
+ "type": "number",
10086
+ "required": false
10087
+ },
10088
+ {
10089
+ "name": "colors",
10090
+ "type": "ProductCardColor[]",
10091
+ "required": false
10092
+ },
10093
+ {
10094
+ "name": "onColorSelect",
10095
+ "type": "((id: string) => void)",
10096
+ "required": false
10097
+ },
10098
+ {
10099
+ "name": "inStock",
10100
+ "type": "boolean",
10101
+ "required": false
10102
+ },
10103
+ {
10104
+ "name": "wishlisted",
10105
+ "type": "boolean",
10106
+ "required": false
10107
+ },
10108
+ {
10109
+ "name": "onWishlistToggle",
10110
+ "type": "((wishlisted: boolean) => void)",
10111
+ "required": false
10112
+ },
10113
+ {
10114
+ "name": "onAddItem",
10115
+ "type": "(() => void)",
10116
+ "required": false
10117
+ },
10118
+ {
10119
+ "name": "addItemLabel",
10120
+ "type": "string",
10121
+ "required": false
10122
+ },
10123
+ {
10124
+ "name": "formatPrice",
10125
+ "type": "((amount: number) => string)",
10126
+ "required": false
10127
+ },
10128
+ {
10129
+ "name": "className",
10130
+ "type": "string",
10131
+ "required": false
10132
+ }
10133
+ ]
10134
+ }
8609
10135
  },
8610
10136
  {
8611
10137
  "name": "showFilterBar",
@@ -8755,7 +10281,23 @@
8755
10281
  {
8756
10282
  "name": "links",
8757
10283
  "type": "SectionFooterLink[]",
8758
- "required": false
10284
+ "required": false,
10285
+ "shape": {
10286
+ "type": "SectionFooterLink",
10287
+ "collection": "array",
10288
+ "fields": [
10289
+ {
10290
+ "name": "label",
10291
+ "type": "string",
10292
+ "required": true
10293
+ },
10294
+ {
10295
+ "name": "href",
10296
+ "type": "string",
10297
+ "required": true
10298
+ }
10299
+ ]
10300
+ }
8759
10301
  },
8760
10302
  {
8761
10303
  "name": "variant",
@@ -8790,7 +10332,54 @@
8790
10332
  {
8791
10333
  "name": "items",
8792
10334
  "type": "ShoppingCartItemData[]",
8793
- "required": true
10335
+ "required": true,
10336
+ "shape": {
10337
+ "type": "ShoppingCartItemData",
10338
+ "collection": "array",
10339
+ "fields": [
10340
+ {
10341
+ "name": "id",
10342
+ "type": "string",
10343
+ "required": false
10344
+ },
10345
+ {
10346
+ "name": "image",
10347
+ "type": "string",
10348
+ "required": true
10349
+ },
10350
+ {
10351
+ "name": "imageAlt",
10352
+ "type": "string",
10353
+ "required": false
10354
+ },
10355
+ {
10356
+ "name": "name",
10357
+ "type": "string",
10358
+ "required": true
10359
+ },
10360
+ {
10361
+ "name": "variant",
10362
+ "type": "string",
10363
+ "required": false
10364
+ },
10365
+ {
10366
+ "name": "price",
10367
+ "type": "number",
10368
+ "required": true
10369
+ },
10370
+ {
10371
+ "name": "compareAtPrice",
10372
+ "type": "number",
10373
+ "required": false,
10374
+ "description": "Presence switches that row to CartItem's own struck-original + danger-current sale treatment."
10375
+ },
10376
+ {
10377
+ "name": "quantity",
10378
+ "type": "number",
10379
+ "required": true
10380
+ }
10381
+ ]
10382
+ }
8794
10383
  },
8795
10384
  {
8796
10385
  "name": "shippingCost",
@@ -8852,7 +10441,28 @@
8852
10441
  "name": "socialProviders",
8853
10442
  "type": "SignUpSocialProvider[]",
8854
10443
  "required": false,
8855
- "default": "[]"
10444
+ "default": "[]",
10445
+ "shape": {
10446
+ "type": "SignUpSocialProvider",
10447
+ "collection": "array",
10448
+ "fields": [
10449
+ {
10450
+ "name": "icon",
10451
+ "type": "ReactNode",
10452
+ "required": true
10453
+ },
10454
+ {
10455
+ "name": "label",
10456
+ "type": "string",
10457
+ "required": true
10458
+ },
10459
+ {
10460
+ "name": "onClick",
10461
+ "type": "(() => void)",
10462
+ "required": false
10463
+ }
10464
+ ]
10465
+ }
8856
10466
  },
8857
10467
  {
8858
10468
  "name": "onSubmit",
@@ -8904,7 +10514,60 @@
8904
10514
  {
8905
10515
  "name": "members",
8906
10516
  "type": "TeamSectionMember[]",
8907
- "required": true
10517
+ "required": true,
10518
+ "shape": {
10519
+ "type": "TeamSectionMember",
10520
+ "collection": "array",
10521
+ "fields": [
10522
+ {
10523
+ "name": "id",
10524
+ "type": "string",
10525
+ "required": false,
10526
+ "description": "Unique key for the grid -- defaults to `name` if omitted."
10527
+ },
10528
+ {
10529
+ "name": "location",
10530
+ "type": "string",
10531
+ "required": true
10532
+ },
10533
+ {
10534
+ "name": "name",
10535
+ "type": "string",
10536
+ "required": true
10537
+ },
10538
+ {
10539
+ "name": "role",
10540
+ "type": "string",
10541
+ "required": true
10542
+ },
10543
+ {
10544
+ "name": "image",
10545
+ "type": "string",
10546
+ "required": true
10547
+ },
10548
+ {
10549
+ "name": "locationStatus",
10550
+ "type": "LocationDotStatus",
10551
+ "required": false
10552
+ },
10553
+ {
10554
+ "name": "imageAlt",
10555
+ "type": "string",
10556
+ "required": false
10557
+ },
10558
+ {
10559
+ "name": "bio",
10560
+ "type": "string",
10561
+ "required": false,
10562
+ "description": "Presence switches to the \"Card details\" style (adds this paragraph below the meta row)."
10563
+ },
10564
+ {
10565
+ "name": "socialLinks",
10566
+ "type": "TeamCardSocialLink[]",
10567
+ "required": false
10568
+ }
10569
+ ]
10570
+ }
8908
10571
  },
8909
10572
  {
8910
10573
  "name": "className",
@@ -8932,7 +10595,33 @@
8932
10595
  {
8933
10596
  "name": "testimonials",
8934
10597
  "type": "Testimonial[]",
8935
- "required": true
10598
+ "required": true,
10599
+ "shape": {
10600
+ "type": "Testimonial",
10601
+ "collection": "array",
10602
+ "fields": [
10603
+ {
10604
+ "name": "quote",
10605
+ "type": "string",
10606
+ "required": true
10607
+ },
10608
+ {
10609
+ "name": "authorName",
10610
+ "type": "string",
10611
+ "required": true
10612
+ },
10613
+ {
10614
+ "name": "authorRole",
10615
+ "type": "string",
10616
+ "required": true
10617
+ },
10618
+ {
10619
+ "name": "authorAvatar",
10620
+ "type": "string",
10621
+ "required": false
10622
+ }
10623
+ ]
10624
+ }
8936
10625
  },
8937
10626
  {
8938
10627
  "name": "className",