fictoan-react 2.0.0-beta.17 → 2.0.0-beta.18

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 (181) hide show
  1. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  2. package/dist/components/Accordion/Accordion.js +27 -0
  3. package/dist/components/Accordion/Accordion.js.map +1 -0
  4. package/dist/components/Badge/Badge.d.ts.map +1 -1
  5. package/dist/components/Badge/Badge.js +56 -0
  6. package/dist/components/Badge/Badge.js.map +1 -0
  7. package/dist/components/Breadcrumbs/Breadcrumbs.js +65 -0
  8. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
  9. package/dist/components/Button/Button.js +28 -0
  10. package/dist/components/Button/Button.js.map +1 -0
  11. package/dist/components/ButtonGroup/ButtonGroup.js +27 -0
  12. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
  13. package/dist/components/Callout/Callout.js +31 -0
  14. package/dist/components/Callout/Callout.js.map +1 -0
  15. package/dist/components/Card/Card.js +27 -0
  16. package/dist/components/Card/Card.js.map +1 -0
  17. package/dist/components/CodeBlock/CodeBlock.js +191 -0
  18. package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
  19. package/dist/components/Divider/Divider.js +29 -0
  20. package/dist/components/Divider/Divider.js.map +1 -0
  21. package/dist/components/Drawer/Drawer.d.ts +3 -0
  22. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  23. package/dist/components/Drawer/Drawer.js +96 -0
  24. package/dist/components/Drawer/Drawer.js.map +1 -0
  25. package/dist/components/Element/Element.d.ts +6 -2
  26. package/dist/components/Element/Element.d.ts.map +1 -1
  27. package/dist/components/Element/Element.js +152 -0
  28. package/dist/components/Element/Element.js.map +1 -0
  29. package/dist/components/Element/Tags.js +31 -0
  30. package/dist/components/Element/Tags.js.map +1 -0
  31. package/dist/components/Element/constants.js +8 -0
  32. package/dist/components/Element/constants.js.map +1 -0
  33. package/dist/components/Form/Checkbox/Checkbox.d.ts.map +1 -1
  34. package/dist/components/Form/Checkbox/Checkbox.js +78 -0
  35. package/dist/components/Form/Checkbox/Checkbox.js.map +1 -0
  36. package/dist/components/Form/Checkbox/CheckboxAndSwitchGroup.d.ts.map +1 -1
  37. package/dist/components/Form/Checkbox/CheckboxAndSwitchGroup.js +177 -0
  38. package/dist/components/Form/Checkbox/CheckboxAndSwitchGroup.js.map +1 -0
  39. package/dist/components/Form/Checkbox/Switch.d.ts.map +1 -1
  40. package/dist/components/Form/Checkbox/Switch.js +78 -0
  41. package/dist/components/Form/Checkbox/Switch.js.map +1 -0
  42. package/dist/components/Form/FileUpload/FileUpload.d.ts.map +1 -1
  43. package/dist/components/Form/FileUpload/FileUpload.js +142 -0
  44. package/dist/components/Form/FileUpload/FileUpload.js.map +1 -0
  45. package/dist/components/Form/Form/Form.js +37 -0
  46. package/dist/components/Form/Form/Form.js.map +1 -0
  47. package/dist/components/Form/Form/FormGenerator.js +64 -0
  48. package/dist/components/Form/Form/FormGenerator.js.map +1 -0
  49. package/dist/components/Form/FormItem/FormItem.d.ts +16 -0
  50. package/dist/components/Form/FormItem/FormItem.d.ts.map +1 -1
  51. package/dist/components/Form/FormItem/FormItem.js +127 -0
  52. package/dist/components/Form/FormItem/FormItem.js.map +1 -0
  53. package/dist/components/Form/FormItemGroup/FormItemGroup.js +42 -0
  54. package/dist/components/Form/FormItemGroup/FormItemGroup.js.map +1 -0
  55. package/dist/components/Form/InputField/InputField.d.ts.map +1 -1
  56. package/dist/components/Form/InputField/InputField.js +156 -0
  57. package/dist/components/Form/InputField/InputField.js.map +1 -0
  58. package/dist/components/Form/InputLabel/InputLabel.js +30 -0
  59. package/dist/components/Form/InputLabel/InputLabel.js.map +1 -0
  60. package/dist/components/Form/ListBox/ListBox.d.ts.map +1 -1
  61. package/dist/components/Form/ListBox/ListBox.js +284 -0
  62. package/dist/components/Form/ListBox/ListBox.js.map +1 -0
  63. package/dist/components/Form/ListBox/constants.d.ts +1 -1
  64. package/dist/components/Form/ListBox/constants.d.ts.map +1 -1
  65. package/dist/components/Form/ListBox/listBoxUtils.js +49 -0
  66. package/dist/components/Form/ListBox/listBoxUtils.js.map +1 -0
  67. package/dist/components/Form/PinInputField/PinInputField.d.ts +6 -1
  68. package/dist/components/Form/PinInputField/PinInputField.d.ts.map +1 -1
  69. package/dist/components/Form/PinInputField/PinInputField.js +165 -0
  70. package/dist/components/Form/PinInputField/PinInputField.js.map +1 -0
  71. package/dist/components/Form/RadioButton/RadioButton.d.ts.map +1 -1
  72. package/dist/components/Form/RadioButton/RadioButton.js +82 -0
  73. package/dist/components/Form/RadioButton/RadioButton.js.map +1 -0
  74. package/dist/components/Form/RadioButton/RadioGroup.d.ts.map +1 -1
  75. package/dist/components/Form/RadioButton/RadioGroup.js +97 -0
  76. package/dist/components/Form/RadioButton/RadioGroup.js.map +1 -0
  77. package/dist/components/Form/RadioButton/RadioTabGroup.d.ts.map +1 -1
  78. package/dist/components/Form/RadioButton/RadioTabGroup.js +182 -0
  79. package/dist/components/Form/RadioButton/RadioTabGroup.js.map +1 -0
  80. package/dist/components/Form/Range/Range.js +376 -0
  81. package/dist/components/Form/Range/Range.js.map +1 -0
  82. package/dist/components/Form/Select/Select.d.ts.map +1 -1
  83. package/dist/components/Form/Select/Select.js +83 -0
  84. package/dist/components/Form/Select/Select.js.map +1 -0
  85. package/dist/components/Form/TextArea/TextArea.d.ts.map +1 -1
  86. package/dist/components/Form/TextArea/TextArea.js +111 -0
  87. package/dist/components/Form/TextArea/TextArea.js.map +1 -0
  88. package/dist/components/Meter/Meter.js +110 -0
  89. package/dist/components/Meter/Meter.js.map +1 -0
  90. package/dist/components/Modal/Modal.d.ts.map +1 -1
  91. package/dist/components/Modal/Modal.js +75 -0
  92. package/dist/components/Modal/Modal.js.map +1 -0
  93. package/dist/components/Notification/NotificationItem/NotificationItem.d.ts.map +1 -1
  94. package/dist/components/Notification/NotificationItem/NotificationItem.js +70 -0
  95. package/dist/components/Notification/NotificationItem/NotificationItem.js.map +1 -0
  96. package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js +88 -0
  97. package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js.map +1 -0
  98. package/dist/components/Notification/NotificationsWrapper/NotificationsWrapper.d.ts.map +1 -1
  99. package/dist/components/Notification/NotificationsWrapper/NotificationsWrapper.js +35 -0
  100. package/dist/components/Notification/NotificationsWrapper/NotificationsWrapper.js.map +1 -0
  101. package/dist/components/OptionCard/OptionCard.js +150 -0
  102. package/dist/components/OptionCard/OptionCard.js.map +1 -0
  103. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  104. package/dist/components/Pagination/Pagination.js +206 -0
  105. package/dist/components/Pagination/Pagination.js.map +1 -0
  106. package/dist/components/Pagination/usePagination.js +35 -0
  107. package/dist/components/Pagination/usePagination.js.map +1 -0
  108. package/dist/components/Portion/Portion.js +34 -0
  109. package/dist/components/Portion/Portion.js.map +1 -0
  110. package/dist/components/ProgressBar/ProgressBar.js +63 -0
  111. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  112. package/dist/components/Row/Row.js +40 -0
  113. package/dist/components/Row/Row.js.map +1 -0
  114. package/dist/components/Sidebar/ContentWrapper/ContentWrapper.js +23 -0
  115. package/dist/components/Sidebar/ContentWrapper/ContentWrapper.js.map +1 -0
  116. package/dist/components/Sidebar/SidebarFooter/SidebarFooter.js +25 -0
  117. package/dist/components/Sidebar/SidebarFooter/SidebarFooter.js.map +1 -0
  118. package/dist/components/Sidebar/SidebarHeader/SidebarHeader.js +25 -0
  119. package/dist/components/Sidebar/SidebarHeader/SidebarHeader.js.map +1 -0
  120. package/dist/components/Sidebar/SidebarItem/SidebarItem.js +30 -0
  121. package/dist/components/Sidebar/SidebarItem/SidebarItem.js.map +1 -0
  122. package/dist/components/Sidebar/SidebarItemsGroup/SidebarItemsGroup.js +29 -0
  123. package/dist/components/Sidebar/SidebarItemsGroup/SidebarItemsGroup.js.map +1 -0
  124. package/dist/components/Sidebar/SidebarWrapper/SidebarWrapper.d.ts.map +1 -1
  125. package/dist/components/Sidebar/SidebarWrapper/SidebarWrapper.js +35 -0
  126. package/dist/components/Sidebar/SidebarWrapper/SidebarWrapper.js.map +1 -0
  127. package/dist/components/Skeleton/Skeleton.js +84 -0
  128. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  129. package/dist/components/Spinner/Spinner.js +33 -0
  130. package/dist/components/Spinner/Spinner.js.map +1 -0
  131. package/dist/components/Table/Table.js +53 -0
  132. package/dist/components/Table/Table.js.map +1 -0
  133. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  134. package/dist/components/Tabs/Tabs.js +104 -0
  135. package/dist/components/Tabs/Tabs.js.map +1 -0
  136. package/dist/components/ThemeProvider/ThemeProvider.d.ts +6 -0
  137. package/dist/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  138. package/dist/components/ThemeProvider/ThemeProvider.js +52 -0
  139. package/dist/components/ThemeProvider/ThemeProvider.js.map +1 -0
  140. package/dist/components/Toast/ToastItem/ToastItem.js +47 -0
  141. package/dist/components/Toast/ToastItem/ToastItem.js.map +1 -0
  142. package/dist/components/Toast/ToastsProvider/ToastsProvider.js +45 -0
  143. package/dist/components/Toast/ToastsProvider/ToastsProvider.js.map +1 -0
  144. package/dist/components/Toast/ToastsWrapper/ToastsWrapper.d.ts.map +1 -1
  145. package/dist/components/Toast/ToastsWrapper/ToastsWrapper.js +28 -0
  146. package/dist/components/Toast/ToastsWrapper/ToastsWrapper.js.map +1 -0
  147. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  148. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  149. package/dist/components/Tooltip/Tooltip.js +62 -0
  150. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  151. package/dist/components/Typography/Heading.js +30 -0
  152. package/dist/components/Typography/Heading.js.map +1 -0
  153. package/dist/components/Typography/Text.js +15 -0
  154. package/dist/components/Typography/Text.js.map +1 -0
  155. package/dist/components/index.js +124 -75
  156. package/dist/components/index.js.map +1 -1
  157. package/dist/fictoan-schema.json +2070 -0
  158. package/dist/hooks/UseClickOutside.js +17 -0
  159. package/dist/hooks/UseClickOutside.js.map +1 -0
  160. package/dist/hooks/UseViewTransition.d.ts +2 -0
  161. package/dist/hooks/UseViewTransition.d.ts.map +1 -0
  162. package/dist/hooks/UseViewTransition.js +17 -0
  163. package/dist/hooks/UseViewTransition.js.map +1 -0
  164. package/dist/index.css +6 -10661
  165. package/dist/index.d.ts +1 -0
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +142 -151
  168. package/dist/index.js.map +1 -1
  169. package/dist/scripts/generateSchema.d.ts +2 -0
  170. package/dist/scripts/generateSchema.d.ts.map +1 -0
  171. package/dist/scripts/schema-meta.d.ts +12 -0
  172. package/dist/scripts/schema-meta.d.ts.map +1 -0
  173. package/dist/styles/colours.js +55 -0
  174. package/dist/styles/colours.js.map +1 -0
  175. package/dist/utils/classNames.js +6 -0
  176. package/dist/utils/classNames.js.map +1 -0
  177. package/dist/utils/propSeparation.js +77 -0
  178. package/dist/utils/propSeparation.js.map +1 -0
  179. package/package.json +12 -18
  180. package/dist/Accordion-CeGNgNW8.js +0 -4254
  181. package/dist/Accordion-CeGNgNW8.js.map +0 -1
@@ -0,0 +1,2070 @@
1
+ {
2
+ "$schema": "https://fictoan.io/schema/v1.json",
3
+ "name": "fictoan-react",
4
+ "version": "2.0.0-beta.18",
5
+ "framework": "react",
6
+ "philosophy": "Plain-English props, pure CSS, zero runtime. A universal Element prop set (spacing, colour, layout, responsiveness) works across every component.",
7
+ "docs": "https://fictoan.io",
8
+ "enums": {
9
+ "SpacingTypes": [
10
+ "none",
11
+ "nano",
12
+ "micro",
13
+ "tiny",
14
+ "small",
15
+ "medium",
16
+ "large",
17
+ "huge"
18
+ ],
19
+ "EmphasisTypes": [
20
+ "primary",
21
+ "secondary",
22
+ "tertiary",
23
+ "custom"
24
+ ],
25
+ "ShadowTypes": [
26
+ "none",
27
+ "mild",
28
+ "hard",
29
+ "soft"
30
+ ],
31
+ "ShapeTypes": [
32
+ "rounded",
33
+ "curved"
34
+ ],
35
+ "OpacityTypes": [
36
+ "0",
37
+ "5",
38
+ "10",
39
+ "20",
40
+ "30",
41
+ "40",
42
+ "50",
43
+ "60",
44
+ "70",
45
+ "80",
46
+ "90"
47
+ ],
48
+ "WeightTypes": [
49
+ "100",
50
+ "200",
51
+ "300",
52
+ "400",
53
+ "500",
54
+ "600",
55
+ "700",
56
+ "800",
57
+ "900"
58
+ ],
59
+ "ButtonVariantTypes": [
60
+ "success",
61
+ "warning",
62
+ "danger"
63
+ ],
64
+ "SpanTypes": [
65
+ "one-twelfth",
66
+ "one-eighth",
67
+ "one-sixth",
68
+ "one-fourth",
69
+ "one-third",
70
+ "five-twelfth",
71
+ "half",
72
+ "seven-twelfth",
73
+ "two-third",
74
+ "three-fourth",
75
+ "five-sixth",
76
+ "seven-eighth",
77
+ "eleven-twelfth",
78
+ "whole",
79
+ "1",
80
+ "2",
81
+ "3",
82
+ "4",
83
+ "5",
84
+ "6",
85
+ "7",
86
+ "8",
87
+ "9",
88
+ "10",
89
+ "11",
90
+ "12",
91
+ "13",
92
+ "14",
93
+ "15",
94
+ "16",
95
+ "17",
96
+ "18",
97
+ "19",
98
+ "20",
99
+ "21",
100
+ "22",
101
+ "23",
102
+ "24"
103
+ ],
104
+ "Colours": [
105
+ "pink",
106
+ "rose",
107
+ "crimson",
108
+ "red",
109
+ "salmon",
110
+ "sienna",
111
+ "orange",
112
+ "amber",
113
+ "gold",
114
+ "yellow",
115
+ "lime",
116
+ "chartreuse",
117
+ "spring",
118
+ "pistachio",
119
+ "sage",
120
+ "green",
121
+ "emerald",
122
+ "jade",
123
+ "teal",
124
+ "cyan",
125
+ "aqua",
126
+ "azure",
127
+ "sky",
128
+ "cerulean",
129
+ "cobalt",
130
+ "navy",
131
+ "blue",
132
+ "royal",
133
+ "indigo",
134
+ "iris",
135
+ "violet",
136
+ "plum",
137
+ "purple",
138
+ "magenta",
139
+ "fuchsia",
140
+ "cerise",
141
+ "slate",
142
+ "grey",
143
+ "brown",
144
+ "transparent",
145
+ "black",
146
+ "white"
147
+ ]
148
+ },
149
+ "colourModifiers": {
150
+ "description": "Append modifiers to any colour name to vary it.",
151
+ "shade": {
152
+ "pattern": "{colour}-{dark|light}{10..90}",
153
+ "example": "red-dark30, blue-light20"
154
+ },
155
+ "opacity": {
156
+ "pattern": "{colour}[-{dark|light}{10..90}]-opacity{0..90}",
157
+ "example": "red-opacity50, blue-dark30-opacity20"
158
+ }
159
+ },
160
+ "universalProps": {
161
+ "bgColor": {
162
+ "type": "ColourPropTypes"
163
+ },
164
+ "bgColour": {
165
+ "type": "ColourPropTypes"
166
+ },
167
+ "bgOpacity": {
168
+ "type": "OpacityTypes"
169
+ },
170
+ "textColor": {
171
+ "type": "ColourPropTypes"
172
+ },
173
+ "textColour": {
174
+ "type": "ColourPropTypes"
175
+ },
176
+ "borderColor": {
177
+ "type": "ColourPropTypes"
178
+ },
179
+ "borderColour": {
180
+ "type": "ColourPropTypes"
181
+ },
182
+ "borderOpacity": {
183
+ "type": "OpacityTypes"
184
+ },
185
+ "fillColor": {
186
+ "type": "ColourPropTypes"
187
+ },
188
+ "fillColour": {
189
+ "type": "ColourPropTypes"
190
+ },
191
+ "strokeColor": {
192
+ "type": "ColourPropTypes"
193
+ },
194
+ "strokeColour": {
195
+ "type": "ColourPropTypes"
196
+ },
197
+ "shadow": {
198
+ "type": "ShadowTypes"
199
+ },
200
+ "shape": {
201
+ "type": "ShapeTypes"
202
+ },
203
+ "opacity": {
204
+ "type": "OpacityTypes"
205
+ },
206
+ "layoutAsFlexbox": {
207
+ "type": "boolean"
208
+ },
209
+ "stackVertically": {
210
+ "type": "boolean"
211
+ },
212
+ "stackHorizontally": {
213
+ "type": "boolean"
214
+ },
215
+ "layoutAsGrid": {
216
+ "type": "boolean"
217
+ },
218
+ "columns": {
219
+ "type": "string"
220
+ },
221
+ "gap": {
222
+ "type": "SpacingTypes"
223
+ },
224
+ "margin": {
225
+ "type": "SpacingTypes"
226
+ },
227
+ "horizontalMargin": {
228
+ "type": "SpacingTypes"
229
+ },
230
+ "verticalMargin": {
231
+ "type": "SpacingTypes"
232
+ },
233
+ "marginTop": {
234
+ "type": "SpacingTypes"
235
+ },
236
+ "marginRight": {
237
+ "type": "SpacingTypes"
238
+ },
239
+ "marginBottom": {
240
+ "type": "SpacingTypes"
241
+ },
242
+ "marginLeft": {
243
+ "type": "SpacingTypes"
244
+ },
245
+ "padding": {
246
+ "type": "SpacingTypes"
247
+ },
248
+ "horizontalPadding": {
249
+ "type": "SpacingTypes"
250
+ },
251
+ "verticalPadding": {
252
+ "type": "SpacingTypes"
253
+ },
254
+ "paddingTop": {
255
+ "type": "SpacingTypes"
256
+ },
257
+ "paddingRight": {
258
+ "type": "SpacingTypes"
259
+ },
260
+ "paddingBottom": {
261
+ "type": "SpacingTypes"
262
+ },
263
+ "paddingLeft": {
264
+ "type": "SpacingTypes"
265
+ },
266
+ "horizontallyCentreThis": {
267
+ "type": "boolean"
268
+ },
269
+ "horizontallyCenterThis": {
270
+ "type": "boolean"
271
+ },
272
+ "verticallyCentreItems": {
273
+ "type": "boolean"
274
+ },
275
+ "verticallyCenterItems": {
276
+ "type": "boolean"
277
+ },
278
+ "pushItemsToEnds": {
279
+ "type": "boolean"
280
+ },
281
+ "isClickable": {
282
+ "type": "boolean"
283
+ },
284
+ "isFullWidth": {
285
+ "type": "boolean"
286
+ },
287
+ "isFullHeight": {
288
+ "type": "boolean"
289
+ },
290
+ "inheritFormSpacing": {
291
+ "type": "boolean"
292
+ },
293
+ "hideOnMobile": {
294
+ "type": "boolean"
295
+ },
296
+ "showOnlyOnMobile": {
297
+ "type": "boolean"
298
+ },
299
+ "hideOnTabletPortrait": {
300
+ "type": "boolean"
301
+ },
302
+ "showOnlyOnTabletPortrait": {
303
+ "type": "boolean"
304
+ },
305
+ "hideOnTabletLandscape": {
306
+ "type": "boolean"
307
+ },
308
+ "showOnlyOnTabletLandscape": {
309
+ "type": "boolean"
310
+ },
311
+ "hideOnDesktop": {
312
+ "type": "boolean"
313
+ },
314
+ "showOnlyOnDesktop": {
315
+ "type": "boolean"
316
+ },
317
+ "weight": {
318
+ "type": "WeightTypes"
319
+ },
320
+ "classNames": {
321
+ "type": "string[]"
322
+ }
323
+ },
324
+ "components": {
325
+ "Accordion": {
326
+ "description": "",
327
+ "import": "import { Accordion } from \"fictoan-react\";",
328
+ "props": {
329
+ "isOpen": {
330
+ "type": "boolean",
331
+ "default": "false"
332
+ },
333
+ "summary": {
334
+ "type": "ReactNode",
335
+ "required": true
336
+ }
337
+ }
338
+ },
339
+ "Badge": {
340
+ "description": "Small inline label for counts, statuses, tags.",
341
+ "import": "import { Badge } from \"fictoan-react\";",
342
+ "props": {
343
+ "size": {
344
+ "type": "SpacingTypes",
345
+ "default": "medium"
346
+ },
347
+ "actionIcon": {
348
+ "type": "BadgeActionIconType"
349
+ },
350
+ "onActionClick": {
351
+ "type": "((event: MouseEvent<HTMLButtonElement, MouseEvent>) => void)"
352
+ },
353
+ "actionAriaLabel": {
354
+ "type": "string"
355
+ }
356
+ },
357
+ "example": "<Badge bgColour=\"blue\" textColour=\"white\">New</Badge>"
358
+ },
359
+ "Breadcrumbs": {
360
+ "description": "",
361
+ "import": "import { Breadcrumbs } from \"fictoan-react\";",
362
+ "props": {
363
+ "separator": {
364
+ "type": "string",
365
+ "default": "/"
366
+ },
367
+ "spacing": {
368
+ "type": "SpacingTypes",
369
+ "default": "micro"
370
+ }
371
+ }
372
+ },
373
+ "Button": {
374
+ "description": "Clickable action element. Use `kind` for semantic emphasis; `variant` for status colour; `size` and `shape` for visual variants.",
375
+ "import": "import { Button } from \"fictoan-react\";",
376
+ "props": {
377
+ "kind": {
378
+ "type": "EmphasisTypes"
379
+ },
380
+ "variant": {
381
+ "type": "ButtonVariantTypes"
382
+ },
383
+ "size": {
384
+ "type": "SpacingTypes",
385
+ "default": "medium"
386
+ },
387
+ "isLoading": {
388
+ "type": "boolean"
389
+ },
390
+ "label": {
391
+ "type": "string"
392
+ }
393
+ },
394
+ "example": "<Button kind=\"primary\" size=\"medium\">Click me</Button>",
395
+ "tips": [
396
+ "kind='custom' lets you pair it with `bgColour`, `textColour`, `borderColour` for arbitrary colour combinations.",
397
+ "Use `isLoading` to show a spinner and disable interaction.",
398
+ "Wrap in next/link or react-router Link for navigation; don't reach for `href` here."
399
+ ]
400
+ },
401
+ "ButtonGroup": {
402
+ "description": "",
403
+ "import": "import { ButtonGroup } from \"fictoan-react\";",
404
+ "props": {
405
+ "isJoint": {
406
+ "type": "boolean",
407
+ "default": "true"
408
+ },
409
+ "spacing": {
410
+ "type": "SpacingTypes"
411
+ },
412
+ "equaliseWidth": {
413
+ "type": "boolean"
414
+ }
415
+ }
416
+ },
417
+ "Callout": {
418
+ "description": "Inline emphasis box for notes, warnings, success/error messages.",
419
+ "import": "import { Callout } from \"fictoan-react\";",
420
+ "props": {
421
+ "kind": {
422
+ "type": "\"info\" | \"success\" | \"warning\" | \"error\"",
423
+ "required": true
424
+ },
425
+ "title": {
426
+ "type": "string"
427
+ }
428
+ },
429
+ "example": "<Callout kind=\"info\">\n Heads up — this affects all users.\n</Callout>"
430
+ },
431
+ "Card": {
432
+ "description": "Generic surface container with shadow, border, and rounded shape. Use for grouping related content.",
433
+ "import": "import { Card } from \"fictoan-react\";",
434
+ "props": {
435
+ "heading": {
436
+ "type": "string"
437
+ }
438
+ },
439
+ "example": "<Card padding=\"medium\" shadow=\"soft\" shape=\"rounded\">\n <Heading6>Title</Heading6>\n <Text>Body</Text>\n</Card>",
440
+ "tips": [
441
+ "Card supports the universal `padding`, `bgColour`, `shadow`, `shape` props directly — no Card-specific styling props."
442
+ ]
443
+ },
444
+ "CodeBlock": {
445
+ "description": "",
446
+ "import": "import { CodeBlock } from \"fictoan-react\";",
447
+ "props": {
448
+ "source": {
449
+ "type": "string | object"
450
+ },
451
+ "language": {
452
+ "type": "string",
453
+ "default": "json"
454
+ },
455
+ "showCopyButton": {
456
+ "type": "boolean"
457
+ },
458
+ "showLineNumbers": {
459
+ "type": "boolean"
460
+ },
461
+ "description": {
462
+ "type": "string"
463
+ },
464
+ "withSyntaxHighlighting": {
465
+ "type": "boolean",
466
+ "default": "false"
467
+ },
468
+ "makeEditable": {
469
+ "type": "boolean",
470
+ "default": "false"
471
+ },
472
+ "onChange": {
473
+ "type": "((content: string) => void)"
474
+ }
475
+ }
476
+ },
477
+ "Divider": {
478
+ "description": "",
479
+ "import": "import { Divider } from \"fictoan-react\";",
480
+ "props": {
481
+ "kind": {
482
+ "type": "\"primary\" | \"secondary\" | \"tertiary\""
483
+ },
484
+ "height": {
485
+ "type": "string"
486
+ },
487
+ "label": {
488
+ "type": "string"
489
+ }
490
+ }
491
+ },
492
+ "Drawer": {
493
+ "description": "Side-anchored overlay panel. Common for navigation, filters, settings.",
494
+ "import": "import { Drawer } from \"fictoan-react\";",
495
+ "props": {
496
+ "id": {
497
+ "type": "string",
498
+ "required": true
499
+ },
500
+ "isOpen": {
501
+ "type": "boolean",
502
+ "default": "false"
503
+ },
504
+ "onClose": {
505
+ "type": "(() => void)"
506
+ },
507
+ "position": {
508
+ "type": "\"top\" | \"right\" | \"bottom\" | \"left\"",
509
+ "default": "right"
510
+ },
511
+ "size": {
512
+ "type": "SpacingTypes",
513
+ "default": "medium"
514
+ },
515
+ "isDismissible": {
516
+ "type": "boolean",
517
+ "default": "true"
518
+ },
519
+ "showOverlay": {
520
+ "type": "boolean",
521
+ "default": "true"
522
+ },
523
+ "blurOverlay": {
524
+ "type": "boolean",
525
+ "default": "false"
526
+ },
527
+ "closeOnClickOutside": {
528
+ "type": "boolean",
529
+ "description": "@deprecated Click-outside-to-close is governed by `isDismissible` via the\npopover API: when dismissible, both ESC and backdrop click close the\ndrawer. Splitting the two is no longer supported."
530
+ },
531
+ "label": {
532
+ "type": "string"
533
+ },
534
+ "description": {
535
+ "type": "string"
536
+ },
537
+ "zIndex": {
538
+ "type": "number"
539
+ }
540
+ },
541
+ "example": "<Drawer\n id=\"filters\"\n isOpen={isOpen}\n position=\"right\"\n size=\"medium\"\n onClose={() => setIsOpen(false)}\n>\n Filter content\n</Drawer>"
542
+ },
543
+ "Checkbox": {
544
+ "description": "",
545
+ "import": "import { Checkbox } from \"fictoan-react\";",
546
+ "props": {
547
+ "label": {
548
+ "type": "string"
549
+ },
550
+ "htmlFor": {
551
+ "type": "string"
552
+ },
553
+ "hideLabel": {
554
+ "type": "boolean"
555
+ },
556
+ "id": {
557
+ "type": "string"
558
+ },
559
+ "name": {
560
+ "type": "string"
561
+ },
562
+ "checked": {
563
+ "type": "boolean"
564
+ },
565
+ "defaultChecked": {
566
+ "type": "boolean"
567
+ },
568
+ "disabled": {
569
+ "type": "boolean"
570
+ },
571
+ "required": {
572
+ "type": "boolean"
573
+ },
574
+ "onChange": {
575
+ "type": "((checked: boolean) => void)"
576
+ },
577
+ "size": {
578
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\"",
579
+ "default": "medium"
580
+ },
581
+ "helpText": {
582
+ "type": "string"
583
+ },
584
+ "errorText": {
585
+ "type": "string"
586
+ },
587
+ "labelFirst": {
588
+ "type": "boolean"
589
+ }
590
+ }
591
+ },
592
+ "CheckboxGroup": {
593
+ "description": "",
594
+ "import": "import { CheckboxGroup } from \"fictoan-react\";",
595
+ "props": {
596
+ "label": {
597
+ "type": "string"
598
+ },
599
+ "htmlFor": {
600
+ "type": "string"
601
+ },
602
+ "hideLabel": {
603
+ "type": "boolean"
604
+ },
605
+ "id": {
606
+ "type": "string"
607
+ },
608
+ "name": {
609
+ "type": "string",
610
+ "required": true
611
+ },
612
+ "options": {
613
+ "type": "BaseGroupOptionProps[]",
614
+ "required": true
615
+ },
616
+ "value": {
617
+ "type": "string[]"
618
+ },
619
+ "defaultValue": {
620
+ "type": "string[]"
621
+ },
622
+ "onChange": {
623
+ "type": "((values: string[]) => void)"
624
+ },
625
+ "align": {
626
+ "type": "\"horizontal\" | \"vertical\""
627
+ },
628
+ "equaliseWidth": {
629
+ "type": "boolean"
630
+ },
631
+ "equalizeWidth": {
632
+ "type": "boolean"
633
+ },
634
+ "size": {
635
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
636
+ },
637
+ "labelFirst": {
638
+ "type": "boolean"
639
+ },
640
+ "helpText": {
641
+ "type": "string"
642
+ },
643
+ "errorText": {
644
+ "type": "string"
645
+ },
646
+ "required": {
647
+ "type": "boolean"
648
+ },
649
+ "disabled": {
650
+ "type": "boolean"
651
+ }
652
+ }
653
+ },
654
+ "SwitchGroup": {
655
+ "description": "",
656
+ "import": "import { SwitchGroup } from \"fictoan-react\";",
657
+ "props": {
658
+ "label": {
659
+ "type": "string"
660
+ },
661
+ "htmlFor": {
662
+ "type": "string"
663
+ },
664
+ "hideLabel": {
665
+ "type": "boolean"
666
+ },
667
+ "id": {
668
+ "type": "string"
669
+ },
670
+ "name": {
671
+ "type": "string",
672
+ "required": true
673
+ },
674
+ "options": {
675
+ "type": "BaseGroupOptionProps[]",
676
+ "required": true
677
+ },
678
+ "value": {
679
+ "type": "string[]"
680
+ },
681
+ "defaultValue": {
682
+ "type": "string[]"
683
+ },
684
+ "onChange": {
685
+ "type": "((values: string[]) => void)"
686
+ },
687
+ "align": {
688
+ "type": "\"horizontal\" | \"vertical\""
689
+ },
690
+ "equaliseWidth": {
691
+ "type": "boolean"
692
+ },
693
+ "equalizeWidth": {
694
+ "type": "boolean"
695
+ },
696
+ "size": {
697
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
698
+ },
699
+ "labelFirst": {
700
+ "type": "boolean"
701
+ },
702
+ "helpText": {
703
+ "type": "string"
704
+ },
705
+ "errorText": {
706
+ "type": "string"
707
+ },
708
+ "required": {
709
+ "type": "boolean"
710
+ },
711
+ "disabled": {
712
+ "type": "boolean"
713
+ }
714
+ }
715
+ },
716
+ "FileUpload": {
717
+ "description": "",
718
+ "import": "import { FileUpload } from \"fictoan-react\";",
719
+ "props": {
720
+ "label": {
721
+ "type": "string"
722
+ },
723
+ "htmlFor": {
724
+ "type": "string"
725
+ },
726
+ "hideLabel": {
727
+ "type": "boolean"
728
+ },
729
+ "id": {
730
+ "type": "string"
731
+ },
732
+ "name": {
733
+ "type": "string"
734
+ },
735
+ "accept": {
736
+ "type": "string"
737
+ },
738
+ "allowMultipleFiles": {
739
+ "type": "boolean",
740
+ "default": "false"
741
+ },
742
+ "capture": {
743
+ "type": "\"user\" | \"environment\""
744
+ },
745
+ "height": {
746
+ "type": "string",
747
+ "default": "120px"
748
+ },
749
+ "onChange": {
750
+ "type": "((files: File[]) => void)"
751
+ },
752
+ "instructionMainText": {
753
+ "type": "string",
754
+ "default": "Drag and drop or click to upload"
755
+ },
756
+ "instructionSubText": {
757
+ "type": "string",
758
+ "default": "You can add multiple files"
759
+ },
760
+ "badgeBgColour": {
761
+ "type": "string"
762
+ },
763
+ "badgeBgColor": {
764
+ "type": "string"
765
+ },
766
+ "badgeTextColour": {
767
+ "type": "string"
768
+ },
769
+ "badgeTextColor": {
770
+ "type": "string"
771
+ },
772
+ "helpText": {
773
+ "type": "string"
774
+ },
775
+ "errorText": {
776
+ "type": "string"
777
+ },
778
+ "required": {
779
+ "type": "boolean"
780
+ },
781
+ "disabled": {
782
+ "type": "boolean"
783
+ },
784
+ "invalid": {
785
+ "type": "boolean"
786
+ },
787
+ "className": {
788
+ "type": "string",
789
+ "default": ""
790
+ },
791
+ "size": {
792
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
793
+ },
794
+ "aria-label": {
795
+ "type": "string"
796
+ },
797
+ "aria-invalid": {
798
+ "type": "boolean"
799
+ }
800
+ }
801
+ },
802
+ "Form": {
803
+ "description": "Wrapper that establishes consistent vertical spacing between form children via inheritFormSpacing.",
804
+ "import": "import { Form } from \"fictoan-react\";",
805
+ "props": {
806
+ "spacing": {
807
+ "type": "SpacingTypes",
808
+ "default": "small"
809
+ },
810
+ "fields": {
811
+ "type": "FormFieldsConfig[]"
812
+ },
813
+ "onFieldsChange": {
814
+ "type": "((values: Record<string, any>) => void)"
815
+ },
816
+ "errorText": {
817
+ "type": "string"
818
+ }
819
+ },
820
+ "example": "<Form>\n <InputField label=\"Name\" />\n <InputField label=\"Email\" />\n <Button kind=\"primary\">Submit</Button>\n</Form>"
821
+ },
822
+ "FormItem": {
823
+ "description": "",
824
+ "import": "import { FormItem } from \"fictoan-react\";",
825
+ "props": {
826
+ "label": {
827
+ "type": "string"
828
+ },
829
+ "customLabel": {
830
+ "type": "ReactNode"
831
+ },
832
+ "htmlFor": {
833
+ "type": "string"
834
+ },
835
+ "hideLabel": {
836
+ "type": "boolean"
837
+ },
838
+ "helpText": {
839
+ "type": "ReactNode"
840
+ },
841
+ "errorText": {
842
+ "type": "string"
843
+ },
844
+ "validationState": {
845
+ "type": "\"invalid\" | \"valid\" | null"
846
+ },
847
+ "required": {
848
+ "type": "boolean"
849
+ },
850
+ "size": {
851
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
852
+ },
853
+ "labelFirst": {
854
+ "type": "boolean"
855
+ }
856
+ }
857
+ },
858
+ "FormItemGroup": {
859
+ "description": "",
860
+ "import": "import { FormItemGroup } from \"fictoan-react\";",
861
+ "props": {
862
+ "isJoint": {
863
+ "type": "boolean"
864
+ },
865
+ "equalWidthForChildren": {
866
+ "type": "ReactNode"
867
+ },
868
+ "retainLayout": {
869
+ "type": "boolean"
870
+ },
871
+ "legend": {
872
+ "type": "string"
873
+ }
874
+ }
875
+ },
876
+ "InputField": {
877
+ "description": "Single-line text input with built-in label, helper text, validation, and icon slots.",
878
+ "import": "import { InputField } from \"fictoan-react\";",
879
+ "props": {
880
+ "label": {
881
+ "type": "string"
882
+ },
883
+ "htmlFor": {
884
+ "type": "string"
885
+ },
886
+ "hideLabel": {
887
+ "type": "boolean"
888
+ },
889
+ "helpText": {
890
+ "type": "ReactNode"
891
+ },
892
+ "errorText": {
893
+ "type": "string"
894
+ },
895
+ "validateThis": {
896
+ "type": "boolean"
897
+ },
898
+ "valid": {
899
+ "type": "boolean"
900
+ },
901
+ "invalid": {
902
+ "type": "boolean"
903
+ },
904
+ "validationState": {
905
+ "type": "\"invalid\" | \"valid\" | null"
906
+ },
907
+ "innerIconLeft": {
908
+ "type": "ReactNode"
909
+ },
910
+ "innerIconRight": {
911
+ "type": "ReactNode"
912
+ },
913
+ "innerTextLeft": {
914
+ "type": "string"
915
+ },
916
+ "innerTextRight": {
917
+ "type": "string"
918
+ },
919
+ "size": {
920
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
921
+ },
922
+ "onFocus": {
923
+ "type": "InputFocusHandler"
924
+ },
925
+ "onBlur": {
926
+ "type": "InputFocusHandler"
927
+ },
928
+ "onChange": {
929
+ "type": "ValueChangeHandler<string>"
930
+ }
931
+ },
932
+ "example": "<InputField\n label=\"Email\"\n type=\"email\"\n value={email}\n onChange={setEmail}\n required\n/>",
933
+ "tips": [
934
+ "Pass either an `onChange` that takes a value, or a standard React change event handler — both shapes are supported.",
935
+ "Use `innerIconLeft` / `innerIconRight` for inline icons; `helpText` for descriptions below the field.",
936
+ "For validation, pass `errorText` for the message and set `validationState` to `valid` or `invalid`."
937
+ ]
938
+ },
939
+ "InputLabel": {
940
+ "description": "",
941
+ "import": "import { InputLabel } from \"fictoan-react\";",
942
+ "props": {
943
+ "label": {
944
+ "type": "string"
945
+ },
946
+ "htmlFor": {
947
+ "type": "string"
948
+ },
949
+ "hideLabel": {
950
+ "type": "boolean"
951
+ }
952
+ }
953
+ },
954
+ "ListBox": {
955
+ "description": "Searchable, optionally multi-select combobox. Richer than Select but heavier — prefer Select when the option list is short.",
956
+ "import": "import { ListBox } from \"fictoan-react\";",
957
+ "props": {
958
+ "options": {
959
+ "type": "OptionForListBoxProps[]",
960
+ "default": "[]"
961
+ },
962
+ "label": {
963
+ "type": "string"
964
+ },
965
+ "helpText": {
966
+ "type": "string"
967
+ },
968
+ "errorText": {
969
+ "type": "string"
970
+ },
971
+ "allowMultiSelect": {
972
+ "type": "boolean",
973
+ "default": "false"
974
+ },
975
+ "disabled": {
976
+ "type": "boolean"
977
+ },
978
+ "placeholder": {
979
+ "type": "string",
980
+ "default": "Select an option"
981
+ },
982
+ "id": {
983
+ "type": "string"
984
+ },
985
+ "defaultValue": {
986
+ "type": "string | string[]"
987
+ },
988
+ "selectionLimit": {
989
+ "type": "number"
990
+ },
991
+ "allowCustomEntries": {
992
+ "type": "boolean",
993
+ "default": "false"
994
+ },
995
+ "isLoading": {
996
+ "type": "boolean"
997
+ },
998
+ "onChange": {
999
+ "type": "ValueChangeHandler<string | string[]>"
1000
+ },
1001
+ "value": {
1002
+ "type": "string | string[]"
1003
+ },
1004
+ "size": {
1005
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1006
+ }
1007
+ },
1008
+ "example": "<ListBox\n label=\"Tags\"\n options={tagOptions}\n allowMultiSelect\n onChange={setTags}\n/>"
1009
+ },
1010
+ "PinInputField": {
1011
+ "description": "",
1012
+ "import": "import { PinInputField } from \"fictoan-react\";",
1013
+ "props": {
1014
+ "numberOfFields": {
1015
+ "type": "number",
1016
+ "required": true
1017
+ },
1018
+ "onChange": {
1019
+ "type": "((value: string) => void)"
1020
+ },
1021
+ "type": {
1022
+ "type": "\"number\" | \"alphanumeric\"",
1023
+ "default": "number"
1024
+ },
1025
+ "mask": {
1026
+ "type": "boolean",
1027
+ "default": "false"
1028
+ },
1029
+ "isOTP": {
1030
+ "type": "boolean",
1031
+ "default": "false"
1032
+ },
1033
+ "autoFocus": {
1034
+ "type": "boolean",
1035
+ "default": "false"
1036
+ },
1037
+ "pasteFromClipboard": {
1038
+ "type": "\"disabled\" | \"enabled\"",
1039
+ "default": "enabled"
1040
+ },
1041
+ "focusFirstInputOnReset": {
1042
+ "type": "boolean",
1043
+ "default": "true"
1044
+ },
1045
+ "ariaLabel": {
1046
+ "type": "string"
1047
+ },
1048
+ "label": {
1049
+ "type": "string"
1050
+ },
1051
+ "helpText": {
1052
+ "type": "ReactNode"
1053
+ },
1054
+ "errorText": {
1055
+ "type": "string"
1056
+ },
1057
+ "required": {
1058
+ "type": "boolean"
1059
+ },
1060
+ "size": {
1061
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1062
+ }
1063
+ }
1064
+ },
1065
+ "RadioButton": {
1066
+ "description": "",
1067
+ "import": "import { RadioButton } from \"fictoan-react\";",
1068
+ "props": {
1069
+ "label": {
1070
+ "type": "string"
1071
+ },
1072
+ "htmlFor": {
1073
+ "type": "string"
1074
+ },
1075
+ "hideLabel": {
1076
+ "type": "boolean"
1077
+ },
1078
+ "id": {
1079
+ "type": "string"
1080
+ },
1081
+ "name": {
1082
+ "type": "string"
1083
+ },
1084
+ "value": {
1085
+ "type": "string",
1086
+ "required": true
1087
+ },
1088
+ "checked": {
1089
+ "type": "boolean"
1090
+ },
1091
+ "disabled": {
1092
+ "type": "boolean"
1093
+ },
1094
+ "required": {
1095
+ "type": "boolean"
1096
+ },
1097
+ "onChange": {
1098
+ "type": "ValueChangeHandler<string>"
1099
+ },
1100
+ "helpText": {
1101
+ "type": "string"
1102
+ },
1103
+ "errorText": {
1104
+ "type": "string"
1105
+ },
1106
+ "labelFirst": {
1107
+ "type": "boolean"
1108
+ }
1109
+ }
1110
+ },
1111
+ "RadioGroup": {
1112
+ "description": "",
1113
+ "import": "import { RadioGroup } from \"fictoan-react\";",
1114
+ "props": {
1115
+ "id": {
1116
+ "type": "string"
1117
+ },
1118
+ "label": {
1119
+ "type": "string"
1120
+ },
1121
+ "hideLabel": {
1122
+ "type": "boolean"
1123
+ },
1124
+ "helpText": {
1125
+ "type": "string"
1126
+ },
1127
+ "errorText": {
1128
+ "type": "string"
1129
+ },
1130
+ "checked": {
1131
+ "type": "boolean"
1132
+ },
1133
+ "disabled": {
1134
+ "type": "boolean"
1135
+ },
1136
+ "required": {
1137
+ "type": "boolean"
1138
+ },
1139
+ "htmlFor": {
1140
+ "type": "string"
1141
+ },
1142
+ "name": {
1143
+ "type": "string",
1144
+ "required": true
1145
+ },
1146
+ "options": {
1147
+ "type": "RadioGroupOptionProps[]",
1148
+ "required": true
1149
+ },
1150
+ "value": {
1151
+ "type": "string"
1152
+ },
1153
+ "defaultValue": {
1154
+ "type": "string"
1155
+ },
1156
+ "onChange": {
1157
+ "type": "ValueChangeHandler<string>"
1158
+ },
1159
+ "size": {
1160
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1161
+ },
1162
+ "labelFirst": {
1163
+ "type": "boolean"
1164
+ },
1165
+ "align": {
1166
+ "type": "\"horizontal\" | \"vertical\""
1167
+ },
1168
+ "equaliseWidth": {
1169
+ "type": "boolean"
1170
+ },
1171
+ "equalizeWidth": {
1172
+ "type": "boolean"
1173
+ }
1174
+ }
1175
+ },
1176
+ "RadioTabGroup": {
1177
+ "description": "",
1178
+ "import": "import { RadioTabGroup } from \"fictoan-react\";",
1179
+ "props": {
1180
+ "id": {
1181
+ "type": "string"
1182
+ },
1183
+ "label": {
1184
+ "type": "string"
1185
+ },
1186
+ "hideLabel": {
1187
+ "type": "boolean"
1188
+ },
1189
+ "helpText": {
1190
+ "type": "string"
1191
+ },
1192
+ "errorText": {
1193
+ "type": "string"
1194
+ },
1195
+ "onChange": {
1196
+ "type": "ValueChangeHandler<string>"
1197
+ },
1198
+ "checked": {
1199
+ "type": "boolean"
1200
+ },
1201
+ "disabled": {
1202
+ "type": "boolean"
1203
+ },
1204
+ "required": {
1205
+ "type": "boolean"
1206
+ },
1207
+ "labelFirst": {
1208
+ "type": "boolean"
1209
+ },
1210
+ "htmlFor": {
1211
+ "type": "string"
1212
+ },
1213
+ "options": {
1214
+ "type": "RadioGroupOptionProps[]",
1215
+ "required": true
1216
+ },
1217
+ "value": {
1218
+ "type": "string"
1219
+ },
1220
+ "defaultValue": {
1221
+ "type": "string"
1222
+ },
1223
+ "align": {
1224
+ "type": "\"horizontal\" | \"vertical\""
1225
+ },
1226
+ "equaliseWidth": {
1227
+ "type": "boolean"
1228
+ },
1229
+ "equalizeWidth": {
1230
+ "type": "boolean"
1231
+ },
1232
+ "size": {
1233
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\"",
1234
+ "default": "medium"
1235
+ },
1236
+ "name": {
1237
+ "type": "string"
1238
+ }
1239
+ }
1240
+ },
1241
+ "Range": {
1242
+ "description": "",
1243
+ "import": "import { Range } from \"fictoan-react\";",
1244
+ "props": {
1245
+ "suffix": {
1246
+ "type": "string"
1247
+ },
1248
+ "value": {
1249
+ "type": "number | [number, number]",
1250
+ "default": "[ 0, 100 ]"
1251
+ },
1252
+ "onChange": {
1253
+ "type": "((value: number) => void) | ((value: [number, number]) => void)"
1254
+ },
1255
+ "helpText": {
1256
+ "type": "string"
1257
+ },
1258
+ "errorText": {
1259
+ "type": "string"
1260
+ },
1261
+ "size": {
1262
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1263
+ },
1264
+ "minLabel": {
1265
+ "type": "string",
1266
+ "default": "Minimum value"
1267
+ },
1268
+ "maxLabel": {
1269
+ "type": "string",
1270
+ "default": "Maximum value"
1271
+ }
1272
+ }
1273
+ },
1274
+ "Select": {
1275
+ "description": "Native HTML select with Fictoan styling. For combobox / searchable / multi-select, use ListBox.",
1276
+ "import": "import { Select } from \"fictoan-react\";",
1277
+ "props": {
1278
+ "options": {
1279
+ "type": "OptionProps[] | OptGroupProps[]",
1280
+ "required": true
1281
+ },
1282
+ "label": {
1283
+ "type": "string"
1284
+ },
1285
+ "helpText": {
1286
+ "type": "string"
1287
+ },
1288
+ "errorText": {
1289
+ "type": "string"
1290
+ },
1291
+ "onChange": {
1292
+ "type": "((value: string) => void)"
1293
+ },
1294
+ "size": {
1295
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1296
+ }
1297
+ },
1298
+ "example": "<Select\n label=\"Country\"\n options={[{ label: \"India\", value: \"in\" }]}\n onChange={setCountry}\n/>"
1299
+ },
1300
+ "Switch": {
1301
+ "description": "",
1302
+ "import": "import { Switch } from \"fictoan-react\";",
1303
+ "props": {
1304
+ "label": {
1305
+ "type": "string"
1306
+ },
1307
+ "htmlFor": {
1308
+ "type": "string"
1309
+ },
1310
+ "hideLabel": {
1311
+ "type": "boolean"
1312
+ },
1313
+ "id": {
1314
+ "type": "string"
1315
+ },
1316
+ "name": {
1317
+ "type": "string"
1318
+ },
1319
+ "checked": {
1320
+ "type": "boolean"
1321
+ },
1322
+ "defaultChecked": {
1323
+ "type": "boolean"
1324
+ },
1325
+ "disabled": {
1326
+ "type": "boolean"
1327
+ },
1328
+ "required": {
1329
+ "type": "boolean"
1330
+ },
1331
+ "onChange": {
1332
+ "type": "((checked: boolean) => void)"
1333
+ },
1334
+ "size": {
1335
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\"",
1336
+ "default": "medium"
1337
+ },
1338
+ "helpText": {
1339
+ "type": "string"
1340
+ },
1341
+ "errorText": {
1342
+ "type": "string"
1343
+ },
1344
+ "labelFirst": {
1345
+ "type": "boolean"
1346
+ }
1347
+ }
1348
+ },
1349
+ "TextArea": {
1350
+ "description": "",
1351
+ "import": "import { TextArea } from \"fictoan-react\";",
1352
+ "props": {
1353
+ "hideLabel": {
1354
+ "type": "boolean"
1355
+ },
1356
+ "helpText": {
1357
+ "type": "ReactNode"
1358
+ },
1359
+ "errorText": {
1360
+ "type": "string"
1361
+ },
1362
+ "invalid": {
1363
+ "type": "boolean"
1364
+ },
1365
+ "valid": {
1366
+ "type": "boolean"
1367
+ },
1368
+ "validateThis": {
1369
+ "type": "boolean"
1370
+ },
1371
+ "onChange": {
1372
+ "type": "((value: string) => void)"
1373
+ },
1374
+ "characterLimit": {
1375
+ "type": "number"
1376
+ },
1377
+ "wordLimit": {
1378
+ "type": "number"
1379
+ },
1380
+ "size": {
1381
+ "type": "\"none\" | \"micro\" | \"tiny\" | \"small\" | \"medium\" | \"large\""
1382
+ }
1383
+ }
1384
+ },
1385
+ "Meter": {
1386
+ "description": "",
1387
+ "import": "import { Meter } from \"fictoan-react\";",
1388
+ "props": {
1389
+ "min": {
1390
+ "type": "number",
1391
+ "required": true
1392
+ },
1393
+ "max": {
1394
+ "type": "number",
1395
+ "required": true
1396
+ },
1397
+ "low": {
1398
+ "type": "number",
1399
+ "required": true
1400
+ },
1401
+ "high": {
1402
+ "type": "number",
1403
+ "required": true
1404
+ },
1405
+ "value": {
1406
+ "type": "number",
1407
+ "required": true
1408
+ },
1409
+ "optimum": {
1410
+ "type": "number"
1411
+ },
1412
+ "showOptimumMarker": {
1413
+ "type": "boolean"
1414
+ },
1415
+ "suffix": {
1416
+ "type": "string"
1417
+ },
1418
+ "height": {
1419
+ "type": "string"
1420
+ },
1421
+ "label": {
1422
+ "type": "string"
1423
+ },
1424
+ "ariaLabel": {
1425
+ "type": "string"
1426
+ },
1427
+ "description": {
1428
+ "type": "string"
1429
+ }
1430
+ }
1431
+ },
1432
+ "Modal": {
1433
+ "description": "Overlay dialog. Built on the native popover API; manages focus, backdrop, and ESC handling.",
1434
+ "import": "import { Modal } from \"fictoan-react\";",
1435
+ "props": {
1436
+ "id": {
1437
+ "type": "string",
1438
+ "required": true
1439
+ },
1440
+ "isOpen": {
1441
+ "type": "boolean",
1442
+ "default": "false"
1443
+ },
1444
+ "onClose": {
1445
+ "type": "(() => void)"
1446
+ },
1447
+ "isDismissible": {
1448
+ "type": "boolean",
1449
+ "default": "true"
1450
+ },
1451
+ "showBackdrop": {
1452
+ "type": "boolean"
1453
+ },
1454
+ "blurBackdrop": {
1455
+ "type": "boolean"
1456
+ },
1457
+ "label": {
1458
+ "type": "string"
1459
+ },
1460
+ "description": {
1461
+ "type": "string"
1462
+ }
1463
+ },
1464
+ "example": "<Modal\n id=\"confirm-modal\"\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n>\n <Heading4>Confirm action</Heading4>\n <Text>Are you sure?</Text>\n</Modal>",
1465
+ "tips": [
1466
+ "Mount once near the root; toggle visibility with `isOpen`. Don't conditionally render the Modal itself."
1467
+ ]
1468
+ },
1469
+ "NotificationsProvider": {
1470
+ "description": "",
1471
+ "import": "import { NotificationsProvider } from \"fictoan-react\";",
1472
+ "props": {
1473
+ "position": {
1474
+ "type": "\"left\" | \"right\"",
1475
+ "default": "right"
1476
+ },
1477
+ "anchor": {
1478
+ "type": "\"top\" | \"bottom\"",
1479
+ "default": "top"
1480
+ },
1481
+ "order": {
1482
+ "type": "\"new-on-top\" | \"new-on-bottom\"",
1483
+ "default": "new-on-top"
1484
+ },
1485
+ "kind": {
1486
+ "type": "\"list\" | \"stack\"",
1487
+ "default": "list"
1488
+ }
1489
+ }
1490
+ },
1491
+ "OptionCard": {
1492
+ "description": "",
1493
+ "import": "import { OptionCard } from \"fictoan-react\";",
1494
+ "props": {
1495
+ "id": {
1496
+ "type": "string",
1497
+ "required": true
1498
+ },
1499
+ "disabled": {
1500
+ "type": "boolean",
1501
+ "default": "false"
1502
+ },
1503
+ "heading": {
1504
+ "type": "string"
1505
+ }
1506
+ }
1507
+ },
1508
+ "OptionCardsGroup": {
1509
+ "description": "",
1510
+ "import": "import { OptionCardsGroup } from \"fictoan-react\";",
1511
+ "props": {
1512
+ "allowMultipleSelections": {
1513
+ "type": "boolean",
1514
+ "default": "false"
1515
+ },
1516
+ "showTickIcon": {
1517
+ "type": "boolean"
1518
+ },
1519
+ "tickPosition": {
1520
+ "type": "TickPosition",
1521
+ "default": "top-right"
1522
+ },
1523
+ "onSelectionChange": {
1524
+ "type": "((selectedIds: Set<string>) => void)"
1525
+ },
1526
+ "selectionLimit": {
1527
+ "type": "number"
1528
+ },
1529
+ "defaultSelectedIds": {
1530
+ "type": "Set<string>"
1531
+ },
1532
+ "selectedIds": {
1533
+ "type": "Set<string>"
1534
+ }
1535
+ }
1536
+ },
1537
+ "Pagination": {
1538
+ "description": "",
1539
+ "import": "import { Pagination } from \"fictoan-react\";",
1540
+ "props": {
1541
+ "totalItems": {
1542
+ "type": "number",
1543
+ "required": true
1544
+ },
1545
+ "currentPage": {
1546
+ "type": "number",
1547
+ "required": true
1548
+ },
1549
+ "onPageChange": {
1550
+ "type": "(newPage: number) => void",
1551
+ "required": true
1552
+ },
1553
+ "itemsToShowEachSide": {
1554
+ "type": "number",
1555
+ "default": "1"
1556
+ },
1557
+ "kind": {
1558
+ "type": "\"plain\" | \"outlined\" | \"filled\"",
1559
+ "default": "plain"
1560
+ },
1561
+ "showGoToFirstItemButton": {
1562
+ "type": "boolean",
1563
+ "default": "true"
1564
+ },
1565
+ "showGoToLastItemButton": {
1566
+ "type": "boolean",
1567
+ "default": "true"
1568
+ },
1569
+ "showPreviousButton": {
1570
+ "type": "boolean",
1571
+ "default": "true"
1572
+ },
1573
+ "showNextButton": {
1574
+ "type": "boolean",
1575
+ "default": "true"
1576
+ },
1577
+ "showGoToInput": {
1578
+ "type": "boolean",
1579
+ "default": "false"
1580
+ },
1581
+ "disabled": {
1582
+ "type": "boolean",
1583
+ "default": "false"
1584
+ },
1585
+ "hideDisabledButtons": {
1586
+ "type": "boolean",
1587
+ "default": "false"
1588
+ },
1589
+ "renderItem": {
1590
+ "type": "((props: RenderItemProps) => ReactNode)",
1591
+ "default": "(\n {\n type,\n page,\n selected,\n disabled,\n onClick,\n key,\n ...props\n }: RenderItemProps) => {\n if (type === \"ellipsis\") {\n return (\n <Text className=\"pagination-ellipsis\">...</Text>\n );\n }\n\n const iconButtonLabels: Record<string, string> = {\n first : \"Go to first page\",\n previous : \"Go to previous page\",\n next : \"Go to next page\",\n last : \"Go to last page\",\n };\n\n const paginationItemProps = {\n type : \"button\",\n className : `pagination-item ${selected ? \"selected\" : \"\"} ${disabled ? \"disabled\" : \"\"}`,\n onClick,\n disabled,\n ...(iconButtonLabels[type] ? { \"aria-label\" : iconButtonLabels[type] } : {}),\n ...props,\n };\n\n let content;\n switch (type) {\n case \"first\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <line x1=\"5\" y1=\"18\" x2=\"5\" y2=\"6\" />\n <polyline points=\"14 18 9 12 14 6\" />\n <line x1=\"10\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n break;\n case \"previous\":\n content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 18 7 12 12 6\" />\n <line x1=\"8\" y1=\"12\" x2=\"17\" y2=\"12\" />\n </svg>\n );\n break;\n case \"next\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"12 6 17 12 12 18\" />\n <line x1=\"16\" y1=\"12\" x2=\"7\" y2=\"12\" />\n </svg>\n );\n break;\n case \"last\":\n content = content = (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <polyline points=\"10 6 15 12 10 18\" />\n <line x1=\"19\" y1=\"6\" x2=\"19\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"5\" y2=\"12\" />\n </svg>\n );\n break;\n default:\n content = page;\n }\n\n return (\n <Button\n kind=\"custom\"\n {...paginationItemProps}\n >\n {content}\n </Button>\n );\n}"
1592
+ },
1593
+ "isLoading": {
1594
+ "type": "boolean",
1595
+ "default": "false"
1596
+ },
1597
+ "loadingText": {
1598
+ "type": "string"
1599
+ },
1600
+ "emptyText": {
1601
+ "type": "string"
1602
+ },
1603
+ "itemDisplayText": {
1604
+ "type": "string",
1605
+ "default": "Page"
1606
+ }
1607
+ }
1608
+ },
1609
+ "Portion": {
1610
+ "description": "Child of Row. Declares a column span at one or more breakpoints. Uses fraction names ('half', 'one-third') or numbers ('1' through '24'). Breakpoints are now CONTAINER-relative: the parent Row's rendered width decides which span applies, not the viewport.",
1611
+ "import": "import { Portion } from \"fictoan-react\";",
1612
+ "props": {
1613
+ "desktopSpan": {
1614
+ "type": "SpanTypes"
1615
+ },
1616
+ "tabletLandscapeSpan": {
1617
+ "type": "SpanTypes"
1618
+ },
1619
+ "tabletPortraitSpan": {
1620
+ "type": "SpanTypes"
1621
+ },
1622
+ "mobileSpan": {
1623
+ "type": "SpanTypes"
1624
+ },
1625
+ "isHorizontal": {
1626
+ "type": "boolean"
1627
+ },
1628
+ "role": {
1629
+ "type": "string"
1630
+ }
1631
+ },
1632
+ "example": "<Portion desktopSpan=\"half\" mobileSpan=\"whole\">\n Content\n</Portion>",
1633
+ "composition": {
1634
+ "parent": "Row"
1635
+ },
1636
+ "tips": [
1637
+ "Fraction names: one-twelfth, one-eighth, one-sixth, one-fourth, one-third, five-twelfth, half, seven-twelfth, two-third, three-fourth, five-sixth, seven-eighth, eleven-twelfth, whole.",
1638
+ "Numeric spans 1–24 give exact column counts.",
1639
+ "When the parent Row is ≤ 600px wide, every Portion collapses to span 24 unless `mobileSpan` is set or the Row has `retainLayoutOnMobile`.",
1640
+ "Breakpoints are container-relative (Row width), not viewport-relative. A Portion inside a sidebar will stack regardless of the screen size."
1641
+ ]
1642
+ },
1643
+ "ProgressBar": {
1644
+ "description": "",
1645
+ "import": "import { ProgressBar } from \"fictoan-react\";",
1646
+ "props": {
1647
+ "label": {
1648
+ "type": "string"
1649
+ },
1650
+ "value": {
1651
+ "type": "number"
1652
+ },
1653
+ "suffix": {
1654
+ "type": "string"
1655
+ },
1656
+ "height": {
1657
+ "type": "string"
1658
+ },
1659
+ "max": {
1660
+ "type": "number",
1661
+ "default": "100"
1662
+ }
1663
+ }
1664
+ },
1665
+ "Row": {
1666
+ "description": "The horizontal layout primitive. A 24-column CSS grid that caps at 2400px and centres automatically. Children are Portions. Acts as a CSS container, so Portion responsive variants react to the Row's actual rendered width, not the viewport.",
1667
+ "import": "import { Row } from \"fictoan-react\";",
1668
+ "props": {
1669
+ "layout": {
1670
+ "type": "\"grid\" | \"flexbox\"",
1671
+ "default": "grid"
1672
+ },
1673
+ "gutters": {
1674
+ "type": "SpacingTypes",
1675
+ "default": "medium"
1676
+ },
1677
+ "retainLayoutOnTabletLandscape": {
1678
+ "type": "boolean"
1679
+ },
1680
+ "retainLayoutOnTabletPortrait": {
1681
+ "type": "boolean"
1682
+ },
1683
+ "retainLayoutOnMobile": {
1684
+ "type": "boolean"
1685
+ },
1686
+ "retainLayoutAlways": {
1687
+ "type": "boolean"
1688
+ },
1689
+ "allowUltraWide": {
1690
+ "type": "boolean"
1691
+ },
1692
+ "groupLabel": {
1693
+ "type": "string"
1694
+ }
1695
+ },
1696
+ "example": "<Row horizontalPadding=\"medium\" gutters=\"medium\">\n <Portion desktopSpan=\"half\">Left</Portion>\n <Portion desktopSpan=\"half\">Right</Portion>\n</Row>",
1697
+ "composition": {
1698
+ "children": "Portion[]"
1699
+ },
1700
+ "tips": [
1701
+ "Use `gutters` for inter-column spacing; `horizontalPadding` for left/right padding inside the Row.",
1702
+ "Set `allowUltraWide` only when you explicitly need the Row to fill viewports beyond 2400px.",
1703
+ "Use `retainLayoutOnMobile` (or `retainLayoutAlways`) to prevent the grid from collapsing to a single column.",
1704
+ "A Row inside a narrow parent (sidebar, modal, etc.) collapses its Portions based on its OWN width, not the viewport."
1705
+ ]
1706
+ },
1707
+ "SidebarWrapper": {
1708
+ "description": "",
1709
+ "import": "import { SidebarWrapper } from \"fictoan-react\";",
1710
+ "props": {
1711
+ "collapsed": {
1712
+ "type": "boolean"
1713
+ },
1714
+ "closeOnClickOutside": {
1715
+ "type": "(() => void)"
1716
+ },
1717
+ "showMobileSidebar": {
1718
+ "type": "boolean"
1719
+ }
1720
+ }
1721
+ },
1722
+ "ContentWrapper": {
1723
+ "description": "",
1724
+ "import": "import { ContentWrapper } from \"fictoan-react\";",
1725
+ "props": {}
1726
+ },
1727
+ "SidebarHeader": {
1728
+ "description": "",
1729
+ "import": "import { SidebarHeader } from \"fictoan-react\";",
1730
+ "props": {
1731
+ "isSticky": {
1732
+ "type": "boolean"
1733
+ }
1734
+ }
1735
+ },
1736
+ "SidebarItemsGroup": {
1737
+ "description": "",
1738
+ "import": "import { SidebarItemsGroup } from \"fictoan-react\";",
1739
+ "props": {
1740
+ "title": {
1741
+ "type": "string"
1742
+ }
1743
+ }
1744
+ },
1745
+ "SidebarItem": {
1746
+ "description": "",
1747
+ "import": "import { SidebarItem } from \"fictoan-react\";",
1748
+ "props": {
1749
+ "hasAlert": {
1750
+ "type": "boolean"
1751
+ },
1752
+ "hasEmptyIcon": {
1753
+ "type": "boolean"
1754
+ },
1755
+ "hasNoIcon": {
1756
+ "type": "boolean"
1757
+ }
1758
+ }
1759
+ },
1760
+ "SidebarFooter": {
1761
+ "description": "",
1762
+ "import": "import { SidebarFooter } from \"fictoan-react\";",
1763
+ "props": {
1764
+ "isSticky": {
1765
+ "type": "boolean"
1766
+ }
1767
+ }
1768
+ },
1769
+ "Skeleton": {
1770
+ "description": "",
1771
+ "import": "import { Skeleton } from \"fictoan-react\";",
1772
+ "props": {
1773
+ "variant": {
1774
+ "type": "\"line\" | \"circle\" | \"block\"",
1775
+ "default": "line"
1776
+ },
1777
+ "width": {
1778
+ "type": "string | number"
1779
+ },
1780
+ "height": {
1781
+ "type": "string | number"
1782
+ },
1783
+ "effect": {
1784
+ "type": "\"pulse\" | \"wave\" | \"none\"",
1785
+ "default": "wave"
1786
+ },
1787
+ "animate": {
1788
+ "type": "boolean",
1789
+ "default": "true"
1790
+ },
1791
+ "loadingLabel": {
1792
+ "type": "string",
1793
+ "default": "Loading content..."
1794
+ }
1795
+ }
1796
+ },
1797
+ "SkeletonGroup": {
1798
+ "description": "",
1799
+ "import": "import { SkeletonGroup } from \"fictoan-react\";",
1800
+ "props": {
1801
+ "repeat": {
1802
+ "type": "number",
1803
+ "default": "1"
1804
+ },
1805
+ "direction": {
1806
+ "type": "\"vertical\" | \"horizontal\"",
1807
+ "default": "vertical"
1808
+ },
1809
+ "spacing": {
1810
+ "type": "SpacingTypes",
1811
+ "default": "small"
1812
+ },
1813
+ "effect": {
1814
+ "type": "\"pulse\" | \"wave\" | \"none\"",
1815
+ "default": "wave"
1816
+ },
1817
+ "animate": {
1818
+ "type": "boolean",
1819
+ "default": "true"
1820
+ },
1821
+ "loadingLabel": {
1822
+ "type": "string",
1823
+ "default": "Loading content..."
1824
+ }
1825
+ }
1826
+ },
1827
+ "Spinner": {
1828
+ "description": "",
1829
+ "import": "import { Spinner } from \"fictoan-react\";",
1830
+ "props": {
1831
+ "size": {
1832
+ "type": "\"tiny\" | \"small\" | \"medium\" | \"large\" | \"huge\"",
1833
+ "default": "medium"
1834
+ },
1835
+ "loadingText": {
1836
+ "type": "string",
1837
+ "default": "Loading..."
1838
+ }
1839
+ }
1840
+ },
1841
+ "Table": {
1842
+ "description": "",
1843
+ "import": "import { Table } from \"fictoan-react\";",
1844
+ "props": {
1845
+ "bordersFor": {
1846
+ "type": "\"rows\" | \"columns\" | \"both\""
1847
+ },
1848
+ "alignText": {
1849
+ "type": "\"left\" | \"right\" | \"centre\" | \"center\""
1850
+ },
1851
+ "isStriped": {
1852
+ "type": "boolean"
1853
+ },
1854
+ "highlightRowOnHover": {
1855
+ "type": "boolean"
1856
+ },
1857
+ "caption": {
1858
+ "type": "string"
1859
+ },
1860
+ "summary": {
1861
+ "type": "string"
1862
+ },
1863
+ "hasColSpan": {
1864
+ "type": "boolean"
1865
+ }
1866
+ }
1867
+ },
1868
+ "Tabs": {
1869
+ "description": "Tabbed content switcher. Pass a tabs array with label + content for each tab.",
1870
+ "import": "import { Tabs } from \"fictoan-react\";",
1871
+ "props": {
1872
+ "tabs": {
1873
+ "type": "TabType[]",
1874
+ "required": true
1875
+ },
1876
+ "additionalNavContentWrapper": {
1877
+ "type": "ReactNode"
1878
+ },
1879
+ "defaultActiveTab": {
1880
+ "type": "ReactNode"
1881
+ },
1882
+ "align": {
1883
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\"",
1884
+ "default": "left"
1885
+ }
1886
+ },
1887
+ "example": "<Tabs\n tabs={[\n { label: \"Overview\", content: <Overview /> },\n { label: \"Details\", content: <Details /> },\n ]}\n/>"
1888
+ },
1889
+ "ThemeProvider": {
1890
+ "description": "Root provider that supplies the theme context. Wrap your app once at the top level.",
1891
+ "import": "import { ThemeProvider } from \"fictoan-react\";",
1892
+ "props": {
1893
+ "themeList": {
1894
+ "type": "string[]",
1895
+ "required": true
1896
+ },
1897
+ "currentTheme": {
1898
+ "type": "string",
1899
+ "required": true
1900
+ },
1901
+ "storageKey": {
1902
+ "type": "string",
1903
+ "description": "localStorage key the theme is persisted under. Defaults to \"fictoan-theme\"; pass a unique\nvalue (your package.json name works well) when multiple Fictoan apps can share an origin\n(e.g. localhost during dev, GitHub Pages) so their themes don't collide."
1904
+ },
1905
+ "nonce": {
1906
+ "type": "string",
1907
+ "description": "Pass your CSP nonce so the no-flash inline script is allowed under a strict `script-src`."
1908
+ }
1909
+ },
1910
+ "example": "<ThemeProvider>\n <App />\n</ThemeProvider>",
1911
+ "tips": [
1912
+ "Pair with `useTheme()` inside descendants to read or change theme."
1913
+ ]
1914
+ },
1915
+ "ToastsProvider": {
1916
+ "description": "",
1917
+ "import": "import { ToastsProvider } from \"fictoan-react\";",
1918
+ "props": {
1919
+ "anchor": {
1920
+ "type": "\"top\" | \"bottom\"",
1921
+ "default": "top"
1922
+ }
1923
+ }
1924
+ },
1925
+ "Tooltip": {
1926
+ "description": "",
1927
+ "import": "import { Tooltip } from \"fictoan-react\";",
1928
+ "props": {
1929
+ "isTooltipFor": {
1930
+ "type": "string",
1931
+ "required": true
1932
+ },
1933
+ "showOn": {
1934
+ "type": "ShowOn",
1935
+ "default": "hover"
1936
+ },
1937
+ "position": {
1938
+ "type": "Position",
1939
+ "default": "top"
1940
+ },
1941
+ "zIndex": {
1942
+ "type": "number"
1943
+ }
1944
+ }
1945
+ },
1946
+ "Text": {
1947
+ "description": "Paragraph text (p). Universal text-styling props (textColour, weight) apply.",
1948
+ "import": "import { Text } from \"fictoan-react\";",
1949
+ "props": {
1950
+ "fontStyle": {
1951
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
1952
+ "default": "sans-serif"
1953
+ },
1954
+ "size": {
1955
+ "type": "SpacingTypes"
1956
+ },
1957
+ "align": {
1958
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
1959
+ },
1960
+ "isSubtext": {
1961
+ "type": "boolean"
1962
+ }
1963
+ },
1964
+ "example": "<Text textColour=\"grey-dark40\">Body copy here.</Text>"
1965
+ },
1966
+ "Heading1": {
1967
+ "description": "Page-level heading (h1). Use one per page. For lighter weights, set `weight` directly.",
1968
+ "import": "import { Heading1 } from \"fictoan-react\";",
1969
+ "props": {
1970
+ "as": {
1971
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
1972
+ },
1973
+ "fontStyle": {
1974
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
1975
+ "default": "sans-serif"
1976
+ },
1977
+ "align": {
1978
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
1979
+ }
1980
+ },
1981
+ "example": "<Heading1 marginBottom=\"micro\">Welcome</Heading1>"
1982
+ },
1983
+ "Heading2": {
1984
+ "description": "",
1985
+ "import": "import { Heading2 } from \"fictoan-react\";",
1986
+ "props": {
1987
+ "as": {
1988
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
1989
+ },
1990
+ "fontStyle": {
1991
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
1992
+ "default": "sans-serif"
1993
+ },
1994
+ "align": {
1995
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
1996
+ }
1997
+ }
1998
+ },
1999
+ "Heading3": {
2000
+ "description": "",
2001
+ "import": "import { Heading3 } from \"fictoan-react\";",
2002
+ "props": {
2003
+ "as": {
2004
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
2005
+ },
2006
+ "fontStyle": {
2007
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
2008
+ "default": "sans-serif"
2009
+ },
2010
+ "align": {
2011
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
2012
+ }
2013
+ }
2014
+ },
2015
+ "Heading4": {
2016
+ "description": "",
2017
+ "import": "import { Heading4 } from \"fictoan-react\";",
2018
+ "props": {
2019
+ "as": {
2020
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
2021
+ },
2022
+ "fontStyle": {
2023
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
2024
+ "default": "sans-serif"
2025
+ },
2026
+ "align": {
2027
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
2028
+ }
2029
+ }
2030
+ },
2031
+ "Heading5": {
2032
+ "description": "",
2033
+ "import": "import { Heading5 } from \"fictoan-react\";",
2034
+ "props": {
2035
+ "as": {
2036
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
2037
+ },
2038
+ "fontStyle": {
2039
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
2040
+ "default": "sans-serif"
2041
+ },
2042
+ "align": {
2043
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
2044
+ }
2045
+ }
2046
+ },
2047
+ "Heading6": {
2048
+ "description": "",
2049
+ "import": "import { Heading6 } from \"fictoan-react\";",
2050
+ "props": {
2051
+ "as": {
2052
+ "type": "\"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\""
2053
+ },
2054
+ "fontStyle": {
2055
+ "type": "\"sans-serif\" | \"serif\" | \"monospace\"",
2056
+ "default": "sans-serif"
2057
+ },
2058
+ "align": {
2059
+ "type": "\"left\" | \"centre\" | \"center\" | \"right\""
2060
+ }
2061
+ }
2062
+ }
2063
+ },
2064
+ "compositionRules": [
2065
+ "Row > Portion: Portions must be direct children of a Row.",
2066
+ "Form: wraps inputs to give consistent vertical spacing between fields.",
2067
+ "ToastsProvider must wrap the app for useToasts() to work.",
2068
+ "ThemeProvider should be the outermost provider in your app tree."
2069
+ ]
2070
+ }