@sakaniui/react 0.8.7 → 0.8.9
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.
- package/AGENTS.md +14 -2
- package/CHANGELOG.md +495 -0
- package/README.md +13 -3
- package/bin/sakaniui-mcp.mjs +506 -58
- package/dist/icon-index.json +1 -0
- package/dist/manifest.json +998 -674
- package/package.json +5 -3
package/dist/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://www.sakaniui.com/manifest.schema.json",
|
|
3
|
-
"schemaVersion":
|
|
3
|
+
"schemaVersion": 3,
|
|
4
4
|
"name": "@sakaniui/react",
|
|
5
|
-
"version": "0.8.
|
|
5
|
+
"version": "0.8.9",
|
|
6
6
|
"description": "Machine-readable contract of the SakaniUI React library, generated from its TypeScript source.",
|
|
7
7
|
"docs": "https://www.sakaniui.com",
|
|
8
8
|
"guide": "https://www.sakaniui.com/llms-full.txt",
|
|
@@ -24,13 +24,16 @@
|
|
|
24
24
|
"@sakaniui/react/icons": "Tabler icons: IconName and IconNameFilled, one module each (5184 outline, 1054 filled)."
|
|
25
25
|
},
|
|
26
26
|
"conventions": {
|
|
27
|
+
"version": "This manifest describes @sakaniui/react@0.8.9. Each component has `since`, the first release that contained it: if the project has an older version installed, a component or prop that is newer than that does not exist there.",
|
|
27
28
|
"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
29
|
"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
30
|
"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
|
-
"icons": "Icon props take the component itself (IconSettings), not an element (<IconSettings />)."
|
|
31
|
+
"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.",
|
|
32
|
+
"examples": "Each component has `example`: its imports and the element with every required prop filled in, type-checked against this build. Start from it.",
|
|
33
|
+
"literals": "Prop `values` keep their real type: a number is a number (columns: 2), a string is a string (\"md\")."
|
|
31
34
|
},
|
|
32
35
|
"tokens": {
|
|
33
|
-
"count":
|
|
36
|
+
"count": 231,
|
|
34
37
|
"groups": {
|
|
35
38
|
"bp": {
|
|
36
39
|
"--bp-sm": "640px",
|
|
@@ -235,12 +238,68 @@
|
|
|
235
238
|
"--transition-fast": "var(--motion-fast) var(--ease-in-out)",
|
|
236
239
|
"--transition-slow": "var(--motion-slow) var(--ease-in-out)",
|
|
237
240
|
"--transition-hover": "var(--motion-slow) var(--ease-out)"
|
|
241
|
+
},
|
|
242
|
+
"glass": {
|
|
243
|
+
"--glass-bg": "rgba(255, 255, 255, 0.64)",
|
|
244
|
+
"--glass-bg-overlay": "rgba(255, 255, 255, 0.76)",
|
|
245
|
+
"--glass-bg-chrome": "rgba(255, 255, 255, 0.52)",
|
|
246
|
+
"--glass-bg-subtle": "rgba(16, 15, 12, 0.05)",
|
|
247
|
+
"--glass-bg-subtle-hover": "rgba(16, 15, 12, 0.09)",
|
|
248
|
+
"--glass-border": "rgba(255, 255, 255, 0.55)",
|
|
249
|
+
"--glass-border-strong": "rgba(255, 255, 255, 0.75)",
|
|
250
|
+
"--glass-highlight": "inset 0 1px 0 0 rgba(255, 255, 255, 0.7)",
|
|
251
|
+
"--glass-fg-muted": "var(--color-neutral-600)",
|
|
252
|
+
"--glass-blur": "blur(16px) saturate(160%)",
|
|
253
|
+
"--glass-blur-overlay": "blur(24px) saturate(180%)"
|
|
254
|
+
},
|
|
255
|
+
"surface": {
|
|
256
|
+
"--surface-bg": "var(--color-bg-surface)",
|
|
257
|
+
"--surface-bg-overlay": "var(--color-bg-surface)",
|
|
258
|
+
"--surface-bg-chrome": "transparent",
|
|
259
|
+
"--surface-bg-subtle": "var(--color-bg-subtle)",
|
|
260
|
+
"--surface-bg-subtle-hover": "var(--color-bg-muted)",
|
|
261
|
+
"--surface-border": "var(--color-border-subtle)",
|
|
262
|
+
"--surface-border-strong": "var(--color-border-default)",
|
|
263
|
+
"--surface-highlight": "0 0 #0000",
|
|
264
|
+
"--surface-blur": "none",
|
|
265
|
+
"--surface-blur-overlay": "none",
|
|
266
|
+
"--surface-fg-muted": "var(--color-fg-muted)"
|
|
267
|
+
},
|
|
268
|
+
"liquid": {
|
|
269
|
+
"--liquid-tint-regular": "rgba(255, 255, 255, 0.66)",
|
|
270
|
+
"--liquid-tint-clear": "rgba(255, 255, 255, 0.28)",
|
|
271
|
+
"--liquid-tint-subtle": "rgba(16, 15, 12, 0.05)",
|
|
272
|
+
"--liquid-overlay-tint": "var(--liquid-tint-subtle)",
|
|
273
|
+
"--liquid-panel-tint": "rgba(255, 255, 255, 0.76)",
|
|
274
|
+
"--liquid-refraction-regular": "0.55",
|
|
275
|
+
"--liquid-refraction-clear": "0.8",
|
|
276
|
+
"--liquid-depth-regular": "16",
|
|
277
|
+
"--liquid-depth-clear": "20",
|
|
278
|
+
"--liquid-dispersion-regular": "0.3",
|
|
279
|
+
"--liquid-dispersion-clear": "0.4",
|
|
280
|
+
"--liquid-frost-regular": "4",
|
|
281
|
+
"--liquid-frost-clear": "1",
|
|
282
|
+
"--liquid-light-intensity-regular": "0.7",
|
|
283
|
+
"--liquid-light-intensity-clear": "0.8",
|
|
284
|
+
"--liquid-light-angle": "-45",
|
|
285
|
+
"--liquid-fallback-blur": "blur(14px) saturate(180%)",
|
|
286
|
+
"--liquid-lx": "sin(calc(var(--liquid-light-angle) * 1deg))",
|
|
287
|
+
"--liquid-ly": "calc(-1 * cos(calc(var(--liquid-light-angle) * 1deg)))",
|
|
288
|
+
"--liquid-rim": "rgba(255, 255, 255, 0.5)",
|
|
289
|
+
"--liquid-rim-soft": "rgba(255, 255, 255, 0.47)",
|
|
290
|
+
"--liquid-rim-far-soft": "rgba(255, 255, 255, 0.27)",
|
|
291
|
+
"--liquid-rim-far": "rgba(255, 255, 255, 0.25)",
|
|
292
|
+
"--liquid-edge-shade": "inset calc(var(--liquid-lx) * -4px) calc(var(--liquid-ly) * -4px) 8px 1px rgba(0, 0, 0, 0.1), inset calc(var(--liquid-lx) * 4px) calc(var(--liquid-ly) * 4px) 8px 1px rgba(255, 255, 255, 0.07)",
|
|
293
|
+
"--liquid-shadow-regular": "0 6px 12px -6px rgba(16, 15, 12, 0.16), 0 2px 4px rgba(16, 15, 12, 0.08)",
|
|
294
|
+
"--liquid-shadow-clear": "0 3px 8px -4px rgba(16, 15, 12, 0.16), 0 1px 3px rgba(16, 15, 12, 0.08)",
|
|
295
|
+
"--liquid-glare": "rgba(255, 255, 255, 0.35)"
|
|
238
296
|
}
|
|
239
297
|
}
|
|
240
298
|
},
|
|
241
299
|
"counts": {
|
|
242
|
-
"components":
|
|
243
|
-
"blocks": 42
|
|
300
|
+
"components": 126,
|
|
301
|
+
"blocks": 42,
|
|
302
|
+
"utilities": 6
|
|
244
303
|
},
|
|
245
304
|
"components": [
|
|
246
305
|
{
|
|
@@ -248,8 +307,7 @@
|
|
|
248
307
|
"kind": "component",
|
|
249
308
|
"category": "Composite",
|
|
250
309
|
"import": "@sakaniui/react",
|
|
251
|
-
"
|
|
252
|
-
"summary": "Collapsible content sections. Matches Figma \"Accordion Item\" set (Closed|Open) plus the \"Accordion\" wrapper component.",
|
|
310
|
+
"summary": "Collapsible content sections.",
|
|
253
311
|
"props": [
|
|
254
312
|
{
|
|
255
313
|
"name": "className",
|
|
@@ -260,15 +318,16 @@
|
|
|
260
318
|
"contract": {
|
|
261
319
|
"requiredProps": [],
|
|
262
320
|
"requiresAccessibleName": false
|
|
263
|
-
}
|
|
321
|
+
},
|
|
322
|
+
"since": "0.1.0",
|
|
323
|
+
"example": "import { Accordion } from '@sakaniui/react';\n\n<Accordion>Label</Accordion>"
|
|
264
324
|
},
|
|
265
325
|
{
|
|
266
326
|
"name": "AccordionItem",
|
|
267
327
|
"kind": "component",
|
|
268
328
|
"category": "Composite",
|
|
269
329
|
"import": "@sakaniui/react",
|
|
270
|
-
"
|
|
271
|
-
"summary": "Collapsible content sections. Matches Figma \"Accordion Item\" set (Closed|Open) plus the \"Accordion\" wrapper component.",
|
|
330
|
+
"summary": "One collapsible item of an Accordion; `open` / `defaultOpen` control it.",
|
|
272
331
|
"props": [
|
|
273
332
|
{
|
|
274
333
|
"name": "title",
|
|
@@ -285,7 +344,7 @@
|
|
|
285
344
|
"name": "defaultOpen",
|
|
286
345
|
"type": "boolean",
|
|
287
346
|
"required": false,
|
|
288
|
-
"default":
|
|
347
|
+
"default": false,
|
|
289
348
|
"description": "Uncontrolled initial open state."
|
|
290
349
|
},
|
|
291
350
|
{
|
|
@@ -299,15 +358,16 @@
|
|
|
299
358
|
"title"
|
|
300
359
|
],
|
|
301
360
|
"requiresAccessibleName": false
|
|
302
|
-
}
|
|
361
|
+
},
|
|
362
|
+
"since": "0.1.0",
|
|
363
|
+
"example": "import { AccordionItem } from '@sakaniui/react';\n\n<AccordionItem title=\"Title\">Label</AccordionItem>"
|
|
303
364
|
},
|
|
304
365
|
{
|
|
305
366
|
"name": "ActivityFeed",
|
|
306
367
|
"kind": "component",
|
|
307
368
|
"category": "Application",
|
|
308
369
|
"import": "@sakaniui/react",
|
|
309
|
-
"
|
|
310
|
-
"summary": "Timeline of recent activity. Matches Figma \"Activity Feed\": Style: Default — icon-in-circle rail with a connector stub between dots, content wraps onto multiple lines if long.",
|
|
370
|
+
"summary": "Timeline of recent activity.",
|
|
311
371
|
"props": [
|
|
312
372
|
{
|
|
313
373
|
"name": "items",
|
|
@@ -335,28 +395,30 @@
|
|
|
335
395
|
"items"
|
|
336
396
|
],
|
|
337
397
|
"requiresAccessibleName": false
|
|
338
|
-
}
|
|
398
|
+
},
|
|
399
|
+
"since": "0.1.0",
|
|
400
|
+
"example": "import { ActivityFeed } from '@sakaniui/react';\n\n<ActivityFeed items={[{ actor: \"Actor\", description: \"Description\", timestamp: \"2 min ago\" }]} />"
|
|
339
401
|
},
|
|
340
402
|
{
|
|
341
403
|
"name": "ActivityFeedHighlight",
|
|
342
404
|
"kind": "component",
|
|
343
405
|
"category": "Application",
|
|
344
406
|
"import": "@sakaniui/react",
|
|
345
|
-
"
|
|
346
|
-
"summary": "Timeline of recent activity. Matches Figma \"Activity Feed\": Style: Default — icon-in-circle rail with a connector stub between dots, content wraps onto multiple lines if long.",
|
|
407
|
+
"summary": "Emphasised inline text (a name, a file, a page) inside an ActivityFeed item description.",
|
|
347
408
|
"props": [],
|
|
348
409
|
"contract": {
|
|
349
410
|
"requiredProps": [],
|
|
350
411
|
"requiresAccessibleName": false
|
|
351
|
-
}
|
|
412
|
+
},
|
|
413
|
+
"since": "0.1.0",
|
|
414
|
+
"example": "import { ActivityFeedHighlight } from '@sakaniui/react';\n\n<ActivityFeedHighlight>Label</ActivityFeedHighlight>"
|
|
352
415
|
},
|
|
353
416
|
{
|
|
354
417
|
"name": "Alert",
|
|
355
418
|
"kind": "component",
|
|
356
419
|
"category": "Composite",
|
|
357
420
|
"import": "@sakaniui/react",
|
|
358
|
-
"
|
|
359
|
-
"summary": "Inline status message. Matches Figma \"Alert\" set: Color (Info|Success|Warning|Danger|Neutral), Title/Description toggles.",
|
|
421
|
+
"summary": "Inline status message.",
|
|
360
422
|
"props": [
|
|
361
423
|
{
|
|
362
424
|
"name": "color",
|
|
@@ -369,8 +431,7 @@
|
|
|
369
431
|
"danger",
|
|
370
432
|
"neutral"
|
|
371
433
|
],
|
|
372
|
-
"default": "info"
|
|
373
|
-
"description": "Figma Color axis. Defaults to \"info\"."
|
|
434
|
+
"default": "info"
|
|
374
435
|
},
|
|
375
436
|
{
|
|
376
437
|
"name": "title",
|
|
@@ -397,14 +458,15 @@
|
|
|
397
458
|
"contract": {
|
|
398
459
|
"requiredProps": [],
|
|
399
460
|
"requiresAccessibleName": false
|
|
400
|
-
}
|
|
461
|
+
},
|
|
462
|
+
"since": "0.1.0",
|
|
463
|
+
"example": "import { Alert } from '@sakaniui/react';\n\n<Alert />"
|
|
401
464
|
},
|
|
402
465
|
{
|
|
403
466
|
"name": "Announcement",
|
|
404
467
|
"kind": "component",
|
|
405
468
|
"category": "Application",
|
|
406
469
|
"import": "@sakaniui/react",
|
|
407
|
-
"source": "src/components/ApplicationComponents/Announcement/Announcement.tsx",
|
|
408
470
|
"summary": "Full-width announcement bar.",
|
|
409
471
|
"props": [
|
|
410
472
|
{
|
|
@@ -455,15 +517,16 @@
|
|
|
455
517
|
"message"
|
|
456
518
|
],
|
|
457
519
|
"requiresAccessibleName": false
|
|
458
|
-
}
|
|
520
|
+
},
|
|
521
|
+
"since": "0.1.0",
|
|
522
|
+
"example": "import { Announcement } from '@sakaniui/react';\n\n<Announcement message=\"Message\" />"
|
|
459
523
|
},
|
|
460
524
|
{
|
|
461
525
|
"name": "AreaChart",
|
|
462
526
|
"kind": "component",
|
|
463
527
|
"category": "Charts",
|
|
464
528
|
"import": "@sakaniui/react",
|
|
465
|
-
"
|
|
466
|
-
"summary": "Recharts wrapper styled with Sakani chart tokens. Matches Figma \"Area Chart\" (type: Default | Stacked | Step | Linear, each with an optional second series).",
|
|
529
|
+
"summary": "An area chart (Recharts) styled with Sakani chart tokens; `variant` is \"default\", \"stacked\", \"step\" or \"linear\".",
|
|
467
530
|
"props": [
|
|
468
531
|
{
|
|
469
532
|
"name": "data",
|
|
@@ -517,14 +580,15 @@
|
|
|
517
580
|
"data"
|
|
518
581
|
],
|
|
519
582
|
"requiresAccessibleName": false
|
|
520
|
-
}
|
|
583
|
+
},
|
|
584
|
+
"since": "0.1.0",
|
|
585
|
+
"example": "import { AreaChart } from '@sakaniui/react';\n\n<AreaChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
521
586
|
},
|
|
522
587
|
{
|
|
523
588
|
"name": "Avatar",
|
|
524
589
|
"kind": "component",
|
|
525
590
|
"category": "Core",
|
|
526
591
|
"import": "@sakaniui/react",
|
|
527
|
-
"source": "src/components/Avatar/Avatar.tsx",
|
|
528
592
|
"summary": "User/entity avatar.",
|
|
529
593
|
"props": [
|
|
530
594
|
{
|
|
@@ -537,8 +601,7 @@
|
|
|
537
601
|
"lg",
|
|
538
602
|
"xl"
|
|
539
603
|
],
|
|
540
|
-
"default": "md"
|
|
541
|
-
"description": "Figma AV axis. Defaults to \"md\"."
|
|
604
|
+
"default": "md"
|
|
542
605
|
},
|
|
543
606
|
{
|
|
544
607
|
"name": "src",
|
|
@@ -574,15 +637,16 @@
|
|
|
574
637
|
"contract": {
|
|
575
638
|
"requiredProps": [],
|
|
576
639
|
"requiresAccessibleName": false
|
|
577
|
-
}
|
|
640
|
+
},
|
|
641
|
+
"since": "0.1.0",
|
|
642
|
+
"example": "import { Avatar } from '@sakaniui/react';\n\n<Avatar />"
|
|
578
643
|
},
|
|
579
644
|
{
|
|
580
645
|
"name": "AvatarGroup",
|
|
581
646
|
"kind": "component",
|
|
582
647
|
"category": "Core",
|
|
583
648
|
"import": "@sakaniui/react",
|
|
584
|
-
"
|
|
585
|
-
"summary": "Overlapping stack of avatars with an optional \"+N\" overflow chip. Figma \"Avatar Group\" is a single composed component; this renders a flexible group from Avatar children with a ring gap so they read as a stack.",
|
|
649
|
+
"summary": "Overlapping stack of avatars with an optional \"+N\" overflow chip.",
|
|
586
650
|
"props": [
|
|
587
651
|
{
|
|
588
652
|
"name": "size",
|
|
@@ -601,7 +665,7 @@
|
|
|
601
665
|
"name": "max",
|
|
602
666
|
"type": "number",
|
|
603
667
|
"required": false,
|
|
604
|
-
"default":
|
|
668
|
+
"default": 4,
|
|
605
669
|
"description": "Max avatars to show before collapsing into a +N chip."
|
|
606
670
|
},
|
|
607
671
|
{
|
|
@@ -621,15 +685,16 @@
|
|
|
621
685
|
"avatars"
|
|
622
686
|
],
|
|
623
687
|
"requiresAccessibleName": false
|
|
624
|
-
}
|
|
688
|
+
},
|
|
689
|
+
"since": "0.1.0",
|
|
690
|
+
"example": "import { AvatarGroup } from '@sakaniui/react';\n\n<AvatarGroup avatars={[{}]} />"
|
|
625
691
|
},
|
|
626
692
|
{
|
|
627
693
|
"name": "AvatarUpload",
|
|
628
694
|
"kind": "component",
|
|
629
695
|
"category": "Application",
|
|
630
696
|
"import": "@sakaniui/react",
|
|
631
|
-
"
|
|
632
|
-
"summary": "Profile photo picker. Matches Figma \"Avatar Upload\": Orientation: Vertical — big (64px) avatar with a camera badge overlapping its bottom-right corner, text or a \"Change photo\" link below.",
|
|
697
|
+
"summary": "Profile photo picker.",
|
|
633
698
|
"props": [
|
|
634
699
|
{
|
|
635
700
|
"name": "src",
|
|
@@ -692,14 +757,15 @@
|
|
|
692
757
|
"contract": {
|
|
693
758
|
"requiredProps": [],
|
|
694
759
|
"requiresAccessibleName": false
|
|
695
|
-
}
|
|
760
|
+
},
|
|
761
|
+
"since": "0.1.0",
|
|
762
|
+
"example": "import { AvatarUpload } from '@sakaniui/react';\n\n<AvatarUpload />"
|
|
696
763
|
},
|
|
697
764
|
{
|
|
698
765
|
"name": "Badge",
|
|
699
766
|
"kind": "component",
|
|
700
767
|
"category": "Core",
|
|
701
768
|
"import": "@sakaniui/react",
|
|
702
|
-
"source": "src/components/Badge/Badge.tsx",
|
|
703
769
|
"summary": "Compact label for status, category, or count.",
|
|
704
770
|
"props": [
|
|
705
771
|
{
|
|
@@ -715,7 +781,7 @@
|
|
|
715
781
|
"accent"
|
|
716
782
|
],
|
|
717
783
|
"default": "neutral",
|
|
718
|
-
"description": "Color scheme.
|
|
784
|
+
"description": "Color scheme. Defaults to \"neutral\"."
|
|
719
785
|
},
|
|
720
786
|
{
|
|
721
787
|
"name": "emphasis",
|
|
@@ -726,7 +792,7 @@
|
|
|
726
792
|
"solid"
|
|
727
793
|
],
|
|
728
794
|
"default": "subtle",
|
|
729
|
-
"description": "Fill strength.
|
|
795
|
+
"description": "Fill strength. Defaults to \"subtle\"."
|
|
730
796
|
},
|
|
731
797
|
{
|
|
732
798
|
"name": "leftIcon",
|
|
@@ -747,14 +813,15 @@
|
|
|
747
813
|
"contract": {
|
|
748
814
|
"requiredProps": [],
|
|
749
815
|
"requiresAccessibleName": false
|
|
750
|
-
}
|
|
816
|
+
},
|
|
817
|
+
"since": "0.1.0",
|
|
818
|
+
"example": "import { Badge } from '@sakaniui/react';\n\n<Badge>Label</Badge>"
|
|
751
819
|
},
|
|
752
820
|
{
|
|
753
821
|
"name": "Balance",
|
|
754
822
|
"kind": "component",
|
|
755
823
|
"category": "Application",
|
|
756
824
|
"import": "@sakaniui/react",
|
|
757
|
-
"source": "src/components/ApplicationComponents/Balance/Balance.tsx",
|
|
758
825
|
"summary": "Prominent balance display.",
|
|
759
826
|
"props": [
|
|
760
827
|
{
|
|
@@ -801,15 +868,16 @@
|
|
|
801
868
|
"value"
|
|
802
869
|
],
|
|
803
870
|
"requiresAccessibleName": false
|
|
804
|
-
}
|
|
871
|
+
},
|
|
872
|
+
"since": "0.1.0",
|
|
873
|
+
"example": "import { Balance } from '@sakaniui/react';\n\n<Balance value=\"Value\" />"
|
|
805
874
|
},
|
|
806
875
|
{
|
|
807
876
|
"name": "BarChart",
|
|
808
877
|
"kind": "component",
|
|
809
878
|
"category": "Charts",
|
|
810
879
|
"import": "@sakaniui/react",
|
|
811
|
-
"
|
|
812
|
-
"summary": "Recharts wrapper styled with Sakani chart tokens.",
|
|
880
|
+
"summary": "A bar chart (Recharts) styled with Sakani chart tokens; `variant` is \"default\", \"horizontal\", \"stacked\", \"active\", \"multiple\" or \"negative\".",
|
|
813
881
|
"props": [
|
|
814
882
|
{
|
|
815
883
|
"name": "data",
|
|
@@ -860,15 +928,16 @@
|
|
|
860
928
|
"data"
|
|
861
929
|
],
|
|
862
930
|
"requiresAccessibleName": false
|
|
863
|
-
}
|
|
931
|
+
},
|
|
932
|
+
"since": "0.1.0",
|
|
933
|
+
"example": "import { BarChart } from '@sakaniui/react';\n\n<BarChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
864
934
|
},
|
|
865
935
|
{
|
|
866
936
|
"name": "BlogBlockquote",
|
|
867
937
|
"kind": "component",
|
|
868
938
|
"category": "Marketing",
|
|
869
939
|
"import": "@sakaniui/react",
|
|
870
|
-
"
|
|
871
|
-
"summary": "Matches Figma \"Blog Blockquote\" (Marketing primitives set, first of the category): a left vertical Divider rail + quote text.",
|
|
940
|
+
"summary": "A blog pull quote: a vertical rail beside the quote text. Passing `author` switches to the attributed card style.",
|
|
872
941
|
"props": [
|
|
873
942
|
{
|
|
874
943
|
"name": "quote",
|
|
@@ -892,15 +961,16 @@
|
|
|
892
961
|
"quote"
|
|
893
962
|
],
|
|
894
963
|
"requiresAccessibleName": false
|
|
895
|
-
}
|
|
964
|
+
},
|
|
965
|
+
"since": "0.3.0",
|
|
966
|
+
"example": "import { BlogBlockquote } from '@sakaniui/react';\n\n<BlogBlockquote quote=\"Quote\" />"
|
|
896
967
|
},
|
|
897
968
|
{
|
|
898
969
|
"name": "BlogFeatureText",
|
|
899
970
|
"kind": "component",
|
|
900
971
|
"category": "Marketing",
|
|
901
972
|
"import": "@sakaniui/react",
|
|
902
|
-
"
|
|
903
|
-
"summary": "Matches Figma \"Blog Feature Text\" (Marketing primitives set): a brand-colored accent rule + a pulled-out heading/md line of body copy.",
|
|
973
|
+
"summary": "A pulled-out line of blog body copy beside a brand-coloured accent rule; `align` is \"left\" (vertical rule) or \"top\".",
|
|
904
974
|
"props": [
|
|
905
975
|
{
|
|
906
976
|
"name": "text",
|
|
@@ -915,8 +985,7 @@
|
|
|
915
985
|
"left",
|
|
916
986
|
"top"
|
|
917
987
|
],
|
|
918
|
-
"default": "left"
|
|
919
|
-
"description": "Figma Align axis. Defaults to \"left\"."
|
|
988
|
+
"default": "left"
|
|
920
989
|
},
|
|
921
990
|
{
|
|
922
991
|
"name": "className",
|
|
@@ -929,15 +998,16 @@
|
|
|
929
998
|
"text"
|
|
930
999
|
],
|
|
931
1000
|
"requiresAccessibleName": false
|
|
932
|
-
}
|
|
1001
|
+
},
|
|
1002
|
+
"since": "0.3.0",
|
|
1003
|
+
"example": "import { BlogFeatureText } from '@sakaniui/react';\n\n<BlogFeatureText text=\"Text\" />"
|
|
933
1004
|
},
|
|
934
1005
|
{
|
|
935
1006
|
"name": "BlogImage",
|
|
936
1007
|
"kind": "component",
|
|
937
1008
|
"category": "Marketing",
|
|
938
1009
|
"import": "@sakaniui/react",
|
|
939
|
-
"
|
|
940
|
-
"summary": "Matches Figma \"Blog Image\" (Marketing primitives set, 4 previews: Style (Default/With Caption) x Size (Large/Small)).",
|
|
1010
|
+
"summary": "A blog article image with an optional caption (shown when `caption` is set); `size` is \"large\" or \"small\".",
|
|
941
1011
|
"props": [
|
|
942
1012
|
{
|
|
943
1013
|
"name": "src",
|
|
@@ -958,8 +1028,7 @@
|
|
|
958
1028
|
"large",
|
|
959
1029
|
"small"
|
|
960
1030
|
],
|
|
961
|
-
"default": "large"
|
|
962
|
-
"description": "Figma Size axis. Defaults to \"large\"."
|
|
1031
|
+
"default": "large"
|
|
963
1032
|
},
|
|
964
1033
|
{
|
|
965
1034
|
"name": "caption",
|
|
@@ -978,15 +1047,16 @@
|
|
|
978
1047
|
"src"
|
|
979
1048
|
],
|
|
980
1049
|
"requiresAccessibleName": false
|
|
981
|
-
}
|
|
1050
|
+
},
|
|
1051
|
+
"since": "0.3.0",
|
|
1052
|
+
"example": "import { BlogImage } from '@sakaniui/react';\n\n<BlogImage src=\"/images/example.jpg\" />"
|
|
982
1053
|
},
|
|
983
1054
|
{
|
|
984
1055
|
"name": "BlogListingCard",
|
|
985
1056
|
"kind": "component",
|
|
986
1057
|
"category": "Marketing",
|
|
987
1058
|
"import": "@sakaniui/react",
|
|
988
|
-
"
|
|
989
|
-
"summary": "Matches Figma \"Blog Listing Card\" (Marketing primitives set, 2 style previews: Default, Horizontal).",
|
|
1059
|
+
"summary": "A blog post card with image, category, read time, title, excerpt and author. `layout` is \"default\" (image on top) or \"horizontal\" (square image on the left).",
|
|
990
1060
|
"props": [
|
|
991
1061
|
{
|
|
992
1062
|
"name": "image",
|
|
@@ -1032,8 +1102,7 @@
|
|
|
1032
1102
|
"default",
|
|
1033
1103
|
"horizontal"
|
|
1034
1104
|
],
|
|
1035
|
-
"default": "default"
|
|
1036
|
-
"description": "Figma Style axis. Defaults to \"default\"."
|
|
1105
|
+
"default": "default"
|
|
1037
1106
|
},
|
|
1038
1107
|
{
|
|
1039
1108
|
"name": "className",
|
|
@@ -1051,15 +1120,16 @@
|
|
|
1051
1120
|
"author"
|
|
1052
1121
|
],
|
|
1053
1122
|
"requiresAccessibleName": false
|
|
1054
|
-
}
|
|
1123
|
+
},
|
|
1124
|
+
"since": "0.3.0",
|
|
1125
|
+
"example": "import { BlogListingCard } from '@sakaniui/react';\n\n<BlogListingCard image=\"/images/example.jpg\" category=\"Category\" readTime=\"5 min read\" title=\"Title\" excerpt=\"Excerpt\" author={{ name: \"Name\", date: \"Oct 21, 2026\" }} />"
|
|
1055
1126
|
},
|
|
1056
1127
|
{
|
|
1057
1128
|
"name": "BlogListingFeaturedCard",
|
|
1058
1129
|
"kind": "component",
|
|
1059
1130
|
"category": "Marketing",
|
|
1060
1131
|
"import": "@sakaniui/react",
|
|
1061
|
-
"
|
|
1062
|
-
"summary": "Matches Figma \"Blog Listing Featured Card\" (Marketing primitives set, 2 orientations: Horizontal, Vertical).",
|
|
1132
|
+
"summary": "A featured blog post card with image, optional badge, title, excerpt, author and a call to action; `orientation` is \"vertical\" or \"horizontal\".",
|
|
1063
1133
|
"props": [
|
|
1064
1134
|
{
|
|
1065
1135
|
"name": "image",
|
|
@@ -1075,8 +1145,7 @@
|
|
|
1075
1145
|
"name": "badgeLabel",
|
|
1076
1146
|
"type": "string",
|
|
1077
1147
|
"required": false,
|
|
1078
|
-
"default": "Featured"
|
|
1079
|
-
"description": "Defaults to \"Featured\", matching this card's own purpose."
|
|
1148
|
+
"default": "Featured"
|
|
1080
1149
|
},
|
|
1081
1150
|
{
|
|
1082
1151
|
"name": "title",
|
|
@@ -1112,8 +1181,7 @@
|
|
|
1112
1181
|
"vertical",
|
|
1113
1182
|
"horizontal"
|
|
1114
1183
|
],
|
|
1115
|
-
"default": "horizontal"
|
|
1116
|
-
"description": "Figma Orientation axis. Defaults to \"horizontal\"."
|
|
1184
|
+
"default": "horizontal"
|
|
1117
1185
|
},
|
|
1118
1186
|
{
|
|
1119
1187
|
"name": "className",
|
|
@@ -1129,14 +1197,15 @@
|
|
|
1129
1197
|
"author"
|
|
1130
1198
|
],
|
|
1131
1199
|
"requiresAccessibleName": false
|
|
1132
|
-
}
|
|
1200
|
+
},
|
|
1201
|
+
"since": "0.3.0",
|
|
1202
|
+
"example": "import { BlogListingFeaturedCard } from '@sakaniui/react';\n\n<BlogListingFeaturedCard image=\"/images/example.jpg\" title=\"Title\" excerpt=\"Excerpt\" author={{ name: \"Name\", date: \"Oct 21, 2026\" }} />"
|
|
1133
1203
|
},
|
|
1134
1204
|
{
|
|
1135
1205
|
"name": "BoardCard",
|
|
1136
1206
|
"kind": "component",
|
|
1137
1207
|
"category": "Composite",
|
|
1138
1208
|
"import": "@sakaniui/react",
|
|
1139
|
-
"source": "src/components/BoardCard/BoardCard.tsx",
|
|
1140
1209
|
"summary": "Flexible board/list card.",
|
|
1141
1210
|
"props": [
|
|
1142
1211
|
{
|
|
@@ -1226,14 +1295,15 @@
|
|
|
1226
1295
|
"title"
|
|
1227
1296
|
],
|
|
1228
1297
|
"requiresAccessibleName": false
|
|
1229
|
-
}
|
|
1298
|
+
},
|
|
1299
|
+
"since": "0.1.0",
|
|
1300
|
+
"example": "import { BoardCard } from '@sakaniui/react';\n\n<BoardCard title=\"Title\" />"
|
|
1230
1301
|
},
|
|
1231
1302
|
{
|
|
1232
1303
|
"name": "BoardColumn",
|
|
1233
1304
|
"kind": "component",
|
|
1234
1305
|
"category": "Composite",
|
|
1235
1306
|
"import": "@sakaniui/react",
|
|
1236
|
-
"source": "src/components/BoardColumn/BoardColumn.tsx",
|
|
1237
1307
|
"summary": "One Kanban column.",
|
|
1238
1308
|
"props": [
|
|
1239
1309
|
{
|
|
@@ -1292,15 +1362,16 @@
|
|
|
1292
1362
|
"title"
|
|
1293
1363
|
],
|
|
1294
1364
|
"requiresAccessibleName": false
|
|
1295
|
-
}
|
|
1365
|
+
},
|
|
1366
|
+
"since": "0.1.0",
|
|
1367
|
+
"example": "import { BoardColumn } from '@sakaniui/react';\n\n<BoardColumn title=\"Title\" />"
|
|
1296
1368
|
},
|
|
1297
1369
|
{
|
|
1298
1370
|
"name": "Breadcrumb",
|
|
1299
1371
|
"kind": "component",
|
|
1300
1372
|
"category": "Composite",
|
|
1301
1373
|
"import": "@sakaniui/react",
|
|
1302
|
-
"
|
|
1303
|
-
"summary": "Navigation trail. Matches Figma \"Breadcrumb\" set (1–6 crumbs) x Type: Text — plain inline links, gap 6, chevron 16px. crumbs fg/muted, current crumb fg/default + medium, underline on link hover.",
|
|
1374
|
+
"summary": "A navigation trail of one to six crumbs; `variant` is \"text\" (inline links) or \"button\".",
|
|
1304
1375
|
"props": [
|
|
1305
1376
|
{
|
|
1306
1377
|
"name": "items",
|
|
@@ -1328,15 +1399,16 @@
|
|
|
1328
1399
|
"items"
|
|
1329
1400
|
],
|
|
1330
1401
|
"requiresAccessibleName": false
|
|
1331
|
-
}
|
|
1402
|
+
},
|
|
1403
|
+
"since": "0.1.0",
|
|
1404
|
+
"example": "import { Breadcrumb } from '@sakaniui/react';\n\n<Breadcrumb items={[{ label: \"Label\" }]} />"
|
|
1332
1405
|
},
|
|
1333
1406
|
{
|
|
1334
1407
|
"name": "Button",
|
|
1335
1408
|
"kind": "component",
|
|
1336
1409
|
"category": "Core",
|
|
1337
1410
|
"import": "@sakaniui/react",
|
|
1338
|
-
"
|
|
1339
|
-
"summary": "The primary action primitive for the SakaniUI. Maps 1:1 with the Figma \"Button\" component set (45 variants).",
|
|
1411
|
+
"summary": "The primary action primitive for the SakaniUI.",
|
|
1340
1412
|
"props": [
|
|
1341
1413
|
{
|
|
1342
1414
|
"name": "variant",
|
|
@@ -1380,7 +1452,7 @@
|
|
|
1380
1452
|
"name": "loading",
|
|
1381
1453
|
"type": "boolean",
|
|
1382
1454
|
"required": false,
|
|
1383
|
-
"default":
|
|
1455
|
+
"default": false,
|
|
1384
1456
|
"description": "Render the button in a loading state (disables interaction)."
|
|
1385
1457
|
},
|
|
1386
1458
|
{
|
|
@@ -1395,14 +1467,15 @@
|
|
|
1395
1467
|
"children"
|
|
1396
1468
|
],
|
|
1397
1469
|
"requiresAccessibleName": false
|
|
1398
|
-
}
|
|
1470
|
+
},
|
|
1471
|
+
"since": "0.1.0",
|
|
1472
|
+
"example": "import { Button } from '@sakaniui/react';\n\n<Button>Label</Button>"
|
|
1399
1473
|
},
|
|
1400
1474
|
{
|
|
1401
1475
|
"name": "Calendar",
|
|
1402
1476
|
"kind": "component",
|
|
1403
1477
|
"category": "Composite",
|
|
1404
1478
|
"import": "@sakaniui/react",
|
|
1405
|
-
"source": "src/components/Calendar/Calendar.tsx",
|
|
1406
1479
|
"summary": "Month calendar / date picker.",
|
|
1407
1480
|
"props": [
|
|
1408
1481
|
{
|
|
@@ -1446,8 +1519,7 @@
|
|
|
1446
1519
|
"arrows",
|
|
1447
1520
|
"dropdowns"
|
|
1448
1521
|
],
|
|
1449
|
-
"default": "arrows"
|
|
1450
|
-
"description": "Header style (Figma: Calendar Header Type). Defaults to \"arrows\"."
|
|
1522
|
+
"default": "arrows"
|
|
1451
1523
|
},
|
|
1452
1524
|
{
|
|
1453
1525
|
"name": "defaultMonth",
|
|
@@ -1474,15 +1546,16 @@
|
|
|
1474
1546
|
"contract": {
|
|
1475
1547
|
"requiredProps": [],
|
|
1476
1548
|
"requiresAccessibleName": false
|
|
1477
|
-
}
|
|
1549
|
+
},
|
|
1550
|
+
"since": "0.1.0",
|
|
1551
|
+
"example": "import { Calendar } from '@sakaniui/react';\n\n<Calendar />"
|
|
1478
1552
|
},
|
|
1479
1553
|
{
|
|
1480
1554
|
"name": "Card",
|
|
1481
1555
|
"kind": "component",
|
|
1482
1556
|
"category": "Composite",
|
|
1483
1557
|
"import": "@sakaniui/react",
|
|
1484
|
-
"
|
|
1485
|
-
"summary": "Container surface. Matches Figma \"Card\" set: Variant (Default|Hover|Two buttons|Three buttons), Title/Description/CTA toggles.",
|
|
1558
|
+
"summary": "Container surface.",
|
|
1486
1559
|
"props": [
|
|
1487
1560
|
{
|
|
1488
1561
|
"name": "title",
|
|
@@ -1498,19 +1571,17 @@
|
|
|
1498
1571
|
"name": "actions",
|
|
1499
1572
|
"type": "ReactNode",
|
|
1500
1573
|
"required": false,
|
|
1501
|
-
"description": "
|
|
1574
|
+
"description": "Hugs left."
|
|
1502
1575
|
},
|
|
1503
1576
|
{
|
|
1504
1577
|
"name": "leadingAction",
|
|
1505
1578
|
"type": "ReactNode",
|
|
1506
|
-
"required": false
|
|
1507
|
-
"description": "A standalone action opposite `actions` (maps to Figma's Three buttons Ghost button) -- providing it switches the footer to space-between."
|
|
1579
|
+
"required": false
|
|
1508
1580
|
},
|
|
1509
1581
|
{
|
|
1510
1582
|
"name": "interactive",
|
|
1511
1583
|
"type": "boolean",
|
|
1512
|
-
"required": false
|
|
1513
|
-
"description": "Enables the hover elevation (Figma: Hover)."
|
|
1584
|
+
"required": false
|
|
1514
1585
|
},
|
|
1515
1586
|
{
|
|
1516
1587
|
"name": "className",
|
|
@@ -1521,15 +1592,16 @@
|
|
|
1521
1592
|
"contract": {
|
|
1522
1593
|
"requiredProps": [],
|
|
1523
1594
|
"requiresAccessibleName": false
|
|
1524
|
-
}
|
|
1595
|
+
},
|
|
1596
|
+
"since": "0.1.0",
|
|
1597
|
+
"example": "import { Card } from '@sakaniui/react';\n\n<Card />"
|
|
1525
1598
|
},
|
|
1526
1599
|
{
|
|
1527
1600
|
"name": "CardMetaItem",
|
|
1528
1601
|
"kind": "component",
|
|
1529
1602
|
"category": "Composite",
|
|
1530
1603
|
"import": "@sakaniui/react",
|
|
1531
|
-
"
|
|
1532
|
-
"summary": "Icon + value pair used in the BoardCard footer (due date, comments, attachments, links, subtask progress). Matches the Figma \"Card Meta Item\" component, whose `icon` (instance-swap) and `label` (text) map to these props.",
|
|
1604
|
+
"summary": "Icon + value pair used in the BoardCard footer (due date, comments, attachments, links, subtask progress).",
|
|
1533
1605
|
"props": [
|
|
1534
1606
|
{
|
|
1535
1607
|
"name": "icon",
|
|
@@ -1548,15 +1620,16 @@
|
|
|
1548
1620
|
"icon"
|
|
1549
1621
|
],
|
|
1550
1622
|
"requiresAccessibleName": false
|
|
1551
|
-
}
|
|
1623
|
+
},
|
|
1624
|
+
"since": "0.1.0",
|
|
1625
|
+
"example": "import { CardMetaItem } from '@sakaniui/react';\n\n<CardMetaItem icon=\"Icon\">Label</CardMetaItem>"
|
|
1552
1626
|
},
|
|
1553
1627
|
{
|
|
1554
1628
|
"name": "CartItem",
|
|
1555
1629
|
"kind": "component",
|
|
1556
1630
|
"category": "E-commerce",
|
|
1557
1631
|
"import": "@sakaniui/react",
|
|
1558
|
-
"
|
|
1559
|
-
"summary": "Matches Figma \"Cart Item\" (E-commerce set): thumbnail + name/variant/ quantity stepper -> price + remove button, right-aligned.",
|
|
1632
|
+
"summary": "A cart row: thumbnail, name and variant, quantity stepper, price and a remove button. Passing `compareAtPrice` shows the sale treatment.",
|
|
1560
1633
|
"props": [
|
|
1561
1634
|
{
|
|
1562
1635
|
"name": "image",
|
|
@@ -1604,7 +1677,7 @@
|
|
|
1604
1677
|
"name": "minQuantity",
|
|
1605
1678
|
"type": "number",
|
|
1606
1679
|
"required": false,
|
|
1607
|
-
"default":
|
|
1680
|
+
"default": 1
|
|
1608
1681
|
},
|
|
1609
1682
|
{
|
|
1610
1683
|
"name": "maxQuantity",
|
|
@@ -1625,8 +1698,7 @@
|
|
|
1625
1698
|
{
|
|
1626
1699
|
"name": "formatPrice",
|
|
1627
1700
|
"type": "((amount: number) => string)",
|
|
1628
|
-
"required": false
|
|
1629
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
1701
|
+
"required": false
|
|
1630
1702
|
},
|
|
1631
1703
|
{
|
|
1632
1704
|
"name": "className",
|
|
@@ -1642,15 +1714,16 @@
|
|
|
1642
1714
|
"quantity"
|
|
1643
1715
|
],
|
|
1644
1716
|
"requiresAccessibleName": false
|
|
1645
|
-
}
|
|
1717
|
+
},
|
|
1718
|
+
"since": "0.3.0",
|
|
1719
|
+
"example": "import { CartItem } from '@sakaniui/react';\n\n<CartItem image=\"/images/example.jpg\" name=\"Name\" price={49} quantity={1} />"
|
|
1646
1720
|
},
|
|
1647
1721
|
{
|
|
1648
1722
|
"name": "ChatComposer",
|
|
1649
1723
|
"kind": "component",
|
|
1650
1724
|
"category": "Chat",
|
|
1651
1725
|
"import": "@sakaniui/react",
|
|
1652
|
-
"
|
|
1653
|
-
"summary": "",
|
|
1726
|
+
"summary": "Message input for a chat thread: attach, text input, emoji and send, with default, typing, uploading and disabled states.",
|
|
1654
1727
|
"props": [
|
|
1655
1728
|
{
|
|
1656
1729
|
"name": "state",
|
|
@@ -1694,7 +1767,7 @@
|
|
|
1694
1767
|
"name": "uploadProgress",
|
|
1695
1768
|
"type": "number",
|
|
1696
1769
|
"required": false,
|
|
1697
|
-
"default":
|
|
1770
|
+
"default": 0
|
|
1698
1771
|
},
|
|
1699
1772
|
{
|
|
1700
1773
|
"name": "onCancelUpload",
|
|
@@ -1710,15 +1783,16 @@
|
|
|
1710
1783
|
"contract": {
|
|
1711
1784
|
"requiredProps": [],
|
|
1712
1785
|
"requiresAccessibleName": false
|
|
1713
|
-
}
|
|
1786
|
+
},
|
|
1787
|
+
"since": "0.1.0",
|
|
1788
|
+
"example": "import { ChatComposer } from '@sakaniui/react';\n\n<ChatComposer />"
|
|
1714
1789
|
},
|
|
1715
1790
|
{
|
|
1716
1791
|
"name": "Checkbox",
|
|
1717
1792
|
"kind": "component",
|
|
1718
1793
|
"category": "Forms",
|
|
1719
1794
|
"import": "@sakaniui/react",
|
|
1720
|
-
"
|
|
1721
|
-
"summary": "Matches Figma \"Checkbox\" set: Unchecked | Checked | Indeterminate | Disabled, with Title/Description toggles (label + description props).",
|
|
1795
|
+
"summary": "Checkbox with optional label and description; supports checked, indeterminate and disabled states.",
|
|
1722
1796
|
"props": [
|
|
1723
1797
|
{
|
|
1724
1798
|
"name": "label",
|
|
@@ -1740,15 +1814,16 @@
|
|
|
1740
1814
|
"contract": {
|
|
1741
1815
|
"requiredProps": [],
|
|
1742
1816
|
"requiresAccessibleName": false
|
|
1743
|
-
}
|
|
1817
|
+
},
|
|
1818
|
+
"since": "0.1.0",
|
|
1819
|
+
"example": "import { Checkbox } from '@sakaniui/react';\n\n<Checkbox />"
|
|
1744
1820
|
},
|
|
1745
1821
|
{
|
|
1746
1822
|
"name": "CheckoutSteps",
|
|
1747
1823
|
"kind": "component",
|
|
1748
1824
|
"category": "E-commerce",
|
|
1749
1825
|
"import": "@sakaniui/react",
|
|
1750
|
-
"
|
|
1751
|
-
"summary": "Matches Figma \"Checkout Steps\" (E-commerce set): a fixed-width horizontal breadcrumb of 24px circles joined by fixed 32px connector lines -- Cart / Shipping / Payment / Confirmation by default.",
|
|
1826
|
+
"summary": "A horizontal checkout breadcrumb of numbered steps (Cart, Shipping, Payment, Confirmation by default). `currentStep` marks earlier steps completed and later ones upcoming.",
|
|
1752
1827
|
"props": [
|
|
1753
1828
|
{
|
|
1754
1829
|
"name": "steps",
|
|
@@ -1773,14 +1848,15 @@
|
|
|
1773
1848
|
"currentStep"
|
|
1774
1849
|
],
|
|
1775
1850
|
"requiresAccessibleName": false
|
|
1776
|
-
}
|
|
1851
|
+
},
|
|
1852
|
+
"since": "0.3.0",
|
|
1853
|
+
"example": "import { CheckoutSteps } from '@sakaniui/react';\n\n<CheckoutSteps currentStep={1} />"
|
|
1777
1854
|
},
|
|
1778
1855
|
{
|
|
1779
1856
|
"name": "CodeSnippet",
|
|
1780
1857
|
"kind": "component",
|
|
1781
1858
|
"category": "Application",
|
|
1782
1859
|
"import": "@sakaniui/react",
|
|
1783
|
-
"source": "src/components/ApplicationComponents/CodeSnippet/CodeSnippet.tsx",
|
|
1784
1860
|
"summary": "Code block.",
|
|
1785
1861
|
"props": [
|
|
1786
1862
|
{
|
|
@@ -1803,7 +1879,7 @@
|
|
|
1803
1879
|
"name": "editable",
|
|
1804
1880
|
"type": "boolean",
|
|
1805
1881
|
"required": false,
|
|
1806
|
-
"default":
|
|
1882
|
+
"default": false,
|
|
1807
1883
|
"description": "Lets people type directly into the block. Defaults to false (read-only)."
|
|
1808
1884
|
},
|
|
1809
1885
|
{
|
|
@@ -1829,15 +1905,16 @@
|
|
|
1829
1905
|
"code"
|
|
1830
1906
|
],
|
|
1831
1907
|
"requiresAccessibleName": false
|
|
1832
|
-
}
|
|
1908
|
+
},
|
|
1909
|
+
"since": "0.1.0",
|
|
1910
|
+
"example": "import { CodeSnippet } from '@sakaniui/react';\n\n<CodeSnippet code=\"Code\" />"
|
|
1833
1911
|
},
|
|
1834
1912
|
{
|
|
1835
1913
|
"name": "ColorSwatch",
|
|
1836
1914
|
"kind": "component",
|
|
1837
1915
|
"category": "E-commerce",
|
|
1838
1916
|
"import": "@sakaniui/react",
|
|
1839
|
-
"
|
|
1840
|
-
"summary": "Matches Figma \"Color Swatch\" (E-commerce set): a 24px filled circle in a 32px hit target.",
|
|
1917
|
+
"summary": "A round colour choice for product variants. `selected` marks the chosen one; `available={false}` marks it out of stock.",
|
|
1841
1918
|
"props": [
|
|
1842
1919
|
{
|
|
1843
1920
|
"name": "color",
|
|
@@ -1855,13 +1932,13 @@
|
|
|
1855
1932
|
"name": "selected",
|
|
1856
1933
|
"type": "boolean",
|
|
1857
1934
|
"required": false,
|
|
1858
|
-
"default":
|
|
1935
|
+
"default": false
|
|
1859
1936
|
},
|
|
1860
1937
|
{
|
|
1861
1938
|
"name": "available",
|
|
1862
1939
|
"type": "boolean",
|
|
1863
1940
|
"required": false,
|
|
1864
|
-
"default":
|
|
1941
|
+
"default": true,
|
|
1865
1942
|
"description": "Defaults to true. False renders a disabled, unclickable swatch."
|
|
1866
1943
|
},
|
|
1867
1944
|
{
|
|
@@ -1881,14 +1958,15 @@
|
|
|
1881
1958
|
"label"
|
|
1882
1959
|
],
|
|
1883
1960
|
"requiresAccessibleName": false
|
|
1884
|
-
}
|
|
1961
|
+
},
|
|
1962
|
+
"since": "0.3.0",
|
|
1963
|
+
"example": "import { ColorSwatch } from '@sakaniui/react';\n\n<ColorSwatch color=\"var(--color-accent-default)\" label=\"Label\" />"
|
|
1885
1964
|
},
|
|
1886
1965
|
{
|
|
1887
1966
|
"name": "Combobox",
|
|
1888
1967
|
"kind": "component",
|
|
1889
1968
|
"category": "Composite",
|
|
1890
1969
|
"import": "@sakaniui/react",
|
|
1891
|
-
"source": "src/components/Combobox/Combobox.tsx",
|
|
1892
1970
|
"summary": "Searchable select with single or multi-select.",
|
|
1893
1971
|
"props": [
|
|
1894
1972
|
{
|
|
@@ -1946,8 +2024,7 @@
|
|
|
1946
2024
|
{
|
|
1947
2025
|
"name": "loading",
|
|
1948
2026
|
"type": "boolean",
|
|
1949
|
-
"required": false
|
|
1950
|
-
"description": "Shows the panel's loading state (Figma: Panel State=Loading)."
|
|
2027
|
+
"required": false
|
|
1951
2028
|
},
|
|
1952
2029
|
{
|
|
1953
2030
|
"name": "value",
|
|
@@ -1971,14 +2048,15 @@
|
|
|
1971
2048
|
"options"
|
|
1972
2049
|
],
|
|
1973
2050
|
"requiresAccessibleName": false
|
|
1974
|
-
}
|
|
2051
|
+
},
|
|
2052
|
+
"since": "0.1.0",
|
|
2053
|
+
"example": "import { Combobox } from '@sakaniui/react';\n\n<Combobox options={[{ value: \"Value\", label: \"Label\" }]} />"
|
|
1975
2054
|
},
|
|
1976
2055
|
{
|
|
1977
2056
|
"name": "ConversationItem",
|
|
1978
2057
|
"kind": "component",
|
|
1979
2058
|
"category": "Chat",
|
|
1980
2059
|
"import": "@sakaniui/react",
|
|
1981
|
-
"source": "src/components/ConversationItem/ConversationItem.tsx",
|
|
1982
2060
|
"summary": "One row in a chat conversation list.",
|
|
1983
2061
|
"props": [
|
|
1984
2062
|
{
|
|
@@ -2040,14 +2118,15 @@
|
|
|
2040
2118
|
"name"
|
|
2041
2119
|
],
|
|
2042
2120
|
"requiresAccessibleName": false
|
|
2043
|
-
}
|
|
2121
|
+
},
|
|
2122
|
+
"since": "0.1.0",
|
|
2123
|
+
"example": "import { ConversationItem } from '@sakaniui/react';\n\n<ConversationItem avatar=\"/images/example.jpg\" name=\"Name\" />"
|
|
2044
2124
|
},
|
|
2045
2125
|
{
|
|
2046
2126
|
"name": "Divider",
|
|
2047
2127
|
"kind": "component",
|
|
2048
2128
|
"category": "Core",
|
|
2049
2129
|
"import": "@sakaniui/react",
|
|
2050
|
-
"source": "src/components/Divider/Divider.tsx",
|
|
2051
2130
|
"summary": "Visual separator. Horizontal (default) or vertical. Optional label sits centred in the line — common for \"or\" dividers in auth forms.",
|
|
2052
2131
|
"props": [
|
|
2053
2132
|
{
|
|
@@ -2076,15 +2155,16 @@
|
|
|
2076
2155
|
"contract": {
|
|
2077
2156
|
"requiredProps": [],
|
|
2078
2157
|
"requiresAccessibleName": false
|
|
2079
|
-
}
|
|
2158
|
+
},
|
|
2159
|
+
"since": "0.1.0",
|
|
2160
|
+
"example": "import { Divider } from '@sakaniui/react';\n\n<Divider />"
|
|
2080
2161
|
},
|
|
2081
2162
|
{
|
|
2082
2163
|
"name": "DonutChart",
|
|
2083
2164
|
"kind": "component",
|
|
2084
2165
|
"category": "Charts",
|
|
2085
2166
|
"import": "@sakaniui/react",
|
|
2086
|
-
"
|
|
2087
|
-
"summary": "Recharts wrapper styled with Sakani chart tokens. Matches Figma \"Donut Chart\" (Size sm|md|lg|xl, with center value + caption). Segments cycle through the 5 chart tokens so they re-theme in dark mode.",
|
|
2167
|
+
"summary": "A donut chart (Recharts) styled with Sakani chart tokens, with an optional centre value and caption.",
|
|
2088
2168
|
"props": [
|
|
2089
2169
|
{
|
|
2090
2170
|
"name": "data",
|
|
@@ -2106,14 +2186,12 @@
|
|
|
2106
2186
|
{
|
|
2107
2187
|
"name": "centerValue",
|
|
2108
2188
|
"type": "string",
|
|
2109
|
-
"required": false
|
|
2110
|
-
"description": "Big number shown in the center (Figma: value)."
|
|
2189
|
+
"required": false
|
|
2111
2190
|
},
|
|
2112
2191
|
{
|
|
2113
2192
|
"name": "centerCaption",
|
|
2114
2193
|
"type": "string",
|
|
2115
|
-
"required": false
|
|
2116
|
-
"description": "Small caption under the center value (Figma: caption)."
|
|
2194
|
+
"required": false
|
|
2117
2195
|
},
|
|
2118
2196
|
{
|
|
2119
2197
|
"name": "height",
|
|
@@ -2132,14 +2210,15 @@
|
|
|
2132
2210
|
"data"
|
|
2133
2211
|
],
|
|
2134
2212
|
"requiresAccessibleName": false
|
|
2135
|
-
}
|
|
2213
|
+
},
|
|
2214
|
+
"since": "0.1.0",
|
|
2215
|
+
"example": "import { DonutChart } from '@sakaniui/react';\n\n<DonutChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
2136
2216
|
},
|
|
2137
2217
|
{
|
|
2138
2218
|
"name": "EmptyState",
|
|
2139
2219
|
"kind": "component",
|
|
2140
2220
|
"category": "Data",
|
|
2141
2221
|
"import": "@sakaniui/react",
|
|
2142
|
-
"source": "src/components/EmptyState/EmptyState.tsx",
|
|
2143
2222
|
"summary": "Reusable empty/error content for tables, lists, and cards.",
|
|
2144
2223
|
"props": [
|
|
2145
2224
|
{
|
|
@@ -2189,14 +2268,15 @@
|
|
|
2189
2268
|
"contract": {
|
|
2190
2269
|
"requiredProps": [],
|
|
2191
2270
|
"requiresAccessibleName": false
|
|
2192
|
-
}
|
|
2271
|
+
},
|
|
2272
|
+
"since": "0.1.0",
|
|
2273
|
+
"example": "import { EmptyState } from '@sakaniui/react';\n\n<EmptyState />"
|
|
2193
2274
|
},
|
|
2194
2275
|
{
|
|
2195
2276
|
"name": "Expenses",
|
|
2196
2277
|
"kind": "component",
|
|
2197
2278
|
"category": "Application",
|
|
2198
2279
|
"import": "@sakaniui/react",
|
|
2199
|
-
"source": "src/components/ApplicationComponents/Expenses/Expenses.tsx",
|
|
2200
2280
|
"summary": "Spending-by-category list.",
|
|
2201
2281
|
"props": [
|
|
2202
2282
|
{
|
|
@@ -2218,7 +2298,6 @@
|
|
|
2218
2298
|
"name": "formatAmount",
|
|
2219
2299
|
"type": "((amount: number) => string)",
|
|
2220
2300
|
"required": false,
|
|
2221
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })",
|
|
2222
2301
|
"description": "Defaults to USD currency, 2 decimals (e.g. \"$840.20\")."
|
|
2223
2302
|
},
|
|
2224
2303
|
{
|
|
@@ -2232,35 +2311,37 @@
|
|
|
2232
2311
|
"categories"
|
|
2233
2312
|
],
|
|
2234
2313
|
"requiresAccessibleName": false
|
|
2235
|
-
}
|
|
2314
|
+
},
|
|
2315
|
+
"since": "0.1.0",
|
|
2316
|
+
"example": "import { Expenses } from '@sakaniui/react';\n\n<Expenses categories={[{ icon: \"Icon\", label: \"Label\", amount: 49 }]} />"
|
|
2236
2317
|
},
|
|
2237
2318
|
{
|
|
2238
2319
|
"name": "FacebookIcon",
|
|
2239
2320
|
"kind": "component",
|
|
2240
2321
|
"category": "Marketing",
|
|
2241
2322
|
"import": "@sakaniui/react",
|
|
2242
|
-
"
|
|
2243
|
-
"summary": "tsx).",
|
|
2323
|
+
"summary": "Facebook glyph drawn in currentColor, for the `socialLinks` of TeamCard.",
|
|
2244
2324
|
"props": [
|
|
2245
2325
|
{
|
|
2246
2326
|
"name": "size",
|
|
2247
2327
|
"type": "number",
|
|
2248
2328
|
"required": false,
|
|
2249
|
-
"default":
|
|
2329
|
+
"default": 16
|
|
2250
2330
|
}
|
|
2251
2331
|
],
|
|
2252
2332
|
"contract": {
|
|
2253
2333
|
"requiredProps": [],
|
|
2254
2334
|
"requiresAccessibleName": false
|
|
2255
|
-
}
|
|
2335
|
+
},
|
|
2336
|
+
"since": "0.3.0",
|
|
2337
|
+
"example": "import { FacebookIcon } from '@sakaniui/react';\n\n<FacebookIcon />"
|
|
2256
2338
|
},
|
|
2257
2339
|
{
|
|
2258
2340
|
"name": "FeaturedIcon",
|
|
2259
2341
|
"kind": "component",
|
|
2260
2342
|
"category": "Marketing",
|
|
2261
2343
|
"import": "@sakaniui/react",
|
|
2262
|
-
"
|
|
2263
|
-
"summary": "Matches Figma \"Featured Icon\" (Marketing primitives set): a rounded icon chip used to headline a feature/benefit callout.",
|
|
2344
|
+
"summary": "A rounded icon chip to headline a feature or benefit, in sm, md or lg and subtle, solid, outline or light styles.",
|
|
2264
2345
|
"props": [
|
|
2265
2346
|
{
|
|
2266
2347
|
"name": "icon",
|
|
@@ -2276,8 +2357,7 @@
|
|
|
2276
2357
|
"md",
|
|
2277
2358
|
"lg"
|
|
2278
2359
|
],
|
|
2279
|
-
"default": "md"
|
|
2280
|
-
"description": "Figma Size axis. Defaults to \"md\"."
|
|
2360
|
+
"default": "md"
|
|
2281
2361
|
},
|
|
2282
2362
|
{
|
|
2283
2363
|
"name": "variant",
|
|
@@ -2289,8 +2369,7 @@
|
|
|
2289
2369
|
"outline",
|
|
2290
2370
|
"light"
|
|
2291
2371
|
],
|
|
2292
|
-
"default": "light"
|
|
2293
|
-
"description": "Figma Style axis (renamed to avoid colliding with the DOM `style` prop). Defaults to \"light\"."
|
|
2372
|
+
"default": "light"
|
|
2294
2373
|
},
|
|
2295
2374
|
{
|
|
2296
2375
|
"name": "className",
|
|
@@ -2303,15 +2382,16 @@
|
|
|
2303
2382
|
"icon"
|
|
2304
2383
|
],
|
|
2305
2384
|
"requiresAccessibleName": false
|
|
2306
|
-
}
|
|
2385
|
+
},
|
|
2386
|
+
"since": "0.3.0",
|
|
2387
|
+
"example": "import { FeaturedIcon } from '@sakaniui/react';\n\n<FeaturedIcon icon=\"Icon\" />"
|
|
2307
2388
|
},
|
|
2308
2389
|
{
|
|
2309
2390
|
"name": "FileUpload",
|
|
2310
2391
|
"kind": "component",
|
|
2311
2392
|
"category": "Composite",
|
|
2312
2393
|
"import": "@sakaniui/react",
|
|
2313
|
-
"
|
|
2314
|
-
"summary": "Dropzone for file uploads. Matches Figma \"File Upload\": dashed dropzone (radius-md), upload icon, \"Click to upload or drag and drop\" (label/md fg/default) + hint (body/xs fg/muted), plus an uploaded-file row.",
|
|
2394
|
+
"summary": "Dropzone for file uploads.",
|
|
2315
2395
|
"props": [
|
|
2316
2396
|
{
|
|
2317
2397
|
"name": "accept",
|
|
@@ -2347,14 +2427,15 @@
|
|
|
2347
2427
|
"contract": {
|
|
2348
2428
|
"requiredProps": [],
|
|
2349
2429
|
"requiresAccessibleName": false
|
|
2350
|
-
}
|
|
2430
|
+
},
|
|
2431
|
+
"since": "0.1.0",
|
|
2432
|
+
"example": "import { FileUpload } from '@sakaniui/react';\n\n<FileUpload />"
|
|
2351
2433
|
},
|
|
2352
2434
|
{
|
|
2353
2435
|
"name": "FilterChip",
|
|
2354
2436
|
"kind": "component",
|
|
2355
2437
|
"category": "Data",
|
|
2356
2438
|
"import": "@sakaniui/react",
|
|
2357
|
-
"source": "src/components/FilterChip/FilterChip.tsx",
|
|
2358
2439
|
"summary": "Toolbar filter pill.",
|
|
2359
2440
|
"props": [
|
|
2360
2441
|
{
|
|
@@ -2389,15 +2470,16 @@
|
|
|
2389
2470
|
"contract": {
|
|
2390
2471
|
"requiredProps": [],
|
|
2391
2472
|
"requiresAccessibleName": false
|
|
2392
|
-
}
|
|
2473
|
+
},
|
|
2474
|
+
"since": "0.1.0",
|
|
2475
|
+
"example": "import { FilterChip } from '@sakaniui/react';\n\n<FilterChip>Label</FilterChip>"
|
|
2393
2476
|
},
|
|
2394
2477
|
{
|
|
2395
2478
|
"name": "FirstPageHeading",
|
|
2396
2479
|
"kind": "component",
|
|
2397
2480
|
"category": "Marketing",
|
|
2398
2481
|
"import": "@sakaniui/react",
|
|
2399
|
-
"
|
|
2400
|
-
"summary": "Matches Figma \"First Page Heading\" (Marketing primitives set, 16 previews: Align (Center/Left) x CTAs/Badge/Avatars (each True/False)). Align stays a real, explicit prop (Figma's own axis) -- a genuine layout choice.",
|
|
2482
|
+
"summary": "The heading that opens a page: title and description with optional badge, call-to-action buttons and avatars; `align` is \"left\" or \"center\".",
|
|
2401
2483
|
"props": [
|
|
2402
2484
|
{
|
|
2403
2485
|
"name": "title",
|
|
@@ -2445,8 +2527,7 @@
|
|
|
2445
2527
|
"left",
|
|
2446
2528
|
"center"
|
|
2447
2529
|
],
|
|
2448
|
-
"default": "center"
|
|
2449
|
-
"description": "Figma Align axis. Defaults to \"center\"."
|
|
2530
|
+
"default": "center"
|
|
2450
2531
|
},
|
|
2451
2532
|
{
|
|
2452
2533
|
"name": "className",
|
|
@@ -2459,15 +2540,16 @@
|
|
|
2459
2540
|
"title"
|
|
2460
2541
|
],
|
|
2461
2542
|
"requiresAccessibleName": false
|
|
2462
|
-
}
|
|
2543
|
+
},
|
|
2544
|
+
"since": "0.3.0",
|
|
2545
|
+
"example": "import { FirstPageHeading } from '@sakaniui/react';\n\n<FirstPageHeading title=\"Title\" />"
|
|
2463
2546
|
},
|
|
2464
2547
|
{
|
|
2465
2548
|
"name": "FunnelChart",
|
|
2466
2549
|
"kind": "component",
|
|
2467
2550
|
"category": "Charts",
|
|
2468
2551
|
"import": "@sakaniui/react",
|
|
2469
|
-
"
|
|
2470
|
-
"summary": "Matches Figma's new \"Other charts\" set (\"Funnel chart\" / \"Funnel chart hover\") exactly: stages run left to right (not top to bottom), narrowing via smooth curved transitions rather than straight diagonal edges.",
|
|
2552
|
+
"summary": "A funnel chart whose stages run left to right and narrow through curved transitions, in sizes sm to xl.",
|
|
2471
2553
|
"props": [
|
|
2472
2554
|
{
|
|
2473
2555
|
"name": "data",
|
|
@@ -2497,35 +2579,37 @@
|
|
|
2497
2579
|
"data"
|
|
2498
2580
|
],
|
|
2499
2581
|
"requiresAccessibleName": false
|
|
2500
|
-
}
|
|
2582
|
+
},
|
|
2583
|
+
"since": "0.1.0",
|
|
2584
|
+
"example": "import { FunnelChart } from '@sakaniui/react';\n\n<FunnelChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
2501
2585
|
},
|
|
2502
2586
|
{
|
|
2503
2587
|
"name": "GithubIcon",
|
|
2504
2588
|
"kind": "component",
|
|
2505
2589
|
"category": "Marketing",
|
|
2506
2590
|
"import": "@sakaniui/react",
|
|
2507
|
-
"
|
|
2508
|
-
"summary": "svg) -- lucide-react ships no brand/logo icons in the version this library uses.",
|
|
2591
|
+
"summary": "GitHub brand mark drawn in currentColor, for social links.",
|
|
2509
2592
|
"props": [
|
|
2510
2593
|
{
|
|
2511
2594
|
"name": "size",
|
|
2512
2595
|
"type": "number",
|
|
2513
2596
|
"required": false,
|
|
2514
|
-
"default":
|
|
2597
|
+
"default": 16
|
|
2515
2598
|
}
|
|
2516
2599
|
],
|
|
2517
2600
|
"contract": {
|
|
2518
2601
|
"requiredProps": [],
|
|
2519
2602
|
"requiresAccessibleName": false
|
|
2520
|
-
}
|
|
2603
|
+
},
|
|
2604
|
+
"since": "0.3.0",
|
|
2605
|
+
"example": "import { GithubIcon } from '@sakaniui/react';\n\n<GithubIcon />"
|
|
2521
2606
|
},
|
|
2522
2607
|
{
|
|
2523
2608
|
"name": "HeatmapChart",
|
|
2524
2609
|
"kind": "component",
|
|
2525
2610
|
"category": "Charts",
|
|
2526
2611
|
"import": "@sakaniui/react",
|
|
2527
|
-
"
|
|
2528
|
-
"summary": "Matches Figma's new \"Other charts\" set (\"Heatmap chart\" / \"Heatmap chart hover\").",
|
|
2612
|
+
"summary": "A heatmap: a grid of coloured cells with optional row and column labels, in sizes sm to xl.",
|
|
2529
2613
|
"props": [
|
|
2530
2614
|
{
|
|
2531
2615
|
"name": "data",
|
|
@@ -2547,8 +2631,7 @@
|
|
|
2547
2631
|
"name": "valueLabel",
|
|
2548
2632
|
"type": "string",
|
|
2549
2633
|
"required": false,
|
|
2550
|
-
"default": "Value"
|
|
2551
|
-
"description": "Legend label for the tooltip's value row (Figma: \"Revenue\")."
|
|
2634
|
+
"default": "Value"
|
|
2552
2635
|
},
|
|
2553
2636
|
{
|
|
2554
2637
|
"name": "size",
|
|
@@ -2573,15 +2656,30 @@
|
|
|
2573
2656
|
"data"
|
|
2574
2657
|
],
|
|
2575
2658
|
"requiresAccessibleName": false
|
|
2576
|
-
}
|
|
2659
|
+
},
|
|
2660
|
+
"since": "0.1.0",
|
|
2661
|
+
"example": "import { HeatmapChart } from '@sakaniui/react';\n\n<HeatmapChart data={[[1]]} />"
|
|
2662
|
+
},
|
|
2663
|
+
{
|
|
2664
|
+
"name": "HoverGroup",
|
|
2665
|
+
"kind": "component",
|
|
2666
|
+
"category": "Utilities",
|
|
2667
|
+
"import": "@sakaniui/react",
|
|
2668
|
+
"summary": "Flowing hover highlight: one element that glides between the items of a group instead of each item fading its own background in and out.",
|
|
2669
|
+
"props": [],
|
|
2670
|
+
"contract": {
|
|
2671
|
+
"requiredProps": [],
|
|
2672
|
+
"requiresAccessibleName": false
|
|
2673
|
+
},
|
|
2674
|
+
"since": "0.3.21",
|
|
2675
|
+
"example": "import { HoverGroup } from '@sakaniui/react';\n\n<HoverGroup />"
|
|
2577
2676
|
},
|
|
2578
2677
|
{
|
|
2579
2678
|
"name": "IconButton",
|
|
2580
2679
|
"kind": "component",
|
|
2581
2680
|
"category": "Core",
|
|
2582
2681
|
"import": "@sakaniui/react",
|
|
2583
|
-
"
|
|
2584
|
-
"summary": "Icon-only button. Matches Figma \"Icon Button\": variant (IB axis): primary | secondary | outline | ghost | destructive size: sm (32) | md (40) | lg (48) — square, radius-sm State handled via CSS (:hover, :disabled).",
|
|
2682
|
+
"summary": "Icon-only button.",
|
|
2585
2683
|
"props": [
|
|
2586
2684
|
{
|
|
2587
2685
|
"name": "icon",
|
|
@@ -2626,14 +2724,15 @@
|
|
|
2626
2724
|
"aria-label"
|
|
2627
2725
|
],
|
|
2628
2726
|
"requiresAccessibleName": true
|
|
2629
|
-
}
|
|
2727
|
+
},
|
|
2728
|
+
"since": "0.1.0",
|
|
2729
|
+
"example": "import { IconButton } from '@sakaniui/react';\nimport { IconStar } from '@sakaniui/react/icons';\n\n<IconButton icon={IconStar} aria-label=\"Describe the action\" />"
|
|
2630
2730
|
},
|
|
2631
2731
|
{
|
|
2632
2732
|
"name": "InlineHint",
|
|
2633
2733
|
"kind": "component",
|
|
2634
2734
|
"category": "Application",
|
|
2635
2735
|
"import": "@sakaniui/react",
|
|
2636
|
-
"source": "src/components/ApplicationComponents/InlineHint/InlineHint.tsx",
|
|
2637
2736
|
"summary": "Small inline helper text with a colored accent bar.",
|
|
2638
2737
|
"props": [
|
|
2639
2738
|
{
|
|
@@ -2662,27 +2761,26 @@
|
|
|
2662
2761
|
"message"
|
|
2663
2762
|
],
|
|
2664
2763
|
"requiresAccessibleName": false
|
|
2665
|
-
}
|
|
2764
|
+
},
|
|
2765
|
+
"since": "0.1.0",
|
|
2766
|
+
"example": "import { InlineHint } from '@sakaniui/react';\n\n<InlineHint message=\"Message\" />"
|
|
2666
2767
|
},
|
|
2667
2768
|
{
|
|
2668
2769
|
"name": "Input",
|
|
2669
2770
|
"kind": "component",
|
|
2670
2771
|
"category": "Forms",
|
|
2671
2772
|
"import": "@sakaniui/react",
|
|
2672
|
-
"source": "src/components/Input/Input.tsx",
|
|
2673
2773
|
"summary": "Text input with optional label (Title), help text (Description), and leading/trailing icons.",
|
|
2674
2774
|
"props": [
|
|
2675
2775
|
{
|
|
2676
2776
|
"name": "label",
|
|
2677
2777
|
"type": "string",
|
|
2678
|
-
"required": false
|
|
2679
|
-
"description": "Field label (Figma: Title)."
|
|
2778
|
+
"required": false
|
|
2680
2779
|
},
|
|
2681
2780
|
{
|
|
2682
2781
|
"name": "description",
|
|
2683
2782
|
"type": "string",
|
|
2684
|
-
"required": false
|
|
2685
|
-
"description": "Help text under the field (Figma: Description)."
|
|
2783
|
+
"required": false
|
|
2686
2784
|
},
|
|
2687
2785
|
{
|
|
2688
2786
|
"name": "error",
|
|
@@ -2699,8 +2797,7 @@
|
|
|
2699
2797
|
"md",
|
|
2700
2798
|
"lg"
|
|
2701
2799
|
],
|
|
2702
|
-
"default": "md"
|
|
2703
|
-
"description": "Figma Size axis. Defaults to \"md\"."
|
|
2800
|
+
"default": "md"
|
|
2704
2801
|
},
|
|
2705
2802
|
{
|
|
2706
2803
|
"name": "unstyled",
|
|
@@ -2722,35 +2819,37 @@
|
|
|
2722
2819
|
"contract": {
|
|
2723
2820
|
"requiredProps": [],
|
|
2724
2821
|
"requiresAccessibleName": false
|
|
2725
|
-
}
|
|
2822
|
+
},
|
|
2823
|
+
"since": "0.1.0",
|
|
2824
|
+
"example": "import { Input } from '@sakaniui/react';\n\n<Input />"
|
|
2726
2825
|
},
|
|
2727
2826
|
{
|
|
2728
2827
|
"name": "InstagramIcon",
|
|
2729
2828
|
"kind": "component",
|
|
2730
2829
|
"category": "Marketing",
|
|
2731
2830
|
"import": "@sakaniui/react",
|
|
2732
|
-
"
|
|
2733
|
-
"summary": "tsx).",
|
|
2831
|
+
"summary": "Instagram glyph drawn in currentColor, for the `socialLinks` of TeamCard.",
|
|
2734
2832
|
"props": [
|
|
2735
2833
|
{
|
|
2736
2834
|
"name": "size",
|
|
2737
2835
|
"type": "number",
|
|
2738
2836
|
"required": false,
|
|
2739
|
-
"default":
|
|
2837
|
+
"default": 16
|
|
2740
2838
|
}
|
|
2741
2839
|
],
|
|
2742
2840
|
"contract": {
|
|
2743
2841
|
"requiredProps": [],
|
|
2744
2842
|
"requiresAccessibleName": false
|
|
2745
|
-
}
|
|
2843
|
+
},
|
|
2844
|
+
"since": "0.3.0",
|
|
2845
|
+
"example": "import { InstagramIcon } from '@sakaniui/react';\n\n<InstagramIcon />"
|
|
2746
2846
|
},
|
|
2747
2847
|
{
|
|
2748
2848
|
"name": "JobListing",
|
|
2749
2849
|
"kind": "component",
|
|
2750
2850
|
"category": "Marketing",
|
|
2751
2851
|
"import": "@sakaniui/react",
|
|
2752
|
-
"
|
|
2753
|
-
"summary": "Matches Figma \"Job Listing\" (Marketing primitives set, 2 styles: Card, Row).",
|
|
2852
|
+
"summary": "A job opening with title, description, department, employment type and location, plus an apply button. `layout` is \"row\" or \"card\".",
|
|
2754
2853
|
"props": [
|
|
2755
2854
|
{
|
|
2756
2855
|
"name": "title",
|
|
@@ -2786,7 +2885,7 @@
|
|
|
2786
2885
|
"remote"
|
|
2787
2886
|
],
|
|
2788
2887
|
"default": "remote",
|
|
2789
|
-
"description": "Drives LocationDot's color.
|
|
2888
|
+
"description": "Drives LocationDot's color."
|
|
2790
2889
|
},
|
|
2791
2890
|
{
|
|
2792
2891
|
"name": "onApply",
|
|
@@ -2807,8 +2906,7 @@
|
|
|
2807
2906
|
"row",
|
|
2808
2907
|
"card"
|
|
2809
2908
|
],
|
|
2810
|
-
"default": "card"
|
|
2811
|
-
"description": "Figma Style axis. Defaults to \"card\"."
|
|
2909
|
+
"default": "card"
|
|
2812
2910
|
},
|
|
2813
2911
|
{
|
|
2814
2912
|
"name": "className",
|
|
@@ -2825,14 +2923,15 @@
|
|
|
2825
2923
|
"location"
|
|
2826
2924
|
],
|
|
2827
2925
|
"requiresAccessibleName": false
|
|
2828
|
-
}
|
|
2926
|
+
},
|
|
2927
|
+
"since": "0.3.0",
|
|
2928
|
+
"example": "import { JobListing } from '@sakaniui/react';\n\n<JobListing title=\"Title\" description=\"Description\" department=\"Department\" employmentType=\"Employment type\" location=\"Location\" />"
|
|
2829
2929
|
},
|
|
2830
2930
|
{
|
|
2831
2931
|
"name": "Kbd",
|
|
2832
2932
|
"kind": "component",
|
|
2833
2933
|
"category": "Core",
|
|
2834
2934
|
"import": "@sakaniui/react",
|
|
2835
|
-
"source": "src/components/Kbd/Kbd.tsx",
|
|
2836
2935
|
"summary": "Keyboard shortcut display. Renders a <kbd> element styled as a key cap. Use inline inside prose or next to menu items to hint shortcuts.",
|
|
2837
2936
|
"props": [
|
|
2838
2937
|
{
|
|
@@ -2844,14 +2943,15 @@
|
|
|
2844
2943
|
"contract": {
|
|
2845
2944
|
"requiredProps": [],
|
|
2846
2945
|
"requiresAccessibleName": false
|
|
2847
|
-
}
|
|
2946
|
+
},
|
|
2947
|
+
"since": "0.1.0",
|
|
2948
|
+
"example": "import { Kbd } from '@sakaniui/react';\n\n<Kbd>Label</Kbd>"
|
|
2848
2949
|
},
|
|
2849
2950
|
{
|
|
2850
2951
|
"name": "Label",
|
|
2851
2952
|
"kind": "component",
|
|
2852
2953
|
"category": "Core",
|
|
2853
2954
|
"import": "@sakaniui/react",
|
|
2854
|
-
"source": "src/components/Label/Label.tsx",
|
|
2855
2955
|
"summary": "Form field label with optional required asterisk. Wraps a native <label> so htmlFor wiring works correctly.",
|
|
2856
2956
|
"props": [
|
|
2857
2957
|
{
|
|
@@ -2864,14 +2964,15 @@
|
|
|
2864
2964
|
"contract": {
|
|
2865
2965
|
"requiredProps": [],
|
|
2866
2966
|
"requiresAccessibleName": false
|
|
2867
|
-
}
|
|
2967
|
+
},
|
|
2968
|
+
"since": "0.1.0",
|
|
2969
|
+
"example": "import { Label } from '@sakaniui/react';\n\n<Label>Label</Label>"
|
|
2868
2970
|
},
|
|
2869
2971
|
{
|
|
2870
2972
|
"name": "LineChart",
|
|
2871
2973
|
"kind": "component",
|
|
2872
2974
|
"category": "Charts",
|
|
2873
2975
|
"import": "@sakaniui/react",
|
|
2874
|
-
"source": "src/components/LineChart/LineChart.tsx",
|
|
2875
2976
|
"summary": "Recharts wrapper styled with Sakani chart tokens.",
|
|
2876
2977
|
"props": [
|
|
2877
2978
|
{
|
|
@@ -2951,14 +3052,15 @@
|
|
|
2951
3052
|
"series"
|
|
2952
3053
|
],
|
|
2953
3054
|
"requiresAccessibleName": false
|
|
2954
|
-
}
|
|
3055
|
+
},
|
|
3056
|
+
"since": "0.1.0",
|
|
3057
|
+
"example": "import { LineChart } from '@sakaniui/react';\n\n<LineChart data={[{ name: \"Name\" }]} series={[\"Sery\"]} />"
|
|
2955
3058
|
},
|
|
2956
3059
|
{
|
|
2957
3060
|
"name": "Link",
|
|
2958
3061
|
"kind": "component",
|
|
2959
3062
|
"category": "Core",
|
|
2960
3063
|
"import": "@sakaniui/react",
|
|
2961
|
-
"source": "src/components/Link/Link.tsx",
|
|
2962
3064
|
"summary": "Inline anchor with hover/visited states and optional external icon. Use for navigation and inline references — not for page-level CTAs (use Button).",
|
|
2963
3065
|
"props": [
|
|
2964
3066
|
{
|
|
@@ -2971,35 +3073,157 @@
|
|
|
2971
3073
|
"contract": {
|
|
2972
3074
|
"requiredProps": [],
|
|
2973
3075
|
"requiresAccessibleName": false
|
|
2974
|
-
}
|
|
3076
|
+
},
|
|
3077
|
+
"since": "0.1.0",
|
|
3078
|
+
"example": "import { Link } from '@sakaniui/react';\n\n<Link>Label</Link>"
|
|
2975
3079
|
},
|
|
2976
3080
|
{
|
|
2977
3081
|
"name": "LinkedinIcon",
|
|
2978
3082
|
"kind": "component",
|
|
2979
3083
|
"category": "Marketing",
|
|
2980
3084
|
"import": "@sakaniui/react",
|
|
2981
|
-
"
|
|
2982
|
-
"summary": "tsx).",
|
|
3085
|
+
"summary": "LinkedIn glyph drawn in currentColor, for the `socialLinks` of TeamCard.",
|
|
2983
3086
|
"props": [
|
|
2984
3087
|
{
|
|
2985
3088
|
"name": "size",
|
|
2986
3089
|
"type": "number",
|
|
2987
3090
|
"required": false,
|
|
2988
|
-
"default":
|
|
3091
|
+
"default": 16
|
|
2989
3092
|
}
|
|
2990
3093
|
],
|
|
2991
3094
|
"contract": {
|
|
2992
3095
|
"requiredProps": [],
|
|
2993
3096
|
"requiresAccessibleName": false
|
|
2994
|
-
}
|
|
3097
|
+
},
|
|
3098
|
+
"since": "0.3.0",
|
|
3099
|
+
"example": "import { LinkedinIcon } from '@sakaniui/react';\n\n<LinkedinIcon />"
|
|
3100
|
+
},
|
|
3101
|
+
{
|
|
3102
|
+
"name": "LiquidBackdrop",
|
|
3103
|
+
"kind": "component",
|
|
3104
|
+
"category": "Utilities",
|
|
3105
|
+
"import": "@sakaniui/react",
|
|
3106
|
+
"summary": "The image behind the glass, shared by every LiquidGlass inside it. Pass `src`.",
|
|
3107
|
+
"props": [
|
|
3108
|
+
{
|
|
3109
|
+
"name": "src",
|
|
3110
|
+
"type": "string",
|
|
3111
|
+
"required": true,
|
|
3112
|
+
"description": "The image behind the glass, cover-fitted."
|
|
3113
|
+
},
|
|
3114
|
+
{
|
|
3115
|
+
"name": "position",
|
|
3116
|
+
"type": "string",
|
|
3117
|
+
"required": false,
|
|
3118
|
+
"default": "center",
|
|
3119
|
+
"description": "background-position of the image. Default 'center'."
|
|
3120
|
+
},
|
|
3121
|
+
{
|
|
3122
|
+
"name": "veil",
|
|
3123
|
+
"type": "string",
|
|
3124
|
+
"required": false,
|
|
3125
|
+
"description": "Any CSS color, var() included."
|
|
3126
|
+
}
|
|
3127
|
+
],
|
|
3128
|
+
"contract": {
|
|
3129
|
+
"requiredProps": [
|
|
3130
|
+
"src"
|
|
3131
|
+
],
|
|
3132
|
+
"requiresAccessibleName": false
|
|
3133
|
+
},
|
|
3134
|
+
"since": "0.4.0",
|
|
3135
|
+
"example": "import { LiquidBackdrop } from '@sakaniui/react';\n\n<LiquidBackdrop />"
|
|
3136
|
+
},
|
|
3137
|
+
{
|
|
3138
|
+
"name": "LiquidGlass",
|
|
3139
|
+
"kind": "component",
|
|
3140
|
+
"category": "Utilities",
|
|
3141
|
+
"import": "@sakaniui/react",
|
|
3142
|
+
"summary": "Apple-style liquid glass material (the Liquid surface mode): bends the backdrop at the edge with refraction, dispersion, rim light and depth. Use it inside a LiquidBackdrop when the image behind the UI is known.",
|
|
3143
|
+
"props": [
|
|
3144
|
+
{
|
|
3145
|
+
"name": "variant",
|
|
3146
|
+
"type": "\"regular\" | \"clear\"",
|
|
3147
|
+
"required": false,
|
|
3148
|
+
"values": [
|
|
3149
|
+
"regular",
|
|
3150
|
+
"clear"
|
|
3151
|
+
],
|
|
3152
|
+
"default": "regular",
|
|
3153
|
+
"description": "regular: text-safe tint (panels, sidebars, modals). clear: icons and large labels only."
|
|
3154
|
+
},
|
|
3155
|
+
{
|
|
3156
|
+
"name": "tint",
|
|
3157
|
+
"type": "\"subtle\" | \"none\" | \"auto\" | \"regular\" | \"clear\"",
|
|
3158
|
+
"required": false,
|
|
3159
|
+
"values": [
|
|
3160
|
+
"subtle",
|
|
3161
|
+
"none",
|
|
3162
|
+
"auto",
|
|
3163
|
+
"regular",
|
|
3164
|
+
"clear"
|
|
3165
|
+
],
|
|
3166
|
+
"default": "auto",
|
|
3167
|
+
"description": "How much of the backdrop shows through. Default 'auto' (follows `variant`)."
|
|
3168
|
+
},
|
|
3169
|
+
{
|
|
3170
|
+
"name": "radius",
|
|
3171
|
+
"type": "number",
|
|
3172
|
+
"required": false,
|
|
3173
|
+
"default": 20,
|
|
3174
|
+
"description": "Corner radius in px. Default 20."
|
|
3175
|
+
},
|
|
3176
|
+
{
|
|
3177
|
+
"name": "refraction",
|
|
3178
|
+
"type": "\"off\" | \"auto\"",
|
|
3179
|
+
"required": false,
|
|
3180
|
+
"values": [
|
|
3181
|
+
"off",
|
|
3182
|
+
"auto"
|
|
3183
|
+
],
|
|
3184
|
+
"default": "auto",
|
|
3185
|
+
"description": "'off' forces the frosted fallback."
|
|
3186
|
+
},
|
|
3187
|
+
{
|
|
3188
|
+
"name": "effect",
|
|
3189
|
+
"type": "Partial<LiquidGlassEffect>",
|
|
3190
|
+
"required": false,
|
|
3191
|
+
"description": "Defaults come from the variant's --liquid-* tokens."
|
|
3192
|
+
},
|
|
3193
|
+
{
|
|
3194
|
+
"name": "source",
|
|
3195
|
+
"type": "boolean",
|
|
3196
|
+
"required": false,
|
|
3197
|
+
"default": true,
|
|
3198
|
+
"description": "Inside a <LiquidBackdrop>: true (default) refracts the backdrop image; false bends whatever is painted below instead (UI under a slider knob)."
|
|
3199
|
+
},
|
|
3200
|
+
{
|
|
3201
|
+
"name": "bake",
|
|
3202
|
+
"type": "boolean | \"auto\"",
|
|
3203
|
+
"required": false,
|
|
3204
|
+
"default": "auto",
|
|
3205
|
+
"description": "'auto' (default): inside a LiquidBackdrop, lenses over 300×300 bake their glass once (fast; for surfaces that stay put). false: always live (a big lens that moves)."
|
|
3206
|
+
},
|
|
3207
|
+
{
|
|
3208
|
+
"name": "interactive",
|
|
3209
|
+
"type": "boolean",
|
|
3210
|
+
"required": false,
|
|
3211
|
+
"description": "Squish slightly when pressed (buttons, toolbar pills)."
|
|
3212
|
+
}
|
|
3213
|
+
],
|
|
3214
|
+
"contract": {
|
|
3215
|
+
"requiredProps": [],
|
|
3216
|
+
"requiresAccessibleName": false
|
|
3217
|
+
},
|
|
3218
|
+
"since": "0.4.0",
|
|
3219
|
+
"example": "import { LiquidGlass } from '@sakaniui/react';\n\n<LiquidGlass />"
|
|
2995
3220
|
},
|
|
2996
3221
|
{
|
|
2997
3222
|
"name": "List",
|
|
2998
3223
|
"kind": "component",
|
|
2999
3224
|
"category": "Marketing",
|
|
3000
3225
|
"import": "@sakaniui/react",
|
|
3001
|
-
"
|
|
3002
|
-
"summary": "Matches Figma \"List\" (Marketing primitives set, 3 styles: Check, Bullet, Arrow).",
|
|
3226
|
+
"summary": "A list of text items with a leading marker; `style` is \"check\", \"bullet\" or \"arrow\".",
|
|
3003
3227
|
"props": [
|
|
3004
3228
|
{
|
|
3005
3229
|
"name": "items",
|
|
@@ -3015,8 +3239,7 @@
|
|
|
3015
3239
|
"bullet",
|
|
3016
3240
|
"arrow"
|
|
3017
3241
|
],
|
|
3018
|
-
"default": "check"
|
|
3019
|
-
"description": "Figma Style axis. Defaults to \"check\"."
|
|
3242
|
+
"default": "check"
|
|
3020
3243
|
},
|
|
3021
3244
|
{
|
|
3022
3245
|
"name": "className",
|
|
@@ -3029,15 +3252,16 @@
|
|
|
3029
3252
|
"items"
|
|
3030
3253
|
],
|
|
3031
3254
|
"requiresAccessibleName": false
|
|
3032
|
-
}
|
|
3255
|
+
},
|
|
3256
|
+
"since": "0.3.0",
|
|
3257
|
+
"example": "import { List } from '@sakaniui/react';\n\n<List items={[\"Item\"]} />"
|
|
3033
3258
|
},
|
|
3034
3259
|
{
|
|
3035
3260
|
"name": "ListItem",
|
|
3036
3261
|
"kind": "component",
|
|
3037
3262
|
"category": "Composite",
|
|
3038
3263
|
"import": "@sakaniui/react",
|
|
3039
|
-
"
|
|
3040
|
-
"summary": "Row for lists/menus. Matches Figma \"List Item\": State (Default|Hover|Selected), Title/Description toggles.",
|
|
3264
|
+
"summary": "Row for lists/menus. Supports leading (icon/avatar) and trailing (badge/action) slots.",
|
|
3041
3265
|
"props": [
|
|
3042
3266
|
{
|
|
3043
3267
|
"name": "title",
|
|
@@ -3085,15 +3309,16 @@
|
|
|
3085
3309
|
"title"
|
|
3086
3310
|
],
|
|
3087
3311
|
"requiresAccessibleName": false
|
|
3088
|
-
}
|
|
3312
|
+
},
|
|
3313
|
+
"since": "0.1.0",
|
|
3314
|
+
"example": "import { ListItem } from '@sakaniui/react';\n\n<ListItem title=\"Title\" />"
|
|
3089
3315
|
},
|
|
3090
3316
|
{
|
|
3091
3317
|
"name": "LocationDot",
|
|
3092
3318
|
"kind": "component",
|
|
3093
3319
|
"category": "Marketing",
|
|
3094
3320
|
"import": "@sakaniui/react",
|
|
3095
|
-
"
|
|
3096
|
-
"summary": "Matches Figma \"Location Dot\" (Marketing primitives set, shared across any marketing component that shows a location -- JobListing is the first consumer).g. a real office location (\"Lagos, Nigeria\").g.",
|
|
3321
|
+
"summary": "A status dot and location label; `status` \"active\" is green (a real office), \"remote\" is gray.",
|
|
3097
3322
|
"props": [
|
|
3098
3323
|
{
|
|
3099
3324
|
"name": "location",
|
|
@@ -3108,8 +3333,7 @@
|
|
|
3108
3333
|
"active",
|
|
3109
3334
|
"remote"
|
|
3110
3335
|
],
|
|
3111
|
-
"default": "active"
|
|
3112
|
-
"description": "Figma Status axis. Defaults to \"active\"."
|
|
3336
|
+
"default": "active"
|
|
3113
3337
|
},
|
|
3114
3338
|
{
|
|
3115
3339
|
"name": "className",
|
|
@@ -3122,15 +3346,16 @@
|
|
|
3122
3346
|
"location"
|
|
3123
3347
|
],
|
|
3124
3348
|
"requiresAccessibleName": false
|
|
3125
|
-
}
|
|
3349
|
+
},
|
|
3350
|
+
"since": "0.3.0",
|
|
3351
|
+
"example": "import { LocationDot } from '@sakaniui/react';\n\n<LocationDot location=\"Location\" />"
|
|
3126
3352
|
},
|
|
3127
3353
|
{
|
|
3128
3354
|
"name": "Marquee",
|
|
3129
3355
|
"kind": "component",
|
|
3130
3356
|
"category": "Marketing",
|
|
3131
3357
|
"import": "@sakaniui/react",
|
|
3132
|
-
"
|
|
3133
|
-
"summary": "Matches Figma \"Marquee\" (Marketing primitives set, 2 content previews: Logos, Text).",
|
|
3358
|
+
"summary": "An infinitely scrolling horizontal row of items (logos or text) with adjustable `speed` and `gap`.",
|
|
3134
3359
|
"props": [
|
|
3135
3360
|
{
|
|
3136
3361
|
"name": "items",
|
|
@@ -3141,14 +3366,14 @@
|
|
|
3141
3366
|
"name": "speed",
|
|
3142
3367
|
"type": "number",
|
|
3143
3368
|
"required": false,
|
|
3144
|
-
"default":
|
|
3369
|
+
"default": 40,
|
|
3145
3370
|
"description": "Scroll speed in pixels/second at rest (pre-hover). Defaults to 40."
|
|
3146
3371
|
},
|
|
3147
3372
|
{
|
|
3148
3373
|
"name": "gap",
|
|
3149
3374
|
"type": "number",
|
|
3150
3375
|
"required": true,
|
|
3151
|
-
"description": "Gap between items, in px.
|
|
3376
|
+
"description": "Gap between items, in px."
|
|
3152
3377
|
},
|
|
3153
3378
|
{
|
|
3154
3379
|
"name": "className",
|
|
@@ -3162,15 +3387,16 @@
|
|
|
3162
3387
|
"gap"
|
|
3163
3388
|
],
|
|
3164
3389
|
"requiresAccessibleName": false
|
|
3165
|
-
}
|
|
3390
|
+
},
|
|
3391
|
+
"since": "0.3.0",
|
|
3392
|
+
"example": "import { Marquee } from '@sakaniui/react';\n\n<Marquee items={[\"Item\"]} gap={1} />"
|
|
3166
3393
|
},
|
|
3167
3394
|
{
|
|
3168
3395
|
"name": "Menu",
|
|
3169
3396
|
"kind": "component",
|
|
3170
3397
|
"category": "Overlays",
|
|
3171
3398
|
"import": "@sakaniui/react",
|
|
3172
|
-
"
|
|
3173
|
-
"summary": "Dropdown menu container. Matches the Figma \"Menu\" component: mirrors Combobox Panel exactly — radius 6, padding 4, gap 2, bg/surface, border/default, shadow/lg.",
|
|
3399
|
+
"summary": "Dropdown menu container.",
|
|
3174
3400
|
"props": [
|
|
3175
3401
|
{
|
|
3176
3402
|
"name": "aria-label",
|
|
@@ -3182,8 +3408,8 @@
|
|
|
3182
3408
|
"name": "minWidth",
|
|
3183
3409
|
"type": "number",
|
|
3184
3410
|
"required": false,
|
|
3185
|
-
"default":
|
|
3186
|
-
"description": "Minimum width in px.
|
|
3411
|
+
"default": 208,
|
|
3412
|
+
"description": "Minimum width in px."
|
|
3187
3413
|
},
|
|
3188
3414
|
{
|
|
3189
3415
|
"name": "className",
|
|
@@ -3194,27 +3420,29 @@
|
|
|
3194
3420
|
"contract": {
|
|
3195
3421
|
"requiredProps": [],
|
|
3196
3422
|
"requiresAccessibleName": false
|
|
3197
|
-
}
|
|
3423
|
+
},
|
|
3424
|
+
"since": "0.1.0",
|
|
3425
|
+
"example": "import { Menu } from '@sakaniui/react';\n\n<Menu>Label</Menu>"
|
|
3198
3426
|
},
|
|
3199
3427
|
{
|
|
3200
3428
|
"name": "MenuDivider",
|
|
3201
3429
|
"kind": "component",
|
|
3202
3430
|
"category": "Overlays",
|
|
3203
3431
|
"import": "@sakaniui/react",
|
|
3204
|
-
"
|
|
3205
|
-
"summary": "Dropdown menu container. Matches the Figma \"Menu\" component: mirrors Combobox Panel exactly — radius 6, padding 4, gap 2, bg/surface, border/default, shadow/lg.",
|
|
3432
|
+
"summary": "A divider that separates groups of items inside a Menu.",
|
|
3206
3433
|
"props": [],
|
|
3207
3434
|
"contract": {
|
|
3208
3435
|
"requiredProps": [],
|
|
3209
3436
|
"requiresAccessibleName": false
|
|
3210
|
-
}
|
|
3437
|
+
},
|
|
3438
|
+
"since": "0.1.0",
|
|
3439
|
+
"example": "import { MenuDivider } from '@sakaniui/react';\n\n<MenuDivider />"
|
|
3211
3440
|
},
|
|
3212
3441
|
{
|
|
3213
3442
|
"name": "MenuItem",
|
|
3214
3443
|
"kind": "component",
|
|
3215
3444
|
"category": "Overlays",
|
|
3216
3445
|
"import": "@sakaniui/react",
|
|
3217
|
-
"source": "src/components/MenuItem/MenuItem.tsx",
|
|
3218
3446
|
"summary": "One row of a dropdown Menu.",
|
|
3219
3447
|
"props": [
|
|
3220
3448
|
{
|
|
@@ -3228,7 +3456,7 @@
|
|
|
3228
3456
|
"checked"
|
|
3229
3457
|
],
|
|
3230
3458
|
"default": "default",
|
|
3231
|
-
"description": "Visual state.
|
|
3459
|
+
"description": "Visual state."
|
|
3232
3460
|
},
|
|
3233
3461
|
{
|
|
3234
3462
|
"name": "icon",
|
|
@@ -3256,14 +3484,15 @@
|
|
|
3256
3484
|
"contract": {
|
|
3257
3485
|
"requiredProps": [],
|
|
3258
3486
|
"requiresAccessibleName": false
|
|
3259
|
-
}
|
|
3487
|
+
},
|
|
3488
|
+
"since": "0.1.0",
|
|
3489
|
+
"example": "import { MenuItem } from '@sakaniui/react';\n\n<MenuItem>Label</MenuItem>"
|
|
3260
3490
|
},
|
|
3261
3491
|
{
|
|
3262
3492
|
"name": "MessageBubble",
|
|
3263
3493
|
"kind": "component",
|
|
3264
3494
|
"category": "Chat",
|
|
3265
3495
|
"import": "@sakaniui/react",
|
|
3266
|
-
"source": "src/components/MessageBubble/MessageBubble.tsx",
|
|
3267
3496
|
"summary": "A chat message.",
|
|
3268
3497
|
"props": [
|
|
3269
3498
|
{
|
|
@@ -3348,15 +3577,16 @@
|
|
|
3348
3577
|
"contract": {
|
|
3349
3578
|
"requiredProps": [],
|
|
3350
3579
|
"requiresAccessibleName": false
|
|
3351
|
-
}
|
|
3580
|
+
},
|
|
3581
|
+
"since": "0.1.0",
|
|
3582
|
+
"example": "import { MessageBubble } from '@sakaniui/react';\n\n<MessageBubble />"
|
|
3352
3583
|
},
|
|
3353
3584
|
{
|
|
3354
3585
|
"name": "Metric",
|
|
3355
3586
|
"kind": "component",
|
|
3356
3587
|
"category": "Marketing",
|
|
3357
3588
|
"import": "@sakaniui/react",
|
|
3358
|
-
"
|
|
3359
|
-
"summary": "Matches Figma \"Metric\" (Marketing primitives set, 2 styles: Simple, With Trend).",
|
|
3589
|
+
"summary": "A value with a label; passing `trend` adds a trend chip.",
|
|
3360
3590
|
"props": [
|
|
3361
3591
|
{
|
|
3362
3592
|
"name": "value",
|
|
@@ -3386,15 +3616,16 @@
|
|
|
3386
3616
|
"label"
|
|
3387
3617
|
],
|
|
3388
3618
|
"requiresAccessibleName": false
|
|
3389
|
-
}
|
|
3619
|
+
},
|
|
3620
|
+
"since": "0.3.0",
|
|
3621
|
+
"example": "import { Metric } from '@sakaniui/react';\n\n<Metric value=\"Value\" label=\"Label\" />"
|
|
3390
3622
|
},
|
|
3391
3623
|
{
|
|
3392
3624
|
"name": "MobileNavigationMenu",
|
|
3393
3625
|
"kind": "component",
|
|
3394
3626
|
"category": "Marketing",
|
|
3395
3627
|
"import": "@sakaniui/react",
|
|
3396
|
-
"
|
|
3397
|
-
"summary": "Matches Figma \"Mobile Navigation Menu\" (Marketing primitives set, 2 states: Closed, Open).",
|
|
3628
|
+
"summary": "A mobile navigation menu: a toggle that opens a list of links and an optional call-to-action. Controlled with `open` or uncontrolled with `defaultOpen`.",
|
|
3398
3629
|
"props": [
|
|
3399
3630
|
{
|
|
3400
3631
|
"name": "label",
|
|
@@ -3427,7 +3658,7 @@
|
|
|
3427
3658
|
"name": "defaultOpen",
|
|
3428
3659
|
"type": "boolean",
|
|
3429
3660
|
"required": false,
|
|
3430
|
-
"default":
|
|
3661
|
+
"default": false
|
|
3431
3662
|
},
|
|
3432
3663
|
{
|
|
3433
3664
|
"name": "onOpenChange",
|
|
@@ -3446,14 +3677,15 @@
|
|
|
3446
3677
|
"links"
|
|
3447
3678
|
],
|
|
3448
3679
|
"requiresAccessibleName": false
|
|
3449
|
-
}
|
|
3680
|
+
},
|
|
3681
|
+
"since": "0.3.0",
|
|
3682
|
+
"example": "import { MobileNavigationMenu } from '@sakaniui/react';\n\n<MobileNavigationMenu label=\"Label\" links={[{ label: \"Label\" }]} />"
|
|
3450
3683
|
},
|
|
3451
3684
|
{
|
|
3452
3685
|
"name": "Modal",
|
|
3453
3686
|
"kind": "component",
|
|
3454
3687
|
"category": "Application",
|
|
3455
3688
|
"import": "@sakaniui/react",
|
|
3456
|
-
"source": "src/components/ApplicationComponents/Modal/Modal.tsx",
|
|
3457
3689
|
"summary": "Confirmation dialog.",
|
|
3458
3690
|
"props": [
|
|
3459
3691
|
{
|
|
@@ -3506,8 +3738,7 @@
|
|
|
3506
3738
|
{
|
|
3507
3739
|
"name": "onCancel",
|
|
3508
3740
|
"type": "(() => void)",
|
|
3509
|
-
"required": false
|
|
3510
|
-
"description": "Defaults to `onClose`."
|
|
3741
|
+
"required": false
|
|
3511
3742
|
},
|
|
3512
3743
|
{
|
|
3513
3744
|
"name": "onConfirm",
|
|
@@ -3523,13 +3754,13 @@
|
|
|
3523
3754
|
"name": "closeOnEscape",
|
|
3524
3755
|
"type": "boolean",
|
|
3525
3756
|
"required": false,
|
|
3526
|
-
"default":
|
|
3757
|
+
"default": true
|
|
3527
3758
|
},
|
|
3528
3759
|
{
|
|
3529
3760
|
"name": "closeOnBackdropClick",
|
|
3530
3761
|
"type": "boolean",
|
|
3531
3762
|
"required": false,
|
|
3532
|
-
"default":
|
|
3763
|
+
"default": true
|
|
3533
3764
|
},
|
|
3534
3765
|
{
|
|
3535
3766
|
"name": "children",
|
|
@@ -3541,15 +3772,14 @@
|
|
|
3541
3772
|
"name": "hideHeader",
|
|
3542
3773
|
"type": "boolean",
|
|
3543
3774
|
"required": false,
|
|
3544
|
-
"default":
|
|
3545
|
-
"description": "
|
|
3775
|
+
"default": false,
|
|
3776
|
+
"description": "`title` is still required and used as the dialog's aria-label in this mode, since there's no #modal-title element to point aria-labelledby at."
|
|
3546
3777
|
},
|
|
3547
3778
|
{
|
|
3548
3779
|
"name": "hideFooterDivider",
|
|
3549
3780
|
"type": "boolean",
|
|
3550
3781
|
"required": false,
|
|
3551
|
-
"default":
|
|
3552
|
-
"description": "Hides the Divider between the body and the footer buttons (Figma's Multistep Modal has no such rule)."
|
|
3782
|
+
"default": false
|
|
3553
3783
|
},
|
|
3554
3784
|
{
|
|
3555
3785
|
"name": "footerJustify",
|
|
@@ -3560,7 +3790,7 @@
|
|
|
3560
3790
|
"between"
|
|
3561
3791
|
],
|
|
3562
3792
|
"default": "end",
|
|
3563
|
-
"description": "Footer button alignment.
|
|
3793
|
+
"description": "Footer button alignment."
|
|
3564
3794
|
},
|
|
3565
3795
|
{
|
|
3566
3796
|
"name": "className",
|
|
@@ -3575,15 +3805,16 @@
|
|
|
3575
3805
|
"title"
|
|
3576
3806
|
],
|
|
3577
3807
|
"requiresAccessibleName": false
|
|
3578
|
-
}
|
|
3808
|
+
},
|
|
3809
|
+
"since": "0.1.0",
|
|
3810
|
+
"example": "import { Modal } from '@sakaniui/react';\n\n<Modal open={true} onClose={() => {}} title=\"Title\" />"
|
|
3579
3811
|
},
|
|
3580
3812
|
{
|
|
3581
3813
|
"name": "NotificationItem",
|
|
3582
3814
|
"kind": "component",
|
|
3583
3815
|
"category": "Application",
|
|
3584
3816
|
"import": "@sakaniui/react",
|
|
3585
|
-
"
|
|
3586
|
-
"summary": "Matches Figma \"Notification Item\" (3 style previews -- Unread, Read, Dismissable -- collapsed into composable props, same judgment already applied throughout this Application set):",
|
|
3817
|
+
"summary": "A notification row with icon, title and timestamp; `read` toggles the unread style, with optional description, dismiss and action buttons.",
|
|
3587
3818
|
"props": [
|
|
3588
3819
|
{
|
|
3589
3820
|
"name": "icon",
|
|
@@ -3605,7 +3836,7 @@
|
|
|
3605
3836
|
"name": "read",
|
|
3606
3837
|
"type": "boolean",
|
|
3607
3838
|
"required": false,
|
|
3608
|
-
"default":
|
|
3839
|
+
"default": false,
|
|
3609
3840
|
"description": "Simple row only -- false (default) shows the unread background + dot."
|
|
3610
3841
|
},
|
|
3611
3842
|
{
|
|
@@ -3647,15 +3878,16 @@
|
|
|
3647
3878
|
"title"
|
|
3648
3879
|
],
|
|
3649
3880
|
"requiresAccessibleName": false
|
|
3650
|
-
}
|
|
3881
|
+
},
|
|
3882
|
+
"since": "0.1.0",
|
|
3883
|
+
"example": "import { NotificationItem } from '@sakaniui/react';\n\n<NotificationItem title=\"Title\" />"
|
|
3651
3884
|
},
|
|
3652
3885
|
{
|
|
3653
3886
|
"name": "Pagination",
|
|
3654
3887
|
"kind": "component",
|
|
3655
3888
|
"category": "Composite",
|
|
3656
3889
|
"import": "@sakaniui/react",
|
|
3657
|
-
"
|
|
3658
|
-
"summary": "Page navigation. Matches Figma \"Pagination\": prev/next arrows + numbered page buttons (32px, radius-sm, bg/surface, border/subtle), active page filled accent.",
|
|
3890
|
+
"summary": "Page navigation. Collapses long ranges with ellipses; the numbers between them come in fixed blocks the highlight moves across (see buildRange).",
|
|
3659
3891
|
"props": [
|
|
3660
3892
|
{
|
|
3661
3893
|
"name": "total",
|
|
@@ -3678,7 +3910,7 @@
|
|
|
3678
3910
|
"name": "siblings",
|
|
3679
3911
|
"type": "number",
|
|
3680
3912
|
"required": false,
|
|
3681
|
-
"default":
|
|
3913
|
+
"default": 1,
|
|
3682
3914
|
"description": "Sets how many page numbers show between the ellipses: blocks of siblings * 2 + 1 (3 by default). Total slots are siblings * 2 + 5."
|
|
3683
3915
|
},
|
|
3684
3916
|
{
|
|
@@ -3694,14 +3926,15 @@
|
|
|
3694
3926
|
"onPageChange"
|
|
3695
3927
|
],
|
|
3696
3928
|
"requiresAccessibleName": false
|
|
3697
|
-
}
|
|
3929
|
+
},
|
|
3930
|
+
"since": "0.1.0",
|
|
3931
|
+
"example": "import { Pagination } from '@sakaniui/react';\n\n<Pagination total={49} page={1} onPageChange={() => {}} />"
|
|
3698
3932
|
},
|
|
3699
3933
|
{
|
|
3700
3934
|
"name": "PieChart",
|
|
3701
3935
|
"kind": "component",
|
|
3702
3936
|
"category": "Charts",
|
|
3703
3937
|
"import": "@sakaniui/react",
|
|
3704
|
-
"source": "src/components/PieChart/PieChart.tsx",
|
|
3705
3938
|
"summary": "Recharts wrapper styled with Sakani chart tokens.",
|
|
3706
3939
|
"props": [
|
|
3707
3940
|
{
|
|
@@ -3761,15 +3994,16 @@
|
|
|
3761
3994
|
"data"
|
|
3762
3995
|
],
|
|
3763
3996
|
"requiresAccessibleName": false
|
|
3764
|
-
}
|
|
3997
|
+
},
|
|
3998
|
+
"since": "0.1.0",
|
|
3999
|
+
"example": "import { PieChart } from '@sakaniui/react';\n\n<PieChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
3765
4000
|
},
|
|
3766
4001
|
{
|
|
3767
4002
|
"name": "PlaceholderLogo",
|
|
3768
4003
|
"kind": "component",
|
|
3769
4004
|
"category": "Marketing",
|
|
3770
4005
|
"import": "@sakaniui/react",
|
|
3771
|
-
"
|
|
3772
|
-
"summary": "Matches Figma \"Placeholder Logo\" (Marketing primitives set, 3 sizes: sm 22 / md 40 / lg 46) -- a bg/surface + border/subtle + radius/lg square slot for a company/brand mark, same \"empty-state avatar\" role Avatar's own Icon type fills for a person.",
|
|
4006
|
+
"summary": "A square slot for a company or brand mark in sm, md or lg; pass `logo` to replace the default mark.",
|
|
3773
4007
|
"props": [
|
|
3774
4008
|
{
|
|
3775
4009
|
"name": "size",
|
|
@@ -3780,14 +4014,13 @@
|
|
|
3780
4014
|
"md",
|
|
3781
4015
|
"lg"
|
|
3782
4016
|
],
|
|
3783
|
-
"default": "md"
|
|
3784
|
-
"description": "Figma Size axis. Defaults to \"md\"."
|
|
4017
|
+
"default": "md"
|
|
3785
4018
|
},
|
|
3786
4019
|
{
|
|
3787
4020
|
"name": "logo",
|
|
3788
4021
|
"type": "ReactNode",
|
|
3789
4022
|
"required": false,
|
|
3790
|
-
"description": "Custom logo/icon slot.
|
|
4023
|
+
"description": "Custom logo/icon slot."
|
|
3791
4024
|
},
|
|
3792
4025
|
{
|
|
3793
4026
|
"name": "label",
|
|
@@ -3804,15 +4037,16 @@
|
|
|
3804
4037
|
"contract": {
|
|
3805
4038
|
"requiredProps": [],
|
|
3806
4039
|
"requiresAccessibleName": false
|
|
3807
|
-
}
|
|
4040
|
+
},
|
|
4041
|
+
"since": "0.3.0",
|
|
4042
|
+
"example": "import { PlaceholderLogo } from '@sakaniui/react';\n\n<PlaceholderLogo />"
|
|
3808
4043
|
},
|
|
3809
4044
|
{
|
|
3810
4045
|
"name": "Popover",
|
|
3811
4046
|
"kind": "component",
|
|
3812
4047
|
"category": "Composite",
|
|
3813
4048
|
"import": "@sakaniui/react",
|
|
3814
|
-
"
|
|
3815
|
-
"summary": "Floating panel anchored to a trigger. Matches Figma \"Popover\" (Buttons 1-3), with title/description toggles.",
|
|
4049
|
+
"summary": "Floating panel anchored to a trigger.",
|
|
3816
4050
|
"props": [
|
|
3817
4051
|
{
|
|
3818
4052
|
"name": "trigger",
|
|
@@ -3859,15 +4093,16 @@
|
|
|
3859
4093
|
"trigger"
|
|
3860
4094
|
],
|
|
3861
4095
|
"requiresAccessibleName": false
|
|
3862
|
-
}
|
|
4096
|
+
},
|
|
4097
|
+
"since": "0.1.0",
|
|
4098
|
+
"example": "import { Popover } from '@sakaniui/react';\n\n<Popover trigger=\"Trigger\" />"
|
|
3863
4099
|
},
|
|
3864
4100
|
{
|
|
3865
4101
|
"name": "PriceDisplay",
|
|
3866
4102
|
"kind": "component",
|
|
3867
4103
|
"category": "E-commerce",
|
|
3868
4104
|
"import": "@sakaniui/react",
|
|
3869
|
-
"
|
|
3870
|
-
"summary": "Matches Figma \"Price Display\" (E-commerce set).",
|
|
4105
|
+
"summary": "A product price. Pass `compareAtPrice` for a struck-through original price with the current price in the danger colour; `showBadge` adds the sale badge.",
|
|
3871
4106
|
"props": [
|
|
3872
4107
|
{
|
|
3873
4108
|
"name": "price",
|
|
@@ -3884,14 +4119,13 @@
|
|
|
3884
4119
|
"name": "showBadge",
|
|
3885
4120
|
"type": "boolean",
|
|
3886
4121
|
"required": false,
|
|
3887
|
-
"default":
|
|
4122
|
+
"default": false,
|
|
3888
4123
|
"description": "Shows a \"Save X%\" badge, computed from price vs. compareAtPrice. No-op without compareAtPrice."
|
|
3889
4124
|
},
|
|
3890
4125
|
{
|
|
3891
4126
|
"name": "formatPrice",
|
|
3892
4127
|
"type": "((amount: number) => string)",
|
|
3893
|
-
"required": false
|
|
3894
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
4128
|
+
"required": false
|
|
3895
4129
|
},
|
|
3896
4130
|
{
|
|
3897
4131
|
"name": "className",
|
|
@@ -3904,15 +4138,16 @@
|
|
|
3904
4138
|
"price"
|
|
3905
4139
|
],
|
|
3906
4140
|
"requiresAccessibleName": false
|
|
3907
|
-
}
|
|
4141
|
+
},
|
|
4142
|
+
"since": "0.3.0",
|
|
4143
|
+
"example": "import { PriceDisplay } from '@sakaniui/react';\n\n<PriceDisplay price={49} />"
|
|
3908
4144
|
},
|
|
3909
4145
|
{
|
|
3910
4146
|
"name": "ProductCard",
|
|
3911
4147
|
"kind": "component",
|
|
3912
4148
|
"category": "E-commerce",
|
|
3913
4149
|
"import": "@sakaniui/react",
|
|
3914
|
-
"
|
|
3915
|
-
"summary": "Matches Figma \"Product Card\" (E-commerce set): image (wishlist button + sale badge overlay) -> rating -> name/price -> description -> color swatches -> \"Add Item\" button.",
|
|
4150
|
+
"summary": "An e-commerce product card: image with wishlist button and sale badge, rating, name, price, description, colour swatches and an add button. `compareAtPrice` shows the sale treatment.",
|
|
3916
4151
|
"props": [
|
|
3917
4152
|
{
|
|
3918
4153
|
"name": "image",
|
|
@@ -3970,13 +4205,13 @@
|
|
|
3970
4205
|
"name": "inStock",
|
|
3971
4206
|
"type": "boolean",
|
|
3972
4207
|
"required": false,
|
|
3973
|
-
"default":
|
|
4208
|
+
"default": true
|
|
3974
4209
|
},
|
|
3975
4210
|
{
|
|
3976
4211
|
"name": "wishlisted",
|
|
3977
4212
|
"type": "boolean",
|
|
3978
4213
|
"required": false,
|
|
3979
|
-
"default":
|
|
4214
|
+
"default": false
|
|
3980
4215
|
},
|
|
3981
4216
|
{
|
|
3982
4217
|
"name": "onWishlistToggle",
|
|
@@ -3997,8 +4232,7 @@
|
|
|
3997
4232
|
{
|
|
3998
4233
|
"name": "formatPrice",
|
|
3999
4234
|
"type": "((amount: number) => string)",
|
|
4000
|
-
"required": false
|
|
4001
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
4235
|
+
"required": false
|
|
4002
4236
|
},
|
|
4003
4237
|
{
|
|
4004
4238
|
"name": "className",
|
|
@@ -4013,15 +4247,16 @@
|
|
|
4013
4247
|
"price"
|
|
4014
4248
|
],
|
|
4015
4249
|
"requiresAccessibleName": false
|
|
4016
|
-
}
|
|
4250
|
+
},
|
|
4251
|
+
"since": "0.3.0",
|
|
4252
|
+
"example": "import { ProductCard } from '@sakaniui/react';\n\n<ProductCard image=\"/images/example.jpg\" name=\"Name\" price={49} />"
|
|
4017
4253
|
},
|
|
4018
4254
|
{
|
|
4019
4255
|
"name": "ProductGallery",
|
|
4020
4256
|
"kind": "component",
|
|
4021
4257
|
"category": "E-commerce",
|
|
4022
4258
|
"import": "@sakaniui/react",
|
|
4023
|
-
"
|
|
4024
|
-
"summary": "Matches Figma \"Product Gallery\" (E-commerce set): a main image plus selectable thumbnails, click a thumb to make it the main image.",
|
|
4259
|
+
"summary": "A main product image with selectable thumbnails; `thumbsPosition` is \"bottom\" or \"left\". Controlled or uncontrolled via `activeIndex` / `defaultActiveIndex`.",
|
|
4025
4260
|
"props": [
|
|
4026
4261
|
{
|
|
4027
4262
|
"name": "images",
|
|
@@ -4048,7 +4283,7 @@
|
|
|
4048
4283
|
"name": "defaultActiveIndex",
|
|
4049
4284
|
"type": "number",
|
|
4050
4285
|
"required": false,
|
|
4051
|
-
"default":
|
|
4286
|
+
"default": 0
|
|
4052
4287
|
},
|
|
4053
4288
|
{
|
|
4054
4289
|
"name": "onActiveIndexChange",
|
|
@@ -4066,15 +4301,16 @@
|
|
|
4066
4301
|
"images"
|
|
4067
4302
|
],
|
|
4068
4303
|
"requiresAccessibleName": false
|
|
4069
|
-
}
|
|
4304
|
+
},
|
|
4305
|
+
"since": "0.3.0",
|
|
4306
|
+
"example": "import { ProductGallery } from '@sakaniui/react';\n\n<ProductGallery images={[{ src: \"/images/example.jpg\" }]} />"
|
|
4070
4307
|
},
|
|
4071
4308
|
{
|
|
4072
4309
|
"name": "ProfileCard",
|
|
4073
4310
|
"kind": "component",
|
|
4074
4311
|
"category": "Marketing",
|
|
4075
4312
|
"import": "@sakaniui/react",
|
|
4076
|
-
"
|
|
4077
|
-
"summary": "Matches Figma \"Profile Card\" (Marketing primitives set, 2 styles: Compact, Detailed).",
|
|
4313
|
+
"summary": "A person card with avatar, name and role, plus an optional bio and social links (the detailed layout follows the data you pass).",
|
|
4078
4314
|
"props": [
|
|
4079
4315
|
{
|
|
4080
4316
|
"name": "name",
|
|
@@ -4120,15 +4356,16 @@
|
|
|
4120
4356
|
"role"
|
|
4121
4357
|
],
|
|
4122
4358
|
"requiresAccessibleName": false
|
|
4123
|
-
}
|
|
4359
|
+
},
|
|
4360
|
+
"since": "0.3.0",
|
|
4361
|
+
"example": "import { ProfileCard } from '@sakaniui/react';\n\n<ProfileCard name=\"Name\" role=\"Role\" />"
|
|
4124
4362
|
},
|
|
4125
4363
|
{
|
|
4126
4364
|
"name": "Progress",
|
|
4127
4365
|
"kind": "component",
|
|
4128
4366
|
"category": "Core",
|
|
4129
4367
|
"import": "@sakaniui/react",
|
|
4130
|
-
"
|
|
4131
|
-
"summary": "Linear progress bar.g.",
|
|
4368
|
+
"summary": "Linear progress bar.",
|
|
4132
4369
|
"props": [
|
|
4133
4370
|
{
|
|
4134
4371
|
"name": "value",
|
|
@@ -4163,14 +4400,15 @@
|
|
|
4163
4400
|
"contract": {
|
|
4164
4401
|
"requiredProps": [],
|
|
4165
4402
|
"requiresAccessibleName": false
|
|
4166
|
-
}
|
|
4403
|
+
},
|
|
4404
|
+
"since": "0.1.0",
|
|
4405
|
+
"example": "import { Progress } from '@sakaniui/react';\n\n<Progress />"
|
|
4167
4406
|
},
|
|
4168
4407
|
{
|
|
4169
4408
|
"name": "ProgressItem",
|
|
4170
4409
|
"kind": "component",
|
|
4171
4410
|
"category": "Application",
|
|
4172
4411
|
"import": "@sakaniui/react",
|
|
4173
|
-
"source": "src/components/ApplicationComponents/ProgressItem/ProgressItem.tsx",
|
|
4174
4412
|
"summary": "One row of a numbered step list.",
|
|
4175
4413
|
"props": [
|
|
4176
4414
|
{
|
|
@@ -4192,7 +4430,7 @@
|
|
|
4192
4430
|
"name": "completed",
|
|
4193
4431
|
"type": "boolean",
|
|
4194
4432
|
"required": false,
|
|
4195
|
-
"default":
|
|
4433
|
+
"default": false,
|
|
4196
4434
|
"description": "Shows a checkmark in the circle instead of `step`."
|
|
4197
4435
|
},
|
|
4198
4436
|
{
|
|
@@ -4209,7 +4447,7 @@
|
|
|
4209
4447
|
"name": "isLast",
|
|
4210
4448
|
"type": "boolean",
|
|
4211
4449
|
"required": false,
|
|
4212
|
-
"default":
|
|
4450
|
+
"default": false,
|
|
4213
4451
|
"description": "Hides the trailing connector -- the last row in a list."
|
|
4214
4452
|
},
|
|
4215
4453
|
{
|
|
@@ -4224,14 +4462,15 @@
|
|
|
4224
4462
|
"title"
|
|
4225
4463
|
],
|
|
4226
4464
|
"requiresAccessibleName": false
|
|
4227
|
-
}
|
|
4465
|
+
},
|
|
4466
|
+
"since": "0.1.0",
|
|
4467
|
+
"example": "import { ProgressItem } from '@sakaniui/react';\n\n<ProgressItem step={1} title=\"Title\" />"
|
|
4228
4468
|
},
|
|
4229
4469
|
{
|
|
4230
4470
|
"name": "ProgressStat",
|
|
4231
4471
|
"kind": "component",
|
|
4232
4472
|
"category": "Application",
|
|
4233
4473
|
"import": "@sakaniui/react",
|
|
4234
|
-
"source": "src/components/ApplicationComponents/ProgressStat/ProgressStat.tsx",
|
|
4235
4474
|
"summary": "Label + value row above a progress bar.",
|
|
4236
4475
|
"props": [
|
|
4237
4476
|
{
|
|
@@ -4264,15 +4503,16 @@
|
|
|
4264
4503
|
"progress"
|
|
4265
4504
|
],
|
|
4266
4505
|
"requiresAccessibleName": false
|
|
4267
|
-
}
|
|
4506
|
+
},
|
|
4507
|
+
"since": "0.1.0",
|
|
4508
|
+
"example": "import { ProgressStat } from '@sakaniui/react';\n\n<ProgressStat label=\"Label\" value=\"Value\" progress={50} />"
|
|
4268
4509
|
},
|
|
4269
4510
|
{
|
|
4270
4511
|
"name": "QuantitySelector",
|
|
4271
4512
|
"kind": "component",
|
|
4272
4513
|
"category": "E-commerce",
|
|
4273
4514
|
"import": "@sakaniui/react",
|
|
4274
|
-
"
|
|
4275
|
-
"summary": "Matches Figma \"Quantity Selector\" (E-commerce set): a 3-cell stepper -- decrement / value / increment, separated by 1px dividers, only the outer frame rounded/bordered.",
|
|
4515
|
+
"summary": "A decrement / value / increment stepper for quantity, bounded by `min` and `max`.",
|
|
4276
4516
|
"props": [
|
|
4277
4517
|
{
|
|
4278
4518
|
"name": "quantity",
|
|
@@ -4288,7 +4528,7 @@
|
|
|
4288
4528
|
"name": "min",
|
|
4289
4529
|
"type": "number",
|
|
4290
4530
|
"required": false,
|
|
4291
|
-
"default":
|
|
4531
|
+
"default": 1
|
|
4292
4532
|
},
|
|
4293
4533
|
{
|
|
4294
4534
|
"name": "max",
|
|
@@ -4313,14 +4553,15 @@
|
|
|
4313
4553
|
"quantity"
|
|
4314
4554
|
],
|
|
4315
4555
|
"requiresAccessibleName": false
|
|
4316
|
-
}
|
|
4556
|
+
},
|
|
4557
|
+
"since": "0.3.0",
|
|
4558
|
+
"example": "import { QuantitySelector } from '@sakaniui/react';\n\n<QuantitySelector quantity={1} />"
|
|
4317
4559
|
},
|
|
4318
4560
|
{
|
|
4319
4561
|
"name": "RadarChart",
|
|
4320
4562
|
"kind": "component",
|
|
4321
4563
|
"category": "Charts",
|
|
4322
4564
|
"import": "@sakaniui/react",
|
|
4323
|
-
"source": "src/components/RadarChart/RadarChart.tsx",
|
|
4324
4565
|
"summary": "Recharts wrapper styled with Sakani chart tokens.",
|
|
4325
4566
|
"props": [
|
|
4326
4567
|
{
|
|
@@ -4377,14 +4618,15 @@
|
|
|
4377
4618
|
"data"
|
|
4378
4619
|
],
|
|
4379
4620
|
"requiresAccessibleName": false
|
|
4380
|
-
}
|
|
4621
|
+
},
|
|
4622
|
+
"since": "0.1.0",
|
|
4623
|
+
"example": "import { RadarChart } from '@sakaniui/react';\n\n<RadarChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
4381
4624
|
},
|
|
4382
4625
|
{
|
|
4383
4626
|
"name": "RadialChart",
|
|
4384
4627
|
"kind": "component",
|
|
4385
4628
|
"category": "Charts",
|
|
4386
4629
|
"import": "@sakaniui/react",
|
|
4387
|
-
"source": "src/components/RadialChart/RadialChart.tsx",
|
|
4388
4630
|
"summary": "Recharts wrapper styled with Sakani chart tokens.",
|
|
4389
4631
|
"props": [
|
|
4390
4632
|
{
|
|
@@ -4441,15 +4683,16 @@
|
|
|
4441
4683
|
"data"
|
|
4442
4684
|
],
|
|
4443
4685
|
"requiresAccessibleName": false
|
|
4444
|
-
}
|
|
4686
|
+
},
|
|
4687
|
+
"since": "0.1.0",
|
|
4688
|
+
"example": "import { RadialChart } from '@sakaniui/react';\n\n<RadialChart data={[{ label: \"Label\", value: 50 }]} />"
|
|
4445
4689
|
},
|
|
4446
4690
|
{
|
|
4447
4691
|
"name": "Radio",
|
|
4448
4692
|
"kind": "component",
|
|
4449
4693
|
"category": "Forms",
|
|
4450
4694
|
"import": "@sakaniui/react",
|
|
4451
|
-
"
|
|
4452
|
-
"summary": "Single radio button. Matches Figma \"Radio\" set: Unchecked | Hover | Checked | Disabled, with Title/Description toggles.",
|
|
4695
|
+
"summary": "Single radio button.",
|
|
4453
4696
|
"props": [
|
|
4454
4697
|
{
|
|
4455
4698
|
"name": "label",
|
|
@@ -4465,15 +4708,16 @@
|
|
|
4465
4708
|
"contract": {
|
|
4466
4709
|
"requiredProps": [],
|
|
4467
4710
|
"requiresAccessibleName": false
|
|
4468
|
-
}
|
|
4711
|
+
},
|
|
4712
|
+
"since": "0.1.0",
|
|
4713
|
+
"example": "import { Radio } from '@sakaniui/react';\n\n<Radio />"
|
|
4469
4714
|
},
|
|
4470
4715
|
{
|
|
4471
4716
|
"name": "RichSeparator",
|
|
4472
4717
|
"kind": "component",
|
|
4473
4718
|
"category": "Application",
|
|
4474
4719
|
"import": "@sakaniui/react",
|
|
4475
|
-
"
|
|
4476
|
-
"summary": "Two divider lines flanking arbitrary centered content.",
|
|
4720
|
+
"summary": "Two divider lines flanking arbitrary centered content. `label` is a convenience shorthand for the common Text case, styled as that same overline automatically.",
|
|
4477
4721
|
"props": [
|
|
4478
4722
|
{
|
|
4479
4723
|
"name": "children",
|
|
@@ -4496,15 +4740,16 @@
|
|
|
4496
4740
|
"contract": {
|
|
4497
4741
|
"requiredProps": [],
|
|
4498
4742
|
"requiresAccessibleName": false
|
|
4499
|
-
}
|
|
4743
|
+
},
|
|
4744
|
+
"since": "0.1.0",
|
|
4745
|
+
"example": "import { RichSeparator } from '@sakaniui/react';\n\n<RichSeparator />"
|
|
4500
4746
|
},
|
|
4501
4747
|
{
|
|
4502
4748
|
"name": "RichTextHeading",
|
|
4503
4749
|
"kind": "component",
|
|
4504
4750
|
"category": "Marketing",
|
|
4505
4751
|
"import": "@sakaniui/react",
|
|
4506
|
-
"
|
|
4507
|
-
"summary": "Matches Figma \"Rich Text Heading\" (Marketing primitives set, 2 levels: H2, H3).",
|
|
4752
|
+
"summary": "A heading for rich-text content; `level` is \"h2\" or \"h3\" and sets the real HTML tag.",
|
|
4508
4753
|
"props": [
|
|
4509
4754
|
{
|
|
4510
4755
|
"name": "level",
|
|
@@ -4514,8 +4759,7 @@
|
|
|
4514
4759
|
"h2",
|
|
4515
4760
|
"h3"
|
|
4516
4761
|
],
|
|
4517
|
-
"default": "h2"
|
|
4518
|
-
"description": "Figma Level axis. Defaults to \"h2\"."
|
|
4762
|
+
"default": "h2"
|
|
4519
4763
|
},
|
|
4520
4764
|
{
|
|
4521
4765
|
"name": "className",
|
|
@@ -4526,15 +4770,16 @@
|
|
|
4526
4770
|
"contract": {
|
|
4527
4771
|
"requiredProps": [],
|
|
4528
4772
|
"requiresAccessibleName": false
|
|
4529
|
-
}
|
|
4773
|
+
},
|
|
4774
|
+
"since": "0.3.0",
|
|
4775
|
+
"example": "import { RichTextHeading } from '@sakaniui/react';\n\n<RichTextHeading>Label</RichTextHeading>"
|
|
4530
4776
|
},
|
|
4531
4777
|
{
|
|
4532
4778
|
"name": "RichTextParagraph",
|
|
4533
4779
|
"kind": "component",
|
|
4534
4780
|
"category": "Marketing",
|
|
4535
4781
|
"import": "@sakaniui/react",
|
|
4536
|
-
"
|
|
4537
|
-
"summary": "Matches Figma \"Rich Text Paragraph\" (Marketing primitives set, 2 style previews: Default, With Link).",
|
|
4782
|
+
"summary": "A muted body paragraph for rich-text content; it can contain inline links.",
|
|
4538
4783
|
"props": [
|
|
4539
4784
|
{
|
|
4540
4785
|
"name": "className",
|
|
@@ -4545,15 +4790,16 @@
|
|
|
4545
4790
|
"contract": {
|
|
4546
4791
|
"requiredProps": [],
|
|
4547
4792
|
"requiresAccessibleName": false
|
|
4548
|
-
}
|
|
4793
|
+
},
|
|
4794
|
+
"since": "0.3.0",
|
|
4795
|
+
"example": "import { RichTextParagraph } from '@sakaniui/react';\n\n<RichTextParagraph>Label</RichTextParagraph>"
|
|
4549
4796
|
},
|
|
4550
4797
|
{
|
|
4551
4798
|
"name": "SectionHeading",
|
|
4552
4799
|
"kind": "component",
|
|
4553
4800
|
"category": "Marketing",
|
|
4554
4801
|
"import": "@sakaniui/react",
|
|
4555
|
-
"
|
|
4556
|
-
"summary": "Matches Figma \"Section Heading\" (Marketing primitives set, 2 alignments: Center, Left). `align` stays a real, explicit prop (Figma's own axis) -- a genuine layout choice, not derivable from the heading's own content.",
|
|
4802
|
+
"summary": "A section heading with an optional eyebrow badge and subtitle; `align` is \"left\" or \"center\" and `titleAs` sets the heading tag.",
|
|
4557
4803
|
"props": [
|
|
4558
4804
|
{
|
|
4559
4805
|
"name": "eyebrow",
|
|
@@ -4579,8 +4825,7 @@
|
|
|
4579
4825
|
"left",
|
|
4580
4826
|
"center"
|
|
4581
4827
|
],
|
|
4582
|
-
"default": "center"
|
|
4583
|
-
"description": "Figma Align axis. Defaults to \"center\"."
|
|
4828
|
+
"default": "center"
|
|
4584
4829
|
},
|
|
4585
4830
|
{
|
|
4586
4831
|
"name": "titleAs",
|
|
@@ -4606,15 +4851,16 @@
|
|
|
4606
4851
|
"title"
|
|
4607
4852
|
],
|
|
4608
4853
|
"requiresAccessibleName": false
|
|
4609
|
-
}
|
|
4854
|
+
},
|
|
4855
|
+
"since": "0.3.0",
|
|
4856
|
+
"example": "import { SectionHeading } from '@sakaniui/react';\n\n<SectionHeading title=\"Title\" />"
|
|
4610
4857
|
},
|
|
4611
4858
|
{
|
|
4612
4859
|
"name": "SegmentedControl",
|
|
4613
4860
|
"kind": "component",
|
|
4614
4861
|
"category": "Composite",
|
|
4615
4862
|
"import": "@sakaniui/react",
|
|
4616
|
-
"
|
|
4617
|
-
"summary": "iOS-style toggle group. Matches Figma \"Segmented Control\" (2-6 buttons). Figma spec: track bg/subtle, radius-lg, padding 4, gap 2; active segment bg/surface, radius-md, label/md fg/default; inactive fg/muted.",
|
|
4863
|
+
"summary": "An iOS-style toggle group (segmented control).",
|
|
4618
4864
|
"props": [
|
|
4619
4865
|
{
|
|
4620
4866
|
"name": "options",
|
|
@@ -4653,15 +4899,16 @@
|
|
|
4653
4899
|
"options"
|
|
4654
4900
|
],
|
|
4655
4901
|
"requiresAccessibleName": false
|
|
4656
|
-
}
|
|
4902
|
+
},
|
|
4903
|
+
"since": "0.1.0",
|
|
4904
|
+
"example": "import { SegmentedControl } from '@sakaniui/react';\n\n<SegmentedControl options={[{ value: \"Value\", label: \"Label\" }]} />"
|
|
4657
4905
|
},
|
|
4658
4906
|
{
|
|
4659
4907
|
"name": "Select",
|
|
4660
4908
|
"kind": "component",
|
|
4661
4909
|
"category": "Forms",
|
|
4662
4910
|
"import": "@sakaniui/react",
|
|
4663
|
-
"
|
|
4664
|
-
"summary": "Single-select dropdown. Matches the Figma \"Select\" component: Size (sm|md|lg) x State (Default|Open|Disabled|Filled), Title/Description toggles.",
|
|
4911
|
+
"summary": "Single-select dropdown.",
|
|
4665
4912
|
"props": [
|
|
4666
4913
|
{
|
|
4667
4914
|
"name": "label",
|
|
@@ -4738,21 +4985,22 @@
|
|
|
4738
4985
|
"options"
|
|
4739
4986
|
],
|
|
4740
4987
|
"requiresAccessibleName": false
|
|
4741
|
-
}
|
|
4988
|
+
},
|
|
4989
|
+
"since": "0.1.0",
|
|
4990
|
+
"example": "import { Select } from '@sakaniui/react';\n\n<Select options={[{ label: \"Label\", value: \"Value\" }]} />"
|
|
4742
4991
|
},
|
|
4743
4992
|
{
|
|
4744
4993
|
"name": "Sidebar",
|
|
4745
4994
|
"kind": "component",
|
|
4746
4995
|
"category": "Composite/Sidebar",
|
|
4747
4996
|
"import": "@sakaniui/react",
|
|
4748
|
-
"source": "src/components/Sidebar/Sidebar.tsx",
|
|
4749
4997
|
"summary": "Sidebar (container)",
|
|
4750
4998
|
"props": [
|
|
4751
4999
|
{
|
|
4752
5000
|
"name": "collapsed",
|
|
4753
5001
|
"type": "boolean",
|
|
4754
5002
|
"required": false,
|
|
4755
|
-
"default":
|
|
5003
|
+
"default": false
|
|
4756
5004
|
},
|
|
4757
5005
|
{
|
|
4758
5006
|
"name": "className",
|
|
@@ -4763,28 +5011,30 @@
|
|
|
4763
5011
|
"contract": {
|
|
4764
5012
|
"requiredProps": [],
|
|
4765
5013
|
"requiresAccessibleName": false
|
|
4766
|
-
}
|
|
5014
|
+
},
|
|
5015
|
+
"since": "0.1.0",
|
|
5016
|
+
"example": "import { Sidebar } from '@sakaniui/react';\n\n<Sidebar>Label</Sidebar>"
|
|
4767
5017
|
},
|
|
4768
5018
|
{
|
|
4769
5019
|
"name": "SidebarDivider",
|
|
4770
5020
|
"kind": "component",
|
|
4771
5021
|
"category": "Composite/Sidebar",
|
|
4772
5022
|
"import": "@sakaniui/react",
|
|
4773
|
-
"
|
|
4774
|
-
"summary": "Horizontal rule between sections. Matches Figma \"Sidebar Divider\": border/subtle, full width, small vertical margin.",
|
|
5023
|
+
"summary": "Horizontal rule between sections.",
|
|
4775
5024
|
"props": [],
|
|
4776
5025
|
"contract": {
|
|
4777
5026
|
"requiredProps": [],
|
|
4778
5027
|
"requiresAccessibleName": false
|
|
4779
|
-
}
|
|
5028
|
+
},
|
|
5029
|
+
"since": "0.1.0",
|
|
5030
|
+
"example": "import { SidebarDivider } from '@sakaniui/react';\n\n<SidebarDivider />"
|
|
4780
5031
|
},
|
|
4781
5032
|
{
|
|
4782
5033
|
"name": "SidebarFooter",
|
|
4783
5034
|
"kind": "component",
|
|
4784
5035
|
"category": "Composite/Sidebar",
|
|
4785
5036
|
"import": "@sakaniui/react",
|
|
4786
|
-
"
|
|
4787
|
-
"summary": "Bottom user/actions area. Matches Figma \"Sidebar Footer\": Type (User | User + Menu | Actions) x Collapsed.",
|
|
5037
|
+
"summary": "Bottom user/actions area. The user avatar uses the system Avatar component.",
|
|
4788
5038
|
"props": [
|
|
4789
5039
|
{
|
|
4790
5040
|
"name": "type",
|
|
@@ -4838,28 +5088,30 @@
|
|
|
4838
5088
|
"contract": {
|
|
4839
5089
|
"requiredProps": [],
|
|
4840
5090
|
"requiresAccessibleName": false
|
|
4841
|
-
}
|
|
5091
|
+
},
|
|
5092
|
+
"since": "0.1.0",
|
|
5093
|
+
"example": "import { SidebarFooter } from '@sakaniui/react';\n\n<SidebarFooter />"
|
|
4842
5094
|
},
|
|
4843
5095
|
{
|
|
4844
5096
|
"name": "SidebarGroupLabel",
|
|
4845
5097
|
"kind": "component",
|
|
4846
5098
|
"category": "Composite/Sidebar",
|
|
4847
5099
|
"import": "@sakaniui/react",
|
|
4848
|
-
"
|
|
4849
|
-
"summary": "Section heading. Matches Figma \"Sidebar Group Label\": padding 8/10/4, overline text style, fg/subtle, uppercase.",
|
|
5100
|
+
"summary": "Section heading.",
|
|
4850
5101
|
"props": [],
|
|
4851
5102
|
"contract": {
|
|
4852
5103
|
"requiredProps": [],
|
|
4853
5104
|
"requiresAccessibleName": false
|
|
4854
|
-
}
|
|
5105
|
+
},
|
|
5106
|
+
"since": "0.1.0",
|
|
5107
|
+
"example": "import { SidebarGroupLabel } from '@sakaniui/react';\n\n<SidebarGroupLabel>Label</SidebarGroupLabel>"
|
|
4855
5108
|
},
|
|
4856
5109
|
{
|
|
4857
5110
|
"name": "SidebarHeader",
|
|
4858
5111
|
"kind": "component",
|
|
4859
5112
|
"category": "Composite/Sidebar",
|
|
4860
5113
|
"import": "@sakaniui/react",
|
|
4861
|
-
"
|
|
4862
|
-
"summary": "Matches Figma \"Sidebar Header\": Type (Brand | Workspace | Brand + Toggle) x Collapsed. Figma spec: padding 6/4, gap 10, title label/md-strong (fg/default), subtitle caption (fg/muted).",
|
|
5114
|
+
"summary": "The top of a sidebar: brand, workspace switcher or brand with a collapse toggle; supports a collapsed state.",
|
|
4863
5115
|
"props": [
|
|
4864
5116
|
{
|
|
4865
5117
|
"name": "type",
|
|
@@ -4902,7 +5154,6 @@
|
|
|
4902
5154
|
"name": "toggleIcon",
|
|
4903
5155
|
"type": "IconComponent",
|
|
4904
5156
|
"required": false,
|
|
4905
|
-
"default": "createIcon(\"layout-sidebar-left-collapse\", [\"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12\",\"M9 4v16\",\"M15 10l-2 2l2 2\"])",
|
|
4906
5157
|
"description": "Icon for the toggle button. Defaults to PanelLeftClose."
|
|
4907
5158
|
}
|
|
4908
5159
|
],
|
|
@@ -4911,14 +5162,15 @@
|
|
|
4911
5162
|
"title"
|
|
4912
5163
|
],
|
|
4913
5164
|
"requiresAccessibleName": false
|
|
4914
|
-
}
|
|
5165
|
+
},
|
|
5166
|
+
"since": "0.1.0",
|
|
5167
|
+
"example": "import { SidebarHeader } from '@sakaniui/react';\n\n<SidebarHeader title=\"Title\" />"
|
|
4915
5168
|
},
|
|
4916
5169
|
{
|
|
4917
5170
|
"name": "SidebarItem",
|
|
4918
5171
|
"kind": "component",
|
|
4919
5172
|
"category": "Composite/Sidebar",
|
|
4920
5173
|
"import": "@sakaniui/react",
|
|
4921
|
-
"source": "src/components/SidebarItem/SidebarItem.tsx",
|
|
4922
5174
|
"summary": "Primary nav item.",
|
|
4923
5175
|
"props": [
|
|
4924
5176
|
{
|
|
@@ -4940,8 +5192,8 @@
|
|
|
4940
5192
|
"name": "activeIndicator",
|
|
4941
5193
|
"type": "boolean",
|
|
4942
5194
|
"required": false,
|
|
4943
|
-
"default":
|
|
4944
|
-
"description": "Only matters when `active`. true (default) = bg/surface card + shadow + left accent bar (\"Active - Indicator\"). false = flat bg/subtle tint, no bar, no shadow (\"Active - Default\").
|
|
5195
|
+
"default": true,
|
|
5196
|
+
"description": "Only matters when `active`. true (default) = bg/surface card + shadow + left accent bar (\"Active - Indicator\"). false = flat bg/subtle tint, no bar, no shadow (\"Active - Default\")."
|
|
4945
5197
|
},
|
|
4946
5198
|
{
|
|
4947
5199
|
"name": "disabled",
|
|
@@ -4967,7 +5219,7 @@
|
|
|
4967
5219
|
"name": "expanded",
|
|
4968
5220
|
"type": "boolean",
|
|
4969
5221
|
"required": false,
|
|
4970
|
-
"description": "Only matters when `hasSubmenu`.
|
|
5222
|
+
"description": "Only matters when `hasSubmenu`. Not a navigation disclosure like `active` — the caller owns the open/closed state and toggles this alongside conditionally rendering the children."
|
|
4971
5223
|
},
|
|
4972
5224
|
{
|
|
4973
5225
|
"name": "onClick",
|
|
@@ -4983,7 +5235,7 @@
|
|
|
4983
5235
|
"name": "nativeTooltip",
|
|
4984
5236
|
"type": "boolean",
|
|
4985
5237
|
"required": false,
|
|
4986
|
-
"default":
|
|
5238
|
+
"default": true,
|
|
4987
5239
|
"description": "Native title-attribute tooltip on collapse. Defaults to true; set false when the caller already wraps this in its own Tooltip component to avoid the two competing on hover."
|
|
4988
5240
|
}
|
|
4989
5241
|
],
|
|
@@ -4992,15 +5244,16 @@
|
|
|
4992
5244
|
"label"
|
|
4993
5245
|
],
|
|
4994
5246
|
"requiresAccessibleName": false
|
|
4995
|
-
}
|
|
5247
|
+
},
|
|
5248
|
+
"since": "0.1.0",
|
|
5249
|
+
"example": "import { SidebarItem } from '@sakaniui/react';\n\n<SidebarItem label=\"Label\" />"
|
|
4996
5250
|
},
|
|
4997
5251
|
{
|
|
4998
5252
|
"name": "SidebarPromo",
|
|
4999
5253
|
"kind": "component",
|
|
5000
5254
|
"category": "Composite/Sidebar",
|
|
5001
5255
|
"import": "@sakaniui/react",
|
|
5002
|
-
"
|
|
5003
|
-
"summary": "Upsell / announcement card. Matches Figma \"Sidebar Promo\": Type (Upgrade | Announcement).",
|
|
5256
|
+
"summary": "Upsell / announcement card.",
|
|
5004
5257
|
"props": [
|
|
5005
5258
|
{
|
|
5006
5259
|
"name": "type",
|
|
@@ -5041,8 +5294,7 @@
|
|
|
5041
5294
|
{
|
|
5042
5295
|
"name": "icon",
|
|
5043
5296
|
"type": "IconComponent",
|
|
5044
|
-
"required": false
|
|
5045
|
-
"default": "createIcon(\"sparkles\", [\"M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6\"])"
|
|
5297
|
+
"required": false
|
|
5046
5298
|
}
|
|
5047
5299
|
],
|
|
5048
5300
|
"contract": {
|
|
@@ -5050,15 +5302,16 @@
|
|
|
5050
5302
|
"title"
|
|
5051
5303
|
],
|
|
5052
5304
|
"requiresAccessibleName": false
|
|
5053
|
-
}
|
|
5305
|
+
},
|
|
5306
|
+
"since": "0.1.0",
|
|
5307
|
+
"example": "import { SidebarPromo } from '@sakaniui/react';\n\n<SidebarPromo title=\"Title\" />"
|
|
5054
5308
|
},
|
|
5055
5309
|
{
|
|
5056
5310
|
"name": "SidebarSearch",
|
|
5057
5311
|
"kind": "component",
|
|
5058
5312
|
"category": "Composite/Sidebar",
|
|
5059
5313
|
"import": "@sakaniui/react",
|
|
5060
|
-
"
|
|
5061
|
-
"summary": "Matches Figma \"Sidebar Search\": Type (Field | Command) x Collapsed. Figma spec: 36px height, bg/subtle, border/subtle, radius-sm, padding 8/8/8/10, search icon (Lucide), placeholder body/sm fg/subtle.",
|
|
5314
|
+
"summary": "A sidebar search; `type` is \"field\" or \"command\" (shows a keyboard-shortcut hint), and it supports a collapsed state.",
|
|
5062
5315
|
"props": [
|
|
5063
5316
|
{
|
|
5064
5317
|
"name": "type",
|
|
@@ -5100,15 +5353,16 @@
|
|
|
5100
5353
|
"contract": {
|
|
5101
5354
|
"requiredProps": [],
|
|
5102
5355
|
"requiresAccessibleName": false
|
|
5103
|
-
}
|
|
5356
|
+
},
|
|
5357
|
+
"since": "0.1.0",
|
|
5358
|
+
"example": "import { SidebarSearch } from '@sakaniui/react';\n\n<SidebarSearch />"
|
|
5104
5359
|
},
|
|
5105
5360
|
{
|
|
5106
5361
|
"name": "SidebarSubItem",
|
|
5107
5362
|
"kind": "component",
|
|
5108
5363
|
"category": "Composite/Sidebar",
|
|
5109
5364
|
"import": "@sakaniui/react",
|
|
5110
|
-
"
|
|
5111
|
-
"summary": "Nested nav item. Matches Figma \"Sidebar Sub Item\": State (Default|Hover|Active|Disabled). Figma spec: radius-sm, padding 0/10, label/sm. Default/Hover fg/muted, Active fg/default.",
|
|
5365
|
+
"summary": "A nested navigation item under a SidebarItem, with active and disabled states.",
|
|
5112
5366
|
"props": [
|
|
5113
5367
|
{
|
|
5114
5368
|
"name": "label",
|
|
@@ -5141,15 +5395,16 @@
|
|
|
5141
5395
|
"label"
|
|
5142
5396
|
],
|
|
5143
5397
|
"requiresAccessibleName": false
|
|
5144
|
-
}
|
|
5398
|
+
},
|
|
5399
|
+
"since": "0.1.0",
|
|
5400
|
+
"example": "import { SidebarSubItem } from '@sakaniui/react';\n\n<SidebarSubItem label=\"Label\" />"
|
|
5145
5401
|
},
|
|
5146
5402
|
{
|
|
5147
5403
|
"name": "SizeSelector",
|
|
5148
5404
|
"kind": "component",
|
|
5149
5405
|
"category": "E-commerce",
|
|
5150
5406
|
"import": "@sakaniui/react",
|
|
5151
|
-
"
|
|
5152
|
-
"summary": "Matches Figma \"Size Selector\" (E-commerce set): a 40px label circle.",
|
|
5407
|
+
"summary": "A round size option with `selected` and `available` states.",
|
|
5153
5408
|
"props": [
|
|
5154
5409
|
{
|
|
5155
5410
|
"name": "size",
|
|
@@ -5161,13 +5416,13 @@
|
|
|
5161
5416
|
"name": "selected",
|
|
5162
5417
|
"type": "boolean",
|
|
5163
5418
|
"required": false,
|
|
5164
|
-
"default":
|
|
5419
|
+
"default": false
|
|
5165
5420
|
},
|
|
5166
5421
|
{
|
|
5167
5422
|
"name": "available",
|
|
5168
5423
|
"type": "boolean",
|
|
5169
5424
|
"required": false,
|
|
5170
|
-
"default":
|
|
5425
|
+
"default": true,
|
|
5171
5426
|
"description": "Defaults to true. False renders a disabled, unclickable button."
|
|
5172
5427
|
},
|
|
5173
5428
|
{
|
|
@@ -5186,14 +5441,15 @@
|
|
|
5186
5441
|
"size"
|
|
5187
5442
|
],
|
|
5188
5443
|
"requiresAccessibleName": false
|
|
5189
|
-
}
|
|
5444
|
+
},
|
|
5445
|
+
"since": "0.3.0",
|
|
5446
|
+
"example": "import { SizeSelector } from '@sakaniui/react';\n\n<SizeSelector size=\"Size\" />"
|
|
5190
5447
|
},
|
|
5191
5448
|
{
|
|
5192
5449
|
"name": "Skeleton",
|
|
5193
5450
|
"kind": "component",
|
|
5194
5451
|
"category": "Core",
|
|
5195
5452
|
"import": "@sakaniui/react",
|
|
5196
|
-
"source": "src/components/Skeleton/Skeleton.tsx",
|
|
5197
5453
|
"summary": "Placeholder loading shape — shimmer animation on a muted background. Use to represent content that is loading before data arrives.",
|
|
5198
5454
|
"props": [
|
|
5199
5455
|
{
|
|
@@ -5228,15 +5484,16 @@
|
|
|
5228
5484
|
"contract": {
|
|
5229
5485
|
"requiredProps": [],
|
|
5230
5486
|
"requiresAccessibleName": false
|
|
5231
|
-
}
|
|
5487
|
+
},
|
|
5488
|
+
"since": "0.1.0",
|
|
5489
|
+
"example": "import { Skeleton } from '@sakaniui/react';\n\n<Skeleton />"
|
|
5232
5490
|
},
|
|
5233
5491
|
{
|
|
5234
5492
|
"name": "Slider",
|
|
5235
5493
|
"kind": "component",
|
|
5236
5494
|
"category": "Forms",
|
|
5237
5495
|
"import": "@sakaniui/react",
|
|
5238
|
-
"
|
|
5239
|
-
"summary": "Range slider. Figma \"Slider\" is a single component; this implements a functional controlled/uncontrolled range input styled to the token system.",
|
|
5496
|
+
"summary": "Range slider.",
|
|
5240
5497
|
"props": [
|
|
5241
5498
|
{
|
|
5242
5499
|
"name": "label",
|
|
@@ -5253,26 +5510,27 @@
|
|
|
5253
5510
|
"name": "min",
|
|
5254
5511
|
"type": "number",
|
|
5255
5512
|
"required": false,
|
|
5256
|
-
"default":
|
|
5513
|
+
"default": 0
|
|
5257
5514
|
},
|
|
5258
5515
|
{
|
|
5259
5516
|
"name": "max",
|
|
5260
5517
|
"type": "number",
|
|
5261
5518
|
"required": false,
|
|
5262
|
-
"default":
|
|
5519
|
+
"default": 100
|
|
5263
5520
|
}
|
|
5264
5521
|
],
|
|
5265
5522
|
"contract": {
|
|
5266
5523
|
"requiredProps": [],
|
|
5267
5524
|
"requiresAccessibleName": false
|
|
5268
|
-
}
|
|
5525
|
+
},
|
|
5526
|
+
"since": "0.1.0",
|
|
5527
|
+
"example": "import { Slider } from '@sakaniui/react';\n\n<Slider />"
|
|
5269
5528
|
},
|
|
5270
5529
|
{
|
|
5271
5530
|
"name": "SpendingBalance",
|
|
5272
5531
|
"kind": "component",
|
|
5273
5532
|
"category": "Application",
|
|
5274
5533
|
"import": "@sakaniui/react",
|
|
5275
|
-
"source": "src/components/ApplicationComponents/SpendingBalance/SpendingBalance.tsx",
|
|
5276
5534
|
"summary": "Amount spent against a limit, with a bar and a remaining/over-limit footer.",
|
|
5277
5535
|
"props": [
|
|
5278
5536
|
{
|
|
@@ -5295,7 +5553,6 @@
|
|
|
5295
5553
|
"name": "formatAmount",
|
|
5296
5554
|
"type": "((amount: number) => string)",
|
|
5297
5555
|
"required": false,
|
|
5298
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })",
|
|
5299
5556
|
"description": "Defaults to USD currency, 2 decimals (e.g. \"$1,240.00\")."
|
|
5300
5557
|
},
|
|
5301
5558
|
{
|
|
@@ -5310,14 +5567,15 @@
|
|
|
5310
5567
|
"limit"
|
|
5311
5568
|
],
|
|
5312
5569
|
"requiresAccessibleName": false
|
|
5313
|
-
}
|
|
5570
|
+
},
|
|
5571
|
+
"since": "0.1.0",
|
|
5572
|
+
"example": "import { SpendingBalance } from '@sakaniui/react';\n\n<SpendingBalance spent={1} limit={1} />"
|
|
5314
5573
|
},
|
|
5315
5574
|
{
|
|
5316
5575
|
"name": "Spinner",
|
|
5317
5576
|
"kind": "component",
|
|
5318
5577
|
"category": "Core",
|
|
5319
5578
|
"import": "@sakaniui/react",
|
|
5320
|
-
"source": "src/components/Spinner/Spinner.tsx",
|
|
5321
5579
|
"summary": "Animated loading indicator. Inherits currentColor so it works on any background. Use inside buttons (loading state) or as a standalone page/section loader.",
|
|
5322
5580
|
"props": [
|
|
5323
5581
|
{
|
|
@@ -5347,15 +5605,16 @@
|
|
|
5347
5605
|
"contract": {
|
|
5348
5606
|
"requiredProps": [],
|
|
5349
5607
|
"requiresAccessibleName": false
|
|
5350
|
-
}
|
|
5608
|
+
},
|
|
5609
|
+
"since": "0.1.0",
|
|
5610
|
+
"example": "import { Spinner } from '@sakaniui/react';\n\n<Spinner />"
|
|
5351
5611
|
},
|
|
5352
5612
|
{
|
|
5353
5613
|
"name": "StarRating",
|
|
5354
5614
|
"kind": "component",
|
|
5355
5615
|
"category": "E-commerce",
|
|
5356
5616
|
"import": "@sakaniui/react",
|
|
5357
|
-
"
|
|
5358
|
-
"summary": "g.9 (2,300 reviews)\".",
|
|
5617
|
+
"summary": "Five stars with an optional numeric rating and review count (e.g. \"4.9 (2,300 reviews)\"); `showLabel` hides the text and `orientation` sets the layout.",
|
|
5359
5618
|
"props": [
|
|
5360
5619
|
{
|
|
5361
5620
|
"name": "rating",
|
|
@@ -5372,7 +5631,7 @@
|
|
|
5372
5631
|
"name": "showLabel",
|
|
5373
5632
|
"type": "boolean",
|
|
5374
5633
|
"required": false,
|
|
5375
|
-
"default":
|
|
5634
|
+
"default": true,
|
|
5376
5635
|
"description": "Shows the numeric rating + review count text next to the stars. Defaults to true."
|
|
5377
5636
|
},
|
|
5378
5637
|
{
|
|
@@ -5385,13 +5644,12 @@
|
|
|
5385
5644
|
"horizontal-reverse"
|
|
5386
5645
|
],
|
|
5387
5646
|
"default": "horizontal",
|
|
5388
|
-
"description": "
|
|
5647
|
+
"description": "Only meaningful while showLabel is true. Defaults to \"horizontal\"."
|
|
5389
5648
|
},
|
|
5390
5649
|
{
|
|
5391
5650
|
"name": "formatReviewCount",
|
|
5392
5651
|
"type": "((count: number) => string)",
|
|
5393
|
-
"required": false
|
|
5394
|
-
"default": "(count: number) => count.toLocaleString('en-US')"
|
|
5652
|
+
"required": false
|
|
5395
5653
|
},
|
|
5396
5654
|
{
|
|
5397
5655
|
"name": "className",
|
|
@@ -5404,15 +5662,16 @@
|
|
|
5404
5662
|
"rating"
|
|
5405
5663
|
],
|
|
5406
5664
|
"requiresAccessibleName": false
|
|
5407
|
-
}
|
|
5665
|
+
},
|
|
5666
|
+
"since": "0.3.0",
|
|
5667
|
+
"example": "import { StarRating } from '@sakaniui/react';\n\n<StarRating rating={4} />"
|
|
5408
5668
|
},
|
|
5409
5669
|
{
|
|
5410
5670
|
"name": "StatCard",
|
|
5411
5671
|
"kind": "component",
|
|
5412
5672
|
"category": "Composite",
|
|
5413
5673
|
"import": "@sakaniui/react",
|
|
5414
|
-
"
|
|
5415
|
-
"summary": "Dashboard metric card. Matches Figma \"Stat Card\": Style (Minimal | Icon | Featured) x Trend (Up | Down | Flat), with Icon / Menu / Trend / Sparkline toggles.",
|
|
5674
|
+
"summary": "Dashboard metric card.",
|
|
5416
5675
|
"props": [
|
|
5417
5676
|
{
|
|
5418
5677
|
"name": "title",
|
|
@@ -5427,14 +5686,12 @@
|
|
|
5427
5686
|
{
|
|
5428
5687
|
"name": "description",
|
|
5429
5688
|
"type": "string",
|
|
5430
|
-
"required": false
|
|
5431
|
-
"description": "Supporting line under the delta (Figma: description)."
|
|
5689
|
+
"required": false
|
|
5432
5690
|
},
|
|
5433
5691
|
{
|
|
5434
5692
|
"name": "sparkline",
|
|
5435
5693
|
"type": "number[]",
|
|
5436
|
-
"required": false
|
|
5437
|
-
"description": "Data points for the inline sparkline (Figma: Sparkline toggle)."
|
|
5694
|
+
"required": false
|
|
5438
5695
|
},
|
|
5439
5696
|
{
|
|
5440
5697
|
"name": "delta",
|
|
@@ -5464,8 +5721,7 @@
|
|
|
5464
5721
|
"danger",
|
|
5465
5722
|
"neutral",
|
|
5466
5723
|
"accent"
|
|
5467
|
-
]
|
|
5468
|
-
"description": "Overrides the trend-derived badge color (e.g. a \"down\" delta that Figma still wants shown as warning, not danger, for a given card)."
|
|
5724
|
+
]
|
|
5469
5725
|
},
|
|
5470
5726
|
{
|
|
5471
5727
|
"name": "variant",
|
|
@@ -5507,15 +5763,16 @@
|
|
|
5507
5763
|
"value"
|
|
5508
5764
|
],
|
|
5509
5765
|
"requiresAccessibleName": false
|
|
5510
|
-
}
|
|
5766
|
+
},
|
|
5767
|
+
"since": "0.1.0",
|
|
5768
|
+
"example": "import { StatCard } from '@sakaniui/react';\n\n<StatCard title=\"Title\" value=\"Value\" />"
|
|
5511
5769
|
},
|
|
5512
5770
|
{
|
|
5513
5771
|
"name": "Stepper",
|
|
5514
5772
|
"kind": "component",
|
|
5515
5773
|
"category": "Composite",
|
|
5516
5774
|
"import": "@sakaniui/react",
|
|
5517
|
-
"
|
|
5518
|
-
"summary": "Progress stepper. Matches Figma \"Stepper\" (Steps 2-6) + \"Stepper Step\" (Completed | Current | Upcoming).",
|
|
5775
|
+
"summary": "Progress stepper.",
|
|
5519
5776
|
"props": [
|
|
5520
5777
|
{
|
|
5521
5778
|
"name": "steps",
|
|
@@ -5551,15 +5808,16 @@
|
|
|
5551
5808
|
"current"
|
|
5552
5809
|
],
|
|
5553
5810
|
"requiresAccessibleName": false
|
|
5554
|
-
}
|
|
5811
|
+
},
|
|
5812
|
+
"since": "0.1.0",
|
|
5813
|
+
"example": "import { Stepper } from '@sakaniui/react';\n\n<Stepper steps={[{ label: \"Label\" }]} current={1} />"
|
|
5555
5814
|
},
|
|
5556
5815
|
{
|
|
5557
5816
|
"name": "StepperStep",
|
|
5558
5817
|
"kind": "component",
|
|
5559
5818
|
"category": "Composite",
|
|
5560
5819
|
"import": "@sakaniui/react",
|
|
5561
|
-
"
|
|
5562
|
-
"summary": "Progress stepper. Matches Figma \"Stepper\" (Steps 2-6) + \"Stepper Step\" (Completed | Current | Upcoming).",
|
|
5820
|
+
"summary": "One step of a Stepper; `state` is \"completed\", \"current\" or \"upcoming\".",
|
|
5563
5821
|
"props": [
|
|
5564
5822
|
{
|
|
5565
5823
|
"name": "index",
|
|
@@ -5600,7 +5858,7 @@
|
|
|
5600
5858
|
"name": "delay",
|
|
5601
5859
|
"type": "number",
|
|
5602
5860
|
"required": false,
|
|
5603
|
-
"default":
|
|
5861
|
+
"default": 0,
|
|
5604
5862
|
"description": "ms to wait before this step's state change plays (the stepper uses it to sequence a multi-step move)."
|
|
5605
5863
|
},
|
|
5606
5864
|
{
|
|
@@ -5617,15 +5875,16 @@
|
|
|
5617
5875
|
"label"
|
|
5618
5876
|
],
|
|
5619
5877
|
"requiresAccessibleName": false
|
|
5620
|
-
}
|
|
5878
|
+
},
|
|
5879
|
+
"since": "0.1.0",
|
|
5880
|
+
"example": "import { StepperStep } from '@sakaniui/react';\n\n<StepperStep index={0} state=\"completed\" label=\"Label\" />"
|
|
5621
5881
|
},
|
|
5622
5882
|
{
|
|
5623
5883
|
"name": "StockMarket",
|
|
5624
5884
|
"kind": "component",
|
|
5625
5885
|
"category": "Application",
|
|
5626
5886
|
"import": "@sakaniui/react",
|
|
5627
|
-
"
|
|
5628
|
-
"summary": "Matches Figma \"Stock Market\" -- its 3 style previews collapse to 2 real axes, both derived rather than manual props (same judgment applied throughout this Application set): Positive vs.",
|
|
5887
|
+
"summary": "A stock row or card: logo, symbol, name, price and change, with an optional chart and period label.",
|
|
5629
5888
|
"props": [
|
|
5630
5889
|
{
|
|
5631
5890
|
"name": "logo",
|
|
@@ -5655,9 +5914,7 @@
|
|
|
5655
5914
|
{
|
|
5656
5915
|
"name": "formatAmount",
|
|
5657
5916
|
"type": "((amount: number) => string)",
|
|
5658
|
-
"required": false
|
|
5659
|
-
"default": "(amount: number) =>\n Math.abs(amount).toLocaleString('en-US', { style: 'currency', currency: 'USD' })",
|
|
5660
|
-
"description": "Defaults to USD currency, 2 decimals."
|
|
5917
|
+
"required": false
|
|
5661
5918
|
},
|
|
5662
5919
|
{
|
|
5663
5920
|
"name": "chart",
|
|
@@ -5691,15 +5948,16 @@
|
|
|
5691
5948
|
"change"
|
|
5692
5949
|
],
|
|
5693
5950
|
"requiresAccessibleName": false
|
|
5694
|
-
}
|
|
5951
|
+
},
|
|
5952
|
+
"since": "0.1.0",
|
|
5953
|
+
"example": "import { StockMarket } from '@sakaniui/react';\n\n<StockMarket logo=\"/images/example.jpg\" symbol=\"Symbol\" name=\"Name\" price={49} change={{ amount: 49, percent: 50 }} />"
|
|
5695
5954
|
},
|
|
5696
5955
|
{
|
|
5697
5956
|
"name": "StockStatus",
|
|
5698
5957
|
"kind": "component",
|
|
5699
5958
|
"category": "E-commerce",
|
|
5700
5959
|
"import": "@sakaniui/react",
|
|
5701
|
-
"
|
|
5702
|
-
"summary": "Matches Figma \"Stock Status\" (E-commerce set): a subtle-emphasis Badge in success/warning/danger.",
|
|
5960
|
+
"summary": "A stock availability badge (success, warning or danger) derived from `quantity` and `lowStockThreshold`.",
|
|
5703
5961
|
"props": [
|
|
5704
5962
|
{
|
|
5705
5963
|
"name": "quantity",
|
|
@@ -5710,7 +5968,7 @@
|
|
|
5710
5968
|
"name": "lowStockThreshold",
|
|
5711
5969
|
"type": "number",
|
|
5712
5970
|
"required": false,
|
|
5713
|
-
"default":
|
|
5971
|
+
"default": 5,
|
|
5714
5972
|
"description": "At or below this (and above 0), shows \"Only N left\" in warning. Defaults to 5."
|
|
5715
5973
|
},
|
|
5716
5974
|
{
|
|
@@ -5730,15 +5988,16 @@
|
|
|
5730
5988
|
"quantity"
|
|
5731
5989
|
],
|
|
5732
5990
|
"requiresAccessibleName": false
|
|
5733
|
-
}
|
|
5991
|
+
},
|
|
5992
|
+
"since": "0.3.0",
|
|
5993
|
+
"example": "import { StockStatus } from '@sakaniui/react';\n\n<StockStatus quantity={1} />"
|
|
5734
5994
|
},
|
|
5735
5995
|
{
|
|
5736
5996
|
"name": "SubFeature",
|
|
5737
5997
|
"kind": "component",
|
|
5738
5998
|
"category": "Marketing",
|
|
5739
5999
|
"import": "@sakaniui/react",
|
|
5740
|
-
"
|
|
5741
|
-
"summary": "Matches Figma \"Sub Feature\" (Marketing primitives set, 2 independent axes: Layout (Horizontal/Vertical) x Left border (True/False)).",
|
|
6000
|
+
"summary": "A feature item with icon, title and description; `layout` is \"vertical\" or \"horizontal\" and `leftBorder` adds a rail.",
|
|
5742
6001
|
"props": [
|
|
5743
6002
|
{
|
|
5744
6003
|
"name": "icon",
|
|
@@ -5763,15 +6022,13 @@
|
|
|
5763
6022
|
"vertical",
|
|
5764
6023
|
"horizontal"
|
|
5765
6024
|
],
|
|
5766
|
-
"default": "horizontal"
|
|
5767
|
-
"description": "Figma Layout axis. Defaults to \"horizontal\"."
|
|
6025
|
+
"default": "horizontal"
|
|
5768
6026
|
},
|
|
5769
6027
|
{
|
|
5770
6028
|
"name": "leftBorder",
|
|
5771
6029
|
"type": "boolean",
|
|
5772
6030
|
"required": false,
|
|
5773
|
-
"default":
|
|
5774
|
-
"description": "Figma \"Left border\" axis. Defaults to false."
|
|
6031
|
+
"default": false
|
|
5775
6032
|
},
|
|
5776
6033
|
{
|
|
5777
6034
|
"name": "className",
|
|
@@ -5786,15 +6043,16 @@
|
|
|
5786
6043
|
"description"
|
|
5787
6044
|
],
|
|
5788
6045
|
"requiresAccessibleName": false
|
|
5789
|
-
}
|
|
6046
|
+
},
|
|
6047
|
+
"since": "0.3.0",
|
|
6048
|
+
"example": "import { SubFeature } from '@sakaniui/react';\n\n<SubFeature icon=\"Icon\" title=\"Title\" description=\"Description\" />"
|
|
5790
6049
|
},
|
|
5791
6050
|
{
|
|
5792
6051
|
"name": "Switch",
|
|
5793
6052
|
"kind": "component",
|
|
5794
6053
|
"category": "Forms",
|
|
5795
6054
|
"import": "@sakaniui/react",
|
|
5796
|
-
"
|
|
5797
|
-
"summary": "Toggle switch. Matches Figma \"Switch\" set (SW axis): Off | On | Disabled. Track spec from Figma: 36x20, radius-full, bg/muted (off) / accent/default (on).",
|
|
6055
|
+
"summary": "Toggle switch.",
|
|
5798
6056
|
"props": [
|
|
5799
6057
|
{
|
|
5800
6058
|
"name": "label",
|
|
@@ -5817,20 +6075,21 @@
|
|
|
5817
6075
|
"stretch"
|
|
5818
6076
|
],
|
|
5819
6077
|
"default": "default",
|
|
5820
|
-
"description": "`stretch` adds a liquid motion: the thumb stretches as it travels, then settles to a circle. `default` is the plain switch.
|
|
6078
|
+
"description": "`stretch` adds a liquid motion: the thumb stretches as it travels, then settles to a circle. `default` is the plain switch."
|
|
5821
6079
|
}
|
|
5822
6080
|
],
|
|
5823
6081
|
"contract": {
|
|
5824
6082
|
"requiredProps": [],
|
|
5825
6083
|
"requiresAccessibleName": false
|
|
5826
|
-
}
|
|
6084
|
+
},
|
|
6085
|
+
"since": "0.1.0",
|
|
6086
|
+
"example": "import { Switch } from '@sakaniui/react';\n\n<Switch />"
|
|
5827
6087
|
},
|
|
5828
6088
|
{
|
|
5829
6089
|
"name": "Table",
|
|
5830
6090
|
"kind": "component",
|
|
5831
6091
|
"category": "Composite",
|
|
5832
6092
|
"import": "@sakaniui/react",
|
|
5833
|
-
"source": "src/components/Table/Table.tsx",
|
|
5834
6093
|
"summary": "Data table.",
|
|
5835
6094
|
"props": [
|
|
5836
6095
|
{
|
|
@@ -5878,8 +6137,8 @@
|
|
|
5878
6137
|
"name": "bordered",
|
|
5879
6138
|
"type": "boolean",
|
|
5880
6139
|
"required": false,
|
|
5881
|
-
"default":
|
|
5882
|
-
"description": "Draws the table's own container border/radius.
|
|
6140
|
+
"default": true,
|
|
6141
|
+
"description": "Draws the table's own container border/radius."
|
|
5883
6142
|
},
|
|
5884
6143
|
{
|
|
5885
6144
|
"name": "responsive",
|
|
@@ -5890,8 +6149,7 @@
|
|
|
5890
6149
|
"stacked",
|
|
5891
6150
|
"auto"
|
|
5892
6151
|
],
|
|
5893
|
-
"default": "auto"
|
|
5894
|
-
"description": "Matches Figma's \"Responsive\" variant (Default / Stacked). - 'auto' (default): renders as a normal table, and switches to the stacked card layout automatically below --bp-sm (640px). - 'default' / 'stacked': force one layout regardless of viewport — useful for Storybook, tests, or a deliberately narrow container."
|
|
6152
|
+
"default": "auto"
|
|
5895
6153
|
},
|
|
5896
6154
|
{
|
|
5897
6155
|
"name": "className",
|
|
@@ -5905,15 +6163,16 @@
|
|
|
5905
6163
|
"rows"
|
|
5906
6164
|
],
|
|
5907
6165
|
"requiresAccessibleName": false
|
|
5908
|
-
}
|
|
6166
|
+
},
|
|
6167
|
+
"since": "0.1.0",
|
|
6168
|
+
"example": "import { Table } from '@sakaniui/react';\n\n<Table columns={[]} rows={[{}]} />"
|
|
5909
6169
|
},
|
|
5910
6170
|
{
|
|
5911
6171
|
"name": "Tabs",
|
|
5912
6172
|
"kind": "component",
|
|
5913
6173
|
"category": "Composite",
|
|
5914
6174
|
"import": "@sakaniui/react",
|
|
5915
|
-
"
|
|
5916
|
-
"summary": "Horizontal tab navigation. Matches Figma \"Tabs\" set (2–6 tabs).",
|
|
6175
|
+
"summary": "Horizontal tab navigation.",
|
|
5917
6176
|
"props": [
|
|
5918
6177
|
{
|
|
5919
6178
|
"name": "items",
|
|
@@ -5941,14 +6200,14 @@
|
|
|
5941
6200
|
"name": "bordered",
|
|
5942
6201
|
"type": "boolean",
|
|
5943
6202
|
"required": false,
|
|
5944
|
-
"default":
|
|
6203
|
+
"default": true,
|
|
5945
6204
|
"description": "Bottom border under the whole track. Defaults to true."
|
|
5946
6205
|
},
|
|
5947
6206
|
{
|
|
5948
6207
|
"name": "fill",
|
|
5949
6208
|
"type": "boolean",
|
|
5950
6209
|
"required": false,
|
|
5951
|
-
"default":
|
|
6210
|
+
"default": false,
|
|
5952
6211
|
"description": "Stretch every tab to share the row's width equally, like a segmented control, instead of each tab hugging its own label. Defaults to false."
|
|
5953
6212
|
},
|
|
5954
6213
|
{
|
|
@@ -5962,15 +6221,16 @@
|
|
|
5962
6221
|
"items"
|
|
5963
6222
|
],
|
|
5964
6223
|
"requiresAccessibleName": false
|
|
5965
|
-
}
|
|
6224
|
+
},
|
|
6225
|
+
"since": "0.1.0",
|
|
6226
|
+
"example": "import { Tabs } from '@sakaniui/react';\n\n<Tabs items={[{ value: \"Value\", label: \"Label\" }]} />"
|
|
5966
6227
|
},
|
|
5967
6228
|
{
|
|
5968
6229
|
"name": "Tags",
|
|
5969
6230
|
"kind": "component",
|
|
5970
6231
|
"category": "Application",
|
|
5971
6232
|
"import": "@sakaniui/react",
|
|
5972
|
-
"
|
|
5973
|
-
"summary": "Matches Figma \"Tags\" -- a wrapped row of pill tags.",
|
|
6233
|
+
"summary": "A wrapped row of pill tags. Passing `onRemove` makes every tag removable.",
|
|
5974
6234
|
"props": [
|
|
5975
6235
|
{
|
|
5976
6236
|
"name": "tags",
|
|
@@ -5994,15 +6254,16 @@
|
|
|
5994
6254
|
"tags"
|
|
5995
6255
|
],
|
|
5996
6256
|
"requiresAccessibleName": false
|
|
5997
|
-
}
|
|
6257
|
+
},
|
|
6258
|
+
"since": "0.1.0",
|
|
6259
|
+
"example": "import { Tags } from '@sakaniui/react';\n\n<Tags tags={[\"Tag\"]} />"
|
|
5998
6260
|
},
|
|
5999
6261
|
{
|
|
6000
6262
|
"name": "TeamCard",
|
|
6001
6263
|
"kind": "component",
|
|
6002
6264
|
"category": "Marketing",
|
|
6003
6265
|
"import": "@sakaniui/react",
|
|
6004
|
-
"
|
|
6005
|
-
"summary": "Matches Figma \"Team Card\" (Marketing primitives set, 2 styles: Card, Card details).",
|
|
6266
|
+
"summary": "A team member card with photo, name, role, location and social links; passing `bio` switches to the detailed style.",
|
|
6006
6267
|
"props": [
|
|
6007
6268
|
{
|
|
6008
6269
|
"name": "image",
|
|
@@ -6065,15 +6326,16 @@
|
|
|
6065
6326
|
"location"
|
|
6066
6327
|
],
|
|
6067
6328
|
"requiresAccessibleName": false
|
|
6068
|
-
}
|
|
6329
|
+
},
|
|
6330
|
+
"since": "0.3.0",
|
|
6331
|
+
"example": "import { TeamCard } from '@sakaniui/react';\n\n<TeamCard image=\"/images/example.jpg\" name=\"Name\" role=\"Role\" location=\"Location\" />"
|
|
6069
6332
|
},
|
|
6070
6333
|
{
|
|
6071
6334
|
"name": "Textarea",
|
|
6072
6335
|
"kind": "component",
|
|
6073
6336
|
"category": "Forms",
|
|
6074
6337
|
"import": "@sakaniui/react",
|
|
6075
|
-
"
|
|
6076
|
-
"summary": "Multi-line text input. Matches Figma \"Textarea\" parent component: State (Default|Focus|Error|Disabled|Filled), Title/Description toggles.",
|
|
6338
|
+
"summary": "Multi-line text input.",
|
|
6077
6339
|
"props": [
|
|
6078
6340
|
{
|
|
6079
6341
|
"name": "label",
|
|
@@ -6094,15 +6356,16 @@
|
|
|
6094
6356
|
"contract": {
|
|
6095
6357
|
"requiredProps": [],
|
|
6096
6358
|
"requiresAccessibleName": false
|
|
6097
|
-
}
|
|
6359
|
+
},
|
|
6360
|
+
"since": "0.1.0",
|
|
6361
|
+
"example": "import { Textarea } from '@sakaniui/react';\n\n<Textarea />"
|
|
6098
6362
|
},
|
|
6099
6363
|
{
|
|
6100
6364
|
"name": "Ticker",
|
|
6101
6365
|
"kind": "component",
|
|
6102
6366
|
"category": "Application",
|
|
6103
6367
|
"import": "@sakaniui/react",
|
|
6104
|
-
"
|
|
6105
|
-
"summary": "Matches Figma \"Ticker\" -- a row of symbol/change pairs with fade-out edges.",
|
|
6368
|
+
"summary": "A scrolling row of symbol and change pairs with faded edges; pauses on hover and stops under prefers-reduced-motion.",
|
|
6106
6369
|
"props": [
|
|
6107
6370
|
{
|
|
6108
6371
|
"name": "items",
|
|
@@ -6113,14 +6376,13 @@
|
|
|
6113
6376
|
"name": "speed",
|
|
6114
6377
|
"type": "number",
|
|
6115
6378
|
"required": false,
|
|
6116
|
-
"default":
|
|
6379
|
+
"default": 40,
|
|
6117
6380
|
"description": "Scroll speed in pixels/second. Defaults to 40."
|
|
6118
6381
|
},
|
|
6119
6382
|
{
|
|
6120
6383
|
"name": "formatChange",
|
|
6121
6384
|
"type": "((changePercent: number) => string)",
|
|
6122
|
-
"required": false
|
|
6123
|
-
"default": "(changePercent: number) =>\n `${changePercent >= 0 ? '+' : ''}${changePercent}%`"
|
|
6385
|
+
"required": false
|
|
6124
6386
|
},
|
|
6125
6387
|
{
|
|
6126
6388
|
"name": "className",
|
|
@@ -6133,15 +6395,16 @@
|
|
|
6133
6395
|
"items"
|
|
6134
6396
|
],
|
|
6135
6397
|
"requiresAccessibleName": false
|
|
6136
|
-
}
|
|
6398
|
+
},
|
|
6399
|
+
"since": "0.1.0",
|
|
6400
|
+
"example": "import { Ticker } from '@sakaniui/react';\n\n<Ticker items={[{ symbol: \"Symbol\", changePercent: 50 }]} />"
|
|
6137
6401
|
},
|
|
6138
6402
|
{
|
|
6139
6403
|
"name": "Toast",
|
|
6140
6404
|
"kind": "component",
|
|
6141
6405
|
"category": "Composite",
|
|
6142
6406
|
"import": "@sakaniui/react",
|
|
6143
|
-
"
|
|
6144
|
-
"summary": "Transient notification. Matches Figma \"Toast\" set: Status (Success|Error|Info), Title/Description toggles.",
|
|
6407
|
+
"summary": "Transient notification.",
|
|
6145
6408
|
"props": [
|
|
6146
6409
|
{
|
|
6147
6410
|
"name": "status",
|
|
@@ -6152,8 +6415,7 @@
|
|
|
6152
6415
|
"success",
|
|
6153
6416
|
"error"
|
|
6154
6417
|
],
|
|
6155
|
-
"default": "info"
|
|
6156
|
-
"description": "Figma Status axis. Defaults to \"info\"."
|
|
6418
|
+
"default": "info"
|
|
6157
6419
|
},
|
|
6158
6420
|
{
|
|
6159
6421
|
"name": "title",
|
|
@@ -6180,27 +6442,26 @@
|
|
|
6180
6442
|
"contract": {
|
|
6181
6443
|
"requiredProps": [],
|
|
6182
6444
|
"requiresAccessibleName": false
|
|
6183
|
-
}
|
|
6445
|
+
},
|
|
6446
|
+
"since": "0.1.0",
|
|
6447
|
+
"example": "import { Toast } from '@sakaniui/react';\n\n<Toast />"
|
|
6184
6448
|
},
|
|
6185
6449
|
{
|
|
6186
6450
|
"name": "Tooltip",
|
|
6187
6451
|
"kind": "component",
|
|
6188
6452
|
"category": "Core",
|
|
6189
6453
|
"import": "@sakaniui/react",
|
|
6190
|
-
"source": "src/components/Tooltip/Tooltip.tsx",
|
|
6191
6454
|
"summary": "Hover/focus tooltip with a title, optional subtitle, a caret (tail), and 8 pointer positions.",
|
|
6192
6455
|
"props": [
|
|
6193
6456
|
{
|
|
6194
6457
|
"name": "title",
|
|
6195
6458
|
"type": "string",
|
|
6196
|
-
"required": true
|
|
6197
|
-
"description": "Tooltip title (Figma: Title)."
|
|
6459
|
+
"required": true
|
|
6198
6460
|
},
|
|
6199
6461
|
{
|
|
6200
6462
|
"name": "subtitle",
|
|
6201
6463
|
"type": "string",
|
|
6202
|
-
"required": false
|
|
6203
|
-
"description": "Optional supporting line (Figma: Subtitle)."
|
|
6464
|
+
"required": false
|
|
6204
6465
|
},
|
|
6205
6466
|
{
|
|
6206
6467
|
"name": "pointer",
|
|
@@ -6217,7 +6478,7 @@
|
|
|
6217
6478
|
"center-right"
|
|
6218
6479
|
],
|
|
6219
6480
|
"default": "top-center",
|
|
6220
|
-
"description": "Pointer position.
|
|
6481
|
+
"description": "Pointer position. Defaults to \"top-center\"."
|
|
6221
6482
|
},
|
|
6222
6483
|
{
|
|
6223
6484
|
"name": "children",
|
|
@@ -6237,15 +6498,16 @@
|
|
|
6237
6498
|
"children"
|
|
6238
6499
|
],
|
|
6239
6500
|
"requiresAccessibleName": false
|
|
6240
|
-
}
|
|
6501
|
+
},
|
|
6502
|
+
"since": "0.1.0",
|
|
6503
|
+
"example": "import { Tooltip } from '@sakaniui/react';\n\n<Tooltip title=\"Title\">Label</Tooltip>"
|
|
6241
6504
|
},
|
|
6242
6505
|
{
|
|
6243
6506
|
"name": "TopBar",
|
|
6244
6507
|
"kind": "component",
|
|
6245
6508
|
"category": "Navigation",
|
|
6246
6509
|
"import": "@sakaniui/react",
|
|
6247
|
-
"
|
|
6248
|
-
"summary": "Application top bar — sits beside the Sidebar (1440 − 248 = 1192 default, but stretches to fill).",
|
|
6510
|
+
"summary": "The application top bar, placed beside the Sidebar; `type` is \"search\", \"minimal\", \"breadcrumb\", \"tabs\" or \"chat\", and `density` is \"sm\" or \"md\".",
|
|
6249
6511
|
"props": [
|
|
6250
6512
|
{
|
|
6251
6513
|
"name": "type",
|
|
@@ -6280,7 +6542,7 @@
|
|
|
6280
6542
|
"name": "showToggle",
|
|
6281
6543
|
"type": "boolean",
|
|
6282
6544
|
"required": false,
|
|
6283
|
-
"default":
|
|
6545
|
+
"default": true,
|
|
6284
6546
|
"description": "Show the sidebar toggle. Defaults to true."
|
|
6285
6547
|
},
|
|
6286
6548
|
{
|
|
@@ -6292,28 +6554,27 @@
|
|
|
6292
6554
|
"name": "toggleIcon",
|
|
6293
6555
|
"type": "IconComponent",
|
|
6294
6556
|
"required": false,
|
|
6295
|
-
"default": "createIcon(\"layout-sidebar\", [\"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12\",\"M9 4l0 16\"])",
|
|
6296
6557
|
"description": "Icon for the sidebar toggle button. Defaults to PanelLeft."
|
|
6297
6558
|
},
|
|
6298
6559
|
{
|
|
6299
6560
|
"name": "showActions",
|
|
6300
6561
|
"type": "boolean",
|
|
6301
6562
|
"required": false,
|
|
6302
|
-
"default":
|
|
6563
|
+
"default": true,
|
|
6303
6564
|
"description": "Show help + notification icons. Defaults to true."
|
|
6304
6565
|
},
|
|
6305
6566
|
{
|
|
6306
6567
|
"name": "showHelp",
|
|
6307
6568
|
"type": "boolean",
|
|
6308
6569
|
"required": false,
|
|
6309
|
-
"default":
|
|
6570
|
+
"default": true,
|
|
6310
6571
|
"description": "Show the help icon within the actions group. Defaults to true."
|
|
6311
6572
|
},
|
|
6312
6573
|
{
|
|
6313
6574
|
"name": "hasUnread",
|
|
6314
6575
|
"type": "boolean",
|
|
6315
6576
|
"required": false,
|
|
6316
|
-
"default":
|
|
6577
|
+
"default": false
|
|
6317
6578
|
},
|
|
6318
6579
|
{
|
|
6319
6580
|
"name": "rightSlot",
|
|
@@ -6331,7 +6592,7 @@
|
|
|
6331
6592
|
"name": "accountOpen",
|
|
6332
6593
|
"type": "boolean",
|
|
6333
6594
|
"required": false,
|
|
6334
|
-
"default":
|
|
6595
|
+
"default": false,
|
|
6335
6596
|
"description": "Flips the account chevron when the menu it opens is open. Defaults to false."
|
|
6336
6597
|
},
|
|
6337
6598
|
{
|
|
@@ -6367,14 +6628,15 @@
|
|
|
6367
6628
|
"contract": {
|
|
6368
6629
|
"requiredProps": [],
|
|
6369
6630
|
"requiresAccessibleName": false
|
|
6370
|
-
}
|
|
6631
|
+
},
|
|
6632
|
+
"since": "0.1.0",
|
|
6633
|
+
"example": "import { TopBar } from '@sakaniui/react';\n\n<TopBar />"
|
|
6371
6634
|
},
|
|
6372
6635
|
{
|
|
6373
6636
|
"name": "TopBarMobile",
|
|
6374
6637
|
"kind": "component",
|
|
6375
6638
|
"category": "Navigation",
|
|
6376
6639
|
"import": "@sakaniui/react",
|
|
6377
|
-
"source": "src/components/TopBarMobile/TopBarMobile.tsx",
|
|
6378
6640
|
"summary": "Mobile app bar (390×56).",
|
|
6379
6641
|
"props": [
|
|
6380
6642
|
{
|
|
@@ -6430,15 +6692,16 @@
|
|
|
6430
6692
|
"contract": {
|
|
6431
6693
|
"requiredProps": [],
|
|
6432
6694
|
"requiresAccessibleName": false
|
|
6433
|
-
}
|
|
6695
|
+
},
|
|
6696
|
+
"since": "0.1.0",
|
|
6697
|
+
"example": "import { TopBarMobile } from '@sakaniui/react';\n\n<TopBarMobile />"
|
|
6434
6698
|
},
|
|
6435
6699
|
{
|
|
6436
6700
|
"name": "Transactions",
|
|
6437
6701
|
"kind": "component",
|
|
6438
6702
|
"category": "Application",
|
|
6439
6703
|
"import": "@sakaniui/react",
|
|
6440
|
-
"
|
|
6441
|
-
"summary": "Matches Figma \"Transactions\" -- both style previews collapse to one derived axis, same judgment applied throughout this Application set: the Empty state renders whenever `transactions` is empty, rather than a separate manual prop that could disagree with th...",
|
|
6704
|
+
"summary": "A list of transactions; shows an empty state when `transactions` is empty.",
|
|
6442
6705
|
"props": [
|
|
6443
6706
|
{
|
|
6444
6707
|
"name": "transactions",
|
|
@@ -6448,8 +6711,7 @@
|
|
|
6448
6711
|
{
|
|
6449
6712
|
"name": "formatAmount",
|
|
6450
6713
|
"type": "((amount: number) => string)",
|
|
6451
|
-
"required": false
|
|
6452
|
-
"default": "(amount: number) =>\n `${amount >= 0 ? '+' : '-'}${Math.abs(amount).toLocaleString('en-US', { style: 'currency', currency: 'USD' })}`"
|
|
6714
|
+
"required": false
|
|
6453
6715
|
},
|
|
6454
6716
|
{
|
|
6455
6717
|
"name": "emptyTitle",
|
|
@@ -6474,21 +6736,22 @@
|
|
|
6474
6736
|
"transactions"
|
|
6475
6737
|
],
|
|
6476
6738
|
"requiresAccessibleName": false
|
|
6477
|
-
}
|
|
6739
|
+
},
|
|
6740
|
+
"since": "0.1.0",
|
|
6741
|
+
"example": "import { Transactions } from '@sakaniui/react';\n\n<Transactions transactions={[{ name: \"Name\", category: \"Category\", amount: 49, icon: \"Icon\" }]} />"
|
|
6478
6742
|
},
|
|
6479
6743
|
{
|
|
6480
6744
|
"name": "WishlistButton",
|
|
6481
6745
|
"kind": "component",
|
|
6482
6746
|
"category": "E-commerce",
|
|
6483
6747
|
"import": "@sakaniui/react",
|
|
6484
|
-
"
|
|
6485
|
-
"summary": "Matches Figma \"Wishlist Button\" (E-commerce set): a 36px bg/surface square, radius-md, shadow-xs, no border.",
|
|
6748
|
+
"summary": "A square heart toggle for saving a product; `saved` fills the heart.",
|
|
6486
6749
|
"props": [
|
|
6487
6750
|
{
|
|
6488
6751
|
"name": "saved",
|
|
6489
6752
|
"type": "boolean",
|
|
6490
6753
|
"required": false,
|
|
6491
|
-
"default":
|
|
6754
|
+
"default": false
|
|
6492
6755
|
},
|
|
6493
6756
|
{
|
|
6494
6757
|
"name": "onToggle",
|
|
@@ -6511,35 +6774,37 @@
|
|
|
6511
6774
|
"contract": {
|
|
6512
6775
|
"requiredProps": [],
|
|
6513
6776
|
"requiresAccessibleName": false
|
|
6514
|
-
}
|
|
6777
|
+
},
|
|
6778
|
+
"since": "0.3.0",
|
|
6779
|
+
"example": "import { WishlistButton } from '@sakaniui/react';\n\n<WishlistButton />"
|
|
6515
6780
|
},
|
|
6516
6781
|
{
|
|
6517
6782
|
"name": "XIcon",
|
|
6518
6783
|
"kind": "component",
|
|
6519
6784
|
"category": "Marketing",
|
|
6520
6785
|
"import": "@sakaniui/react",
|
|
6521
|
-
"
|
|
6522
|
-
"summary": "svg) -- lucide-react ships no brand/logo icons in the version this library uses.",
|
|
6786
|
+
"summary": "X (Twitter) brand mark drawn in currentColor, for social links.",
|
|
6523
6787
|
"props": [
|
|
6524
6788
|
{
|
|
6525
6789
|
"name": "size",
|
|
6526
6790
|
"type": "number",
|
|
6527
6791
|
"required": false,
|
|
6528
|
-
"default":
|
|
6792
|
+
"default": 16
|
|
6529
6793
|
}
|
|
6530
6794
|
],
|
|
6531
6795
|
"contract": {
|
|
6532
6796
|
"requiredProps": [],
|
|
6533
6797
|
"requiresAccessibleName": false
|
|
6534
|
-
}
|
|
6798
|
+
},
|
|
6799
|
+
"since": "0.3.0",
|
|
6800
|
+
"example": "import { XIcon } from '@sakaniui/react';\n\n<XIcon />"
|
|
6535
6801
|
},
|
|
6536
6802
|
{
|
|
6537
6803
|
"name": "AccountOverviewBlock",
|
|
6538
6804
|
"kind": "block",
|
|
6539
6805
|
"category": "Blocks/Application",
|
|
6540
6806
|
"import": "@sakaniui/react/blocks",
|
|
6541
|
-
"
|
|
6542
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
6807
|
+
"summary": "Account Overview block (Application): a composition example. Copy it into your project and edit it.",
|
|
6543
6808
|
"props": [
|
|
6544
6809
|
{
|
|
6545
6810
|
"name": "state",
|
|
@@ -6560,15 +6825,16 @@
|
|
|
6560
6825
|
"contract": {
|
|
6561
6826
|
"requiredProps": [],
|
|
6562
6827
|
"requiresAccessibleName": false
|
|
6563
|
-
}
|
|
6828
|
+
},
|
|
6829
|
+
"since": "0.1.0",
|
|
6830
|
+
"example": "import { AccountOverviewBlock } from '@sakaniui/react/blocks';\n\n<AccountOverviewBlock />"
|
|
6564
6831
|
},
|
|
6565
6832
|
{
|
|
6566
6833
|
"name": "ActivityLogBlock",
|
|
6567
6834
|
"kind": "block",
|
|
6568
6835
|
"category": "Blocks/Application",
|
|
6569
6836
|
"import": "@sakaniui/react/blocks",
|
|
6570
|
-
"
|
|
6571
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
6837
|
+
"summary": "Activity Log block (Application): a composition example. Copy it into your project and edit it.",
|
|
6572
6838
|
"props": [
|
|
6573
6839
|
{
|
|
6574
6840
|
"name": "state",
|
|
@@ -6589,15 +6855,16 @@
|
|
|
6589
6855
|
"contract": {
|
|
6590
6856
|
"requiredProps": [],
|
|
6591
6857
|
"requiresAccessibleName": false
|
|
6592
|
-
}
|
|
6858
|
+
},
|
|
6859
|
+
"since": "0.1.0",
|
|
6860
|
+
"example": "import { ActivityLogBlock } from '@sakaniui/react/blocks';\n\n<ActivityLogBlock />"
|
|
6593
6861
|
},
|
|
6594
6862
|
{
|
|
6595
6863
|
"name": "AddCardFormBlock",
|
|
6596
6864
|
"kind": "block",
|
|
6597
6865
|
"category": "Blocks/Billing",
|
|
6598
6866
|
"import": "@sakaniui/react/blocks",
|
|
6599
|
-
"
|
|
6600
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component.) in place of the simulated one here -- a real integration should never send a raw PAN/CVC to your own backend at all.",
|
|
6867
|
+
"summary": "Add Card Form block (Billing): a composition example. Copy it into your project and edit it.",
|
|
6601
6868
|
"props": [
|
|
6602
6869
|
{
|
|
6603
6870
|
"name": "initialValue",
|
|
@@ -6631,15 +6898,16 @@
|
|
|
6631
6898
|
"contract": {
|
|
6632
6899
|
"requiredProps": [],
|
|
6633
6900
|
"requiresAccessibleName": false
|
|
6634
|
-
}
|
|
6901
|
+
},
|
|
6902
|
+
"since": "0.3.0",
|
|
6903
|
+
"example": "import { AddCardFormBlock } from '@sakaniui/react/blocks';\n\n<AddCardFormBlock />"
|
|
6635
6904
|
},
|
|
6636
6905
|
{
|
|
6637
6906
|
"name": "AppHeaderBlock",
|
|
6638
6907
|
"kind": "block",
|
|
6639
6908
|
"category": "Blocks/Application",
|
|
6640
6909
|
"import": "@sakaniui/react/blocks",
|
|
6641
|
-
"
|
|
6642
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
6910
|
+
"summary": "App Header block (Application): a composition example. Copy it into your project and edit it.",
|
|
6643
6911
|
"props": [
|
|
6644
6912
|
{
|
|
6645
6913
|
"name": "breadcrumbs",
|
|
@@ -6674,27 +6942,26 @@
|
|
|
6674
6942
|
"title"
|
|
6675
6943
|
],
|
|
6676
6944
|
"requiresAccessibleName": false
|
|
6677
|
-
}
|
|
6945
|
+
},
|
|
6946
|
+
"since": "0.1.0",
|
|
6947
|
+
"example": "import { AppHeaderBlock } from '@sakaniui/react/blocks';\n\n<AppHeaderBlock breadcrumbs={[{ label: \"Label\" }]} title=\"Title\" />"
|
|
6678
6948
|
},
|
|
6679
6949
|
{
|
|
6680
6950
|
"name": "BillingAddressBlock",
|
|
6681
6951
|
"kind": "block",
|
|
6682
6952
|
"category": "Blocks/Billing",
|
|
6683
6953
|
"import": "@sakaniui/react/blocks",
|
|
6684
|
-
"
|
|
6685
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onSave` to your real API call in place of the simulated one here.",
|
|
6954
|
+
"summary": "Billing Address block (Billing): a composition example. Copy it into your project and edit it.",
|
|
6686
6955
|
"props": [
|
|
6687
6956
|
{
|
|
6688
6957
|
"name": "initialValue",
|
|
6689
6958
|
"type": "Partial<BillingAddressValue>",
|
|
6690
|
-
"required": false
|
|
6691
|
-
"description": "Seeds the fields -- presence/absence is what distinguishes Figma's own Default vs. Filled previews."
|
|
6959
|
+
"required": false
|
|
6692
6960
|
},
|
|
6693
6961
|
{
|
|
6694
6962
|
"name": "countries",
|
|
6695
6963
|
"type": "SelectOption[]",
|
|
6696
|
-
"required": false
|
|
6697
|
-
"default": "[\n { label: '🇳🇬 Nigeria', value: 'NG' },\n { label: '🇺🇸 United States', value: 'US' },\n { label: '🇬🇧 United Kingdom', value: 'GB' },\n { label: '🇰🇪 Kenya', value: 'KE' },\n { label: '🇿🇦 South Africa', value: 'ZA' },\n]"
|
|
6964
|
+
"required": false
|
|
6698
6965
|
},
|
|
6699
6966
|
{
|
|
6700
6967
|
"name": "initialStatus",
|
|
@@ -6723,15 +6990,16 @@
|
|
|
6723
6990
|
"contract": {
|
|
6724
6991
|
"requiredProps": [],
|
|
6725
6992
|
"requiresAccessibleName": false
|
|
6726
|
-
}
|
|
6993
|
+
},
|
|
6994
|
+
"since": "0.3.0",
|
|
6995
|
+
"example": "import { BillingAddressBlock } from '@sakaniui/react/blocks';\n\n<BillingAddressBlock />"
|
|
6727
6996
|
},
|
|
6728
6997
|
{
|
|
6729
6998
|
"name": "BillingHistoryBlock",
|
|
6730
6999
|
"kind": "block",
|
|
6731
7000
|
"category": "Blocks/Billing",
|
|
6732
7001
|
"import": "@sakaniui/react/blocks",
|
|
6733
|
-
"
|
|
6734
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onDownload` to your real invoice PDF endpoint in place of the callback here.",
|
|
7002
|
+
"summary": "Billing History block (Billing): a composition example. Copy it into your project and edit it.",
|
|
6735
7003
|
"props": [
|
|
6736
7004
|
{
|
|
6737
7005
|
"name": "invoices",
|
|
@@ -6743,7 +7011,7 @@
|
|
|
6743
7011
|
"name": "loading",
|
|
6744
7012
|
"type": "boolean",
|
|
6745
7013
|
"required": false,
|
|
6746
|
-
"default":
|
|
7014
|
+
"default": false,
|
|
6747
7015
|
"description": "Shows the Skeleton loading state in place of `invoices` -- unlike Empty (derived from `invoices.length === 0`), there's no data yet at this point to derive it from."
|
|
6748
7016
|
},
|
|
6749
7017
|
{
|
|
@@ -6755,15 +7023,16 @@
|
|
|
6755
7023
|
"contract": {
|
|
6756
7024
|
"requiredProps": [],
|
|
6757
7025
|
"requiresAccessibleName": false
|
|
6758
|
-
}
|
|
7026
|
+
},
|
|
7027
|
+
"since": "0.3.0",
|
|
7028
|
+
"example": "import { BillingHistoryBlock } from '@sakaniui/react/blocks';\n\n<BillingHistoryBlock />"
|
|
6759
7029
|
},
|
|
6760
7030
|
{
|
|
6761
7031
|
"name": "BlogListingBlock",
|
|
6762
7032
|
"kind": "block",
|
|
6763
7033
|
"category": "Blocks/Marketing",
|
|
6764
7034
|
"import": "@sakaniui/react/blocks",
|
|
6765
|
-
"
|
|
6766
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire \"Read article\"/card clicks to your real routing in place of the callbacks here.",
|
|
7035
|
+
"summary": "Blog Listing block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
6767
7036
|
"props": [
|
|
6768
7037
|
{
|
|
6769
7038
|
"name": "eyebrow",
|
|
@@ -6805,15 +7074,16 @@
|
|
|
6805
7074
|
"posts"
|
|
6806
7075
|
],
|
|
6807
7076
|
"requiresAccessibleName": false
|
|
6808
|
-
}
|
|
7077
|
+
},
|
|
7078
|
+
"since": "0.3.0",
|
|
7079
|
+
"example": "import { BlogListingBlock } from '@sakaniui/react/blocks';\n\n<BlogListingBlock title=\"Title\" featuredPost={{ image: \"/images/example.jpg\", title: \"Title\", excerpt: \"Excerpt\", author: { name: \"Name\", date: \"Oct 21, 2026\" } }} posts={[{ image: \"/images/example.jpg\", category: \"Category\", readTime: \"5 min read\", title: \"Title\", excerpt: \"Excerpt\", author: { name: \"Name\", date: \"Oct 21, 2026\" } }]} />"
|
|
6809
7080
|
},
|
|
6810
7081
|
{
|
|
6811
7082
|
"name": "CareersBlock",
|
|
6812
7083
|
"kind": "block",
|
|
6813
7084
|
"category": "Blocks/Marketing",
|
|
6814
7085
|
"import": "@sakaniui/react/blocks",
|
|
6815
|
-
"
|
|
6816
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire \"Apply now\" to your real ATS/ application flow in place of the callback here.",
|
|
7086
|
+
"summary": "Careers block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
6817
7087
|
"props": [
|
|
6818
7088
|
{
|
|
6819
7089
|
"name": "eyebrow",
|
|
@@ -6849,15 +7119,16 @@
|
|
|
6849
7119
|
"jobs"
|
|
6850
7120
|
],
|
|
6851
7121
|
"requiresAccessibleName": false
|
|
6852
|
-
}
|
|
7122
|
+
},
|
|
7123
|
+
"since": "0.3.0",
|
|
7124
|
+
"example": "import { CareersBlock } from '@sakaniui/react/blocks';\n\n<CareersBlock title=\"Title\" jobs={[{ description: \"Description\", title: \"Title\", department: \"Department\", employmentType: \"Employment type\", location: \"Location\" }]} />"
|
|
6853
7125
|
},
|
|
6854
7126
|
{
|
|
6855
7127
|
"name": "ChatInterfaceBlock",
|
|
6856
7128
|
"kind": "block",
|
|
6857
7129
|
"category": "Blocks/Chat",
|
|
6858
7130
|
"import": "@sakaniui/react/blocks",
|
|
6859
|
-
"
|
|
6860
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file and edit it: change the nav groups, swap the conversations, edit the thread.",
|
|
7131
|
+
"summary": "Chat Interface block (Chat): a composition example. Copy it into your project and edit it.",
|
|
6861
7132
|
"props": [
|
|
6862
7133
|
{
|
|
6863
7134
|
"name": "state",
|
|
@@ -6879,15 +7150,16 @@
|
|
|
6879
7150
|
"contract": {
|
|
6880
7151
|
"requiredProps": [],
|
|
6881
7152
|
"requiresAccessibleName": false
|
|
6882
|
-
}
|
|
7153
|
+
},
|
|
7154
|
+
"since": "0.1.0",
|
|
7155
|
+
"example": "import { ChatInterfaceBlock } from '@sakaniui/react/blocks';\n\n<ChatInterfaceBlock />"
|
|
6883
7156
|
},
|
|
6884
7157
|
{
|
|
6885
7158
|
"name": "CheckoutFlowBlock",
|
|
6886
7159
|
"kind": "block",
|
|
6887
7160
|
"category": "Blocks/E-commerce",
|
|
6888
7161
|
"import": "@sakaniui/react/blocks",
|
|
6889
|
-
"
|
|
6890
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire the form submissions to your real shipping/payment APIs in place of the simulated flow here.",
|
|
7162
|
+
"summary": "Checkout Flow block (E-commerce): a composition example. Copy it into your project and edit it.",
|
|
6891
7163
|
"props": [
|
|
6892
7164
|
{
|
|
6893
7165
|
"name": "items",
|
|
@@ -6898,8 +7170,7 @@
|
|
|
6898
7170
|
"name": "shippingCost",
|
|
6899
7171
|
"type": "number",
|
|
6900
7172
|
"required": false,
|
|
6901
|
-
"default":
|
|
6902
|
-
"description": "0 (default) renders \"Free\" in the summary, matching Figma."
|
|
7173
|
+
"default": 0
|
|
6903
7174
|
},
|
|
6904
7175
|
{
|
|
6905
7176
|
"name": "initialStep",
|
|
@@ -6919,8 +7190,7 @@
|
|
|
6919
7190
|
{
|
|
6920
7191
|
"name": "formatPrice",
|
|
6921
7192
|
"type": "((amount: number) => string)",
|
|
6922
|
-
"required": false
|
|
6923
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
7193
|
+
"required": false
|
|
6924
7194
|
},
|
|
6925
7195
|
{
|
|
6926
7196
|
"name": "className",
|
|
@@ -6933,15 +7203,16 @@
|
|
|
6933
7203
|
"items"
|
|
6934
7204
|
],
|
|
6935
7205
|
"requiresAccessibleName": false
|
|
6936
|
-
}
|
|
7206
|
+
},
|
|
7207
|
+
"since": "0.3.0",
|
|
7208
|
+
"example": "import { CheckoutFlowBlock } from '@sakaniui/react/blocks';\n\n<CheckoutFlowBlock items={[{ image: \"/images/example.jpg\", name: \"Name\", price: 49, quantity: 1 }]} />"
|
|
6937
7209
|
},
|
|
6938
7210
|
{
|
|
6939
7211
|
"name": "CRMDashboardBlock",
|
|
6940
7212
|
"kind": "block",
|
|
6941
7213
|
"category": "Blocks/Application",
|
|
6942
7214
|
"import": "@sakaniui/react/blocks",
|
|
6943
|
-
"
|
|
6944
|
-
"summary": "A full-page CRM leads view assembled entirely from Sakani components: Sidebar (icon rail) · TopBar · Breadcrumb · Tabs · Checkbox · Select · Slider · Input · FilterChip · Button · Table · Pagination · Badge · Avatar.",
|
|
7215
|
+
"summary": "CRM Dashboard block (Application): a composition example. Copy it into your project and edit it.",
|
|
6945
7216
|
"props": [
|
|
6946
7217
|
{
|
|
6947
7218
|
"name": "className",
|
|
@@ -6958,15 +7229,16 @@
|
|
|
6958
7229
|
"contract": {
|
|
6959
7230
|
"requiredProps": [],
|
|
6960
7231
|
"requiresAccessibleName": false
|
|
6961
|
-
}
|
|
7232
|
+
},
|
|
7233
|
+
"since": "0.1.0",
|
|
7234
|
+
"example": "import { CRMDashboardBlock } from '@sakaniui/react/blocks';\n\n<CRMDashboardBlock />"
|
|
6962
7235
|
},
|
|
6963
7236
|
{
|
|
6964
7237
|
"name": "CtaBannerBlock",
|
|
6965
7238
|
"kind": "block",
|
|
6966
7239
|
"category": "Blocks/Marketing",
|
|
6967
7240
|
"import": "@sakaniui/react/blocks",
|
|
6968
|
-
"
|
|
6969
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire the two actions to your real signup/repo links in place of the callbacks here.",
|
|
7241
|
+
"summary": "Cta Banner block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
6970
7242
|
"props": [
|
|
6971
7243
|
{
|
|
6972
7244
|
"name": "title",
|
|
@@ -6992,7 +7264,7 @@
|
|
|
6992
7264
|
"name": "secondaryActionIcon",
|
|
6993
7265
|
"type": "boolean",
|
|
6994
7266
|
"required": false,
|
|
6995
|
-
"default":
|
|
7267
|
+
"default": false,
|
|
6996
7268
|
"description": "Shows the GitHub icon before the secondary action's label."
|
|
6997
7269
|
},
|
|
6998
7270
|
{
|
|
@@ -7003,8 +7275,7 @@
|
|
|
7003
7275
|
"neutral",
|
|
7004
7276
|
"accent"
|
|
7005
7277
|
],
|
|
7006
|
-
"default": "neutral"
|
|
7007
|
-
"description": "Figma Style axis (renamed to avoid colliding with the DOM `style` prop). Defaults to \"neutral\"."
|
|
7278
|
+
"default": "neutral"
|
|
7008
7279
|
},
|
|
7009
7280
|
{
|
|
7010
7281
|
"name": "className",
|
|
@@ -7019,15 +7290,16 @@
|
|
|
7019
7290
|
"primaryAction"
|
|
7020
7291
|
],
|
|
7021
7292
|
"requiresAccessibleName": false
|
|
7022
|
-
}
|
|
7293
|
+
},
|
|
7294
|
+
"since": "0.3.0",
|
|
7295
|
+
"example": "import { CtaBannerBlock } from '@sakaniui/react/blocks';\n\n<CtaBannerBlock title=\"Title\" description=\"Description\" primaryAction={{ label: \"Label\" }} />"
|
|
7023
7296
|
},
|
|
7024
7297
|
{
|
|
7025
7298
|
"name": "CurrentPlanBlock",
|
|
7026
7299
|
"kind": "block",
|
|
7027
7300
|
"category": "Blocks/Billing",
|
|
7028
7301
|
"import": "@sakaniui/react/blocks",
|
|
7029
|
-
"
|
|
7030
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire the action callbacks to your real subscription-management API in place of the ones here.",
|
|
7302
|
+
"summary": "Current Plan block (Billing): a composition example. Copy it into your project and edit it.",
|
|
7031
7303
|
"props": [
|
|
7032
7304
|
{
|
|
7033
7305
|
"name": "planName",
|
|
@@ -7064,8 +7336,7 @@
|
|
|
7064
7336
|
"name": "usageLabel",
|
|
7065
7337
|
"type": "string",
|
|
7066
7338
|
"required": false,
|
|
7067
|
-
"default": "Projects used"
|
|
7068
|
-
"description": "Usage row -- shown only in the \"active\" status, matching Figma."
|
|
7339
|
+
"default": "Projects used"
|
|
7069
7340
|
},
|
|
7070
7341
|
{
|
|
7071
7342
|
"name": "usageValue",
|
|
@@ -7076,7 +7347,7 @@
|
|
|
7076
7347
|
"name": "usagePercent",
|
|
7077
7348
|
"type": "number",
|
|
7078
7349
|
"required": false,
|
|
7079
|
-
"default":
|
|
7350
|
+
"default": 0,
|
|
7080
7351
|
"description": "0–100, drives the Progress bar."
|
|
7081
7352
|
},
|
|
7082
7353
|
{
|
|
@@ -7114,7 +7385,7 @@
|
|
|
7114
7385
|
"name": "loading",
|
|
7115
7386
|
"type": "boolean",
|
|
7116
7387
|
"required": false,
|
|
7117
|
-
"default":
|
|
7388
|
+
"default": false,
|
|
7118
7389
|
"description": "Shows the Skeleton loading state in place of everything else -- there's no plan data yet at this point to derive a status from."
|
|
7119
7390
|
},
|
|
7120
7391
|
{
|
|
@@ -7129,15 +7400,16 @@
|
|
|
7129
7400
|
"price"
|
|
7130
7401
|
],
|
|
7131
7402
|
"requiresAccessibleName": false
|
|
7132
|
-
}
|
|
7403
|
+
},
|
|
7404
|
+
"since": "0.3.0",
|
|
7405
|
+
"example": "import { CurrentPlanBlock } from '@sakaniui/react/blocks';\n\n<CurrentPlanBlock planName=\"Plan name\" price=\"Price\" />"
|
|
7133
7406
|
},
|
|
7134
7407
|
{
|
|
7135
7408
|
"name": "DataTableBlock",
|
|
7136
7409
|
"kind": "block",
|
|
7137
7410
|
"category": "Blocks/Application",
|
|
7138
7411
|
"import": "@sakaniui/react/blocks",
|
|
7139
|
-
"
|
|
7140
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: swap the sample data for your own, change the columns, add or remove toolbar controls.",
|
|
7412
|
+
"summary": "Data Table block (Application): a composition example. Copy it into your project and edit it.",
|
|
7141
7413
|
"props": [
|
|
7142
7414
|
{
|
|
7143
7415
|
"name": "state",
|
|
@@ -7168,21 +7440,22 @@
|
|
|
7168
7440
|
"contract": {
|
|
7169
7441
|
"requiredProps": [],
|
|
7170
7442
|
"requiresAccessibleName": false
|
|
7171
|
-
}
|
|
7443
|
+
},
|
|
7444
|
+
"since": "0.1.0",
|
|
7445
|
+
"example": "import { DataTableBlock } from '@sakaniui/react/blocks';\n\n<DataTableBlock />"
|
|
7172
7446
|
},
|
|
7173
7447
|
{
|
|
7174
7448
|
"name": "EmailVerificationBlock",
|
|
7175
7449
|
"kind": "block",
|
|
7176
7450
|
"category": "Blocks/Authentication",
|
|
7177
7451
|
"import": "@sakaniui/react/blocks",
|
|
7178
|
-
"
|
|
7179
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onVerify`/`onResend` to your real API calls in place of the simulated ones here.",
|
|
7452
|
+
"summary": "Email Verification block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
7180
7453
|
"props": [
|
|
7181
7454
|
{
|
|
7182
7455
|
"name": "email",
|
|
7183
7456
|
"type": "string",
|
|
7184
7457
|
"required": false,
|
|
7185
|
-
"default": "
|
|
7458
|
+
"default": "<email>"
|
|
7186
7459
|
},
|
|
7187
7460
|
{
|
|
7188
7461
|
"name": "initialStatus",
|
|
@@ -7218,15 +7491,16 @@
|
|
|
7218
7491
|
"contract": {
|
|
7219
7492
|
"requiredProps": [],
|
|
7220
7493
|
"requiresAccessibleName": false
|
|
7221
|
-
}
|
|
7494
|
+
},
|
|
7495
|
+
"since": "0.3.0",
|
|
7496
|
+
"example": "import { EmailVerificationBlock } from '@sakaniui/react/blocks';\n\n<EmailVerificationBlock />"
|
|
7222
7497
|
},
|
|
7223
7498
|
{
|
|
7224
7499
|
"name": "FaqBlock",
|
|
7225
7500
|
"kind": "block",
|
|
7226
7501
|
"category": "Blocks/Marketing",
|
|
7227
7502
|
"import": "@sakaniui/react/blocks",
|
|
7228
|
-
"
|
|
7229
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
7503
|
+
"summary": "Faq block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
7230
7504
|
"props": [
|
|
7231
7505
|
{
|
|
7232
7506
|
"name": "eyebrow",
|
|
@@ -7246,14 +7520,13 @@
|
|
|
7246
7520
|
},
|
|
7247
7521
|
{
|
|
7248
7522
|
"name": "columns",
|
|
7249
|
-
"type": "
|
|
7523
|
+
"type": "1 | 2",
|
|
7250
7524
|
"required": false,
|
|
7251
7525
|
"values": [
|
|
7252
|
-
|
|
7253
|
-
|
|
7526
|
+
1,
|
|
7527
|
+
2
|
|
7254
7528
|
],
|
|
7255
|
-
"default":
|
|
7256
|
-
"description": "Figma Layout axis: 1 = Single, 2 = Two-Column. Defaults to 1."
|
|
7529
|
+
"default": 1
|
|
7257
7530
|
},
|
|
7258
7531
|
{
|
|
7259
7532
|
"name": "className",
|
|
@@ -7267,15 +7540,16 @@
|
|
|
7267
7540
|
"items"
|
|
7268
7541
|
],
|
|
7269
7542
|
"requiresAccessibleName": false
|
|
7270
|
-
}
|
|
7543
|
+
},
|
|
7544
|
+
"since": "0.3.0",
|
|
7545
|
+
"example": "import { FaqBlock } from '@sakaniui/react/blocks';\n\n<FaqBlock title=\"Title\" items={[{ question: \"Question\", answer: \"Answer\" }]} />"
|
|
7271
7546
|
},
|
|
7272
7547
|
{
|
|
7273
7548
|
"name": "FeatureGridBlock",
|
|
7274
7549
|
"kind": "block",
|
|
7275
7550
|
"category": "Blocks/Marketing",
|
|
7276
7551
|
"import": "@sakaniui/react/blocks",
|
|
7277
|
-
"
|
|
7278
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
7552
|
+
"summary": "Feature Grid block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
7279
7553
|
"props": [
|
|
7280
7554
|
{
|
|
7281
7555
|
"name": "features",
|
|
@@ -7286,7 +7560,7 @@
|
|
|
7286
7560
|
"name": "columns",
|
|
7287
7561
|
"type": "number",
|
|
7288
7562
|
"required": false,
|
|
7289
|
-
"description": "Number of columns.
|
|
7563
|
+
"description": "Number of columns."
|
|
7290
7564
|
},
|
|
7291
7565
|
{
|
|
7292
7566
|
"name": "className",
|
|
@@ -7299,15 +7573,16 @@
|
|
|
7299
7573
|
"features"
|
|
7300
7574
|
],
|
|
7301
7575
|
"requiresAccessibleName": false
|
|
7302
|
-
}
|
|
7576
|
+
},
|
|
7577
|
+
"since": "0.3.0",
|
|
7578
|
+
"example": "import { FeatureGridBlock } from '@sakaniui/react/blocks';\n\n<FeatureGridBlock features={[{ icon: \"Icon\", title: \"Title\", description: \"Description\" }]} />"
|
|
7303
7579
|
},
|
|
7304
7580
|
{
|
|
7305
7581
|
"name": "FileUploadPanelBlock",
|
|
7306
7582
|
"kind": "block",
|
|
7307
7583
|
"category": "Blocks/Application",
|
|
7308
7584
|
"import": "@sakaniui/react/blocks",
|
|
7309
|
-
"
|
|
7310
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
7585
|
+
"summary": "File Upload Panel block (Application): a composition example. Copy it into your project and edit it.",
|
|
7311
7586
|
"props": [
|
|
7312
7587
|
{
|
|
7313
7588
|
"name": "state",
|
|
@@ -7329,15 +7604,16 @@
|
|
|
7329
7604
|
"contract": {
|
|
7330
7605
|
"requiredProps": [],
|
|
7331
7606
|
"requiresAccessibleName": false
|
|
7332
|
-
}
|
|
7607
|
+
},
|
|
7608
|
+
"since": "0.1.0",
|
|
7609
|
+
"example": "import { FileUploadPanelBlock } from '@sakaniui/react/blocks';\n\n<FileUploadPanelBlock />"
|
|
7333
7610
|
},
|
|
7334
7611
|
{
|
|
7335
7612
|
"name": "ForgotPasswordBlock",
|
|
7336
7613
|
"kind": "block",
|
|
7337
7614
|
"category": "Blocks/Authentication",
|
|
7338
7615
|
"import": "@sakaniui/react/blocks",
|
|
7339
|
-
"
|
|
7340
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onSubmit`/`onResend` to your real API calls in place of the simulated ones here.",
|
|
7616
|
+
"summary": "Forgot Password block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
7341
7617
|
"props": [
|
|
7342
7618
|
{
|
|
7343
7619
|
"name": "initialStatus",
|
|
@@ -7383,15 +7659,16 @@
|
|
|
7383
7659
|
"contract": {
|
|
7384
7660
|
"requiredProps": [],
|
|
7385
7661
|
"requiresAccessibleName": false
|
|
7386
|
-
}
|
|
7662
|
+
},
|
|
7663
|
+
"since": "0.3.0",
|
|
7664
|
+
"example": "import { ForgotPasswordBlock } from '@sakaniui/react/blocks';\n\n<ForgotPasswordBlock />"
|
|
7387
7665
|
},
|
|
7388
7666
|
{
|
|
7389
7667
|
"name": "FormModalBlock",
|
|
7390
7668
|
"kind": "block",
|
|
7391
7669
|
"category": "Blocks/Application",
|
|
7392
7670
|
"import": "@sakaniui/react/blocks",
|
|
7393
|
-
"
|
|
7394
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: swap the fields for your own form.",
|
|
7671
|
+
"summary": "Form Modal block (Application): a composition example. Copy it into your project and edit it.",
|
|
7395
7672
|
"props": [
|
|
7396
7673
|
{
|
|
7397
7674
|
"name": "open",
|
|
@@ -7415,15 +7692,16 @@
|
|
|
7415
7692
|
"onClose"
|
|
7416
7693
|
],
|
|
7417
7694
|
"requiresAccessibleName": false
|
|
7418
|
-
}
|
|
7695
|
+
},
|
|
7696
|
+
"since": "0.1.0",
|
|
7697
|
+
"example": "import { FormModalBlock } from '@sakaniui/react/blocks';\n\n<FormModalBlock open={true} onClose={() => {}} />"
|
|
7419
7698
|
},
|
|
7420
7699
|
{
|
|
7421
7700
|
"name": "HeroBlock",
|
|
7422
7701
|
"kind": "block",
|
|
7423
7702
|
"category": "Blocks/Marketing",
|
|
7424
7703
|
"import": "@sakaniui/react/blocks",
|
|
7425
|
-
"
|
|
7426
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire the two actions to your real signup/repo links in place of the callbacks here.",
|
|
7704
|
+
"summary": "Hero block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
7427
7705
|
"props": [
|
|
7428
7706
|
{
|
|
7429
7707
|
"name": "eyebrow",
|
|
@@ -7455,7 +7733,7 @@
|
|
|
7455
7733
|
"name": "secondaryActionIcon",
|
|
7456
7734
|
"type": "boolean",
|
|
7457
7735
|
"required": false,
|
|
7458
|
-
"default":
|
|
7736
|
+
"default": false,
|
|
7459
7737
|
"description": "Shows the GitHub icon before the secondary action's label."
|
|
7460
7738
|
},
|
|
7461
7739
|
{
|
|
@@ -7488,8 +7766,7 @@
|
|
|
7488
7766
|
"centered",
|
|
7489
7767
|
"split"
|
|
7490
7768
|
],
|
|
7491
|
-
"default": "centered"
|
|
7492
|
-
"description": "Figma Layout axis. Defaults to \"centered\"."
|
|
7769
|
+
"default": "centered"
|
|
7493
7770
|
},
|
|
7494
7771
|
{
|
|
7495
7772
|
"name": "className",
|
|
@@ -7505,15 +7782,16 @@
|
|
|
7505
7782
|
"image"
|
|
7506
7783
|
],
|
|
7507
7784
|
"requiresAccessibleName": false
|
|
7508
|
-
}
|
|
7785
|
+
},
|
|
7786
|
+
"since": "0.3.0",
|
|
7787
|
+
"example": "import { HeroBlock } from '@sakaniui/react/blocks';\n\n<HeroBlock title=\"Title\" description=\"Description\" primaryAction={{ label: \"Label\" }} image=\"/images/example.jpg\" />"
|
|
7509
7788
|
},
|
|
7510
7789
|
{
|
|
7511
7790
|
"name": "InlineCtaBlock",
|
|
7512
7791
|
"kind": "block",
|
|
7513
7792
|
"category": "Blocks/Application",
|
|
7514
7793
|
"import": "@sakaniui/react/blocks",
|
|
7515
|
-
"
|
|
7516
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
7794
|
+
"summary": "Inline Cta block (Application): a composition example. Copy it into your project and edit it.",
|
|
7517
7795
|
"props": [
|
|
7518
7796
|
{
|
|
7519
7797
|
"name": "variant",
|
|
@@ -7563,15 +7841,16 @@
|
|
|
7563
7841
|
"actionLabel"
|
|
7564
7842
|
],
|
|
7565
7843
|
"requiresAccessibleName": false
|
|
7566
|
-
}
|
|
7844
|
+
},
|
|
7845
|
+
"since": "0.1.0",
|
|
7846
|
+
"example": "import { InlineCtaBlock } from '@sakaniui/react/blocks';\n\n<InlineCtaBlock title=\"Title\" description=\"Description\" actionLabel=\"Action label\" />"
|
|
7567
7847
|
},
|
|
7568
7848
|
{
|
|
7569
7849
|
"name": "KanbanBoardBlock",
|
|
7570
7850
|
"kind": "block",
|
|
7571
7851
|
"category": "Blocks/Data & Content",
|
|
7572
7852
|
"import": "@sakaniui/react/blocks",
|
|
7573
|
-
"
|
|
7574
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file and edit it: change the columns, swap the sample tasks, adjust the card content. Assembled entirely from Sakani components.",
|
|
7853
|
+
"summary": "Kanban Board block (Data & Content): a composition example. Copy it into your project and edit it.",
|
|
7575
7854
|
"props": [
|
|
7576
7855
|
{
|
|
7577
7856
|
"name": "state",
|
|
@@ -7600,15 +7879,16 @@
|
|
|
7600
7879
|
"contract": {
|
|
7601
7880
|
"requiredProps": [],
|
|
7602
7881
|
"requiresAccessibleName": false
|
|
7603
|
-
}
|
|
7882
|
+
},
|
|
7883
|
+
"since": "0.1.0",
|
|
7884
|
+
"example": "import { KanbanBoardBlock } from '@sakaniui/react/blocks';\n\n<KanbanBoardBlock />"
|
|
7604
7885
|
},
|
|
7605
7886
|
{
|
|
7606
7887
|
"name": "LiquidDashboardBlock",
|
|
7607
7888
|
"kind": "block",
|
|
7608
7889
|
"category": "Blocks/Application",
|
|
7609
7890
|
"import": "@sakaniui/react/blocks",
|
|
7610
|
-
"
|
|
7611
|
-
"summary": "A full dashboard on a photograph, built the way the Sakani glass docs describe it: 1.",
|
|
7891
|
+
"summary": "A composition example: a full dashboard over a photograph, with the photo as a LiquidBackdrop so every liquid-glass lens refracts it.",
|
|
7612
7892
|
"props": [
|
|
7613
7893
|
{
|
|
7614
7894
|
"name": "backgroundImage",
|
|
@@ -7639,15 +7919,16 @@
|
|
|
7639
7919
|
"backgroundImage"
|
|
7640
7920
|
],
|
|
7641
7921
|
"requiresAccessibleName": false
|
|
7642
|
-
}
|
|
7922
|
+
},
|
|
7923
|
+
"since": "0.4.0",
|
|
7924
|
+
"example": "import { LiquidDashboardBlock } from '@sakaniui/react/blocks';\n\n<LiquidDashboardBlock backgroundImage=\"/images/example.jpg\" />"
|
|
7643
7925
|
},
|
|
7644
7926
|
{
|
|
7645
7927
|
"name": "LoginBlock",
|
|
7646
7928
|
"kind": "block",
|
|
7647
7929
|
"category": "Blocks/Authentication",
|
|
7648
7930
|
"import": "@sakaniui/react/blocks",
|
|
7649
|
-
"
|
|
7650
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onSubmit` to your real auth call in place of the simulated one here.",
|
|
7931
|
+
"summary": "Login block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
7651
7932
|
"props": [
|
|
7652
7933
|
{
|
|
7653
7934
|
"name": "initialStatus",
|
|
@@ -7698,15 +7979,16 @@
|
|
|
7698
7979
|
"contract": {
|
|
7699
7980
|
"requiredProps": [],
|
|
7700
7981
|
"requiresAccessibleName": false
|
|
7701
|
-
}
|
|
7982
|
+
},
|
|
7983
|
+
"since": "0.3.0",
|
|
7984
|
+
"example": "import { LoginBlock } from '@sakaniui/react/blocks';\n\n<LoginBlock />"
|
|
7702
7985
|
},
|
|
7703
7986
|
{
|
|
7704
7987
|
"name": "LogoCloudBlock",
|
|
7705
7988
|
"kind": "block",
|
|
7706
7989
|
"category": "Blocks/Marketing",
|
|
7707
7990
|
"import": "@sakaniui/react/blocks",
|
|
7708
|
-
"
|
|
7709
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component.tsx for your own actual customers' logos.",
|
|
7991
|
+
"summary": "Logo Cloud block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
7710
7992
|
"props": [
|
|
7711
7993
|
{
|
|
7712
7994
|
"name": "label",
|
|
@@ -7717,8 +7999,7 @@
|
|
|
7717
7999
|
{
|
|
7718
8000
|
"name": "brands",
|
|
7719
8001
|
"type": "LogoCloudBrand[]",
|
|
7720
|
-
"required": false
|
|
7721
|
-
"default": "['vercel', 'netlify', 'github', 'figma', 'notion', 'linear', 'stripe']"
|
|
8002
|
+
"required": false
|
|
7722
8003
|
},
|
|
7723
8004
|
{
|
|
7724
8005
|
"name": "variant",
|
|
@@ -7728,8 +8009,7 @@
|
|
|
7728
8009
|
"color",
|
|
7729
8010
|
"monochrome"
|
|
7730
8011
|
],
|
|
7731
|
-
"default": "monochrome"
|
|
7732
|
-
"description": "Figma Style axis (renamed to avoid colliding with the DOM `style` prop). Defaults to \"monochrome\"."
|
|
8012
|
+
"default": "monochrome"
|
|
7733
8013
|
},
|
|
7734
8014
|
{
|
|
7735
8015
|
"name": "className",
|
|
@@ -7740,15 +8020,16 @@
|
|
|
7740
8020
|
"contract": {
|
|
7741
8021
|
"requiredProps": [],
|
|
7742
8022
|
"requiresAccessibleName": false
|
|
7743
|
-
}
|
|
8023
|
+
},
|
|
8024
|
+
"since": "0.3.0",
|
|
8025
|
+
"example": "import { LogoCloudBlock } from '@sakaniui/react/blocks';\n\n<LogoCloudBlock />"
|
|
7744
8026
|
},
|
|
7745
8027
|
{
|
|
7746
8028
|
"name": "MultistepModalBlock",
|
|
7747
8029
|
"kind": "block",
|
|
7748
8030
|
"category": "Blocks/Application",
|
|
7749
8031
|
"import": "@sakaniui/react/blocks",
|
|
7750
|
-
"
|
|
7751
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: swap the steps/content for your own flow.",
|
|
8032
|
+
"summary": "Multistep Modal block (Application): a composition example. Copy it into your project and edit it.",
|
|
7752
8033
|
"props": [
|
|
7753
8034
|
{
|
|
7754
8035
|
"name": "open",
|
|
@@ -7764,7 +8045,7 @@
|
|
|
7764
8045
|
"name": "initialStep",
|
|
7765
8046
|
"type": "number",
|
|
7766
8047
|
"required": false,
|
|
7767
|
-
"default":
|
|
8048
|
+
"default": 0,
|
|
7768
8049
|
"description": "Which step to open on — for demoing a mid-flow state. Defaults to the first step."
|
|
7769
8050
|
},
|
|
7770
8051
|
{
|
|
@@ -7779,15 +8060,16 @@
|
|
|
7779
8060
|
"onClose"
|
|
7780
8061
|
],
|
|
7781
8062
|
"requiresAccessibleName": false
|
|
7782
|
-
}
|
|
8063
|
+
},
|
|
8064
|
+
"since": "0.1.0",
|
|
8065
|
+
"example": "import { MultistepModalBlock } from '@sakaniui/react/blocks';\n\n<MultistepModalBlock open={true} onClose={() => {}} />"
|
|
7783
8066
|
},
|
|
7784
8067
|
{
|
|
7785
8068
|
"name": "NotificationPanelBlock",
|
|
7786
8069
|
"kind": "block",
|
|
7787
|
-
"category": "
|
|
8070
|
+
"category": "Blocks",
|
|
7788
8071
|
"import": "@sakaniui/react/blocks",
|
|
7789
|
-
"
|
|
7790
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8072
|
+
"summary": "Notification Panel block: a composition example. Copy it into your project and edit it.",
|
|
7791
8073
|
"props": [
|
|
7792
8074
|
{
|
|
7793
8075
|
"name": "items",
|
|
@@ -7810,15 +8092,16 @@
|
|
|
7810
8092
|
"items"
|
|
7811
8093
|
],
|
|
7812
8094
|
"requiresAccessibleName": false
|
|
7813
|
-
}
|
|
8095
|
+
},
|
|
8096
|
+
"since": "0.1.0",
|
|
8097
|
+
"example": "import { NotificationPanelBlock } from '@sakaniui/react/blocks';\n\n<NotificationPanelBlock items={[{ id: \"item-1\", title: \"Title\", timestamp: \"2 min ago\" }]} />"
|
|
7814
8098
|
},
|
|
7815
8099
|
{
|
|
7816
8100
|
"name": "OnboardingProgressBlock",
|
|
7817
8101
|
"kind": "block",
|
|
7818
8102
|
"category": "Blocks/Application",
|
|
7819
8103
|
"import": "@sakaniui/react/blocks",
|
|
7820
|
-
"
|
|
7821
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8104
|
+
"summary": "Onboarding Progress block (Application): a composition example. Copy it into your project and edit it.",
|
|
7822
8105
|
"props": [
|
|
7823
8106
|
{
|
|
7824
8107
|
"name": "title",
|
|
@@ -7852,15 +8135,16 @@
|
|
|
7852
8135
|
"items"
|
|
7853
8136
|
],
|
|
7854
8137
|
"requiresAccessibleName": false
|
|
7855
|
-
}
|
|
8138
|
+
},
|
|
8139
|
+
"since": "0.3.0",
|
|
8140
|
+
"example": "import { OnboardingProgressBlock } from '@sakaniui/react/blocks';\n\n<OnboardingProgressBlock items={[{ label: \"Label\", progress: 50 }]} />"
|
|
7856
8141
|
},
|
|
7857
8142
|
{
|
|
7858
8143
|
"name": "OrderConfirmationBlock",
|
|
7859
8144
|
"kind": "block",
|
|
7860
8145
|
"category": "Blocks/E-commerce",
|
|
7861
8146
|
"import": "@sakaniui/react/blocks",
|
|
7862
|
-
"
|
|
7863
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire the \"Continue shopping\"/\"Track order\" actions to your real navigation in place of the no-op callbacks here.",
|
|
8147
|
+
"summary": "Order Confirmation block (E-commerce): a composition example. Copy it into your project and edit it.",
|
|
7864
8148
|
"props": [
|
|
7865
8149
|
{
|
|
7866
8150
|
"name": "orderNumber",
|
|
@@ -7896,8 +8180,7 @@
|
|
|
7896
8180
|
{
|
|
7897
8181
|
"name": "formatPrice",
|
|
7898
8182
|
"type": "((amount: number) => string)",
|
|
7899
|
-
"required": false
|
|
7900
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
8183
|
+
"required": false
|
|
7901
8184
|
},
|
|
7902
8185
|
{
|
|
7903
8186
|
"name": "className",
|
|
@@ -7912,15 +8195,16 @@
|
|
|
7912
8195
|
"total"
|
|
7913
8196
|
],
|
|
7914
8197
|
"requiresAccessibleName": false
|
|
7915
|
-
}
|
|
8198
|
+
},
|
|
8199
|
+
"since": "0.3.0",
|
|
8200
|
+
"example": "import { OrderConfirmationBlock } from '@sakaniui/react/blocks';\n\n<OrderConfirmationBlock orderNumber=\"Order number\" items={[{ image: \"/images/example.jpg\", name: \"Name\", price: 49 }]} total={49} />"
|
|
7916
8201
|
},
|
|
7917
8202
|
{
|
|
7918
8203
|
"name": "PaymentMethodBlock",
|
|
7919
8204
|
"kind": "block",
|
|
7920
8205
|
"category": "Blocks/Billing",
|
|
7921
8206
|
"import": "@sakaniui/react/blocks",
|
|
7922
|
-
"
|
|
7923
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component.) update/add flows.",
|
|
8207
|
+
"summary": "Payment Method block (Billing): a composition example. Copy it into your project and edit it.",
|
|
7924
8208
|
"props": [
|
|
7925
8209
|
{
|
|
7926
8210
|
"name": "card",
|
|
@@ -7942,7 +8226,7 @@
|
|
|
7942
8226
|
"name": "loading",
|
|
7943
8227
|
"type": "boolean",
|
|
7944
8228
|
"required": false,
|
|
7945
|
-
"default":
|
|
8229
|
+
"default": false,
|
|
7946
8230
|
"description": "Shows the Skeleton loading state in place of everything else -- there's no card data yet at this point to derive a status from."
|
|
7947
8231
|
},
|
|
7948
8232
|
{
|
|
@@ -7954,15 +8238,16 @@
|
|
|
7954
8238
|
"contract": {
|
|
7955
8239
|
"requiredProps": [],
|
|
7956
8240
|
"requiresAccessibleName": false
|
|
7957
|
-
}
|
|
8241
|
+
},
|
|
8242
|
+
"since": "0.3.0",
|
|
8243
|
+
"example": "import { PaymentMethodBlock } from '@sakaniui/react/blocks';\n\n<PaymentMethodBlock />"
|
|
7958
8244
|
},
|
|
7959
8245
|
{
|
|
7960
8246
|
"name": "PricingTableBlock",
|
|
7961
8247
|
"kind": "block",
|
|
7962
8248
|
"category": "Blocks/Marketing",
|
|
7963
8249
|
"import": "@sakaniui/react/blocks",
|
|
7964
|
-
"
|
|
7965
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire each plan's CTA to your real checkout/contact flow in place of the callbacks here.",
|
|
8250
|
+
"summary": "Pricing Table block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
7966
8251
|
"props": [
|
|
7967
8252
|
{
|
|
7968
8253
|
"name": "eyebrow",
|
|
@@ -7998,15 +8283,16 @@
|
|
|
7998
8283
|
"plans"
|
|
7999
8284
|
],
|
|
8000
8285
|
"requiresAccessibleName": false
|
|
8001
|
-
}
|
|
8286
|
+
},
|
|
8287
|
+
"since": "0.3.0",
|
|
8288
|
+
"example": "import { PricingTableBlock } from '@sakaniui/react/blocks';\n\n<PricingTableBlock title=\"Title\" plans={[{ name: \"Name\", price: \"Price\", description: \"Description\", ctaLabel: \"Cta label\", features: [\"Feature\"] }]} />"
|
|
8002
8289
|
},
|
|
8003
8290
|
{
|
|
8004
8291
|
"name": "ProductDetailBlock",
|
|
8005
8292
|
"kind": "block",
|
|
8006
8293
|
"category": "Blocks/E-commerce",
|
|
8007
8294
|
"import": "@sakaniui/react/blocks",
|
|
8008
|
-
"
|
|
8009
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire \"Add to cart\" to your real cart state/API in place of the callback here.",
|
|
8295
|
+
"summary": "Product Detail block (E-commerce): a composition example. Copy it into your project and edit it.",
|
|
8010
8296
|
"props": [
|
|
8011
8297
|
{
|
|
8012
8298
|
"name": "name",
|
|
@@ -8064,8 +8350,7 @@
|
|
|
8064
8350
|
{
|
|
8065
8351
|
"name": "defaultColor",
|
|
8066
8352
|
"type": "string",
|
|
8067
|
-
"required": false
|
|
8068
|
-
"description": "Defaults to the first available option in each list."
|
|
8353
|
+
"required": false
|
|
8069
8354
|
},
|
|
8070
8355
|
{
|
|
8071
8356
|
"name": "defaultSize",
|
|
@@ -8076,7 +8361,7 @@
|
|
|
8076
8361
|
"name": "minQuantity",
|
|
8077
8362
|
"type": "number",
|
|
8078
8363
|
"required": false,
|
|
8079
|
-
"default":
|
|
8364
|
+
"default": 1
|
|
8080
8365
|
},
|
|
8081
8366
|
{
|
|
8082
8367
|
"name": "maxQuantity",
|
|
@@ -8087,7 +8372,7 @@
|
|
|
8087
8372
|
"name": "defaultSaved",
|
|
8088
8373
|
"type": "boolean",
|
|
8089
8374
|
"required": false,
|
|
8090
|
-
"default":
|
|
8375
|
+
"default": false
|
|
8091
8376
|
},
|
|
8092
8377
|
{
|
|
8093
8378
|
"name": "onAddToCart",
|
|
@@ -8097,8 +8382,7 @@
|
|
|
8097
8382
|
{
|
|
8098
8383
|
"name": "formatPrice",
|
|
8099
8384
|
"type": "((amount: number) => string)",
|
|
8100
|
-
"required": false
|
|
8101
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
8385
|
+
"required": false
|
|
8102
8386
|
},
|
|
8103
8387
|
{
|
|
8104
8388
|
"name": "className",
|
|
@@ -8116,15 +8400,16 @@
|
|
|
8116
8400
|
"description"
|
|
8117
8401
|
],
|
|
8118
8402
|
"requiresAccessibleName": false
|
|
8119
|
-
}
|
|
8403
|
+
},
|
|
8404
|
+
"since": "0.3.0",
|
|
8405
|
+
"example": "import { ProductDetailBlock } from '@sakaniui/react/blocks';\n\n<ProductDetailBlock name=\"Name\" images={[{ src: \"/images/example.jpg\" }]} rating={4} stockQuantity={1} price={49} description=\"Description\" />"
|
|
8120
8406
|
},
|
|
8121
8407
|
{
|
|
8122
8408
|
"name": "ProductGridBlock",
|
|
8123
8409
|
"kind": "block",
|
|
8124
8410
|
"category": "Blocks/E-commerce",
|
|
8125
8411
|
"import": "@sakaniui/react/blocks",
|
|
8126
|
-
"
|
|
8127
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire \"Add Item\"/wishlist/sort to your real cart/catalog state in place of the callbacks here.",
|
|
8412
|
+
"summary": "Product Grid block (E-commerce): a composition example. Copy it into your project and edit it.",
|
|
8128
8413
|
"props": [
|
|
8129
8414
|
{
|
|
8130
8415
|
"name": "eyebrow",
|
|
@@ -8152,7 +8437,7 @@
|
|
|
8152
8437
|
"name": "showFilterBar",
|
|
8153
8438
|
"type": "boolean",
|
|
8154
8439
|
"required": false,
|
|
8155
|
-
"default":
|
|
8440
|
+
"default": false,
|
|
8156
8441
|
"description": "Adds the \"N products\" count + Sort button row above the grid -- see the file doc for why this stays a real prop rather than being derived."
|
|
8157
8442
|
},
|
|
8158
8443
|
{
|
|
@@ -8170,8 +8455,8 @@
|
|
|
8170
8455
|
"name": "columns",
|
|
8171
8456
|
"type": "number",
|
|
8172
8457
|
"required": false,
|
|
8173
|
-
"default":
|
|
8174
|
-
"description": "Number of columns at full width.
|
|
8458
|
+
"default": 4,
|
|
8459
|
+
"description": "Number of columns at full width."
|
|
8175
8460
|
},
|
|
8176
8461
|
{
|
|
8177
8462
|
"name": "className",
|
|
@@ -8185,15 +8470,16 @@
|
|
|
8185
8470
|
"products"
|
|
8186
8471
|
],
|
|
8187
8472
|
"requiresAccessibleName": false
|
|
8188
|
-
}
|
|
8473
|
+
},
|
|
8474
|
+
"since": "0.3.0",
|
|
8475
|
+
"example": "import { ProductGridBlock } from '@sakaniui/react/blocks';\n\n<ProductGridBlock title=\"Title\" products={[{ image: \"/images/example.jpg\", name: \"Name\", price: 49 }]} />"
|
|
8189
8476
|
},
|
|
8190
8477
|
{
|
|
8191
8478
|
"name": "ProfileSettingsBlock",
|
|
8192
8479
|
"kind": "block",
|
|
8193
8480
|
"category": "Blocks/Application",
|
|
8194
8481
|
"import": "@sakaniui/react/blocks",
|
|
8195
|
-
"
|
|
8196
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8482
|
+
"summary": "Profile Settings block (Application): a composition example. Copy it into your project and edit it.",
|
|
8197
8483
|
"props": [
|
|
8198
8484
|
{
|
|
8199
8485
|
"name": "name",
|
|
@@ -8226,15 +8512,16 @@
|
|
|
8226
8512
|
"contract": {
|
|
8227
8513
|
"requiredProps": [],
|
|
8228
8514
|
"requiresAccessibleName": false
|
|
8229
|
-
}
|
|
8515
|
+
},
|
|
8516
|
+
"since": "0.1.0",
|
|
8517
|
+
"example": "import { ProfileSettingsBlock } from '@sakaniui/react/blocks';\n\n<ProfileSettingsBlock />"
|
|
8230
8518
|
},
|
|
8231
8519
|
{
|
|
8232
8520
|
"name": "ResetPasswordBlock",
|
|
8233
8521
|
"kind": "block",
|
|
8234
8522
|
"category": "Blocks/Authentication",
|
|
8235
8523
|
"import": "@sakaniui/react/blocks",
|
|
8236
|
-
"
|
|
8237
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component.",
|
|
8524
|
+
"summary": "Reset Password block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
8238
8525
|
"props": [
|
|
8239
8526
|
{
|
|
8240
8527
|
"name": "initialStatus",
|
|
@@ -8274,15 +8561,16 @@
|
|
|
8274
8561
|
"contract": {
|
|
8275
8562
|
"requiredProps": [],
|
|
8276
8563
|
"requiresAccessibleName": false
|
|
8277
|
-
}
|
|
8564
|
+
},
|
|
8565
|
+
"since": "0.3.0",
|
|
8566
|
+
"example": "import { ResetPasswordBlock } from '@sakaniui/react/blocks';\n\n<ResetPasswordBlock />"
|
|
8278
8567
|
},
|
|
8279
8568
|
{
|
|
8280
8569
|
"name": "SectionFooterBlock",
|
|
8281
8570
|
"kind": "block",
|
|
8282
8571
|
"category": "Blocks/Application",
|
|
8283
8572
|
"import": "@sakaniui/react/blocks",
|
|
8284
|
-
"
|
|
8285
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8573
|
+
"summary": "Section Footer block (Application): a composition example. Copy it into your project and edit it.",
|
|
8286
8574
|
"props": [
|
|
8287
8575
|
{
|
|
8288
8576
|
"name": "text",
|
|
@@ -8293,8 +8581,7 @@
|
|
|
8293
8581
|
{
|
|
8294
8582
|
"name": "links",
|
|
8295
8583
|
"type": "SectionFooterLink[]",
|
|
8296
|
-
"required": false
|
|
8297
|
-
"default": "[\n { label: 'Docs', href: '#' },\n { label: 'Status', href: '#' },\n { label: 'Support', href: '#' },\n]"
|
|
8584
|
+
"required": false
|
|
8298
8585
|
},
|
|
8299
8586
|
{
|
|
8300
8587
|
"name": "variant",
|
|
@@ -8315,15 +8602,16 @@
|
|
|
8315
8602
|
"contract": {
|
|
8316
8603
|
"requiredProps": [],
|
|
8317
8604
|
"requiresAccessibleName": false
|
|
8318
|
-
}
|
|
8605
|
+
},
|
|
8606
|
+
"since": "0.3.0",
|
|
8607
|
+
"example": "import { SectionFooterBlock } from '@sakaniui/react/blocks';\n\n<SectionFooterBlock />"
|
|
8319
8608
|
},
|
|
8320
8609
|
{
|
|
8321
8610
|
"name": "ShoppingCartBlock",
|
|
8322
8611
|
"kind": "block",
|
|
8323
8612
|
"category": "Blocks/E-commerce",
|
|
8324
8613
|
"import": "@sakaniui/react/blocks",
|
|
8325
|
-
"
|
|
8326
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire \"Checkout\"/\"Continue shopping\" to your real cart/checkout flow in place of the callbacks here.",
|
|
8614
|
+
"summary": "Shopping Cart block (E-commerce): a composition example. Copy it into your project and edit it.",
|
|
8327
8615
|
"props": [
|
|
8328
8616
|
{
|
|
8329
8617
|
"name": "items",
|
|
@@ -8334,8 +8622,7 @@
|
|
|
8334
8622
|
"name": "shippingCost",
|
|
8335
8623
|
"type": "number",
|
|
8336
8624
|
"required": false,
|
|
8337
|
-
"default":
|
|
8338
|
-
"description": "0 (default) renders \"Free\" in the summary, matching Figma."
|
|
8625
|
+
"default": 0
|
|
8339
8626
|
},
|
|
8340
8627
|
{
|
|
8341
8628
|
"name": "onCheckout",
|
|
@@ -8350,8 +8637,7 @@
|
|
|
8350
8637
|
{
|
|
8351
8638
|
"name": "formatPrice",
|
|
8352
8639
|
"type": "((amount: number) => string)",
|
|
8353
|
-
"required": false
|
|
8354
|
-
"default": "(amount: number) =>\n amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })"
|
|
8640
|
+
"required": false
|
|
8355
8641
|
},
|
|
8356
8642
|
{
|
|
8357
8643
|
"name": "className",
|
|
@@ -8364,15 +8650,16 @@
|
|
|
8364
8650
|
"items"
|
|
8365
8651
|
],
|
|
8366
8652
|
"requiresAccessibleName": false
|
|
8367
|
-
}
|
|
8653
|
+
},
|
|
8654
|
+
"since": "0.3.0",
|
|
8655
|
+
"example": "import { ShoppingCartBlock } from '@sakaniui/react/blocks';\n\n<ShoppingCartBlock items={[{ image: \"/images/example.jpg\", name: \"Name\", price: 49, quantity: 1 }]} />"
|
|
8368
8656
|
},
|
|
8369
8657
|
{
|
|
8370
8658
|
"name": "SignUpBlock",
|
|
8371
8659
|
"kind": "block",
|
|
8372
8660
|
"category": "Blocks/Authentication",
|
|
8373
8661
|
"import": "@sakaniui/react/blocks",
|
|
8374
|
-
"
|
|
8375
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onSubmit` to your real registration call in place of the simulated one here.",
|
|
8662
|
+
"summary": "Sign Up block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
8376
8663
|
"props": [
|
|
8377
8664
|
{
|
|
8378
8665
|
"name": "initialStatus",
|
|
@@ -8412,15 +8699,16 @@
|
|
|
8412
8699
|
"contract": {
|
|
8413
8700
|
"requiredProps": [],
|
|
8414
8701
|
"requiresAccessibleName": false
|
|
8415
|
-
}
|
|
8702
|
+
},
|
|
8703
|
+
"since": "0.3.0",
|
|
8704
|
+
"example": "import { SignUpBlock } from '@sakaniui/react/blocks';\n\n<SignUpBlock />"
|
|
8416
8705
|
},
|
|
8417
8706
|
{
|
|
8418
8707
|
"name": "TeamSectionBlock",
|
|
8419
8708
|
"kind": "block",
|
|
8420
8709
|
"category": "Blocks/Marketing",
|
|
8421
8710
|
"import": "@sakaniui/react/blocks",
|
|
8422
|
-
"
|
|
8423
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8711
|
+
"summary": "Team Section block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
8424
8712
|
"props": [
|
|
8425
8713
|
{
|
|
8426
8714
|
"name": "eyebrow",
|
|
@@ -8456,15 +8744,16 @@
|
|
|
8456
8744
|
"members"
|
|
8457
8745
|
],
|
|
8458
8746
|
"requiresAccessibleName": false
|
|
8459
|
-
}
|
|
8747
|
+
},
|
|
8748
|
+
"since": "0.3.0",
|
|
8749
|
+
"example": "import { TeamSectionBlock } from '@sakaniui/react/blocks';\n\n<TeamSectionBlock title=\"Title\" members={[{ name: \"Name\", role: \"Role\", location: \"Location\", image: \"/images/example.jpg\" }]} />"
|
|
8460
8750
|
},
|
|
8461
8751
|
{
|
|
8462
8752
|
"name": "TestimonialBlock",
|
|
8463
8753
|
"kind": "block",
|
|
8464
8754
|
"category": "Blocks/Marketing",
|
|
8465
8755
|
"import": "@sakaniui/react/blocks",
|
|
8466
|
-
"
|
|
8467
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly.",
|
|
8756
|
+
"summary": "Testimonial block (Marketing): a composition example. Copy it into your project and edit it.",
|
|
8468
8757
|
"props": [
|
|
8469
8758
|
{
|
|
8470
8759
|
"name": "testimonials",
|
|
@@ -8482,15 +8771,16 @@
|
|
|
8482
8771
|
"testimonials"
|
|
8483
8772
|
],
|
|
8484
8773
|
"requiresAccessibleName": false
|
|
8485
|
-
}
|
|
8774
|
+
},
|
|
8775
|
+
"since": "0.3.0",
|
|
8776
|
+
"example": "import { TestimonialBlock } from '@sakaniui/react/blocks';\n\n<TestimonialBlock testimonials={[{ quote: \"Quote\", authorName: \"Author name\", authorRole: \"Author role\" }]} />"
|
|
8486
8777
|
},
|
|
8487
8778
|
{
|
|
8488
8779
|
"name": "TwoFactorAuthBlock",
|
|
8489
8780
|
"kind": "block",
|
|
8490
8781
|
"category": "Blocks/Authentication",
|
|
8491
8782
|
"import": "@sakaniui/react/blocks",
|
|
8492
|
-
"
|
|
8493
|
-
"summary": "A COMPOSITION EXAMPLE, not a configurable component. Copy this file into your project and edit it directly: wire `onVerify`/`onUseBackupCode` to your real API calls in place of the simulated ones here.",
|
|
8783
|
+
"summary": "Two Factor Auth block (Authentication): a composition example. Copy it into your project and edit it.",
|
|
8494
8784
|
"props": [
|
|
8495
8785
|
{
|
|
8496
8786
|
"name": "initialStatus",
|
|
@@ -8526,7 +8816,41 @@
|
|
|
8526
8816
|
"contract": {
|
|
8527
8817
|
"requiredProps": [],
|
|
8528
8818
|
"requiresAccessibleName": false
|
|
8529
|
-
}
|
|
8819
|
+
},
|
|
8820
|
+
"since": "0.3.0",
|
|
8821
|
+
"example": "import { TwoFactorAuthBlock } from '@sakaniui/react/blocks';\n\n<TwoFactorAuthBlock />"
|
|
8822
|
+
}
|
|
8823
|
+
],
|
|
8824
|
+
"utilities": [
|
|
8825
|
+
{
|
|
8826
|
+
"name": "DEFAULT_CHECKOUT_STEPS",
|
|
8827
|
+
"kind": "constant",
|
|
8828
|
+
"import": "@sakaniui/react"
|
|
8829
|
+
},
|
|
8830
|
+
{
|
|
8831
|
+
"name": "getContrastColor",
|
|
8832
|
+
"kind": "helper",
|
|
8833
|
+
"import": "@sakaniui/react"
|
|
8834
|
+
},
|
|
8835
|
+
{
|
|
8836
|
+
"name": "iconStrokeWidth",
|
|
8837
|
+
"kind": "helper",
|
|
8838
|
+
"import": "@sakaniui/react"
|
|
8839
|
+
},
|
|
8840
|
+
{
|
|
8841
|
+
"name": "syncLiquidBackdrop",
|
|
8842
|
+
"kind": "helper",
|
|
8843
|
+
"import": "@sakaniui/react"
|
|
8844
|
+
},
|
|
8845
|
+
{
|
|
8846
|
+
"name": "useHoverHighlight",
|
|
8847
|
+
"kind": "hook",
|
|
8848
|
+
"import": "@sakaniui/react"
|
|
8849
|
+
},
|
|
8850
|
+
{
|
|
8851
|
+
"name": "useLiquidGlass",
|
|
8852
|
+
"kind": "hook",
|
|
8853
|
+
"import": "@sakaniui/react"
|
|
8530
8854
|
}
|
|
8531
8855
|
]
|
|
8532
8856
|
}
|