@flikk/ui 1.0.0-beta.27 → 1.0.0-beta.29
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/dist/bg/1.webp +0 -0
- package/dist/bg/10.webp +0 -0
- package/dist/bg/11.webp +0 -0
- package/dist/bg/12.webp +0 -0
- package/dist/bg/13.webp +0 -0
- package/dist/bg/14.webp +0 -0
- package/dist/bg/15.webp +0 -0
- package/dist/bg/16.webp +0 -0
- package/dist/bg/17.webp +0 -0
- package/dist/bg/18.webp +0 -0
- package/dist/bg/19.webp +0 -0
- package/dist/bg/2.webp +0 -0
- package/dist/bg/20.webp +0 -0
- package/dist/bg/21.webp +0 -0
- package/dist/bg/22.webp +0 -0
- package/dist/bg/3.webp +0 -0
- package/dist/bg/4.webp +0 -0
- package/dist/bg/5.webp +0 -0
- package/dist/bg/6.webp +0 -0
- package/dist/bg/7.webp +0 -0
- package/dist/bg/8.webp +0 -0
- package/dist/bg/9.webp +0 -0
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +7 -143
- package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -88
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/canvas/Background.d.ts +19 -0
- package/dist/components/canvas/Background.js +23 -0
- package/dist/components/canvas/BaseNode.d.ts +15 -0
- package/dist/components/canvas/BaseNode.js +20 -0
- package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
- package/dist/components/canvas/CanvasToolbar.js +34 -0
- package/dist/components/canvas/Edge.d.ts +35 -0
- package/dist/components/canvas/Edge.js +97 -0
- package/dist/components/canvas/EdgeLayer.d.ts +18 -0
- package/dist/components/canvas/EdgeLayer.js +111 -0
- package/dist/components/canvas/Handle.d.ts +11 -0
- package/dist/components/canvas/Handle.js +63 -0
- package/dist/components/canvas/MiniMap.d.ts +22 -0
- package/dist/components/canvas/MiniMap.js +105 -0
- package/dist/components/canvas/NodeCanvas.d.ts +10 -0
- package/dist/components/canvas/NodeCanvas.js +477 -0
- package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
- package/dist/components/canvas/NodeCanvas.theme.js +9 -0
- package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
- package/dist/components/canvas/NodeControls.d.ts +25 -0
- package/dist/components/canvas/NodeControls.js +40 -0
- package/dist/components/canvas/NodeRenderer.d.ts +19 -0
- package/dist/components/canvas/NodeRenderer.js +117 -0
- package/dist/components/canvas/changes.d.ts +11 -0
- package/dist/components/canvas/changes.js +76 -0
- package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
- package/dist/components/canvas/context/CanvasContext.js +14 -0
- package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
- package/dist/components/canvas/context/ConnectionContext.js +13 -0
- package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
- package/dist/components/canvas/context/HandleRegistry.js +15 -0
- package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
- package/dist/components/canvas/context/InteractionContext.js +14 -0
- package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
- package/dist/components/canvas/context/NodeIdContext.js +15 -0
- package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
- package/dist/components/canvas/hooks/useConnection.js +29 -0
- package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
- package/dist/components/canvas/hooks/useMarquee.js +91 -0
- package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
- package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
- package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
- package/dist/components/canvas/hooks/usePanZoom.js +189 -0
- package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
- package/dist/components/canvas/hooks/useViewport.js +35 -0
- package/dist/components/canvas/index.d.ts +14 -0
- package/dist/components/canvas/index.js +12 -0
- package/dist/components/canvas/layout.d.ts +22 -0
- package/dist/components/canvas/layout.js +67 -0
- package/dist/components/canvas/utils.d.ts +4 -0
- package/dist/components/canvas/utils.js +16 -0
- package/dist/components/charts/AreaChart/AreaChart.js +136 -101
- package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
- package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
- package/dist/components/charts/BarChart/BarChart.js +207 -143
- package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
- package/dist/components/charts/BarChart/BarChart.types.js +1 -0
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
- package/dist/components/charts/LineChart/LineChart.js +88 -72
- package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
- package/dist/components/charts/hooks/index.d.ts +2 -0
- package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
- package/dist/components/charts/hooks/useChartDimensions.js +42 -0
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
- package/dist/components/charts/types/chart.types.d.ts +11 -2
- package/dist/components/charts/types/chart.types.js +10 -3
- package/dist/components/core/Avatar/Avatar.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
- package/dist/components/core/Badge/Badge.js +1 -1
- package/dist/components/core/Badge/Badge.theme.js +16 -15
- package/dist/components/core/Button/Button.js +1 -1
- package/dist/components/core/Button/Button.theme.js +2 -2
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- package/dist/components/core/Card/Card.js +7 -3
- package/dist/components/core/Card/Card.theme.js +3 -3
- package/dist/components/core/Card/Card.types.d.ts +27 -2
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +2 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +2 -2
- package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
- package/dist/components/core/Dropdown/Dropdown.theme.js +3 -3
- package/dist/components/core/Dropdown/DropdownMenu.js +57 -29
- package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
- package/dist/components/core/HeroCard/HeroCard.js +99 -0
- package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
- package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
- package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
- package/dist/components/core/HeroCard/index.d.ts +4 -0
- package/dist/components/core/Kbd/Kbd.theme.js +1 -1
- package/dist/components/core/Modal/Modal.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +2 -7
- package/dist/components/core/Modal/Modal.theme.js +4 -8
- package/dist/components/core/Modal/Modal.types.d.ts +0 -10
- package/dist/components/core/Modal/index.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
- package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
- package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
- package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
- package/dist/components/core/Segmented/Segmented.theme.js +2 -2
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/index.d.ts +1 -0
- package/dist/components/core/index.js +2 -0
- package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
- package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
- package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
- package/dist/components/data-display/Feed/Feed.js +28 -5
- package/dist/components/data-display/Feed/Feed.theme.js +1 -1
- package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
- package/dist/components/data-display/Feed/index.d.ts +1 -1
- package/dist/components/data-display/Metric/Metric.js +8 -8
- package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
- package/dist/components/data-display/Metric/Metric.theme.js +50 -68
- package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
- package/dist/components/data-display/Table/Table.js +2 -2
- package/dist/components/data-display/Table/Table.theme.js +24 -4
- package/dist/components/data-display/Table/Table.types.d.ts +8 -0
- package/dist/components/data-display/Table/TableBody.js +2 -2
- package/dist/components/data-display/Table/TableCell.js +1 -1
- package/dist/components/data-display/Table/TableRow.d.ts +1 -1
- package/dist/components/data-display/Table/TableRow.js +9 -2
- package/dist/components/data-display/Timeline/Timeline.js +27 -5
- package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
- package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
- package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
- package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
- package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
- package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
- package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
- package/dist/components/data-display/Timeline/index.d.ts +2 -2
- package/dist/components/effects/3d/index.d.ts +0 -2
- package/dist/components/effects/3d/index.js +0 -1
- package/dist/components/effects/DotPattern/DotPattern.js +1 -1
- package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
- package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
- package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
- package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
- package/dist/components/effects/Preloader/Preloader.js +119 -0
- package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
- package/dist/components/effects/Preloader/index.d.ts +2 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
- package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
- package/dist/components/effects/TiltCard/TiltCard.js +177 -0
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
- package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
- package/dist/components/effects/TiltCard/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +4 -12
- package/dist/components/effects/index.js +2 -6
- package/dist/components/forms/Checkbox/Checkbox.js +7 -1
- package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.js +1 -89
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
- package/dist/components/forms/Slider/Slider.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.js +27 -15
- package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
- package/dist/components/forms/Switch/Switch.theme.js +33 -4
- package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
- package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -90
- package/dist/components/forms/forms.theme.js +1 -1
- package/dist/components/forms/index.d.ts +0 -4
- package/dist/components/forms/index.js +0 -92
- package/dist/components/generative/GenerativeView.d.ts +21 -0
- package/dist/components/generative/GenerativeView.js +116 -0
- package/dist/components/generative/actions.d.ts +26 -0
- package/dist/components/generative/actions.js +51 -0
- package/dist/components/generative/index.d.ts +11 -0
- package/dist/components/generative/index.js +9 -0
- package/dist/components/generative/registry.d.ts +43 -0
- package/dist/components/generative/registry.js +114 -0
- package/dist/components/generative/resolvers.d.ts +35 -0
- package/dist/components/generative/resolvers.js +93 -0
- package/dist/components/generative/schema.generated.d.ts +2 -0
- package/dist/components/generative/schema.generated.js +1639 -0
- package/dist/components/generative/schemaTypes.d.ts +30 -0
- package/dist/components/generative/streaming.d.ts +39 -0
- package/dist/components/generative/streaming.js +283 -0
- package/dist/components/generative/tools.d.ts +21 -0
- package/dist/components/generative/tools.js +54 -0
- package/dist/components/generative/types.d.ts +41 -0
- package/dist/components/generative/useGenerativeStream.d.ts +37 -0
- package/dist/components/generative/useGenerativeStream.js +36 -0
- package/dist/components/generative/validate.d.ts +24 -0
- package/dist/components/generative/validate.js +259 -0
- package/dist/components/layout/AppShell/AppShell.theme.js +2 -2
- package/dist/components/layout/FormLayout/FormLayout.js +1 -90
- package/dist/components/layout/Grid/Grid.d.ts +3 -0
- package/dist/components/layout/Grid/Grid.js +50 -0
- package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
- package/dist/components/layout/Grid/Grid.theme.js +35 -0
- package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
- package/dist/components/layout/Grid/index.d.ts +3 -0
- package/dist/components/layout/Section/Section.d.ts +3 -0
- package/dist/components/layout/Section/Section.js +18 -0
- package/dist/components/layout/Section/Section.theme.d.ts +2 -0
- package/dist/components/layout/Section/Section.theme.js +10 -0
- package/dist/components/layout/Section/Section.types.d.ts +34 -0
- package/dist/components/layout/Section/index.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.js +19 -0
- package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
- package/dist/components/layout/Stack/Stack.theme.js +10 -0
- package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
- package/dist/components/layout/Stack/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +6 -0
- package/dist/generative.schema.json +1637 -0
- package/dist/index.js +180 -180
- package/dist/registry.json +648 -464
- package/dist/styles.css +1 -1
- package/dist/tools.json +1731 -0
- package/package.json +17 -4
- package/src/global.scss +53 -101
- package/src/styles/theme.css +687 -493
- package/dist/bg/1.jpg +0 -0
- package/dist/bg/10.jpg +0 -0
- package/dist/bg/11.jpg +0 -0
- package/dist/bg/14.jpg +0 -0
- package/dist/bg/15.jpg +0 -0
- package/dist/bg/16.jpg +0 -0
- package/dist/bg/17.jpg +0 -0
- package/dist/bg/18.jpg +0 -0
- package/dist/bg/19.jpg +0 -0
- package/dist/bg/2.jpg +0 -0
- package/dist/bg/20.jpg +0 -0
- package/dist/bg/21.jpg +0 -0
- package/dist/bg/22.jpg +0 -0
- package/dist/bg/23.jpg +0 -0
- package/dist/bg/24.jpg +0 -0
- package/dist/bg/3.jpg +0 -0
- package/dist/bg/4.jpg +0 -0
- package/dist/bg/5.jpg +0 -0
- package/dist/bg/6.jpg +0 -0
- package/dist/bg/7.jpg +0 -0
- package/dist/bg/8.jpg +0 -0
- package/dist/bg/9.jpg +0 -0
- package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
- package/dist/components/effects/MorphingText/MorphingText.js +0 -125
- package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
- package/dist/components/effects/MorphingText/index.d.ts +0 -2
- package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
- package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
- package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
- package/dist/components/effects/PageTransition/PageTransition.js +0 -82
- package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
- package/dist/components/effects/PageTransition/index.d.ts +0 -2
- package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
- package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
- package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
- package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
- package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
- package/dist/components/effects/Spotlight/Spotlight.js +0 -112
- package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
- package/dist/components/effects/Spotlight/index.d.ts +0 -2
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
- package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
- package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
- package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
- package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
- package/dist/components/effects/StickyScroll/index.d.ts +0 -2
- package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
- package/dist/components/forms/CronInput/CronInput.js +0 -113
- package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
- package/dist/components/forms/CronInput/CronInput.theme.js +0 -75
- package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
- package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
- package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
- package/dist/components/forms/CronInput/index.d.ts +0 -4
- /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
package/dist/registry.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
|
-
"libVersion": "1.0.0-beta.
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"componentCount":
|
|
3
|
+
"libVersion": "1.0.0-beta.29",
|
|
4
|
+
"generatedAt": "2026-06-16T12:41:33.964Z",
|
|
5
|
+
"componentCount": 122,
|
|
6
6
|
"components": [
|
|
7
7
|
{
|
|
8
8
|
"name": "Accordion",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"description": "Collapsible content sections using a compound component pattern. Supports single or multiple open items with separated or stacked visual variants.",
|
|
13
13
|
"status": "stable",
|
|
14
14
|
"productionReady": true,
|
|
15
|
+
"generative": false,
|
|
15
16
|
"props": {
|
|
16
17
|
"type": {
|
|
17
18
|
"type": "\"single\" | \"multiple\"",
|
|
@@ -69,6 +70,7 @@
|
|
|
69
70
|
"description": "Displays important messages with semantic color coding. Supports avatars, actions, and dismissible behavior.",
|
|
70
71
|
"status": "stable",
|
|
71
72
|
"productionReady": true,
|
|
73
|
+
"generative": true,
|
|
72
74
|
"props": {
|
|
73
75
|
"variant": {
|
|
74
76
|
"type": "AlertVariant",
|
|
@@ -139,6 +141,7 @@
|
|
|
139
141
|
"description": "A confirmation modal for interruptive actions that require user acknowledgment. Built on top of Modal with sensible defaults for destructive or critical actions.",
|
|
140
142
|
"status": "stable",
|
|
141
143
|
"productionReady": true,
|
|
144
|
+
"generative": false,
|
|
142
145
|
"props": {
|
|
143
146
|
"trigger": {
|
|
144
147
|
"type": "React.ReactNode",
|
|
@@ -174,6 +177,7 @@
|
|
|
174
177
|
"description": "Maintains a consistent width-to-height ratio for its children. Useful for images, videos, maps, and embedded content.",
|
|
175
178
|
"status": "stable",
|
|
176
179
|
"productionReady": true,
|
|
180
|
+
"generative": false,
|
|
177
181
|
"props": {
|
|
178
182
|
"ratio": {
|
|
179
183
|
"type": "number",
|
|
@@ -190,6 +194,7 @@
|
|
|
190
194
|
"description": "Displays a user profile image with optional status indicators, fallback initials, and tooltip support.",
|
|
191
195
|
"status": "stable",
|
|
192
196
|
"productionReady": true,
|
|
197
|
+
"generative": true,
|
|
193
198
|
"props": {
|
|
194
199
|
"src": {
|
|
195
200
|
"type": "string",
|
|
@@ -328,6 +333,7 @@
|
|
|
328
333
|
"description": "Displays multiple overlapping avatars in a group with overflow handling and customizable spacing.",
|
|
329
334
|
"status": "stable",
|
|
330
335
|
"productionReady": true,
|
|
336
|
+
"generative": false,
|
|
331
337
|
"props": {
|
|
332
338
|
"avatars": {
|
|
333
339
|
"type": "AvatarProps[]",
|
|
@@ -391,6 +397,7 @@
|
|
|
391
397
|
"description": "Badge component for displaying status labels, counters, or tags with multiple variants, colors, and optional dot/icon/avatar decorations.",
|
|
392
398
|
"status": "stable",
|
|
393
399
|
"productionReady": true,
|
|
400
|
+
"generative": true,
|
|
394
401
|
"props": {
|
|
395
402
|
"variant": {
|
|
396
403
|
"type": "BadgeVariant",
|
|
@@ -533,22 +540,17 @@
|
|
|
533
540
|
"--color-warning-400",
|
|
534
541
|
"--color-danger-400",
|
|
535
542
|
"--color-neutral-100",
|
|
536
|
-
"--color-primary-
|
|
537
|
-
"--color-primary-
|
|
538
|
-
"--color-primary-500",
|
|
543
|
+
"--color-primary-50",
|
|
544
|
+
"--color-primary-700",
|
|
539
545
|
"--color-primary-300",
|
|
540
|
-
"--color-secondary-
|
|
541
|
-
"--color-secondary-
|
|
542
|
-
"--color-secondary-500",
|
|
546
|
+
"--color-secondary-50",
|
|
547
|
+
"--color-secondary-700",
|
|
543
548
|
"--color-success-100",
|
|
544
|
-
"--color-success-
|
|
545
|
-
"--color-
|
|
546
|
-
"--color-warning-
|
|
547
|
-
"--color-
|
|
548
|
-
"--color-
|
|
549
|
-
"--color-danger-100",
|
|
550
|
-
"--color-danger-800",
|
|
551
|
-
"--color-danger-500"
|
|
549
|
+
"--color-success-700",
|
|
550
|
+
"--color-warning-50",
|
|
551
|
+
"--color-warning-700",
|
|
552
|
+
"--color-danger-50",
|
|
553
|
+
"--color-danger-700"
|
|
552
554
|
],
|
|
553
555
|
"codeExample": "import { Badge } from \"@flikk/ui\";\n\n<Badge variant=\"filled\" color=\"primary\">Admin</Badge>\n\n// With dot indicator\n<Badge color=\"success\" variant=\"soft\" withDot>Online</Badge>\n\n// With icon\n<Badge color=\"warning\" variant=\"outline\" iconStart={<BoltIcon />}>Priority</Badge>\n\n// Dismissible\n<Badge color=\"primary\" variant=\"soft\" dismissible onDismiss={() => {}}>React</Badge>"
|
|
554
556
|
},
|
|
@@ -560,6 +562,7 @@
|
|
|
560
562
|
"description": "Navigation breadcrumbs displaying the current location within a hierarchy with smart collapse behavior and customizable separators.",
|
|
561
563
|
"status": "stable",
|
|
562
564
|
"productionReady": true,
|
|
565
|
+
"generative": false,
|
|
563
566
|
"props": {
|
|
564
567
|
"items": {
|
|
565
568
|
"type": "BreadcrumbItem[]",
|
|
@@ -611,6 +614,7 @@
|
|
|
611
614
|
"description": "Versatile button component with multiple variants, colors, sizes, icon support, and ripple effects.",
|
|
612
615
|
"status": "stable",
|
|
613
616
|
"productionReady": true,
|
|
617
|
+
"generative": true,
|
|
614
618
|
"props": {
|
|
615
619
|
"color": {
|
|
616
620
|
"type": "ButtonColor",
|
|
@@ -816,6 +820,7 @@
|
|
|
816
820
|
"description": "Groups related buttons together with consistent styling, shared borders, and connected corners.",
|
|
817
821
|
"status": "stable",
|
|
818
822
|
"productionReady": true,
|
|
823
|
+
"generative": false,
|
|
819
824
|
"props": {
|
|
820
825
|
"orientation": {
|
|
821
826
|
"type": "ButtonGroupOrientation",
|
|
@@ -856,6 +861,7 @@
|
|
|
856
861
|
"description": "Date picker calendar with single and range selection modes, dropdown navigation, and date restriction support.",
|
|
857
862
|
"status": "stable",
|
|
858
863
|
"productionReady": true,
|
|
864
|
+
"generative": false,
|
|
859
865
|
"props": {
|
|
860
866
|
"mode": {
|
|
861
867
|
"type": "CalendarMode",
|
|
@@ -962,7 +968,6 @@
|
|
|
962
968
|
"lg"
|
|
963
969
|
],
|
|
964
970
|
"cssVariables": [
|
|
965
|
-
"--color-surface",
|
|
966
971
|
"--color-text-primary",
|
|
967
972
|
"--radius-base",
|
|
968
973
|
"--color-text-muted",
|
|
@@ -988,7 +993,25 @@
|
|
|
988
993
|
"description": "Flexible card component with compound sub-components (Header, Title, Subtitle, Body, Footer) for composable layouts.",
|
|
989
994
|
"status": "stable",
|
|
990
995
|
"productionReady": true,
|
|
991
|
-
"
|
|
996
|
+
"generative": true,
|
|
997
|
+
"props": {
|
|
998
|
+
"title": {
|
|
999
|
+
"type": "ReactNode",
|
|
1000
|
+
"description": "Header title (serializable slot-prop). Renders `Card.Header` + `Card.Title` internally. Mirrors `Section`. Omit and use the compound `Card.Header` parts for full control."
|
|
1001
|
+
},
|
|
1002
|
+
"subtitle": {
|
|
1003
|
+
"type": "ReactNode",
|
|
1004
|
+
"description": "Header subtitle (serializable slot-prop). Renders `Card.Subtitle`."
|
|
1005
|
+
},
|
|
1006
|
+
"actions": {
|
|
1007
|
+
"type": "ReactNode",
|
|
1008
|
+
"description": "Header-end controls — buttons, links, Segmented, a kebab menu, etc. Right-aligned next to the title. Holds `ReactNode`, so it is NOT part of the generative schema (app-code / hand-authored only), like `Section`'s. For a card whose primary control is a full Tabs bar, compose `Tabs` in the body instead of overloading this slot."
|
|
1009
|
+
},
|
|
1010
|
+
"footer": {
|
|
1011
|
+
"type": "ReactNode",
|
|
1012
|
+
"description": "Footer content (serializable slot-prop). Renders `Card.Footer`. Holds `ReactNode`, so it is excluded from the generative schema like `actions`."
|
|
1013
|
+
}
|
|
1014
|
+
},
|
|
992
1015
|
"subComponents": [
|
|
993
1016
|
"Card.Header",
|
|
994
1017
|
"Card.Title",
|
|
@@ -1006,10 +1029,10 @@
|
|
|
1006
1029
|
],
|
|
1007
1030
|
"cssVariables": [
|
|
1008
1031
|
"--card-radius",
|
|
1032
|
+
"--color-surface",
|
|
1009
1033
|
"--color-border",
|
|
1010
|
-
"--color-background-secondary",
|
|
1011
1034
|
"--color-text-primary",
|
|
1012
|
-
"--color-text-
|
|
1035
|
+
"--color-text-secondary"
|
|
1013
1036
|
],
|
|
1014
1037
|
"codeExample": "import { Card } from \"@flikk/ui\";\n\n<Card className=\"w-full max-w-[380px]\">\n <Card.Header>\n <Card.Title>Create project</Card.Title>\n <Card.Subtitle>Deploy your new project in one-click.</Card.Subtitle>\n </Card.Header>\n <Card.Body>\n <Input label=\"Name\" placeholder=\"Name of your project\" />\n <Select label=\"Framework\" placeholder=\"Select framework\" options={[...]} />\n </Card.Body>\n <Card.Footer className=\"flex flex-row justify-between gap-2\">\n <Button variant=\"outline\" color=\"neutral\" className=\"flex-1\">Cancel</Button>\n <Button variant=\"filled\" className=\"flex-1\">Deploy</Button>\n </Card.Footer>\n</Card>"
|
|
1015
1038
|
},
|
|
@@ -1021,6 +1044,7 @@
|
|
|
1021
1044
|
"description": "Interactive card stack with drag/swipe gestures and 3D tilt effects. Perfect for Tinder-style interfaces, onboarding flows, product showcases, and interactive carousels.",
|
|
1022
1045
|
"status": "beta",
|
|
1023
1046
|
"productionReady": false,
|
|
1047
|
+
"generative": false,
|
|
1024
1048
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
1025
1049
|
"props": {
|
|
1026
1050
|
"draggable": {
|
|
@@ -1142,6 +1166,7 @@
|
|
|
1142
1166
|
"description": "A flexible, accessible carousel component with support for horizontal/vertical orientations, loop mode, and customizable navigation controls. Built with compound components for maximum flexibility.",
|
|
1143
1167
|
"status": "beta",
|
|
1144
1168
|
"productionReady": false,
|
|
1169
|
+
"generative": false,
|
|
1145
1170
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
1146
1171
|
"props": {
|
|
1147
1172
|
"orientation": {
|
|
@@ -1204,6 +1229,7 @@
|
|
|
1204
1229
|
"description": "A command-K style command palette for quick navigation and actions. Supports keyboard navigation, search filtering, grouping, and keyboard shortcuts.",
|
|
1205
1230
|
"status": "stable",
|
|
1206
1231
|
"productionReady": true,
|
|
1232
|
+
"generative": false,
|
|
1207
1233
|
"props": {
|
|
1208
1234
|
"isOpen": {
|
|
1209
1235
|
"type": "boolean",
|
|
@@ -1294,6 +1320,7 @@
|
|
|
1294
1320
|
"description": "A context menu triggered by right-click, supporting checkable items, submenus, labels, and keyboard shortcuts.",
|
|
1295
1321
|
"status": "stable",
|
|
1296
1322
|
"productionReady": true,
|
|
1323
|
+
"generative": false,
|
|
1297
1324
|
"props": {
|
|
1298
1325
|
"onOpenChange": {
|
|
1299
1326
|
"type": "(isOpen: boolean) => void"
|
|
@@ -1335,6 +1362,7 @@
|
|
|
1335
1362
|
"description": "A small inline dot for separating text and metadata, like a middot between items. Decorative (aria-hidden) and flows with surrounding text.",
|
|
1336
1363
|
"status": "stable",
|
|
1337
1364
|
"productionReady": true,
|
|
1365
|
+
"generative": false,
|
|
1338
1366
|
"props": {
|
|
1339
1367
|
"size": {
|
|
1340
1368
|
"type": "DotSeparatorSize",
|
|
@@ -1362,6 +1390,7 @@
|
|
|
1362
1390
|
"description": "Drag and drop primitives built on Framer Motion. Provides Draggable and Droppable components with type-based accept filtering and animated transitions.",
|
|
1363
1391
|
"status": "beta",
|
|
1364
1392
|
"productionReady": false,
|
|
1393
|
+
"generative": false,
|
|
1365
1394
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
1366
1395
|
"props": {},
|
|
1367
1396
|
"separateExports": [
|
|
@@ -1390,6 +1419,7 @@
|
|
|
1390
1419
|
"description": "Slide-out panel that overlays content from the edge of the screen. Supports multiple positions, sizes, and compound component pattern with Content and Footer. Features an iOS-style scale background effect.",
|
|
1391
1420
|
"status": "stable",
|
|
1392
1421
|
"productionReady": true,
|
|
1422
|
+
"generative": false,
|
|
1393
1423
|
"props": {
|
|
1394
1424
|
"isOpen": {
|
|
1395
1425
|
"type": "boolean",
|
|
@@ -1478,6 +1508,7 @@
|
|
|
1478
1508
|
"description": "A dropdown component for displaying action menus with keyboard navigation, sections, icons, descriptions, and selection modes.",
|
|
1479
1509
|
"status": "stable",
|
|
1480
1510
|
"productionReady": true,
|
|
1511
|
+
"generative": false,
|
|
1481
1512
|
"props": {
|
|
1482
1513
|
"isOpen": {
|
|
1483
1514
|
"type": "boolean"
|
|
@@ -1541,7 +1572,7 @@
|
|
|
1541
1572
|
"--dropdown-radius",
|
|
1542
1573
|
"--color-border",
|
|
1543
1574
|
"--color-surface-overlay",
|
|
1544
|
-
"--color-text-
|
|
1575
|
+
"--color-text-secondary"
|
|
1545
1576
|
],
|
|
1546
1577
|
"codeExample": "import { Dropdown } from \"@flikk/ui\";\n\n<Dropdown>\n <Dropdown.Trigger>\n <Button variant=\"outline\" color=\"neutral\">\n Actions <ChevronDownIcon className=\"size-4\" />\n </Button>\n </Dropdown.Trigger>\n <Dropdown.Menu>\n <Dropdown.Item itemKey=\"edit\">Edit</Dropdown.Item>\n <Dropdown.Item itemKey=\"delete\" isDanger>Delete</Dropdown.Item>\n </Dropdown.Menu>\n</Dropdown>"
|
|
1547
1578
|
},
|
|
@@ -1553,6 +1584,7 @@
|
|
|
1553
1584
|
"description": "Empty state component for displaying when no data or content is available, with optional icon, description, and action buttons.",
|
|
1554
1585
|
"status": "stable",
|
|
1555
1586
|
"productionReady": true,
|
|
1587
|
+
"generative": false,
|
|
1556
1588
|
"props": {
|
|
1557
1589
|
"title": {
|
|
1558
1590
|
"type": "React.ReactNode",
|
|
@@ -1590,6 +1622,74 @@
|
|
|
1590
1622
|
],
|
|
1591
1623
|
"codeExample": "import { Empty } from \"@flikk/ui\";\n\n<Empty\n title=\"No items found\"\n subtitle=\"Get started by creating your first item.\"\n action={<Button>Create Item</Button>}\n/>"
|
|
1592
1624
|
},
|
|
1625
|
+
{
|
|
1626
|
+
"name": "HeroCard",
|
|
1627
|
+
"category": "core",
|
|
1628
|
+
"pattern": "simple",
|
|
1629
|
+
"importPath": "@flikk/ui/core",
|
|
1630
|
+
"description": "HeroCard component",
|
|
1631
|
+
"status": "stable",
|
|
1632
|
+
"productionReady": true,
|
|
1633
|
+
"generative": false,
|
|
1634
|
+
"props": {
|
|
1635
|
+
"image": {
|
|
1636
|
+
"type": "string | null",
|
|
1637
|
+
"description": "Backdrop image src. Defaults to the bundled `/bg/3.webp` (ship the `@flikk/ui/bg/ ` assets at `/bg/` or pass your own URL). Pass `null` for a gradient-only hero."
|
|
1638
|
+
},
|
|
1639
|
+
"imageBlur": {
|
|
1640
|
+
"type": "number",
|
|
1641
|
+
"default": "24",
|
|
1642
|
+
"description": "Backdrop blur radius in px."
|
|
1643
|
+
},
|
|
1644
|
+
"imageScale": {
|
|
1645
|
+
"type": "number",
|
|
1646
|
+
"default": "1.25",
|
|
1647
|
+
"description": "Backdrop scale factor — zooming the abstract blobs in/out reframes the texture."
|
|
1648
|
+
},
|
|
1649
|
+
"imageOpacity": {
|
|
1650
|
+
"type": "number",
|
|
1651
|
+
"default": "0.5",
|
|
1652
|
+
"description": "Backdrop opacity, 0–1."
|
|
1653
|
+
},
|
|
1654
|
+
"imageBlend": {
|
|
1655
|
+
"type": "HeroCardBlendMode",
|
|
1656
|
+
"default": "multiply",
|
|
1657
|
+
"description": "Blend mode compositing the image over the gradient."
|
|
1658
|
+
},
|
|
1659
|
+
"imagePosition": {
|
|
1660
|
+
"type": "string",
|
|
1661
|
+
"default": "center",
|
|
1662
|
+
"description": "CSS `background-position` — e.g. `\"top right\"`, `\"30% 70%\"`."
|
|
1663
|
+
},
|
|
1664
|
+
"parallax": {
|
|
1665
|
+
"type": "boolean",
|
|
1666
|
+
"default": "false",
|
|
1667
|
+
"description": "On pointer hover, drift the backdrop image opposite the cursor (damped) for a parallax-depth effect. Pairs with a `TiltCard` wrapper. Mouse-driven; respects `prefers-reduced-motion`; no-op without an `image`. Travel is bounded by the `imageScale` overscan so card edges never show."
|
|
1668
|
+
},
|
|
1669
|
+
"parallaxIntensity": {
|
|
1670
|
+
"type": "number",
|
|
1671
|
+
"default": "32",
|
|
1672
|
+
"description": "Max backdrop travel in px (each direction) when `parallax` is on. Auto-clamped to the available `imageScale` overscan."
|
|
1673
|
+
},
|
|
1674
|
+
"contentClassName": {
|
|
1675
|
+
"type": "string",
|
|
1676
|
+
"description": "className for the content wrapper (the layer lifted above the backdrop)."
|
|
1677
|
+
}
|
|
1678
|
+
},
|
|
1679
|
+
"themeKeys": [
|
|
1680
|
+
"baseStyle",
|
|
1681
|
+
"imageStyle",
|
|
1682
|
+
"contentStyle"
|
|
1683
|
+
],
|
|
1684
|
+
"cssVariables": [
|
|
1685
|
+
"--card-radius",
|
|
1686
|
+
"--color-primary-600",
|
|
1687
|
+
"--color-primary-700",
|
|
1688
|
+
"--color-primary-500",
|
|
1689
|
+
"--color-primary"
|
|
1690
|
+
],
|
|
1691
|
+
"codeExample": "import { HeroCard, Button } from \"@flikk/ui\";\n\n<HeroCard>\n <h2 className=\"text-3xl font-semibold\">Good morning, Maya</h2>\n <p className=\"mt-2 max-w-md text-white/70\">\n You have 3 reviews waiting and a design critique at 2:00 PM.\n </p>\n <Button color=\"neutral\" className=\"mt-6\">View agenda</Button>\n</HeroCard>"
|
|
1692
|
+
},
|
|
1593
1693
|
{
|
|
1594
1694
|
"name": "Icon",
|
|
1595
1695
|
"category": "core",
|
|
@@ -1598,6 +1698,7 @@
|
|
|
1598
1698
|
"description": "A unified icon component for payment brands, social platforms, and file types. The icon set is auto-detected from the",
|
|
1599
1699
|
"status": "stable",
|
|
1600
1700
|
"productionReady": true,
|
|
1701
|
+
"generative": false,
|
|
1601
1702
|
"props": {
|
|
1602
1703
|
"icon": {
|
|
1603
1704
|
"type": "IconName",
|
|
@@ -1636,6 +1737,7 @@
|
|
|
1636
1737
|
"description": "A striped placeholder surface for empty image / banner / cover slots. Composes",
|
|
1637
1738
|
"status": "stable",
|
|
1638
1739
|
"productionReady": true,
|
|
1740
|
+
"generative": false,
|
|
1639
1741
|
"props": {
|
|
1640
1742
|
"ratio": {
|
|
1641
1743
|
"type": "number",
|
|
@@ -1679,6 +1781,7 @@
|
|
|
1679
1781
|
"description": "Displays keyboard keys and shortcuts inline within text or instructions.",
|
|
1680
1782
|
"status": "stable",
|
|
1681
1783
|
"productionReady": true,
|
|
1784
|
+
"generative": false,
|
|
1682
1785
|
"props": {
|
|
1683
1786
|
"keys": {
|
|
1684
1787
|
"type": "KbdKey[]",
|
|
@@ -1699,7 +1802,7 @@
|
|
|
1699
1802
|
],
|
|
1700
1803
|
"cssVariables": [
|
|
1701
1804
|
"--radius-base",
|
|
1702
|
-
"--color-
|
|
1805
|
+
"--color-surface-raised",
|
|
1703
1806
|
"--color-border",
|
|
1704
1807
|
"--color-text-secondary",
|
|
1705
1808
|
"--color-text-muted"
|
|
@@ -1714,6 +1817,7 @@
|
|
|
1714
1817
|
"description": "A styled anchor component with built-in motion animations and size options.",
|
|
1715
1818
|
"status": "stable",
|
|
1716
1819
|
"productionReady": true,
|
|
1820
|
+
"generative": false,
|
|
1717
1821
|
"props": {
|
|
1718
1822
|
"size": {
|
|
1719
1823
|
"type": "LinkSize",
|
|
@@ -1739,6 +1843,7 @@
|
|
|
1739
1843
|
"description": "A responsive masonry layout component for arranging items in a grid with optimal space utilization.",
|
|
1740
1844
|
"status": "stable",
|
|
1741
1845
|
"productionReady": true,
|
|
1846
|
+
"generative": false,
|
|
1742
1847
|
"props": {
|
|
1743
1848
|
"columns": {
|
|
1744
1849
|
"type": "number | Record<number, number>",
|
|
@@ -1798,6 +1903,7 @@
|
|
|
1798
1903
|
"description": "Shared base component for menu items used by Dropdown and ContextMenu. Handles visual layout, keyboard activation, and focus tracking. Use inside Dropdown or ContextMenu rather than standalone.",
|
|
1799
1904
|
"status": "stable",
|
|
1800
1905
|
"productionReady": true,
|
|
1906
|
+
"generative": false,
|
|
1801
1907
|
"props": {
|
|
1802
1908
|
"startContent": {
|
|
1803
1909
|
"type": "ReactNode",
|
|
@@ -1866,6 +1972,7 @@
|
|
|
1866
1972
|
"description": "Chat message component supporting props-based and compound APIs, with role/variant semantics, streaming indicators, and typing animations.",
|
|
1867
1973
|
"status": "stable",
|
|
1868
1974
|
"productionReady": true,
|
|
1975
|
+
"generative": false,
|
|
1869
1976
|
"props": {
|
|
1870
1977
|
"role": {
|
|
1871
1978
|
"type": "MessageRole",
|
|
@@ -2061,6 +2168,7 @@
|
|
|
2061
2168
|
"description": "Modal dialog with compound component pattern, portal rendering, and multiple size options.",
|
|
2062
2169
|
"status": "stable",
|
|
2063
2170
|
"productionReady": true,
|
|
2171
|
+
"generative": false,
|
|
2064
2172
|
"props": {
|
|
2065
2173
|
"isOpen": {
|
|
2066
2174
|
"type": "boolean",
|
|
@@ -2073,15 +2181,6 @@
|
|
|
2073
2181
|
"size": {
|
|
2074
2182
|
"type": "ModalSize"
|
|
2075
2183
|
},
|
|
2076
|
-
"variant": {
|
|
2077
|
-
"type": "ModalVariant",
|
|
2078
|
-
"default": "default",
|
|
2079
|
-
"description": "Visual variant of the modal container. - `default`: Solid background with subtle ring - `translucent`: Frosted glass effect with reduced opacity and backdrop blur",
|
|
2080
|
-
"options": [
|
|
2081
|
-
"default",
|
|
2082
|
-
"translucent"
|
|
2083
|
-
]
|
|
2084
|
-
},
|
|
2085
2184
|
"closeOnOverlayClick": {
|
|
2086
2185
|
"type": "boolean"
|
|
2087
2186
|
},
|
|
@@ -2107,9 +2206,6 @@
|
|
|
2107
2206
|
"themeKeys": [
|
|
2108
2207
|
"overlay",
|
|
2109
2208
|
"container",
|
|
2110
|
-
"containerVariants",
|
|
2111
|
-
"default",
|
|
2112
|
-
"translucent",
|
|
2113
2209
|
"header",
|
|
2114
2210
|
"headerContent",
|
|
2115
2211
|
"title",
|
|
@@ -2121,7 +2217,6 @@
|
|
|
2121
2217
|
"--modal-radius",
|
|
2122
2218
|
"--color-surface-raised",
|
|
2123
2219
|
"--color-border",
|
|
2124
|
-
"--color-background",
|
|
2125
2220
|
"--color-text-primary",
|
|
2126
2221
|
"--color-text-muted"
|
|
2127
2222
|
],
|
|
@@ -2135,6 +2230,7 @@
|
|
|
2135
2230
|
"description": "iOS-style stacked modal with scale-down animation. Open a second modal and the first recedes with a smooth transition.",
|
|
2136
2231
|
"status": "stable",
|
|
2137
2232
|
"productionReady": true,
|
|
2233
|
+
"generative": false,
|
|
2138
2234
|
"props": {
|
|
2139
2235
|
"isOpen": {
|
|
2140
2236
|
"type": "boolean",
|
|
@@ -2171,6 +2267,7 @@
|
|
|
2171
2267
|
"description": "Navigation item for sidebars and menus, supporting icons, badges, nesting levels, and collapsed sidebar mode with tooltips.",
|
|
2172
2268
|
"status": "stable",
|
|
2173
2269
|
"productionReady": true,
|
|
2270
|
+
"generative": false,
|
|
2174
2271
|
"props": {
|
|
2175
2272
|
"startContent": {
|
|
2176
2273
|
"type": "ReactNode",
|
|
@@ -2288,6 +2385,7 @@
|
|
|
2288
2385
|
"description": "Displays network status to users, appearing when offline and optionally showing queued actions count.",
|
|
2289
2386
|
"status": "stable",
|
|
2290
2387
|
"productionReady": true,
|
|
2388
|
+
"generative": false,
|
|
2291
2389
|
"props": {
|
|
2292
2390
|
"position": {
|
|
2293
2391
|
"type": "OfflineIndicatorPosition",
|
|
@@ -2356,6 +2454,7 @@
|
|
|
2356
2454
|
"description": "Page-level heading component with support for breadcrumbs, back navigation, title with icon, subtitle, and action buttons.",
|
|
2357
2455
|
"status": "stable",
|
|
2358
2456
|
"productionReady": true,
|
|
2457
|
+
"generative": false,
|
|
2359
2458
|
"props": {
|
|
2360
2459
|
"separator": {
|
|
2361
2460
|
"type": "boolean",
|
|
@@ -2381,6 +2480,7 @@
|
|
|
2381
2480
|
],
|
|
2382
2481
|
"cssVariables": [
|
|
2383
2482
|
"--color-text-primary",
|
|
2483
|
+
"--color-text-secondary",
|
|
2384
2484
|
"--color-text-muted",
|
|
2385
2485
|
"--color-border"
|
|
2386
2486
|
],
|
|
@@ -2394,6 +2494,7 @@
|
|
|
2394
2494
|
"description": "Pagination component with previous/next buttons, page numbers, and ellipsis for large page counts.",
|
|
2395
2495
|
"status": "stable",
|
|
2396
2496
|
"productionReady": true,
|
|
2497
|
+
"generative": false,
|
|
2397
2498
|
"props": {
|
|
2398
2499
|
"currentPage": {
|
|
2399
2500
|
"type": "number",
|
|
@@ -2465,6 +2566,7 @@
|
|
|
2465
2566
|
"description": "A selectable chip component for filters, tags, and categories. Use for multi-select filter interfaces and tag selection.",
|
|
2466
2567
|
"status": "stable",
|
|
2467
2568
|
"productionReady": true,
|
|
2569
|
+
"generative": false,
|
|
2468
2570
|
"props": {
|
|
2469
2571
|
"size": {
|
|
2470
2572
|
"type": "PillSize",
|
|
@@ -2527,6 +2629,7 @@
|
|
|
2527
2629
|
"description": "A flexible popover component with compound pattern support, click/hover triggers, multiple placements, and backdrop overlays.",
|
|
2528
2630
|
"status": "stable",
|
|
2529
2631
|
"productionReady": true,
|
|
2632
|
+
"generative": false,
|
|
2530
2633
|
"props": {},
|
|
2531
2634
|
"subComponents": [
|
|
2532
2635
|
"Popover.Trigger",
|
|
@@ -2555,6 +2658,7 @@
|
|
|
2555
2658
|
"description": "Progress component for displaying linear progress bars with determinate or indeterminate states, multiple sizes, and flexible label positioning. Use className to style the fill bar, wrapperClassName for the track.",
|
|
2556
2659
|
"status": "stable",
|
|
2557
2660
|
"productionReady": true,
|
|
2661
|
+
"generative": true,
|
|
2558
2662
|
"props": {
|
|
2559
2663
|
"value": {
|
|
2560
2664
|
"type": "number",
|
|
@@ -2628,6 +2732,7 @@
|
|
|
2628
2732
|
"description": "Interactive star rating component for collecting or displaying ratings. Supports half-star increments, read-only mode, custom icons, keyboard navigation, and multiple color schemes.",
|
|
2629
2733
|
"status": "stable",
|
|
2630
2734
|
"productionReady": true,
|
|
2735
|
+
"generative": false,
|
|
2631
2736
|
"props": {
|
|
2632
2737
|
"value": {
|
|
2633
2738
|
"type": "number",
|
|
@@ -2730,6 +2835,7 @@
|
|
|
2730
2835
|
"description": "A custom scrollable container with styled scrollbars. Supports vertical, horizontal, or both directions, scroll snapping, and optional smooth momentum-based scrolling.",
|
|
2731
2836
|
"status": "stable",
|
|
2732
2837
|
"productionReady": true,
|
|
2838
|
+
"generative": false,
|
|
2733
2839
|
"props": {
|
|
2734
2840
|
"type": {
|
|
2735
2841
|
"type": "ScrollAreaType",
|
|
@@ -2756,9 +2862,14 @@
|
|
|
2756
2862
|
"default": "start",
|
|
2757
2863
|
"description": "Snap alignment applied to direct children via [&> ]:snap- . Only takes effect when `snap` is set."
|
|
2758
2864
|
},
|
|
2759
|
-
"
|
|
2865
|
+
"dragToScroll": {
|
|
2760
2866
|
"type": "boolean",
|
|
2761
2867
|
"default": "false",
|
|
2868
|
+
"description": "Enable mouse drag-to-scroll panning (grab the content and drag, like touch). Mouse-only — touch input already pans natively. A real drag needs ~4px of movement first, so plain clicks on content (cards, buttons) still work; the click that would follow a completed drag is suppressed. Drags never start from text fields, so selection inside inputs/textareas is unaffected."
|
|
2869
|
+
},
|
|
2870
|
+
"smooth": {
|
|
2871
|
+
"type": "boolean",
|
|
2872
|
+
"default": "true",
|
|
2762
2873
|
"description": "Enable smooth momentum-based scrolling"
|
|
2763
2874
|
},
|
|
2764
2875
|
"smoothConfig": {
|
|
@@ -2797,6 +2908,7 @@
|
|
|
2797
2908
|
"description": "A segmented control component that allows users to select one option from a set of segments. Uses compound component pattern with Segmented.Item.",
|
|
2798
2909
|
"status": "stable",
|
|
2799
2910
|
"productionReady": true,
|
|
2911
|
+
"generative": false,
|
|
2800
2912
|
"props": {
|
|
2801
2913
|
"value": {
|
|
2802
2914
|
"type": "string",
|
|
@@ -2843,14 +2955,13 @@
|
|
|
2843
2955
|
],
|
|
2844
2956
|
"cssVariables": [
|
|
2845
2957
|
"--segmented-radius",
|
|
2846
|
-
"--color-surface",
|
|
2847
2958
|
"--color-border",
|
|
2848
2959
|
"--segmented-padding",
|
|
2849
2960
|
"--segmented-min-h-sm",
|
|
2850
2961
|
"--segmented-min-h-md",
|
|
2851
2962
|
"--segmented-min-h-lg",
|
|
2852
2963
|
"--segmented-inner-radius",
|
|
2853
|
-
"--color-surface
|
|
2964
|
+
"--color-surface",
|
|
2854
2965
|
"--color-primary-500",
|
|
2855
2966
|
"--segmented-px-sm",
|
|
2856
2967
|
"--segmented-px-md",
|
|
@@ -2868,6 +2979,7 @@
|
|
|
2868
2979
|
"description": "A simple separator component for separating content horizontally or vertically, with configurable margin sizes.",
|
|
2869
2980
|
"status": "stable",
|
|
2870
2981
|
"productionReady": true,
|
|
2982
|
+
"generative": true,
|
|
2871
2983
|
"props": {
|
|
2872
2984
|
"vertical": {
|
|
2873
2985
|
"type": "boolean",
|
|
@@ -2907,6 +3019,7 @@
|
|
|
2907
3019
|
"description": "A compound sidebar navigation component with smooth collapse animations, collapsible rail, mobile full-screen overlay, self-managed submenus, accordion mode, user profile, and notification badges.",
|
|
2908
3020
|
"status": "stable",
|
|
2909
3021
|
"productionReady": true,
|
|
3022
|
+
"generative": false,
|
|
2910
3023
|
"props": {
|
|
2911
3024
|
"side": {
|
|
2912
3025
|
"type": "SidebarSide",
|
|
@@ -2995,6 +3108,7 @@
|
|
|
2995
3108
|
"description": "A loading placeholder that mimics content shape with support for text, circular, and rectangle variants.",
|
|
2996
3109
|
"status": "stable",
|
|
2997
3110
|
"productionReady": true,
|
|
3111
|
+
"generative": false,
|
|
2998
3112
|
"props": {
|
|
2999
3113
|
"variant": {
|
|
3000
3114
|
"type": "SkeletonVariant",
|
|
@@ -3047,6 +3161,7 @@
|
|
|
3047
3161
|
"description": "An animated number display with odometer-style digit transitions. Each digit slides independently for counters, statistics, and dynamic numeric displays.",
|
|
3048
3162
|
"status": "stable",
|
|
3049
3163
|
"productionReady": true,
|
|
3164
|
+
"generative": false,
|
|
3050
3165
|
"props": {
|
|
3051
3166
|
"value": {
|
|
3052
3167
|
"type": "number",
|
|
@@ -3088,6 +3203,7 @@
|
|
|
3088
3203
|
"description": "A drag-and-drop sortable list component with vertical and horizontal layouts, optional drag handles, and keyboard navigation support.",
|
|
3089
3204
|
"status": "beta",
|
|
3090
3205
|
"productionReady": false,
|
|
3206
|
+
"generative": false,
|
|
3091
3207
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
3092
3208
|
"props": {
|
|
3093
3209
|
"onReorder": {
|
|
@@ -3138,6 +3254,7 @@
|
|
|
3138
3254
|
"description": "A loading spinner component with multiple sizes and color options for indicating processing states.",
|
|
3139
3255
|
"status": "stable",
|
|
3140
3256
|
"productionReady": true,
|
|
3257
|
+
"generative": false,
|
|
3141
3258
|
"props": {
|
|
3142
3259
|
"size": {
|
|
3143
3260
|
"type": "SpinnerSize",
|
|
@@ -3178,6 +3295,7 @@
|
|
|
3178
3295
|
"description": "A tabs component that organizes content into separate views. Uses compound component pattern with Tabs.List, Tabs.Trigger, and Tabs.Body.",
|
|
3179
3296
|
"status": "stable",
|
|
3180
3297
|
"productionReady": true,
|
|
3298
|
+
"generative": false,
|
|
3181
3299
|
"props": {
|
|
3182
3300
|
"value": {
|
|
3183
3301
|
"type": "string",
|
|
@@ -3245,6 +3363,7 @@
|
|
|
3245
3363
|
"description": "Tag component for displaying removable labels or keywords. Commonly used in TagInput for multi-value selection.",
|
|
3246
3364
|
"status": "stable",
|
|
3247
3365
|
"productionReady": true,
|
|
3366
|
+
"generative": false,
|
|
3248
3367
|
"props": {
|
|
3249
3368
|
"size": {
|
|
3250
3369
|
"type": "TagSize",
|
|
@@ -3314,6 +3433,7 @@
|
|
|
3314
3433
|
"description": "Toast notifications provide brief, non-intrusive feedback about user actions with automatic stacking and dismissal.",
|
|
3315
3434
|
"status": "stable",
|
|
3316
3435
|
"productionReady": true,
|
|
3436
|
+
"generative": false,
|
|
3317
3437
|
"props": {
|
|
3318
3438
|
"toast": {
|
|
3319
3439
|
"type": "ToastData",
|
|
@@ -3400,6 +3520,7 @@
|
|
|
3400
3520
|
"description": "A tooltip component that displays contextual information on hover or focus. Supports multiple placements, custom delays, text wrapping, and rich content.",
|
|
3401
3521
|
"status": "stable",
|
|
3402
3522
|
"productionReady": true,
|
|
3523
|
+
"generative": false,
|
|
3403
3524
|
"props": {
|
|
3404
3525
|
"content": {
|
|
3405
3526
|
"type": "ReactNode",
|
|
@@ -3486,6 +3607,7 @@
|
|
|
3486
3607
|
"description": "A tree component for displaying hierarchical data with expand/collapse, single selection, and checkbox multi-selection with hierarchical parent-child relationships.",
|
|
3487
3608
|
"status": "stable",
|
|
3488
3609
|
"productionReady": true,
|
|
3610
|
+
"generative": false,
|
|
3489
3611
|
"props": {
|
|
3490
3612
|
"data": {
|
|
3491
3613
|
"type": "TreeNode[]",
|
|
@@ -3547,9 +3669,10 @@
|
|
|
3547
3669
|
"category": "data-display",
|
|
3548
3670
|
"pattern": "compound",
|
|
3549
3671
|
"importPath": "@flikk/ui/data-display",
|
|
3550
|
-
"description": "A key-value pair list for displaying labeled metadata
|
|
3672
|
+
"description": "A key-value pair list for displaying labeled metadata — profile details, order summaries, or settings panels. Items take",
|
|
3551
3673
|
"status": "stable",
|
|
3552
3674
|
"productionReady": true,
|
|
3675
|
+
"generative": true,
|
|
3553
3676
|
"props": {
|
|
3554
3677
|
"variant": {
|
|
3555
3678
|
"type": "DescriptionListVariant",
|
|
@@ -3558,6 +3681,18 @@
|
|
|
3558
3681
|
"horizontal",
|
|
3559
3682
|
"vertical"
|
|
3560
3683
|
]
|
|
3684
|
+
},
|
|
3685
|
+
"padding": {
|
|
3686
|
+
"type": "DescriptionListPadding",
|
|
3687
|
+
"description": "Edge padding behavior. `flush` (default) removes the item side padding so labels/values align flush with the container edges (e.g. inside a padded Card); `default` adds horizontal padding for standalone use.",
|
|
3688
|
+
"options": [
|
|
3689
|
+
"default",
|
|
3690
|
+
"flush"
|
|
3691
|
+
]
|
|
3692
|
+
},
|
|
3693
|
+
"items": {
|
|
3694
|
+
"type": "DescriptionListItemData[]",
|
|
3695
|
+
"description": "Data-driven items. When provided, the list renders from this array and any `children` are ignored (dev-warns). Omit it to use the compound API. Fully serializable — ideal for generative UI."
|
|
3561
3696
|
}
|
|
3562
3697
|
},
|
|
3563
3698
|
"subComponents": [
|
|
@@ -3566,15 +3701,18 @@
|
|
|
3566
3701
|
"themeKeys": [
|
|
3567
3702
|
"baseStyle",
|
|
3568
3703
|
"itemStyle",
|
|
3569
|
-
"
|
|
3570
|
-
"
|
|
3704
|
+
"paddingStyles",
|
|
3705
|
+
"default",
|
|
3706
|
+
"flush",
|
|
3707
|
+
"labelStyle",
|
|
3708
|
+
"valueStyle"
|
|
3571
3709
|
],
|
|
3572
3710
|
"cssVariables": [
|
|
3573
3711
|
"--color-border",
|
|
3574
3712
|
"--color-text-primary",
|
|
3575
3713
|
"--color-text-secondary"
|
|
3576
3714
|
],
|
|
3577
|
-
"codeExample": "import { DescriptionList } from \"@flikk/ui\";\n\n<DescriptionList>\n <DescriptionList.Item
|
|
3715
|
+
"codeExample": "import { DescriptionList } from \"@flikk/ui\";\n\n<DescriptionList padding=\"default\">\n <DescriptionList.Item label=\"Full name\" value=\"John Doe\" />\n <DescriptionList.Item label=\"Email address\" value=\"john.doe@example.com\" />\n <DescriptionList.Item label=\"Role\" value=\"Senior Software Engineer\" />\n <DescriptionList.Item label=\"Salary\" value=\"$120,000\" />\n <DescriptionList.Item\n label=\"About\"\n value=\"Passionate engineer with 8 years of experience building scalable web applications.\"\n />\n</DescriptionList>"
|
|
3578
3716
|
},
|
|
3579
3717
|
{
|
|
3580
3718
|
"name": "Feed",
|
|
@@ -3584,7 +3722,17 @@
|
|
|
3584
3722
|
"description": "A vertical timeline of activity events with composable indicator and content slots. Use it for audit logs, comment threads, or activity feeds.",
|
|
3585
3723
|
"status": "stable",
|
|
3586
3724
|
"productionReady": true,
|
|
3587
|
-
"
|
|
3725
|
+
"generative": true,
|
|
3726
|
+
"props": {
|
|
3727
|
+
"items": {
|
|
3728
|
+
"type": "FeedItemData[]",
|
|
3729
|
+
"description": "Data-driven items. When provided, the feed renders from this array and any `children` are ignored (dev-warns). Omit it to use the compound API. Fully serializable (resolve icon NAMES upstream) — ideal for generative UI."
|
|
3730
|
+
},
|
|
3731
|
+
"collapseAfter": {
|
|
3732
|
+
"type": "number",
|
|
3733
|
+
"description": "When set with `items`, items beyond this count are wrapped in a `Feed.Collapse` (shown behind a \"Show N more\" toggle). Ignored for the compound API."
|
|
3734
|
+
}
|
|
3735
|
+
},
|
|
3588
3736
|
"subComponents": [
|
|
3589
3737
|
"Feed.Item",
|
|
3590
3738
|
"Feed.Collapse"
|
|
@@ -3608,7 +3756,7 @@
|
|
|
3608
3756
|
],
|
|
3609
3757
|
"cssVariables": [
|
|
3610
3758
|
"--color-border",
|
|
3611
|
-
"--color-
|
|
3759
|
+
"--color-surface",
|
|
3612
3760
|
"--color-background",
|
|
3613
3761
|
"--color-text-muted",
|
|
3614
3762
|
"--color-primary",
|
|
@@ -3624,6 +3772,7 @@
|
|
|
3624
3772
|
"description": "GanttChart component",
|
|
3625
3773
|
"status": "beta",
|
|
3626
3774
|
"productionReady": false,
|
|
3775
|
+
"generative": false,
|
|
3627
3776
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
3628
3777
|
"props": {
|
|
3629
3778
|
"data": {
|
|
@@ -3799,6 +3948,7 @@
|
|
|
3799
3948
|
"description": "Displays a key performance indicator with value, trend, progress bars, and optional description.",
|
|
3800
3949
|
"status": "beta",
|
|
3801
3950
|
"productionReady": false,
|
|
3951
|
+
"generative": true,
|
|
3802
3952
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
3803
3953
|
"props": {
|
|
3804
3954
|
"value": {
|
|
@@ -3869,6 +4019,7 @@
|
|
|
3869
4019
|
"description": "Displays key business metrics with optional icons, trend indicators, and embedded sparkline charts.",
|
|
3870
4020
|
"status": "stable",
|
|
3871
4021
|
"productionReady": true,
|
|
4022
|
+
"generative": true,
|
|
3872
4023
|
"props": {
|
|
3873
4024
|
"value": {
|
|
3874
4025
|
"type": "string | number",
|
|
@@ -3921,66 +4072,53 @@
|
|
|
3921
4072
|
"baseStyle",
|
|
3922
4073
|
"variants",
|
|
3923
4074
|
"filled",
|
|
4075
|
+
"ghost",
|
|
3924
4076
|
"glass",
|
|
3925
|
-
"
|
|
4077
|
+
"iconContainerVariants",
|
|
3926
4078
|
"filled",
|
|
4079
|
+
"ghost",
|
|
3927
4080
|
"glass",
|
|
3928
|
-
"
|
|
3929
|
-
"filled",
|
|
4081
|
+
"iconColors",
|
|
3930
4082
|
"neutral",
|
|
3931
4083
|
"primary",
|
|
3932
4084
|
"secondary",
|
|
3933
4085
|
"success",
|
|
3934
4086
|
"warning",
|
|
3935
4087
|
"danger",
|
|
3936
|
-
"
|
|
4088
|
+
"iconGlassShadows",
|
|
3937
4089
|
"neutral",
|
|
3938
4090
|
"primary",
|
|
3939
4091
|
"secondary",
|
|
3940
4092
|
"success",
|
|
3941
4093
|
"warning",
|
|
3942
4094
|
"danger",
|
|
3943
|
-
"
|
|
4095
|
+
"contentPaddingSizes",
|
|
4096
|
+
"iconContainerSizes",
|
|
4097
|
+
"labelIconAlignSizes",
|
|
4098
|
+
"labelSizes",
|
|
3944
4099
|
"sm",
|
|
3945
|
-
"container",
|
|
3946
|
-
"contentPadding",
|
|
3947
|
-
"iconContainer",
|
|
3948
|
-
"label",
|
|
3949
|
-
"value",
|
|
3950
|
-
"subtitle",
|
|
3951
4100
|
"md",
|
|
3952
|
-
"container",
|
|
3953
|
-
"contentPadding",
|
|
3954
|
-
"iconContainer",
|
|
3955
|
-
"label",
|
|
3956
|
-
"value",
|
|
3957
|
-
"subtitle",
|
|
3958
4101
|
"lg",
|
|
3959
|
-
"
|
|
3960
|
-
"
|
|
3961
|
-
"iconContainer",
|
|
3962
|
-
"label",
|
|
3963
|
-
"value",
|
|
3964
|
-
"subtitle",
|
|
4102
|
+
"valueSizes",
|
|
4103
|
+
"subtitleSizes",
|
|
3965
4104
|
"labelStyle",
|
|
3966
4105
|
"valueStyle",
|
|
3967
4106
|
"subtitleStyle",
|
|
3968
4107
|
"iconContainerStyle"
|
|
3969
4108
|
],
|
|
3970
4109
|
"cssVariables": [
|
|
3971
|
-
"--metric-radius",
|
|
3972
4110
|
"--color-border",
|
|
3973
|
-
"--color-
|
|
4111
|
+
"--color-surface-raised",
|
|
3974
4112
|
"--color-text-primary",
|
|
3975
4113
|
"--color-primary",
|
|
3976
|
-
"--color-secondary",
|
|
3977
|
-
"--color-success",
|
|
3978
|
-
"--color-warning",
|
|
3979
|
-
"--color-danger",
|
|
3980
4114
|
"--color-primary-400",
|
|
4115
|
+
"--color-secondary",
|
|
3981
4116
|
"--color-secondary-400",
|
|
4117
|
+
"--color-success",
|
|
3982
4118
|
"--color-success-400",
|
|
4119
|
+
"--color-warning",
|
|
3983
4120
|
"--color-warning-400",
|
|
4121
|
+
"--color-danger",
|
|
3984
4122
|
"--color-danger-400",
|
|
3985
4123
|
"--color-text-secondary"
|
|
3986
4124
|
],
|
|
@@ -3994,6 +4132,7 @@
|
|
|
3994
4132
|
"description": "A feature-rich table component with dual API support (data-driven and declarative compound), sorting, selection, expandable rows, pagination, and column management.",
|
|
3995
4133
|
"status": "stable",
|
|
3996
4134
|
"productionReady": true,
|
|
4135
|
+
"generative": true,
|
|
3997
4136
|
"props": {
|
|
3998
4137
|
"data": {
|
|
3999
4138
|
"type": "T[]",
|
|
@@ -4007,6 +4146,10 @@
|
|
|
4007
4146
|
"type": "keyof T | ((row: T, index: number) => string | number)",
|
|
4008
4147
|
"description": "Property name or function to extract stable row identifiers for React keys and selection. Provides consistent component identity during row reordering or updates."
|
|
4009
4148
|
},
|
|
4149
|
+
"onRowClick": {
|
|
4150
|
+
"type": "(row: T) => void",
|
|
4151
|
+
"description": "Row-level click handler (data-driven API). When provided, body rows get a pointer cursor, keyboard focus (Enter/Space activates), and call back with the row record. Selection/expansion controls stop propagation as before."
|
|
4152
|
+
},
|
|
4010
4153
|
"variant": {
|
|
4011
4154
|
"type": "TableVariant",
|
|
4012
4155
|
"description": "Visual variant for different table styles"
|
|
@@ -4165,7 +4308,6 @@
|
|
|
4165
4308
|
"--color-neutral-700",
|
|
4166
4309
|
"--color-neutral-50",
|
|
4167
4310
|
"--color-neutral-800",
|
|
4168
|
-
"--color-text-secondary",
|
|
4169
4311
|
"--color-text-primary",
|
|
4170
4312
|
"--color-surface-hover",
|
|
4171
4313
|
"--color-primary",
|
|
@@ -4185,6 +4327,7 @@
|
|
|
4185
4327
|
"description": "A vertical or horizontal timeline component for displaying sequential events with animated entry on scroll.",
|
|
4186
4328
|
"status": "stable",
|
|
4187
4329
|
"productionReady": true,
|
|
4330
|
+
"generative": true,
|
|
4188
4331
|
"props": {
|
|
4189
4332
|
"layout": {
|
|
4190
4333
|
"type": "TimelineLayout",
|
|
@@ -4194,6 +4337,10 @@
|
|
|
4194
4337
|
"vertical",
|
|
4195
4338
|
"horizontal"
|
|
4196
4339
|
]
|
|
4340
|
+
},
|
|
4341
|
+
"items": {
|
|
4342
|
+
"type": "TimelineItemData[]",
|
|
4343
|
+
"description": "Data-driven items. When provided, the timeline renders from this array and any `children` are ignored (dev-warns). Omit it to use the compound API."
|
|
4197
4344
|
}
|
|
4198
4345
|
},
|
|
4199
4346
|
"subComponents": [
|
|
@@ -4206,26 +4353,33 @@
|
|
|
4206
4353
|
"baseStyleHorizontal",
|
|
4207
4354
|
"itemStyle",
|
|
4208
4355
|
"itemStyleHorizontal",
|
|
4209
|
-
"
|
|
4210
|
-
"
|
|
4356
|
+
"connectorStyle",
|
|
4357
|
+
"connectorStyleHorizontal",
|
|
4358
|
+
"connectorCompletedStyle",
|
|
4211
4359
|
"markerStyle",
|
|
4212
4360
|
"markerStatuses",
|
|
4213
4361
|
"completed",
|
|
4214
4362
|
"active",
|
|
4215
4363
|
"pending",
|
|
4216
4364
|
"contentStyle",
|
|
4217
|
-
"contentStyleHorizontal"
|
|
4365
|
+
"contentStyleHorizontal",
|
|
4366
|
+
"titleStyle",
|
|
4367
|
+
"descriptionStyle",
|
|
4368
|
+
"timestampStyle"
|
|
4218
4369
|
],
|
|
4219
4370
|
"cssVariables": [
|
|
4220
4371
|
"--color-border",
|
|
4221
4372
|
"--color-success",
|
|
4373
|
+
"--color-surface",
|
|
4222
4374
|
"--color-success-contrast",
|
|
4223
4375
|
"--color-primary",
|
|
4224
|
-
"--color-
|
|
4225
|
-
"--color-
|
|
4226
|
-
"--color-
|
|
4376
|
+
"--color-background",
|
|
4377
|
+
"--color-text-muted",
|
|
4378
|
+
"--color-text-primary",
|
|
4379
|
+
"--color-text-secondary",
|
|
4380
|
+
"--color-text-placeholder"
|
|
4227
4381
|
],
|
|
4228
|
-
"codeExample": "import { Timeline } from \"@flikk/ui\";\n\n<Timeline>\n <Timeline.Item status=\"completed\">\n <Timeline.Marker />\n <Timeline.Content>\n <h4 className=\"text-sm font-medium\">Order Placed</h4>\n <p className=\"text-sm text-
|
|
4382
|
+
"codeExample": "import { Timeline } from \"@flikk/ui\";\n\n<Timeline>\n <Timeline.Item status=\"completed\">\n <Timeline.Marker />\n <Timeline.Content>\n <h4 className=\"text-sm font-medium\">Order Placed</h4>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n March 15, 2025 at 9:30 AM\n </p>\n </Timeline.Content>\n </Timeline.Item>\n <Timeline.Item status=\"active\">\n <Timeline.Marker icon={<TruckIcon className=\"w-4 h-4\" />} />\n <Timeline.Content>\n <h4 className=\"text-sm font-medium\">In Transit</h4>\n </Timeline.Content>\n </Timeline.Item>\n <Timeline.Item status=\"pending\">\n <Timeline.Marker />\n <Timeline.Content>\n <h4 className=\"text-sm font-medium\">Delivered</h4>\n </Timeline.Content>\n </Timeline.Item>\n</Timeline>"
|
|
4229
4383
|
},
|
|
4230
4384
|
{
|
|
4231
4385
|
"name": "Checkbox",
|
|
@@ -4235,6 +4389,7 @@
|
|
|
4235
4389
|
"description": "A checkbox component for selecting one or more options, with support for indeterminate state, descriptions, and two sizes. Supports standalone usage or Checkbox.Group for centralized state management.",
|
|
4236
4390
|
"status": "stable",
|
|
4237
4391
|
"productionReady": true,
|
|
4392
|
+
"generative": false,
|
|
4238
4393
|
"props": {
|
|
4239
4394
|
"id": {
|
|
4240
4395
|
"type": "string"
|
|
@@ -4305,6 +4460,7 @@
|
|
|
4305
4460
|
"description": "A compound color picker component with canvas, sliders, format selector, eye dropper, preset swatches, and saved colors. Supports hex, RGB, and HSL output formats with solid, gradient, and image modes.",
|
|
4306
4461
|
"status": "stable",
|
|
4307
4462
|
"productionReady": true,
|
|
4463
|
+
"generative": false,
|
|
4308
4464
|
"props": {
|
|
4309
4465
|
"value": {
|
|
4310
4466
|
"type": "string",
|
|
@@ -4454,6 +4610,7 @@
|
|
|
4454
4610
|
"description": "Combobox component",
|
|
4455
4611
|
"status": "stable",
|
|
4456
4612
|
"productionReady": true,
|
|
4613
|
+
"generative": false,
|
|
4457
4614
|
"props": {
|
|
4458
4615
|
"options": {
|
|
4459
4616
|
"type": "ComboboxOption<T>[]",
|
|
@@ -4600,132 +4757,6 @@
|
|
|
4600
4757
|
],
|
|
4601
4758
|
"codeExample": "import { Combobox } from \"@flikk/ui\";\n\n<Combobox\n options={users}\n value={value}\n onChange={setValue}\n label=\"Assign to\"\n placeholder=\"Search team members...\"\n helperText=\"Start typing to search\"\n/>"
|
|
4602
4759
|
},
|
|
4603
|
-
{
|
|
4604
|
-
"name": "CronInput",
|
|
4605
|
-
"category": "forms",
|
|
4606
|
-
"pattern": "enhanced",
|
|
4607
|
-
"importPath": "@flikk/ui/forms",
|
|
4608
|
-
"description": "A visual cron expression builder that outputs standard cron syntax. Supports visual builder mode, raw cron string input, preset schedules, human-readable descriptions, and next run time previews.",
|
|
4609
|
-
"status": "stable",
|
|
4610
|
-
"productionReady": true,
|
|
4611
|
-
"props": {
|
|
4612
|
-
"value": {
|
|
4613
|
-
"type": "string",
|
|
4614
|
-
"description": "Controlled cron expression string, e.g. \"0 9 1\""
|
|
4615
|
-
},
|
|
4616
|
-
"defaultValue": {
|
|
4617
|
-
"type": "string",
|
|
4618
|
-
"description": "Default cron expression for uncontrolled usage"
|
|
4619
|
-
},
|
|
4620
|
-
"onChange": {
|
|
4621
|
-
"type": "(cronExpression: string) => void",
|
|
4622
|
-
"description": "Callback fired when the cron expression changes"
|
|
4623
|
-
},
|
|
4624
|
-
"showPresets": {
|
|
4625
|
-
"type": "boolean",
|
|
4626
|
-
"description": "Whether to show preset schedule buttons"
|
|
4627
|
-
},
|
|
4628
|
-
"showDescription": {
|
|
4629
|
-
"type": "boolean",
|
|
4630
|
-
"description": "Whether to show the human-readable description"
|
|
4631
|
-
},
|
|
4632
|
-
"showNextRuns": {
|
|
4633
|
-
"type": "boolean",
|
|
4634
|
-
"description": "Whether to show upcoming execution times"
|
|
4635
|
-
},
|
|
4636
|
-
"nextRunCount": {
|
|
4637
|
-
"type": "number",
|
|
4638
|
-
"description": "Number of next run times to display (default: 3)"
|
|
4639
|
-
},
|
|
4640
|
-
"size": {
|
|
4641
|
-
"type": "CronInputSize",
|
|
4642
|
-
"description": "Size variant",
|
|
4643
|
-
"options": [
|
|
4644
|
-
"sm",
|
|
4645
|
-
"md",
|
|
4646
|
-
"lg"
|
|
4647
|
-
]
|
|
4648
|
-
},
|
|
4649
|
-
"mode": {
|
|
4650
|
-
"type": "CronInputMode",
|
|
4651
|
-
"description": "Display mode: visual builder, raw string input, or both",
|
|
4652
|
-
"options": [
|
|
4653
|
-
"visual",
|
|
4654
|
-
"raw",
|
|
4655
|
-
"both"
|
|
4656
|
-
]
|
|
4657
|
-
},
|
|
4658
|
-
"state": {
|
|
4659
|
-
"type": "CronInputState",
|
|
4660
|
-
"default": "default",
|
|
4661
|
-
"description": "Validation/interaction state",
|
|
4662
|
-
"options": [
|
|
4663
|
-
"default",
|
|
4664
|
-
"disabled",
|
|
4665
|
-
"invalid"
|
|
4666
|
-
]
|
|
4667
|
-
},
|
|
4668
|
-
"disabled": {
|
|
4669
|
-
"type": "boolean",
|
|
4670
|
-
"description": "Whether the input is disabled @deprecated Use `state=\"disabled\"` instead"
|
|
4671
|
-
},
|
|
4672
|
-
"label": {
|
|
4673
|
-
"type": "string",
|
|
4674
|
-
"description": "Label text for the component"
|
|
4675
|
-
},
|
|
4676
|
-
"helperText": {
|
|
4677
|
-
"type": "React.ReactNode",
|
|
4678
|
-
"description": "Helper text displayed below the component"
|
|
4679
|
-
}
|
|
4680
|
-
},
|
|
4681
|
-
"themeKeys": [
|
|
4682
|
-
"baseStyle",
|
|
4683
|
-
"labelStyle",
|
|
4684
|
-
"builderStyle",
|
|
4685
|
-
"fieldGroupStyle",
|
|
4686
|
-
"fieldLabelStyle",
|
|
4687
|
-
"fieldSelectStyle",
|
|
4688
|
-
"fieldSelectSizes",
|
|
4689
|
-
"sm",
|
|
4690
|
-
"md",
|
|
4691
|
-
"lg",
|
|
4692
|
-
"rawInputStyle",
|
|
4693
|
-
"rawInputSizes",
|
|
4694
|
-
"sm",
|
|
4695
|
-
"md",
|
|
4696
|
-
"lg",
|
|
4697
|
-
"modeToggleStyle",
|
|
4698
|
-
"modeToggleActiveStyle",
|
|
4699
|
-
"presetButtonStyle",
|
|
4700
|
-
"presetButtonActiveStyle",
|
|
4701
|
-
"descriptionStyle",
|
|
4702
|
-
"nextRunsStyle",
|
|
4703
|
-
"nextRunItemStyle",
|
|
4704
|
-
"sectionHeadingStyle",
|
|
4705
|
-
"errorStyle"
|
|
4706
|
-
],
|
|
4707
|
-
"cssVariables": [
|
|
4708
|
-
"--color-text-primary",
|
|
4709
|
-
"--color-text-secondary",
|
|
4710
|
-
"--form-radius",
|
|
4711
|
-
"--color-border",
|
|
4712
|
-
"--color-surface",
|
|
4713
|
-
"--color-primary-600",
|
|
4714
|
-
"--color-primary",
|
|
4715
|
-
"--color-background-disabled",
|
|
4716
|
-
"--color-text-disabled",
|
|
4717
|
-
"--color-primary-500",
|
|
4718
|
-
"--color-text-placeholder",
|
|
4719
|
-
"--color-surface-hover",
|
|
4720
|
-
"--color-primary-50",
|
|
4721
|
-
"--color-primary-400",
|
|
4722
|
-
"--color-primary-100",
|
|
4723
|
-
"--color-text-muted",
|
|
4724
|
-
"--color-danger",
|
|
4725
|
-
"--color-danger-400"
|
|
4726
|
-
],
|
|
4727
|
-
"codeExample": "import { CronInput } from \"@flikk/ui\";\n\n<CronInput\n label=\"Schedule\"\n defaultValue=\"0 9 * * 1-5\"\n showPresets\n showDescription\n showNextRuns\n onChange={(cron) => console.log(cron)}\n/>"
|
|
4728
|
-
},
|
|
4729
4760
|
{
|
|
4730
4761
|
"name": "DatePicker",
|
|
4731
4762
|
"category": "forms",
|
|
@@ -4734,6 +4765,7 @@
|
|
|
4734
4765
|
"description": "A date picker component with support for single dates, date ranges, custom formats, presets, and date restrictions.",
|
|
4735
4766
|
"status": "stable",
|
|
4736
4767
|
"productionReady": true,
|
|
4768
|
+
"generative": false,
|
|
4737
4769
|
"props": {
|
|
4738
4770
|
"id": {
|
|
4739
4771
|
"type": "string",
|
|
@@ -4929,6 +4961,7 @@
|
|
|
4929
4961
|
"description": "A dedicated date range picker with preset sidebar, dual calendars, and Apply/Cancel footer.",
|
|
4930
4962
|
"status": "stable",
|
|
4931
4963
|
"productionReady": true,
|
|
4964
|
+
"generative": false,
|
|
4932
4965
|
"props": {
|
|
4933
4966
|
"id": {
|
|
4934
4967
|
"type": "string",
|
|
@@ -5123,6 +5156,7 @@
|
|
|
5123
5156
|
"description": "A drag-and-drop file upload component with file type validation, size limits, image previews, and multiple file support.",
|
|
5124
5157
|
"status": "stable",
|
|
5125
5158
|
"productionReady": true,
|
|
5159
|
+
"generative": false,
|
|
5126
5160
|
"props": {
|
|
5127
5161
|
"accept": {
|
|
5128
5162
|
"type": "string | string[]",
|
|
@@ -5246,6 +5280,7 @@
|
|
|
5246
5280
|
"description": "An internal label component used by all form elements. Use the label prop on form components (Input, Select, Textarea) rather than using FormLabel directly.",
|
|
5247
5281
|
"status": "stable",
|
|
5248
5282
|
"productionReady": true,
|
|
5283
|
+
"generative": false,
|
|
5249
5284
|
"props": {
|
|
5250
5285
|
"htmlFor": {
|
|
5251
5286
|
"type": "string",
|
|
@@ -5283,6 +5318,7 @@
|
|
|
5283
5318
|
"description": "A versatile input component with support for icons, addons, password toggle, number controls, and various states. Follows the four-slot system with iconStart, iconEnd, contentStart, and contentEnd.",
|
|
5284
5319
|
"status": "stable",
|
|
5285
5320
|
"productionReady": true,
|
|
5321
|
+
"generative": false,
|
|
5286
5322
|
"props": {
|
|
5287
5323
|
"size": {
|
|
5288
5324
|
"type": "InputSize",
|
|
@@ -5460,6 +5496,7 @@
|
|
|
5460
5496
|
"description": "A composite input component for collecting address information. Displays street address, state, country, and postal code fields as a unified control with connected borders.",
|
|
5461
5497
|
"status": "stable",
|
|
5462
5498
|
"productionReady": true,
|
|
5499
|
+
"generative": false,
|
|
5463
5500
|
"props": {
|
|
5464
5501
|
"showCountrySelector": {
|
|
5465
5502
|
"type": "boolean",
|
|
@@ -5542,6 +5579,7 @@
|
|
|
5542
5579
|
"description": "A numeric counter component with animated sliding number display. Features increment/decrement buttons, min/max constraints, keyboard navigation, and custom step sizes including decimals.",
|
|
5543
5580
|
"status": "stable",
|
|
5544
5581
|
"productionReady": true,
|
|
5582
|
+
"generative": false,
|
|
5545
5583
|
"props": {
|
|
5546
5584
|
"value": {
|
|
5547
5585
|
"type": "number",
|
|
@@ -5618,6 +5656,7 @@
|
|
|
5618
5656
|
"description": "A composite component for collecting credit card information. Displays card number, expiry date, and CVC fields as a unified control with automatic formatting and connected borders.",
|
|
5619
5657
|
"status": "stable",
|
|
5620
5658
|
"productionReady": true,
|
|
5659
|
+
"generative": false,
|
|
5621
5660
|
"props": {
|
|
5622
5661
|
"state": {
|
|
5623
5662
|
"type": "'default' | 'disabled' | 'invalid'",
|
|
@@ -5693,6 +5732,7 @@
|
|
|
5693
5732
|
"description": "A masked date input with automatic slash insertion. Type numbers continuously (e.g.,",
|
|
5694
5733
|
"status": "stable",
|
|
5695
5734
|
"productionReady": true,
|
|
5735
|
+
"generative": false,
|
|
5696
5736
|
"props": {
|
|
5697
5737
|
"value": {
|
|
5698
5738
|
"type": "string",
|
|
@@ -5729,6 +5769,7 @@
|
|
|
5729
5769
|
"description": "A one-time password input component for authentication and verification flows. Supports customizable length, auto-focus, paste handling, and keyboard navigation between fields.",
|
|
5730
5770
|
"status": "stable",
|
|
5731
5771
|
"productionReady": true,
|
|
5772
|
+
"generative": false,
|
|
5732
5773
|
"props": {
|
|
5733
5774
|
"length": {
|
|
5734
5775
|
"type": "number",
|
|
@@ -5801,6 +5842,7 @@
|
|
|
5801
5842
|
"description": "InputTag component for entering multiple tags or keywords. Supports Enter, comma, and paste for adding tags. Backspace removes the last tag when input is empty. Optionally supports dropdown suggestions.",
|
|
5802
5843
|
"status": "stable",
|
|
5803
5844
|
"productionReady": true,
|
|
5845
|
+
"generative": false,
|
|
5804
5846
|
"props": {
|
|
5805
5847
|
"value": {
|
|
5806
5848
|
"type": "string[]",
|
|
@@ -5927,6 +5969,7 @@
|
|
|
5927
5969
|
"description": "An @mention input that shows a suggestion dropdown when the user types a trigger character. Selected mentions render as inline Tag chips with avatars. Supports multiple triggers, keyboard navigation, async search, and custom renderers.",
|
|
5928
5970
|
"status": "stable",
|
|
5929
5971
|
"productionReady": true,
|
|
5972
|
+
"generative": false,
|
|
5930
5973
|
"props": {
|
|
5931
5974
|
"triggers": {
|
|
5932
5975
|
"type": "MentionTrigger[]",
|
|
@@ -6073,6 +6116,7 @@
|
|
|
6073
6116
|
"description": "Radio component for selecting one option from a group of mutually exclusive choices. Supports standalone usage or Radio.Group for centralized state management.",
|
|
6074
6117
|
"status": "stable",
|
|
6075
6118
|
"productionReady": true,
|
|
6119
|
+
"generative": false,
|
|
6076
6120
|
"props": {
|
|
6077
6121
|
"id": {
|
|
6078
6122
|
"type": "string"
|
|
@@ -6143,6 +6187,7 @@
|
|
|
6143
6187
|
"description": "A rich text editor with formatting toolbar supporting bold, italic, underline, alignment, font sizes, colors, and undo/redo.",
|
|
6144
6188
|
"status": "beta",
|
|
6145
6189
|
"productionReady": false,
|
|
6190
|
+
"generative": false,
|
|
6146
6191
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
6147
6192
|
"props": {
|
|
6148
6193
|
"size": {
|
|
@@ -6265,6 +6310,7 @@
|
|
|
6265
6310
|
"description": "A customizable select component with support for labels, helper text, searchable options, typeahead, creatable options, and portal-based dropdown positioning.",
|
|
6266
6311
|
"status": "stable",
|
|
6267
6312
|
"productionReady": true,
|
|
6313
|
+
"generative": false,
|
|
6268
6314
|
"props": {
|
|
6269
6315
|
"id": {
|
|
6270
6316
|
"type": "string",
|
|
@@ -6464,6 +6510,7 @@
|
|
|
6464
6510
|
"description": "A flexible card for single or multi-select choices. Children can be any content — the card handles selection state, indicator rendering, and keyboard navigation. Use SelectableCard.Group for coordinated selection, or use standalone with checked/onChange props.",
|
|
6465
6511
|
"status": "stable",
|
|
6466
6512
|
"productionReady": true,
|
|
6513
|
+
"generative": false,
|
|
6467
6514
|
"props": {
|
|
6468
6515
|
"value": {
|
|
6469
6516
|
"type": "string",
|
|
@@ -6535,6 +6582,7 @@
|
|
|
6535
6582
|
"description": "A canvas-based signature capture component. Supports mouse and touch input, customizable stroke color and width, and exports signatures as data URLs.",
|
|
6536
6583
|
"status": "stable",
|
|
6537
6584
|
"productionReady": true,
|
|
6585
|
+
"generative": false,
|
|
6538
6586
|
"props": {
|
|
6539
6587
|
"id": {
|
|
6540
6588
|
"type": "string",
|
|
@@ -6640,6 +6688,7 @@
|
|
|
6640
6688
|
"description": "A customizable slider component with single and range support. Features include value display, tick marks, min/max labels, icons, and full keyboard navigation for accessibility.",
|
|
6641
6689
|
"status": "stable",
|
|
6642
6690
|
"productionReady": true,
|
|
6691
|
+
"generative": false,
|
|
6643
6692
|
"props": {
|
|
6644
6693
|
"state": {
|
|
6645
6694
|
"type": "SliderState",
|
|
@@ -6762,11 +6811,12 @@
|
|
|
6762
6811
|
{
|
|
6763
6812
|
"name": "Switch",
|
|
6764
6813
|
"category": "forms",
|
|
6765
|
-
"pattern": "
|
|
6814
|
+
"pattern": "enhanced",
|
|
6766
6815
|
"importPath": "@flikk/ui/forms",
|
|
6767
6816
|
"description": "A toggle switch component for binary on/off states. Supports controlled and uncontrolled modes, labels with descriptions, and customizable positioning.",
|
|
6768
6817
|
"status": "stable",
|
|
6769
6818
|
"productionReady": true,
|
|
6819
|
+
"generative": false,
|
|
6770
6820
|
"props": {
|
|
6771
6821
|
"id": {
|
|
6772
6822
|
"type": "string",
|
|
@@ -6828,6 +6878,10 @@
|
|
|
6828
6878
|
"themeKeys": [
|
|
6829
6879
|
"container",
|
|
6830
6880
|
"track",
|
|
6881
|
+
"trackStates",
|
|
6882
|
+
"unchecked",
|
|
6883
|
+
"checked",
|
|
6884
|
+
"disabled",
|
|
6831
6885
|
"thumb",
|
|
6832
6886
|
"description",
|
|
6833
6887
|
"trackSizes",
|
|
@@ -6840,11 +6894,12 @@
|
|
|
6840
6894
|
"lg"
|
|
6841
6895
|
],
|
|
6842
6896
|
"cssVariables": [
|
|
6843
|
-
"--color-
|
|
6897
|
+
"--color-border",
|
|
6898
|
+
"--color-primary-600",
|
|
6899
|
+
"--color-neutral-200",
|
|
6900
|
+
"--color-neutral-700",
|
|
6844
6901
|
"--color-primary",
|
|
6845
6902
|
"--color-background-disabled",
|
|
6846
|
-
"--color-danger",
|
|
6847
|
-
"--color-border",
|
|
6848
6903
|
"--color-text-muted"
|
|
6849
6904
|
],
|
|
6850
6905
|
"codeExample": "import { Switch } from \"@flikk/ui\";\n\n<Switch\n id=\"notifications-switch\"\n label=\"Enable notifications\"\n description=\"Receive notifications when someone mentions you\"\n/>"
|
|
@@ -6857,6 +6912,7 @@
|
|
|
6857
6912
|
"description": "A flexible multiline text input component with support for different sizes, states, and className overrides following the shadcn approach.",
|
|
6858
6913
|
"status": "stable",
|
|
6859
6914
|
"productionReady": true,
|
|
6915
|
+
"generative": false,
|
|
6860
6916
|
"props": {
|
|
6861
6917
|
"size": {
|
|
6862
6918
|
"type": "TextareaSize",
|
|
@@ -6932,6 +6988,7 @@
|
|
|
6932
6988
|
"description": "A time picker with masked input trigger and iOS-style scroll wheel. Type directly or scroll the wheels — both stay in sync. Supports 12-hour and 24-hour formats, time validation, and step intervals.",
|
|
6933
6989
|
"status": "stable",
|
|
6934
6990
|
"productionReady": true,
|
|
6991
|
+
"generative": false,
|
|
6935
6992
|
"props": {
|
|
6936
6993
|
"value": {
|
|
6937
6994
|
"type": "string",
|
|
@@ -7034,6 +7091,7 @@
|
|
|
7034
7091
|
"--color-neutral-200",
|
|
7035
7092
|
"--color-text-muted",
|
|
7036
7093
|
"--color-background-secondary",
|
|
7094
|
+
"--color-surface-overlay",
|
|
7037
7095
|
"--color-border",
|
|
7038
7096
|
"--form-radius",
|
|
7039
7097
|
"--color-neutral-400",
|
|
@@ -7057,6 +7115,7 @@
|
|
|
7057
7115
|
"description": "Concentric circular progress rings inspired by Apple Activity. Supports custom colors, animations, tooltips, and up to 5 rings.",
|
|
7058
7116
|
"status": "stable",
|
|
7059
7117
|
"productionReady": true,
|
|
7118
|
+
"generative": false,
|
|
7060
7119
|
"props": {
|
|
7061
7120
|
"rings": {
|
|
7062
7121
|
"type": "RingData[]",
|
|
@@ -7126,6 +7185,7 @@
|
|
|
7126
7185
|
"description": "SVG-based area chart with smooth curves, gradient fills, and interactive tooltips. Supports multiple series, stacking, and null value handling.",
|
|
7127
7186
|
"status": "stable",
|
|
7128
7187
|
"productionReady": true,
|
|
7188
|
+
"generative": true,
|
|
7129
7189
|
"props": {
|
|
7130
7190
|
"dotRadius": {
|
|
7131
7191
|
"type": "number"
|
|
@@ -7190,6 +7250,7 @@
|
|
|
7190
7250
|
"description": "SVG-based bar chart with animated bars, interactive tooltips, and multi-series support. Handles null values with optional placeholder bars.",
|
|
7191
7251
|
"status": "stable",
|
|
7192
7252
|
"productionReady": true,
|
|
7253
|
+
"generative": true,
|
|
7193
7254
|
"props": {
|
|
7194
7255
|
"barRadius": {
|
|
7195
7256
|
"type": "number"
|
|
@@ -7230,6 +7291,7 @@
|
|
|
7230
7291
|
"description": "Combines bar and line series in a single chart, ideal for comparing volume metrics with trend lines.",
|
|
7231
7292
|
"status": "stable",
|
|
7232
7293
|
"productionReady": true,
|
|
7294
|
+
"generative": true,
|
|
7233
7295
|
"props": {
|
|
7234
7296
|
"config": {
|
|
7235
7297
|
"type": "ComboChartConfig",
|
|
@@ -7304,6 +7366,7 @@
|
|
|
7304
7366
|
"description": "A circular progress chart for displaying percentage values with smooth animations. Supports solid and segmented variants.",
|
|
7305
7367
|
"status": "stable",
|
|
7306
7368
|
"productionReady": true,
|
|
7369
|
+
"generative": true,
|
|
7307
7370
|
"props": {
|
|
7308
7371
|
"variant": {
|
|
7309
7372
|
"type": "\"solid\" | \"segmented\"",
|
|
@@ -7382,6 +7445,7 @@
|
|
|
7382
7445
|
"description": "A conversion funnel chart with trapezoid shapes showing progressive dropoff. Supports horizontal and vertical orientations with curved or linear edges.",
|
|
7383
7446
|
"status": "beta",
|
|
7384
7447
|
"productionReady": false,
|
|
7448
|
+
"generative": false,
|
|
7385
7449
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
7386
7450
|
"props": {
|
|
7387
7451
|
"data": {
|
|
@@ -7480,6 +7544,7 @@
|
|
|
7480
7544
|
"description": "A responsive heatmap for visualizing data intensity across two dimensions. Supports weekly, monthly, and hourly views with semantic color theming.",
|
|
7481
7545
|
"status": "stable",
|
|
7482
7546
|
"productionReady": true,
|
|
7547
|
+
"generative": false,
|
|
7483
7548
|
"props": {
|
|
7484
7549
|
"data": {
|
|
7485
7550
|
"type": "HeatmapDataPoint[]",
|
|
@@ -7554,6 +7619,7 @@
|
|
|
7554
7619
|
"description": "A custom SVG line chart with smooth curve interpolation, multi-series support, and interactive tooltips.",
|
|
7555
7620
|
"status": "stable",
|
|
7556
7621
|
"productionReady": true,
|
|
7622
|
+
"generative": true,
|
|
7557
7623
|
"props": {
|
|
7558
7624
|
"color": {
|
|
7559
7625
|
"type": "SemanticColor"
|
|
@@ -7587,6 +7653,7 @@
|
|
|
7587
7653
|
"description": "A radar (spider) chart for comparing multi-dimensional data across categories. Supports multiple overlapping series, configurable grid rings, and optional Framer Motion entrance animations.",
|
|
7588
7654
|
"status": "stable",
|
|
7589
7655
|
"productionReady": true,
|
|
7656
|
+
"generative": false,
|
|
7590
7657
|
"props": {
|
|
7591
7658
|
"axes": {
|
|
7592
7659
|
"type": "string[]",
|
|
@@ -7672,6 +7739,7 @@
|
|
|
7672
7739
|
"description": "A scatter plot for visualizing correlation between two variables. Supports category coloring and optional bubble sizing.",
|
|
7673
7740
|
"status": "stable",
|
|
7674
7741
|
"productionReady": true,
|
|
7742
|
+
"generative": false,
|
|
7675
7743
|
"props": {
|
|
7676
7744
|
"data": {
|
|
7677
7745
|
"type": "ScatterPlotDataPoint[]",
|
|
@@ -7701,16 +7769,6 @@
|
|
|
7701
7769
|
"type": "boolean",
|
|
7702
7770
|
"description": "Enable tooltip on hover"
|
|
7703
7771
|
},
|
|
7704
|
-
"title": {
|
|
7705
|
-
"type": "string",
|
|
7706
|
-
"description": "Accessibility props"
|
|
7707
|
-
},
|
|
7708
|
-
"description": {
|
|
7709
|
-
"type": "string"
|
|
7710
|
-
},
|
|
7711
|
-
"enableKeyboardNavigation": {
|
|
7712
|
-
"type": "boolean"
|
|
7713
|
-
},
|
|
7714
7772
|
"svgClassName": {
|
|
7715
7773
|
"type": "string",
|
|
7716
7774
|
"description": "className overrides for chart elements (shadcn approach)"
|
|
@@ -7747,7 +7805,8 @@
|
|
|
7747
7805
|
"--color-primary",
|
|
7748
7806
|
"--color-success",
|
|
7749
7807
|
"--color-warning",
|
|
7750
|
-
"--color-danger"
|
|
7808
|
+
"--color-danger",
|
|
7809
|
+
"--color-${color}"
|
|
7751
7810
|
],
|
|
7752
7811
|
"codeExample": "import { ScatterPlot } from \"@flikk/ui\";\n\n<ScatterPlot\n data={productData}\n xLabel=\"Price ($)\"\n yLabel=\"Customer Satisfaction (%)\"\n className=\"w-full max-w-[600px] h-[400px]\"\n/>"
|
|
7753
7812
|
},
|
|
@@ -7759,6 +7818,7 @@
|
|
|
7759
7818
|
"description": "A stacked bar chart where data series are layered on top of each other, showing both individual and total values. Supports percentage normalization with expand mode.",
|
|
7760
7819
|
"status": "stable",
|
|
7761
7820
|
"productionReady": true,
|
|
7821
|
+
"generative": true,
|
|
7762
7822
|
"props": {
|
|
7763
7823
|
"barRadius": {
|
|
7764
7824
|
"type": "number"
|
|
@@ -7795,6 +7855,7 @@
|
|
|
7795
7855
|
"description": "Animated orb effect with dot-sphere, liquid, and aura visualization modes. Supports customizable colors, state-driven animation, and glow effects.",
|
|
7796
7856
|
"status": "stable",
|
|
7797
7857
|
"productionReady": true,
|
|
7858
|
+
"generative": false,
|
|
7798
7859
|
"props": {
|
|
7799
7860
|
"size": {
|
|
7800
7861
|
"type": "number",
|
|
@@ -7821,6 +7882,7 @@
|
|
|
7821
7882
|
"description": "Page-level animation orchestration with staggered presets. Use Animated.Item for standalone animations or wrap items in Animated.Group for coordinated staggered entrance and exit.",
|
|
7822
7883
|
"status": "stable",
|
|
7823
7884
|
"productionReady": true,
|
|
7885
|
+
"generative": false,
|
|
7824
7886
|
"props": {},
|
|
7825
7887
|
"subComponents": [
|
|
7826
7888
|
"Animated.Group",
|
|
@@ -7836,6 +7898,7 @@
|
|
|
7836
7898
|
"description": "Animated multi-color gradient background effect with drifting, morphing blobs. Ideal for hero sections and decorative backgrounds. Renders as an absolutely-positioned layer that does not block interaction.",
|
|
7837
7899
|
"status": "stable",
|
|
7838
7900
|
"productionReady": true,
|
|
7901
|
+
"generative": false,
|
|
7839
7902
|
"props": {
|
|
7840
7903
|
"colors": {
|
|
7841
7904
|
"type": "string[]",
|
|
@@ -7880,6 +7943,7 @@
|
|
|
7880
7943
|
"description": "A compound cursor system that replaces the default cursor with a custom animated element. Supports colors, sizes, shapes, glass variants, and a smooth-following companion element.",
|
|
7881
7944
|
"status": "stable",
|
|
7882
7945
|
"productionReady": true,
|
|
7946
|
+
"generative": false,
|
|
7883
7947
|
"props": {
|
|
7884
7948
|
"size": {
|
|
7885
7949
|
"type": "CustomCursorSize"
|
|
@@ -7958,6 +8022,7 @@
|
|
|
7958
8022
|
"description": "An SVG-based dot grid background pattern for hero sections and content areas. Place it inside a container with",
|
|
7959
8023
|
"status": "stable",
|
|
7960
8024
|
"productionReady": true,
|
|
8025
|
+
"generative": false,
|
|
7961
8026
|
"props": {
|
|
7962
8027
|
"spacing": {
|
|
7963
8028
|
"type": "number",
|
|
@@ -8005,6 +8070,7 @@
|
|
|
8005
8070
|
"description": "A reusable glass morphism overlay that adapts to any background color. Drop it into a container with relative positioning to add a layered glass border and gradient effect.",
|
|
8006
8071
|
"status": "stable",
|
|
8007
8072
|
"productionReady": true,
|
|
8073
|
+
"generative": false,
|
|
8008
8074
|
"props": {
|
|
8009
8075
|
"rounded": {
|
|
8010
8076
|
"type": "string",
|
|
@@ -8049,6 +8115,7 @@
|
|
|
8049
8115
|
"description": "A chromatic aberration glass effect using SVG displacement filters. Wraps content with a realistic refractive glass surface. Scroll the demos below to see the glass interact with the background.",
|
|
8050
8116
|
"status": "stable",
|
|
8051
8117
|
"productionReady": true,
|
|
8118
|
+
"generative": false,
|
|
8052
8119
|
"props": {
|
|
8053
8120
|
"width": {
|
|
8054
8121
|
"type": "number | string",
|
|
@@ -8162,6 +8229,7 @@
|
|
|
8162
8229
|
"description": "An SVG-based grid background pattern for hero sections and landing pages. Place it inside a container with",
|
|
8163
8230
|
"status": "stable",
|
|
8164
8231
|
"productionReady": true,
|
|
8232
|
+
"generative": false,
|
|
8165
8233
|
"props": {
|
|
8166
8234
|
"size": {
|
|
8167
8235
|
"type": "number",
|
|
@@ -8209,6 +8277,7 @@
|
|
|
8209
8277
|
"description": "InteractiveCharacters component",
|
|
8210
8278
|
"status": "stable",
|
|
8211
8279
|
"productionReady": true,
|
|
8280
|
+
"generative": false,
|
|
8212
8281
|
"props": {
|
|
8213
8282
|
"state": {
|
|
8214
8283
|
"type": "CharacterState",
|
|
@@ -8233,6 +8302,7 @@
|
|
|
8233
8302
|
"description": "A wrapper component that adds a magnetic pull effect to its children. When the cursor hovers, the element subtly translates toward the cursor, creating an engaging interactive effect. Supports configurable strength, distance, spring physics, and an inner parallax multiplier. Respects reduced motion preferences.",
|
|
8234
8303
|
"status": "stable",
|
|
8235
8304
|
"productionReady": true,
|
|
8305
|
+
"generative": false,
|
|
8236
8306
|
"props": {
|
|
8237
8307
|
"strength": {
|
|
8238
8308
|
"type": "number",
|
|
@@ -8267,47 +8337,6 @@
|
|
|
8267
8337
|
},
|
|
8268
8338
|
"codeExample": "import { MagneticElement } from \"@flikk/ui/effects\";\n\n<MagneticElement strength={0.3} distance={100}>\n <button className=\"bg-gray-900 text-white px-6 py-3 rounded-lg font-medium\">\n Hover and pull me\n </button>\n</MagneticElement>"
|
|
8269
8339
|
},
|
|
8270
|
-
{
|
|
8271
|
-
"name": "MorphingText",
|
|
8272
|
-
"category": "effects",
|
|
8273
|
-
"pattern": "simple",
|
|
8274
|
-
"importPath": "@flikk/ui/effects",
|
|
8275
|
-
"description": "Smoothly morphs between different text strings using a blur/fade transition. Two overlapping text layers cross-fade with a Gaussian blur effect to create a seamless morphing appearance.",
|
|
8276
|
-
"status": "stable",
|
|
8277
|
-
"productionReady": true,
|
|
8278
|
-
"props": {
|
|
8279
|
-
"texts": {
|
|
8280
|
-
"type": "string[]",
|
|
8281
|
-
"required": true,
|
|
8282
|
-
"description": "Array of text strings to morph between"
|
|
8283
|
-
},
|
|
8284
|
-
"interval": {
|
|
8285
|
-
"type": "number",
|
|
8286
|
-
"description": "Time between transitions in ms (default 3000)"
|
|
8287
|
-
},
|
|
8288
|
-
"transitionDuration": {
|
|
8289
|
-
"type": "number",
|
|
8290
|
-
"description": "Transition duration in ms (default 800)"
|
|
8291
|
-
},
|
|
8292
|
-
"loop": {
|
|
8293
|
-
"type": "boolean",
|
|
8294
|
-
"description": "Loop continuously (default true)"
|
|
8295
|
-
},
|
|
8296
|
-
"pauseOnHover": {
|
|
8297
|
-
"type": "boolean",
|
|
8298
|
-
"description": "Pause cycling on hover (default false)"
|
|
8299
|
-
},
|
|
8300
|
-
"currentIndex": {
|
|
8301
|
-
"type": "number",
|
|
8302
|
-
"description": "Controlled current index (overrides internal state)"
|
|
8303
|
-
},
|
|
8304
|
-
"onTextChange": {
|
|
8305
|
-
"type": "(index: number, text: string) => void",
|
|
8306
|
-
"description": "Callback when the active text changes"
|
|
8307
|
-
}
|
|
8308
|
-
},
|
|
8309
|
-
"codeExample": "import { MorphingText } from \"@flikk/ui/effects\";\n\n<MorphingText\n texts={[\"Innovative\", \"Powerful\", \"Scalable\", \"Beautiful\"]}\n interval={3000}\n transitionDuration={800}\n className=\"text-4xl font-bold\"\n/>"
|
|
8310
|
-
},
|
|
8311
8340
|
{
|
|
8312
8341
|
"name": "NoiseOverlay",
|
|
8313
8342
|
"category": "effects",
|
|
@@ -8316,6 +8345,7 @@
|
|
|
8316
8345
|
"description": "An SVG feTurbulence-based noise/grain texture overlay that adds a matte or film-like quality to surfaces. Renders as an absolute-positioned, non-interactive layer. The parent container should have",
|
|
8317
8346
|
"status": "stable",
|
|
8318
8347
|
"productionReady": true,
|
|
8348
|
+
"generative": false,
|
|
8319
8349
|
"props": {
|
|
8320
8350
|
"opacity": {
|
|
8321
8351
|
"type": "number",
|
|
@@ -8359,6 +8389,7 @@
|
|
|
8359
8389
|
"description": "A shared overlay component providing consistent backdrop, portal rendering, animations, scroll lock, and escape key behavior for modals, drawers, and command palettes.",
|
|
8360
8390
|
"status": "stable",
|
|
8361
8391
|
"productionReady": true,
|
|
8392
|
+
"generative": false,
|
|
8362
8393
|
"props": {
|
|
8363
8394
|
"isOpen": {
|
|
8364
8395
|
"type": "boolean",
|
|
@@ -8442,69 +8473,6 @@
|
|
|
8442
8473
|
],
|
|
8443
8474
|
"codeExample": "import { Overlay } from \"@flikk/ui\";\n\nconst [isOpen, setIsOpen] = useState(false);\n\n<Button onClick={() => setIsOpen(true)}>Open Overlay</Button>\n\n<Overlay isOpen={isOpen} onClose={() => setIsOpen(false)} position=\"center\">\n <div className=\"bg-white rounded-lg shadow-2xl p-8 max-w-md\">\n <h2>Centered Overlay</h2>\n <p>Click outside or press Escape to close.</p>\n <Button onClick={() => setIsOpen(false)}>Close</Button>\n </div>\n</Overlay>"
|
|
8444
8475
|
},
|
|
8445
|
-
{
|
|
8446
|
-
"name": "PageTransition",
|
|
8447
|
-
"category": "effects",
|
|
8448
|
-
"pattern": "simple",
|
|
8449
|
-
"importPath": "@flikk/ui/effects",
|
|
8450
|
-
"description": "PageTransition component",
|
|
8451
|
-
"status": "stable",
|
|
8452
|
-
"productionReady": true,
|
|
8453
|
-
"props": {
|
|
8454
|
-
"logo": {
|
|
8455
|
-
"type": "React.ReactNode"
|
|
8456
|
-
},
|
|
8457
|
-
"type": {
|
|
8458
|
-
"type": "PageTransitionType"
|
|
8459
|
-
},
|
|
8460
|
-
"direction": {
|
|
8461
|
-
"type": "PageTransitionDirection"
|
|
8462
|
-
},
|
|
8463
|
-
"duration": {
|
|
8464
|
-
"type": "number"
|
|
8465
|
-
},
|
|
8466
|
-
"delay": {
|
|
8467
|
-
"type": "number"
|
|
8468
|
-
},
|
|
8469
|
-
"color": {
|
|
8470
|
-
"type": "string"
|
|
8471
|
-
},
|
|
8472
|
-
"parallax": {
|
|
8473
|
-
"type": "boolean"
|
|
8474
|
-
},
|
|
8475
|
-
"onStart": {
|
|
8476
|
-
"type": "() => void"
|
|
8477
|
-
},
|
|
8478
|
-
"onComplete": {
|
|
8479
|
-
"type": "() => void"
|
|
8480
|
-
}
|
|
8481
|
-
},
|
|
8482
|
-
"codeExample": "import { PageTransition } from \"@flikk/ui/effects\";\n\nconst Logo = () => (\n <div className=\"size-14 rounded-2xl bg-white flex items-center justify-center shadow-xl\">\n <div className=\"size-7 rounded-md bg-neutral-900\" />\n </div>\n);\n\n<PageTransition logo={<Logo />}>\n <main className=\"min-h-screen\">{/* page content */}</main>\n</PageTransition>"
|
|
8483
|
-
},
|
|
8484
|
-
{
|
|
8485
|
-
"name": "ParallaxSection",
|
|
8486
|
-
"category": "effects",
|
|
8487
|
-
"pattern": "simple",
|
|
8488
|
-
"importPath": "@flikk/ui/effects",
|
|
8489
|
-
"description": "A scroll-driven parallax wrapper that translates its children at a configurable rate relative to normal scroll, creating depth and visual interest. Uses GPU-accelerated transforms for smooth animation.",
|
|
8490
|
-
"status": "stable",
|
|
8491
|
-
"productionReady": true,
|
|
8492
|
-
"props": {
|
|
8493
|
-
"speed": {
|
|
8494
|
-
"type": "number",
|
|
8495
|
-
"description": "Parallax speed multiplier. Negative = moves opposite direction. (default 0.5)"
|
|
8496
|
-
},
|
|
8497
|
-
"direction": {
|
|
8498
|
-
"type": "'vertical' | 'horizontal'",
|
|
8499
|
-
"description": "Direction of parallax (default 'vertical')"
|
|
8500
|
-
},
|
|
8501
|
-
"scrollRef": {
|
|
8502
|
-
"type": "RefObject<HTMLElement>",
|
|
8503
|
-
"description": "Use scroll container instead of window (ref to container)"
|
|
8504
|
-
}
|
|
8505
|
-
},
|
|
8506
|
-
"codeExample": "import { ParallaxSection } from \"@flikk/ui/effects\";\n\n<div className=\"relative overflow-hidden bg-slate-900 py-32\">\n <ParallaxSection speed={0.3} className=\"absolute inset-0\">\n <div className=\"h-full w-full bg-gradient-to-br from-blue-600/30 to-purple-600/30\" />\n </ParallaxSection>\n <div className=\"relative z-10 text-center\">\n <h2 className=\"text-3xl font-bold text-white\">Subtle Depth</h2>\n </div>\n</div>\n\n{/* Negative speed reverses direction */}\n<div className=\"relative overflow-hidden bg-indigo-950 py-32\">\n <ParallaxSection speed={-0.3} className=\"absolute inset-0\">\n <div className=\"h-full w-full bg-gradient-to-r from-violet-500/20 to-fuchsia-500/20\" />\n </ParallaxSection>\n</div>"
|
|
8507
|
-
},
|
|
8508
8476
|
{
|
|
8509
8477
|
"name": "Particles",
|
|
8510
8478
|
"category": "effects",
|
|
@@ -8513,6 +8481,7 @@
|
|
|
8513
8481
|
"description": "A floating particle background effect powered by Three.js. Particles drift upward with slight horizontal variation and react to mouse proximity. Optional connection lines are drawn between nearby particles. Place inside a container with",
|
|
8514
8482
|
"status": "stable",
|
|
8515
8483
|
"productionReady": true,
|
|
8484
|
+
"generative": false,
|
|
8516
8485
|
"props": {
|
|
8517
8486
|
"count": {
|
|
8518
8487
|
"type": "number",
|
|
@@ -8564,6 +8533,67 @@
|
|
|
8564
8533
|
],
|
|
8565
8534
|
"codeExample": "import { Particles } from \"@flikk/ui\";\n\n<div className=\"relative overflow-hidden bg-gray-950 h-96\">\n <Particles count={80} color=\"#6366f1\" connectionDistance={120} />\n <div className=\"relative z-10 flex items-center justify-center h-full\">\n <h2 className=\"text-3xl font-bold text-white\">\n Interactive Particle Network\n </h2>\n </div>\n</div>"
|
|
8566
8535
|
},
|
|
8536
|
+
{
|
|
8537
|
+
"name": "Preloader",
|
|
8538
|
+
"category": "effects",
|
|
8539
|
+
"pattern": "simple",
|
|
8540
|
+
"importPath": "@flikk/ui/effects",
|
|
8541
|
+
"description": "Preloader component",
|
|
8542
|
+
"status": "stable",
|
|
8543
|
+
"productionReady": true,
|
|
8544
|
+
"generative": false,
|
|
8545
|
+
"props": {
|
|
8546
|
+
"logo": {
|
|
8547
|
+
"type": "React.ReactNode",
|
|
8548
|
+
"description": "Decorative mark centered on the curtain (hidden from assistive tech)."
|
|
8549
|
+
},
|
|
8550
|
+
"type": {
|
|
8551
|
+
"type": "PreloaderType",
|
|
8552
|
+
"description": "`slide` = one full curtain exits; `split` = two half panels part in opposite directions; `blinds` = staggered strips sweep the same way; `shutters` = strips alternate directions; `layers` = stacked curtains trail each other in lightening shades; `iris` = a circular mask closes on the curtain from the edges to the center."
|
|
8553
|
+
},
|
|
8554
|
+
"direction": {
|
|
8555
|
+
"type": "PreloaderDirection",
|
|
8556
|
+
"description": "Exit direction. For `split`, `up`/`down` split along the horizontal seam and `left`/`right` along the vertical seam (the two are equivalent per axis). For `blinds`/`shutters`, strips orient perpendicular to the exit axis. Ignored by `iris` (always closes to center)."
|
|
8557
|
+
},
|
|
8558
|
+
"duration": {
|
|
8559
|
+
"type": "number",
|
|
8560
|
+
"description": "Exit animation duration in seconds (not ms), per panel. For staggered types the total exit time is `duration + (panels - 1) stagger`."
|
|
8561
|
+
},
|
|
8562
|
+
"delay": {
|
|
8563
|
+
"type": "number",
|
|
8564
|
+
"description": "Minimum hold time in seconds (not ms). The curtain exits once BOTH the window `load` event has fired and this delay has elapsed."
|
|
8565
|
+
},
|
|
8566
|
+
"color": {
|
|
8567
|
+
"type": "string",
|
|
8568
|
+
"description": "Curtain fill as a CSS color value (e.g. `\"var(--color-primary-900)\"`, `\"#0a0a0a\"`). Applied as an inline `background-color`, so it wins over `className`. When omitted, the curtain uses `bg-[var(--color-primary)]` as a class, which `className` background utilities can override."
|
|
8569
|
+
},
|
|
8570
|
+
"parallax": {
|
|
8571
|
+
"type": "boolean",
|
|
8572
|
+
"description": "Slide only: the logo lags behind the curtain for a depth effect."
|
|
8573
|
+
},
|
|
8574
|
+
"contained": {
|
|
8575
|
+
"type": "boolean",
|
|
8576
|
+
"description": "Position the overlay `absolute` within the nearest positioned ancestor instead of `fixed` to the viewport. Use when embedding the transition in a container (demos, hero sections) rather than covering the whole page."
|
|
8577
|
+
},
|
|
8578
|
+
"panels": {
|
|
8579
|
+
"type": "number",
|
|
8580
|
+
"description": "Strip/slat/layer count for `blinds` (default 5), `shutters` (default 4), and `layers` (default 3). Clamped to 2–12. Ignored by other types."
|
|
8581
|
+
},
|
|
8582
|
+
"stagger": {
|
|
8583
|
+
"type": "number",
|
|
8584
|
+
"description": "Seconds between successive panels for `blinds`/`shutters` (default 0.08) and `layers` (default 0.14). Ignored by other types."
|
|
8585
|
+
},
|
|
8586
|
+
"onStart": {
|
|
8587
|
+
"type": "() => void",
|
|
8588
|
+
"description": "Fires when the exit animation starts (immediately if reduced motion is on)."
|
|
8589
|
+
},
|
|
8590
|
+
"onComplete": {
|
|
8591
|
+
"type": "() => void",
|
|
8592
|
+
"description": "Fires once the reveal finishes; the overlay unmounts from the DOM."
|
|
8593
|
+
}
|
|
8594
|
+
},
|
|
8595
|
+
"codeExample": "import { Preloader } from \"@flikk/ui/effects\";\n\nconst Logo = () => (\n <div className=\"size-14 rounded-2xl bg-white flex items-center justify-center shadow-xl\">\n <div className=\"size-7 rounded-md bg-neutral-900\" />\n </div>\n);\n\n<Preloader logo={<Logo />}>\n <main className=\"min-h-screen\">{/* page content */}</main>\n</Preloader>"
|
|
8596
|
+
},
|
|
8567
8597
|
{
|
|
8568
8598
|
"name": "ProgressiveBlur",
|
|
8569
8599
|
"category": "effects",
|
|
@@ -8572,11 +8602,12 @@
|
|
|
8572
8602
|
"description": "A progressive blur effect for edges of scrollable containers. Uses stacked backdrop-filter layers with mask-image bands for a smooth, performant blur gradient.",
|
|
8573
8603
|
"status": "stable",
|
|
8574
8604
|
"productionReady": true,
|
|
8605
|
+
"generative": false,
|
|
8575
8606
|
"props": {
|
|
8576
8607
|
"position": {
|
|
8577
8608
|
"type": "ProgressiveBlurPosition | ProgressiveBlurPosition[]",
|
|
8578
8609
|
"default": "bottom",
|
|
8579
|
-
"description": "Position(s) where the blur effect should be applied. Can be a single position or array of positions."
|
|
8610
|
+
"description": "Position(s) where the blur effect should be applied. Can be a single position or array of positions. With an array, one element renders per position, so `ref` is not forwarded and `id`/event props apply to every instance."
|
|
8580
8611
|
},
|
|
8581
8612
|
"blurLevels": {
|
|
8582
8613
|
"type": "number[]",
|
|
@@ -8598,7 +8629,7 @@
|
|
|
8598
8629
|
"description": "Size of the blur region. Height for top/bottom positions, width for left/right positions."
|
|
8599
8630
|
}
|
|
8600
8631
|
},
|
|
8601
|
-
"codeExample": "import { ProgressiveBlur } from \"@flikk/ui\";\n\n<div className=\"relative\">\n <ScrollableContent />\n <ProgressiveBlur position={[\"top\", \"bottom\"]} />\n</div>"
|
|
8632
|
+
"codeExample": "import { ProgressiveBlur } from \"@flikk/ui\";\n\n<div className=\"relative max-w-96\">\n <ScrollableContent />\n <ProgressiveBlur position={[\"top\", \"bottom\"]} />\n</div>"
|
|
8602
8633
|
},
|
|
8603
8634
|
{
|
|
8604
8635
|
"name": "ScrollReveal",
|
|
@@ -8608,6 +8639,7 @@
|
|
|
8608
8639
|
"description": "Intersection-observer wrapper that triggers an entrance animation when its children scroll into the viewport. Supports six built-in presets, custom variants, stagger-children timing, and respects the prefers-reduced-motion media query.",
|
|
8609
8640
|
"status": "stable",
|
|
8610
8641
|
"productionReady": true,
|
|
8642
|
+
"generative": false,
|
|
8611
8643
|
"props": {
|
|
8612
8644
|
"preset": {
|
|
8613
8645
|
"type": "ScrollRevealPreset",
|
|
@@ -8642,68 +8674,100 @@
|
|
|
8642
8674
|
"description": "Stagger children by this amount in seconds (default 0)"
|
|
8643
8675
|
}
|
|
8644
8676
|
},
|
|
8645
|
-
"codeExample": "import { ScrollReveal } from \"@flikk/ui/effects\";\n\n<ScrollReveal preset=\"fadeUp\" duration={0.6} once>\n <div className=\"rounded-lg border p-6\">\n <h3 className=\"text-lg font-semibold\">Revealed on scroll</h3>\n <p className=\"mt-2 text-
|
|
8677
|
+
"codeExample": "import { ScrollReveal } from \"@flikk/ui/effects\";\n\n<ScrollReveal preset=\"fadeUp\" duration={0.6} once>\n <div className=\"rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] p-6\">\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">Revealed on scroll</h3>\n <p className=\"mt-2 text-[var(--color-text-secondary)]\">This content fades in as it enters the viewport.</p>\n </div>\n</ScrollReveal>"
|
|
8646
8678
|
},
|
|
8647
8679
|
{
|
|
8648
|
-
"name": "
|
|
8680
|
+
"name": "StripePattern",
|
|
8649
8681
|
"category": "effects",
|
|
8650
8682
|
"pattern": "simple",
|
|
8651
8683
|
"importPath": "@flikk/ui/effects",
|
|
8652
|
-
"description": "
|
|
8684
|
+
"description": "An SVG-based diagonal stripe background pattern. Drop it into a container with",
|
|
8653
8685
|
"status": "stable",
|
|
8654
8686
|
"productionReady": true,
|
|
8687
|
+
"generative": false,
|
|
8655
8688
|
"props": {
|
|
8656
|
-
"
|
|
8689
|
+
"spacing": {
|
|
8657
8690
|
"type": "number",
|
|
8658
|
-
"default": "
|
|
8659
|
-
"description": "
|
|
8691
|
+
"default": "12",
|
|
8692
|
+
"description": "Distance between adjacent stripes in pixels (center to center)."
|
|
8693
|
+
},
|
|
8694
|
+
"strokeWidth": {
|
|
8695
|
+
"type": "number",
|
|
8696
|
+
"default": "6",
|
|
8697
|
+
"description": "Thickness of each stripe in pixels."
|
|
8698
|
+
},
|
|
8699
|
+
"angle": {
|
|
8700
|
+
"type": "number",
|
|
8701
|
+
"default": "-45",
|
|
8702
|
+
"description": "Stripe rotation in degrees. `-45` runs bottom-left to top-right."
|
|
8660
8703
|
},
|
|
8661
8704
|
"color": {
|
|
8662
8705
|
"type": "string",
|
|
8663
|
-
"default": "var(--color-
|
|
8664
|
-
"description": "
|
|
8706
|
+
"default": "color-mix(in srgb, var(--color-border) 50%, transparent)",
|
|
8707
|
+
"description": "Stroke color of the stripes. Accepts any valid CSS color value or CSS variable."
|
|
8665
8708
|
},
|
|
8666
|
-
"
|
|
8709
|
+
"fade": {
|
|
8710
|
+
"type": "boolean",
|
|
8711
|
+
"default": "false",
|
|
8712
|
+
"description": "Whether to apply a gradient mask that fades the pattern at the edges. Defaults to `false` so the pattern reads as a flat fill — useful for placeholder surfaces. Set to `true` for decorative backgrounds."
|
|
8713
|
+
},
|
|
8714
|
+
"fadeDirection": {
|
|
8715
|
+
"type": "StripePatternFadeDirection",
|
|
8716
|
+
"default": "radial",
|
|
8717
|
+
"description": "Direction of the fade gradient. - \"radial\" fades from center outward - \"top\" | \"bottom\" | \"left\" | \"right\" fades toward that edge"
|
|
8718
|
+
},
|
|
8719
|
+
"fadeSize": {
|
|
8667
8720
|
"type": "number",
|
|
8668
|
-
"default": "
|
|
8669
|
-
"description": "
|
|
8721
|
+
"default": "50",
|
|
8722
|
+
"description": "Size of the fade area as a percentage (0-100)."
|
|
8670
8723
|
},
|
|
8671
|
-
"
|
|
8672
|
-
"type": "
|
|
8673
|
-
"default": "
|
|
8674
|
-
"description": "
|
|
8724
|
+
"animated": {
|
|
8725
|
+
"type": "boolean",
|
|
8726
|
+
"default": "false",
|
|
8727
|
+
"description": "Whether to apply a subtle pulse animation to the stripes. Respects prefers-reduced-motion automatically."
|
|
8675
8728
|
}
|
|
8676
8729
|
},
|
|
8677
|
-
"codeExample": "import {
|
|
8730
|
+
"codeExample": "import { StripePattern } from \"@flikk/ui\";\n\n<div className=\"relative overflow-hidden rounded-lg border border-dashed h-64\">\n <StripePattern />\n</div>"
|
|
8678
8731
|
},
|
|
8679
8732
|
{
|
|
8680
|
-
"name": "
|
|
8733
|
+
"name": "TiltCard",
|
|
8681
8734
|
"category": "effects",
|
|
8682
8735
|
"pattern": "simple",
|
|
8683
8736
|
"importPath": "@flikk/ui/effects",
|
|
8684
|
-
"description": "
|
|
8737
|
+
"description": "Wraps content in a damped 3D mouse tilt (pure CSS transform — no WebGL). The optional",
|
|
8685
8738
|
"status": "stable",
|
|
8686
8739
|
"productionReady": true,
|
|
8740
|
+
"generative": false,
|
|
8687
8741
|
"props": {
|
|
8742
|
+
"tiltIntensity": {
|
|
8743
|
+
"type": "number",
|
|
8744
|
+
"default": "6",
|
|
8745
|
+
"description": "Max tilt in degrees as the mouse moves across the card. 0 disables the tilt."
|
|
8746
|
+
},
|
|
8747
|
+
"glow": {
|
|
8748
|
+
"type": "boolean",
|
|
8749
|
+
"default": "false",
|
|
8750
|
+
"description": "Enable the WebGL spotlight border (illuminates near the cursor with a soft outer glow). Lazy-loads `three` — without it, TiltCard never touches WebGL. ⚠️ Each glowing instance owns a WebGL context; browsers cap ~8–16 live contexts, so avoid enabling it on large collections of cards."
|
|
8751
|
+
},
|
|
8688
8752
|
"variation": {
|
|
8689
|
-
"type": "
|
|
8753
|
+
"type": "TiltCardVariation",
|
|
8690
8754
|
"default": "rounded-rect",
|
|
8691
|
-
"description": "Shape variation for the border"
|
|
8755
|
+
"description": "Shape variation for the glow border"
|
|
8692
8756
|
},
|
|
8693
8757
|
"rounded": {
|
|
8694
8758
|
"type": "string",
|
|
8695
|
-
"default": "undefined (inherits from className like rounded-
|
|
8696
|
-
"description": "Border radius for the container (e.g., \"1rem\", \"var(--
|
|
8759
|
+
"default": "undefined (inherits from className like rounded-xl)",
|
|
8760
|
+
"description": "Border radius for the container (e.g., \"1rem\", \"var(--card-radius)\"). Controls both the container clip and the shader's corner roundness."
|
|
8697
8761
|
},
|
|
8698
8762
|
"borderWidth": {
|
|
8699
8763
|
"type": "number",
|
|
8700
8764
|
"default": "2",
|
|
8701
|
-
"description": "
|
|
8765
|
+
"description": "Glow border stroke width in pixels"
|
|
8702
8766
|
},
|
|
8703
|
-
"
|
|
8767
|
+
"glowColor": {
|
|
8704
8768
|
"type": "string",
|
|
8705
8769
|
"default": "#ffffff",
|
|
8706
|
-
"description": "Color of the border
|
|
8770
|
+
"description": "Color of the glow border (any CSS color three.js can parse)"
|
|
8707
8771
|
},
|
|
8708
8772
|
"spotlightSize": {
|
|
8709
8773
|
"type": "number",
|
|
@@ -8715,106 +8779,23 @@
|
|
|
8715
8779
|
"default": "0.5",
|
|
8716
8780
|
"description": "Edge softness of the spotlight (higher = softer falloff)"
|
|
8717
8781
|
},
|
|
8718
|
-
"shouldAnimate": {
|
|
8719
|
-
"type": "boolean",
|
|
8720
|
-
"default": "true",
|
|
8721
|
-
"description": "Whether to animate the effect (respects prefers-reduced-motion)"
|
|
8722
|
-
},
|
|
8723
8782
|
"glowExtent": {
|
|
8724
8783
|
"type": "number",
|
|
8725
8784
|
"default": "20",
|
|
8726
|
-
"description": "How far the glow can spread outside the container in pixels.
|
|
8785
|
+
"description": "How far the glow can spread outside the container in pixels. Also prevents clipping of child shadows."
|
|
8727
8786
|
},
|
|
8728
8787
|
"glowIntensity": {
|
|
8729
8788
|
"type": "number",
|
|
8730
8789
|
"default": "0.6",
|
|
8731
8790
|
"description": "Overall intensity of the glow halo (0-1)"
|
|
8732
8791
|
},
|
|
8733
|
-
"
|
|
8734
|
-
"type": "number",
|
|
8735
|
-
"default": "10",
|
|
8736
|
-
"description": "Intensity of the 3D tilt effect based on mouse position (0 = disabled)"
|
|
8737
|
-
}
|
|
8738
|
-
},
|
|
8739
|
-
"codeExample": "import { SpotlightBorder } from \"@flikk/ui\";\n\n<SpotlightBorder\n variation=\"rounded-rect\"\n color=\"red\"\n borderWidth={2}\n spotlightSize={0.4}\n glowExtent={30}\n glowIntensity={0.6}\n className=\"w-80 h-48 rounded-xl\"\n>\n <Card className=\"w-full h-full p-6 bg-gray-900\">\n Your content here\n </Card>\n</SpotlightBorder>"
|
|
8740
|
-
},
|
|
8741
|
-
{
|
|
8742
|
-
"name": "StickyScroll",
|
|
8743
|
-
"category": "effects",
|
|
8744
|
-
"pattern": "simple",
|
|
8745
|
-
"importPath": "@flikk/ui/effects",
|
|
8746
|
-
"description": "Creates an Apple-style sticky scroll experience where one column stays pinned while the other scrolls. As each scrolling section enters the viewport, the sticky content transitions to match.",
|
|
8747
|
-
"status": "beta",
|
|
8748
|
-
"productionReady": false,
|
|
8749
|
-
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
8750
|
-
"props": {
|
|
8751
|
-
"sections": {
|
|
8752
|
-
"type": "StickyScrollSection[]",
|
|
8753
|
-
"required": true,
|
|
8754
|
-
"description": "Array of sections defining the scroll experience"
|
|
8755
|
-
},
|
|
8756
|
-
"contentPosition": {
|
|
8757
|
-
"type": "'left' | 'right'",
|
|
8758
|
-
"description": "Which side the sticky content appears (default 'left')"
|
|
8759
|
-
},
|
|
8760
|
-
"showProgress": {
|
|
8761
|
-
"type": "boolean",
|
|
8762
|
-
"description": "Show progress dots (default true)"
|
|
8763
|
-
}
|
|
8764
|
-
},
|
|
8765
|
-
"codeExample": "import { StickyScroll } from \"@flikk/ui/effects\";\nimport type { StickyScrollSection } from \"@flikk/ui/effects\";\n\nconst sections: StickyScrollSection[] = [\n {\n id: \"design\",\n title: \"Design System\",\n description: \"Build consistent interfaces with a shared visual language.\",\n content: (\n <div className=\"flex h-full w-full items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-600\" />\n ),\n },\n {\n id: \"components\",\n title: \"Component Library\",\n description: \"60+ production-ready components built for real applications.\",\n content: (\n <div className=\"flex h-full w-full items-center justify-center rounded-xl bg-gradient-to-br from-emerald-500 to-teal-600\" />\n ),\n },\n];\n\n<StickyScroll sections={sections} />"
|
|
8766
|
-
},
|
|
8767
|
-
{
|
|
8768
|
-
"name": "StripePattern",
|
|
8769
|
-
"category": "effects",
|
|
8770
|
-
"pattern": "simple",
|
|
8771
|
-
"importPath": "@flikk/ui/effects",
|
|
8772
|
-
"description": "An SVG-based diagonal stripe background pattern. Drop it into a container with",
|
|
8773
|
-
"status": "stable",
|
|
8774
|
-
"productionReady": true,
|
|
8775
|
-
"props": {
|
|
8776
|
-
"spacing": {
|
|
8777
|
-
"type": "number",
|
|
8778
|
-
"default": "12",
|
|
8779
|
-
"description": "Distance between adjacent stripes in pixels (center to center)."
|
|
8780
|
-
},
|
|
8781
|
-
"strokeWidth": {
|
|
8782
|
-
"type": "number",
|
|
8783
|
-
"default": "6",
|
|
8784
|
-
"description": "Thickness of each stripe in pixels."
|
|
8785
|
-
},
|
|
8786
|
-
"angle": {
|
|
8787
|
-
"type": "number",
|
|
8788
|
-
"default": "-45",
|
|
8789
|
-
"description": "Stripe rotation in degrees. `-45` runs bottom-left to top-right."
|
|
8790
|
-
},
|
|
8791
|
-
"color": {
|
|
8792
|
-
"type": "string",
|
|
8793
|
-
"default": "color-mix(in srgb, var(--color-border) 50%, transparent)",
|
|
8794
|
-
"description": "Stroke color of the stripes. Accepts any valid CSS color value or CSS variable."
|
|
8795
|
-
},
|
|
8796
|
-
"fade": {
|
|
8797
|
-
"type": "boolean",
|
|
8798
|
-
"default": "false",
|
|
8799
|
-
"description": "Whether to apply a gradient mask that fades the pattern at the edges. Defaults to `false` so the pattern reads as a flat fill — useful for placeholder surfaces. Set to `true` for decorative backgrounds."
|
|
8800
|
-
},
|
|
8801
|
-
"fadeDirection": {
|
|
8802
|
-
"type": "StripePatternFadeDirection",
|
|
8803
|
-
"default": "radial",
|
|
8804
|
-
"description": "Direction of the fade gradient. - \"radial\" fades from center outward - \"top\" | \"bottom\" | \"left\" | \"right\" fades toward that edge"
|
|
8805
|
-
},
|
|
8806
|
-
"fadeSize": {
|
|
8807
|
-
"type": "number",
|
|
8808
|
-
"default": "50",
|
|
8809
|
-
"description": "Size of the fade area as a percentage (0-100)."
|
|
8810
|
-
},
|
|
8811
|
-
"animated": {
|
|
8792
|
+
"shouldAnimate": {
|
|
8812
8793
|
"type": "boolean",
|
|
8813
|
-
"default": "
|
|
8814
|
-
"description": "Whether to
|
|
8794
|
+
"default": "true",
|
|
8795
|
+
"description": "Whether to animate (respects prefers-reduced-motion)"
|
|
8815
8796
|
}
|
|
8816
8797
|
},
|
|
8817
|
-
"codeExample": "import {
|
|
8798
|
+
"codeExample": "import { TiltCard } from \"@flikk/ui/effects\";\nimport { Card } from \"@flikk/ui\";\n\n// Tilt only — pure CSS transform, no WebGL\n<TiltCard tiltIntensity={6}>\n <Card className=\"p-6\">Your content</Card>\n</TiltCard>"
|
|
8818
8799
|
},
|
|
8819
8800
|
{
|
|
8820
8801
|
"name": "AppShell",
|
|
@@ -8824,6 +8805,7 @@
|
|
|
8824
8805
|
"description": "Bare-bones application shell. Compose Topbar / Sidebar / Main / RightPanel / Footer; Header lives inside Main. Viewport-locked scroll by default (only Main scrolls).",
|
|
8825
8806
|
"status": "beta",
|
|
8826
8807
|
"productionReady": false,
|
|
8808
|
+
"generative": false,
|
|
8827
8809
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
8828
8810
|
"props": {
|
|
8829
8811
|
"scroll": {
|
|
@@ -8924,6 +8906,7 @@
|
|
|
8924
8906
|
"description": "A structured settings-style form layout using a compound component pattern. Each section features an optional sidebar with title, subtitle, and action alongside a responsive content grid. Sections are automatically separated, and a sticky footer provides consistent form actions.",
|
|
8925
8907
|
"status": "stable",
|
|
8926
8908
|
"productionReady": true,
|
|
8909
|
+
"generative": false,
|
|
8927
8910
|
"props": {},
|
|
8928
8911
|
"subComponents": [
|
|
8929
8912
|
"FormLayout.Section",
|
|
@@ -8947,6 +8930,79 @@
|
|
|
8947
8930
|
],
|
|
8948
8931
|
"codeExample": "import { FormLayout } from \"@flikk/ui\";\nimport { Input, Select, Button } from \"@flikk/ui\";\n\n<FormLayout>\n <FormLayout.Section\n title=\"Personal Information\"\n subtitle=\"Use a permanent address where you can receive mail.\"\n action={<Button variant=\"link\" size=\"sm\">Add Address</Button>}\n >\n <Input label=\"First Name\" placeholder=\"John\" />\n <Input label=\"Last Name\" placeholder=\"Doe\" />\n <Input label=\"Email Address\" type=\"email\" placeholder=\"john@example.com\" />\n </FormLayout.Section>\n\n <FormLayout.Section title=\"Preferences\" subtitle=\"Set your preferences\">\n <Select label=\"Timezone\" options={[...]} placeholder=\"Select timezone\" />\n </FormLayout.Section>\n\n <FormLayout.Footer>\n <div>All fields are required unless marked optional.</div>\n <div>\n <Button variant=\"outline\" color=\"neutral\">Cancel</Button>\n <Button>Save Changes</Button>\n </div>\n </FormLayout.Footer>\n</FormLayout>"
|
|
8949
8932
|
},
|
|
8933
|
+
{
|
|
8934
|
+
"name": "Grid",
|
|
8935
|
+
"category": "layout",
|
|
8936
|
+
"pattern": "simple",
|
|
8937
|
+
"importPath": "@flikk/ui",
|
|
8938
|
+
"description": "Grid component",
|
|
8939
|
+
"status": "stable",
|
|
8940
|
+
"productionReady": true,
|
|
8941
|
+
"generative": true,
|
|
8942
|
+
"props": {
|
|
8943
|
+
"cols": {
|
|
8944
|
+
"type": "GridCols",
|
|
8945
|
+
"default": "1",
|
|
8946
|
+
"description": "Columns: a number (mobile-safe auto-ramp) or a per-breakpoint map. A number is NOT a literal column count on every screen — it expands through a mobile-first responsive ramp, e.g. `cols={ }` renders 1 column on mobile, 2 from `sm`, and 3 from `lg`. Use a per-breakpoint map (`cols={{ }}` or `{ }`) for explicit control."
|
|
8947
|
+
},
|
|
8948
|
+
"gap": {
|
|
8949
|
+
"type": "GridGap",
|
|
8950
|
+
"default": "4",
|
|
8951
|
+
"description": "Gap between grid cells (Tailwind spacing scale → gap-N)."
|
|
8952
|
+
},
|
|
8953
|
+
"flow": {
|
|
8954
|
+
"type": "GridFlow",
|
|
8955
|
+
"description": "Grid auto-flow direction.",
|
|
8956
|
+
"options": [
|
|
8957
|
+
"row",
|
|
8958
|
+
"col",
|
|
8959
|
+
"dense"
|
|
8960
|
+
]
|
|
8961
|
+
},
|
|
8962
|
+
"align": {
|
|
8963
|
+
"type": "GridAlign",
|
|
8964
|
+
"description": "align-items within cells.",
|
|
8965
|
+
"options": [
|
|
8966
|
+
"start",
|
|
8967
|
+
"center",
|
|
8968
|
+
"end",
|
|
8969
|
+
"stretch"
|
|
8970
|
+
]
|
|
8971
|
+
},
|
|
8972
|
+
"justify": {
|
|
8973
|
+
"type": "GridJustify",
|
|
8974
|
+
"description": "justify-content of tracks.",
|
|
8975
|
+
"options": [
|
|
8976
|
+
"start",
|
|
8977
|
+
"center",
|
|
8978
|
+
"end",
|
|
8979
|
+
"between"
|
|
8980
|
+
]
|
|
8981
|
+
}
|
|
8982
|
+
},
|
|
8983
|
+
"themeKeys": [
|
|
8984
|
+
"baseStyle",
|
|
8985
|
+
"colsRamp",
|
|
8986
|
+
"1",
|
|
8987
|
+
"2",
|
|
8988
|
+
"3",
|
|
8989
|
+
"4",
|
|
8990
|
+
"5",
|
|
8991
|
+
"6",
|
|
8992
|
+
"7",
|
|
8993
|
+
"8",
|
|
8994
|
+
"9",
|
|
8995
|
+
"10",
|
|
8996
|
+
"11",
|
|
8997
|
+
"12",
|
|
8998
|
+
"cols",
|
|
8999
|
+
"gaps",
|
|
9000
|
+
"flow",
|
|
9001
|
+
"align",
|
|
9002
|
+
"justify"
|
|
9003
|
+
],
|
|
9004
|
+
"codeExample": "import { Grid } from \"@flikk/ui/layout\";\n\n<Grid cols={3} gap={4}>\n <div>Total Revenue</div>\n <div>Active Users</div>\n <div>Conversion Rate</div>\n</Grid>"
|
|
9005
|
+
},
|
|
8950
9006
|
{
|
|
8951
9007
|
"name": "PageLayout",
|
|
8952
9008
|
"category": "layout",
|
|
@@ -8955,6 +9011,7 @@
|
|
|
8955
9011
|
"description": "A modern application-shell wrapper with sidebar and topbar variants. PageLayout owns structure and spacing only; navigation and page content stay consumer-provided.",
|
|
8956
9012
|
"status": "beta",
|
|
8957
9013
|
"productionReady": false,
|
|
9014
|
+
"generative": false,
|
|
8958
9015
|
"statusWarning": "⚠️ BETA: This component is not production-ready. API may change without notice.",
|
|
8959
9016
|
"props": {
|
|
8960
9017
|
"variant": {
|
|
@@ -9024,6 +9081,95 @@
|
|
|
9024
9081
|
],
|
|
9025
9082
|
"codeExample": "import { PageLayout } from \"@flikk/ui\";\n\n<PageLayout>\n <PageLayout.Sidebar>{/* Sidebar navigation */}</PageLayout.Sidebar>\n <PageLayout.Header>{/* Header controls */}</PageLayout.Header>\n <PageLayout.Content contentWidth=\"wide\">\n {/* Page content */}\n </PageLayout.Content>\n</PageLayout>"
|
|
9026
9083
|
},
|
|
9084
|
+
{
|
|
9085
|
+
"name": "Section",
|
|
9086
|
+
"category": "layout",
|
|
9087
|
+
"pattern": "simple",
|
|
9088
|
+
"importPath": "@flikk/ui",
|
|
9089
|
+
"description": "Section component",
|
|
9090
|
+
"status": "stable",
|
|
9091
|
+
"productionReady": true,
|
|
9092
|
+
"generative": true,
|
|
9093
|
+
"props": {
|
|
9094
|
+
"title": {
|
|
9095
|
+
"type": "ReactNode",
|
|
9096
|
+
"description": "Section heading."
|
|
9097
|
+
},
|
|
9098
|
+
"subtitle": {
|
|
9099
|
+
"type": "ReactNode",
|
|
9100
|
+
"description": "Secondary line under the title."
|
|
9101
|
+
},
|
|
9102
|
+
"actions": {
|
|
9103
|
+
"type": "ReactNode",
|
|
9104
|
+
"description": "Right-aligned actions in the header row."
|
|
9105
|
+
},
|
|
9106
|
+
"gap": {
|
|
9107
|
+
"type": "GridGap",
|
|
9108
|
+
"default": "4",
|
|
9109
|
+
"description": "Spacing between the header and the body (Tailwind spacing scale → mt-N)."
|
|
9110
|
+
}
|
|
9111
|
+
},
|
|
9112
|
+
"themeKeys": [
|
|
9113
|
+
"baseStyle",
|
|
9114
|
+
"header",
|
|
9115
|
+
"title",
|
|
9116
|
+
"subtitle",
|
|
9117
|
+
"actions",
|
|
9118
|
+
"bodyGaps"
|
|
9119
|
+
],
|
|
9120
|
+
"cssVariables": [
|
|
9121
|
+
"--color-text-primary",
|
|
9122
|
+
"--color-text-secondary"
|
|
9123
|
+
],
|
|
9124
|
+
"codeExample": "import { Section, Grid } from \"@flikk/ui/layout\";\n\n<Section title=\"Overview\" subtitle=\"This quarter at a glance\">\n <Grid cols={3} gap={4}>\n <div>Total Revenue</div>\n <div>Active Users</div>\n <div>Conversion Rate</div>\n </Grid>\n</Section>"
|
|
9125
|
+
},
|
|
9126
|
+
{
|
|
9127
|
+
"name": "Stack",
|
|
9128
|
+
"category": "layout",
|
|
9129
|
+
"pattern": "simple",
|
|
9130
|
+
"importPath": "@flikk/ui",
|
|
9131
|
+
"description": "Stack component",
|
|
9132
|
+
"status": "stable",
|
|
9133
|
+
"productionReady": true,
|
|
9134
|
+
"generative": true,
|
|
9135
|
+
"props": {
|
|
9136
|
+
"direction": {
|
|
9137
|
+
"type": "StackDirection",
|
|
9138
|
+
"default": "col",
|
|
9139
|
+
"description": "Flex direction.",
|
|
9140
|
+
"options": [
|
|
9141
|
+
"row",
|
|
9142
|
+
"col"
|
|
9143
|
+
]
|
|
9144
|
+
},
|
|
9145
|
+
"gap": {
|
|
9146
|
+
"type": "GridGap",
|
|
9147
|
+
"default": "4",
|
|
9148
|
+
"description": "Gap between items (Tailwind spacing scale → gap-N)."
|
|
9149
|
+
},
|
|
9150
|
+
"align": {
|
|
9151
|
+
"type": "GridAlign",
|
|
9152
|
+
"description": "align-items."
|
|
9153
|
+
},
|
|
9154
|
+
"justify": {
|
|
9155
|
+
"type": "GridJustify",
|
|
9156
|
+
"description": "justify-content."
|
|
9157
|
+
},
|
|
9158
|
+
"wrap": {
|
|
9159
|
+
"type": "boolean",
|
|
9160
|
+
"description": "Allow items to wrap."
|
|
9161
|
+
}
|
|
9162
|
+
},
|
|
9163
|
+
"themeKeys": [
|
|
9164
|
+
"baseStyle",
|
|
9165
|
+
"direction",
|
|
9166
|
+
"gaps",
|
|
9167
|
+
"align",
|
|
9168
|
+
"justify",
|
|
9169
|
+
"wrap"
|
|
9170
|
+
],
|
|
9171
|
+
"codeExample": "import { Stack } from \"@flikk/ui/layout\";\n\n<Stack direction=\"col\" gap={4}>\n <div>Profile</div>\n <div>Billing</div>\n <div>Notifications</div>\n</Stack>"
|
|
9172
|
+
},
|
|
9027
9173
|
{
|
|
9028
9174
|
"name": "CodeBlock",
|
|
9029
9175
|
"category": "ai",
|
|
@@ -9032,6 +9178,7 @@
|
|
|
9032
9178
|
"description": "Syntax-highlighted code display with copy-to-clipboard, line numbers, line highlighting, and diff view. Supports 20+ languages with light and dark themes.",
|
|
9033
9179
|
"status": "stable",
|
|
9034
9180
|
"productionReady": true,
|
|
9181
|
+
"generative": false,
|
|
9035
9182
|
"props": {
|
|
9036
9183
|
"language": {
|
|
9037
9184
|
"type": "string",
|
|
@@ -9129,6 +9276,7 @@
|
|
|
9129
9276
|
"description": "Integrated AI prompt input with model selection, attachments, voice input, and keyboard shortcuts. Supports controlled and uncontrolled patterns.",
|
|
9130
9277
|
"status": "stable",
|
|
9131
9278
|
"productionReady": true,
|
|
9279
|
+
"generative": false,
|
|
9132
9280
|
"props": {
|
|
9133
9281
|
"value": {
|
|
9134
9282
|
"type": "string",
|
|
@@ -9386,6 +9534,7 @@
|
|
|
9386
9534
|
"description": "Streams AI/LLM responses using Server-Sent Events (SSE). Supports OpenAI, Anthropic (Claude), and Google Gemini formats with built-in markdown rendering, smooth streaming animations, and error handling.",
|
|
9387
9535
|
"status": "stable",
|
|
9388
9536
|
"productionReady": true,
|
|
9537
|
+
"generative": false,
|
|
9389
9538
|
"props": {
|
|
9390
9539
|
"url": {
|
|
9391
9540
|
"type": "string",
|
|
@@ -9533,6 +9682,7 @@
|
|
|
9533
9682
|
"description": "Real-time token counter with cost estimation for AI models. Supports GPT-4, Claude, and Gemini models.",
|
|
9534
9683
|
"status": "stable",
|
|
9535
9684
|
"productionReady": true,
|
|
9685
|
+
"generative": false,
|
|
9536
9686
|
"props": {
|
|
9537
9687
|
"text": {
|
|
9538
9688
|
"type": "string",
|
|
@@ -9658,23 +9808,12 @@
|
|
|
9658
9808
|
"Icon",
|
|
9659
9809
|
"Input",
|
|
9660
9810
|
"Link",
|
|
9661
|
-
"
|
|
9811
|
+
"Preloader",
|
|
9662
9812
|
"Segmented",
|
|
9663
9813
|
"Separator"
|
|
9664
9814
|
],
|
|
9665
9815
|
"source": "import { Avatar, AvatarGroup, Button, Link, Separator, Icon } from \"@flikk/ui\";\nimport { Checkbox, Input } from \"@flikk/ui\";\nimport { StarIcon } from \"@heroicons/react/24/solid\";\n\n<div className=\"w-full min-h-screen bg-[var(--color-surface)] grid grid-cols-1 lg:grid-cols-2\">\n {/* Left — hero panel */}\n <div className=\"hidden lg:flex bg-[var(--color-primary-700)] text-white h-full rounded-4xl p-8 xl:p-16 bg-image bg-image-4 bg-image-blur-lg bg-image-scale-125\">\n <div className=\"relative z-10 flex flex-col h-full\">\n <div className=\"font-semibold text-sm bg-white/10 backdrop-blur-sm p-1 px-3 rounded-full w-fit flex items-center gap-1.5 text-white/80\">\n <StarIcon className=\"size-3.5 text-yellow-300\" />\n Trusted by 10,000+ developers\n </div>\n <div className=\"w-3/4\">\n <div className=\"font-normal text-5xl xl:text-8xl mt-6 tracking-tight leading-[0.9em]\">\n Build beautiful interfaces in{\" \"}\n <span className=\"italic text-[var(--color-warning-400)] font-cursive\">\n half the time\n </span>\n </div>\n <div className=\"text-xl mt-4 opacity-80 leading-relaxed\">\n Production-ready React components with built-in accessibility,\n theming, and animations. Ship faster without sacrificing quality.\n </div>\n </div>\n\n <div className=\"mt-auto space-y-6\">\n <div className=\"bg-white/10 backdrop-blur-sm rounded-2xl p-6 space-y-4\">\n <p className=\"text-base leading-relaxed opacity-90\">\n \"Flikkui cut our development time by 40%. The components are\n polished, accessible, and just work out of the box.\"\n </p>\n <div className=\"flex items-center gap-3\">\n <Avatar name=\"Sarah Chen\" size=\"sm\" src=\"...\" />\n <div>\n <div className=\"font-medium text-sm\">Sarah Chen</div>\n <div className=\"text-xs opacity-70\">Engineering Lead, Vercel</div>\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-3\">\n <AvatarGroup max={4} size=\"sm\" avatars={[\n { name: \"James W\", src: \"...\" },\n { name: \"Emily R\", src: \"...\" },\n { name: \"David K\", src: \"...\" },\n ]} />\n <span>2,400+ stars on GitHub</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Right — sign-up form */}\n <div className=\"flex items-center justify-center min-h-screen lg:min-h-0 lg:h-full px-6 sm:px-8 lg:px-0 py-10 lg:py-0\">\n <div className=\"w-full max-w-sm space-y-6\">\n <div>\n <div className=\"text-2xl font-bold text-[var(--color-text-primary)]\">Get Started Now</div>\n <div className=\"text-base text-[var(--color-text-muted)] mt-1\">\n Start building for free. No credit card required.\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <Input label=\"Full name\" placeholder=\"Sarah Chen\" />\n <Input label=\"Work email\" placeholder=\"sarah@company.com\" type=\"email\" />\n <Input label=\"Password\" placeholder=\"Min. 8 characters\" type=\"password\" />\n <div className=\"flex items-center gap-2\">\n <Checkbox id=\"terms\" name=\"terms\" value=\"\" size=\"sm\" />\n <span className=\"text-[var(--color-text-muted)] text-xs mt-0.5\">\n I agree to the <Link className=\"text-[var(--color-text-muted)] underline\">Terms of Service</Link>\n {\" \"}and <Link className=\"text-[var(--color-text-muted)] underline\">Privacy Policy</Link>\n </span>\n </div>\n\n <div className=\"mt-6 space-y-3\">\n <Button className=\"w-full\">Get Started</Button>\n <div className=\"text-center text-sm text-[var(--color-text-muted)]\">\n Already have an account? <Link>Sign in</Link>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Separator />\n <div className=\"text-xs font-medium text-[var(--color-text-muted)]/60 min-w-fit\">OR</div>\n <Separator />\n </div>\n <div className=\"flex items-center justify-center gap-2\">\n <Button variant=\"outline\" color=\"neutral\" iconOnly>\n <Icon icon=\"google\" size=\"sm\" />\n </Button>\n <Button variant=\"outline\" color=\"neutral\" iconOnly>\n <Icon icon=\"github\" size=\"sm\" colorMode=\"mono\" />\n </Button>\n <Button variant=\"outline\" color=\"neutral\" iconOnly>\n <Icon icon=\"apple\" size=\"sm\" colorMode=\"mono\" />\n </Button>\n </div>\n </div>\n </div>\n </div>\n</div>"
|
|
9666
9816
|
},
|
|
9667
|
-
{
|
|
9668
|
-
"name": "ChangelogLayout",
|
|
9669
|
-
"title": "Blocks/ChangelogLayout",
|
|
9670
|
-
"description": "Full-page composition using AvatarGroup, Badge, Link.",
|
|
9671
|
-
"componentsUsed": [
|
|
9672
|
-
"AvatarGroup",
|
|
9673
|
-
"Badge",
|
|
9674
|
-
"Link"
|
|
9675
|
-
],
|
|
9676
|
-
"source": "import React from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport { AvatarGroup, Badge, Link } from \"../../components/core\";\nimport { ArrowRightIcon } from \"@heroicons/react/24/outline\";\n\nconst meta: Meta = {\n title: \"Blocks/ChangelogLayout\",\n parameters: { layout: \"fullscreen\" },\n};\n\nexport default meta;\ntype Story = StoryObj;\n\n/* ─── Release Data ─────────────────────────────────── */\n\nconst releases = [\n {\n version: \"2.5.0\",\n date: \"FEB 15, 2026\",\n title: \"AI Components, Dark Mode & Performance\",\n description:\n \"A brand-new AI component suite with MessageHistory, PromptInput, and ThinkingIndicator. Full dark mode support across all 50+ components, plus a 40% bundle size reduction with improved tree-shaking.\",\n authors: [\n {\n name: \"Sarah Chen\",\n src: \"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=80&h=80&fit=crop&crop=face\",\n },\n {\n name: \"Alex Rivera\",\n src: \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=80&h=80&fit=crop&crop=face\",\n },\n ],\n tags: [\n { label: \"Feature\", color: \"success\" as const },\n { label: \"Improvement\", color: \"primary\" as const },\n ],\n image: true,\n latest: true,\n },\n {\n version: \"2.4.0\",\n date: \"JAN 28, 2026\",\n title: \"Charts v2, GlassEffect & Masonry Layout\",\n description:\n \"Completely rewritten chart components with a simplified API. New GlassEffect component with automatic color adaptation and a responsive Masonry layout for grid-based content.\",\n authors: [\n {\n name: \"Alex Rivera\",\n src: \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=80&h=80&fit=crop&crop=face\",\n },\n ],\n tags: [\n { label: \"Breaking Change\", color: \"danger\" as const },\n { label: \"Feature\", color: \"success\" as const },\n ],\n latest: false,\n },\n {\n version: \"2.3.0\",\n date: \"JAN 10, 2026\",\n title: \"Forms, Accessibility & DX Improvements\",\n description:\n \"New DatePicker, TimePicker, and ColorPicker form components. Completed a full WCAG 2.1 AA compliance audit across all interactive components and added FormLayout for consistent form structure.\",\n authors: [\n {\n name: \"Priya Mehta\",\n src: \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=80&h=80&fit=crop&crop=face\",\n },\n {\n name: \"Sarah Chen\",\n src: \"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=80&h=80&fit=crop&crop=face\",\n },\n {\n name: \"Morgan Kim\",\n src: \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=80&h=80&fit=crop&crop=face\",\n },\n ],\n tags: [\n { label: \"Feature\", color: \"success\" as const },\n { label: \"Bug Fix\", color: \"warning\" as const },\n { label: \"Improvement\", color: \"primary\" as const },\n ],\n image: true,\n latest: false,\n },\n {\n version: \"2.2.0\",\n date: \"DEC 18, 2025\",\n title: \"Data Display, Drag & Drop, Stepper\",\n description:\n \"Introducing KPI, Metric, DescriptionList, and Feed components for rich data display. New DragDrop and Sortable primitives for kanban-style boards, plus a flexible Stepper with vertical and horizontal orientations.\",\n authors: [\n {\n name: \"Morgan Kim\",\n src: \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=80&h=80&fit=crop&crop=face\",\n },\n {\n name: \"Priya Mehta\",\n src: \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=80&h=80&fit=crop&crop=face\",\n },\n ],\n tags: [\n { label: \"Feature\", color: \"success\" as const },\n { label: \"Improvement\", color: \"primary\" as const },\n ],\n latest: false,\n },\n];\n\n/* ─── Main Component ───────────────────────────────── */\n\nconst ChangelogPage = () => (\n <div className=\"min-h-screen bg-[var(--color-background)]\">\n {/* Header */}\n <div className=\"max-w-2xl mx-auto px-6 pt-16 pb-12\">\n <p className=\"text-xs font-semibold tracking-widest uppercase text-[var(--color-text-muted)] mb-4\">\n Changelog\n </p>\n <h1 className=\"text-3xl sm:text-4xl font-bold text-[var(--color-text-primary)] tracking-tight mb-3\">\n What we've been shipping\n </h1>\n <p className=\"text-base text-[var(--color-text-secondary)] max-w-lg leading-relaxed\">\n New updates and improvements to Flikkui. Follow along as we build the\n component library you actually want to use.\n </p>\n </div>\n\n {/* Timeline */}\n <div className=\"max-w-2xl mx-auto px-6 pb-16\">\n <div className=\"relative pl-10\">\n {/* Vertical line */}\n <div className=\"absolute left-[4.5px] top-2 bottom-0 w-px bg-[var(--color-border)]\" />\n\n {releases.map((release, idx) => (\n <div\n key={release.version}\n className={idx < releases.length - 1 ? \"pb-14\" : \"\"}\n >\n {/* Timeline dot */}\n <div className=\"absolute left-0 mt-1.5 size-2.5 rounded-full bg-[var(--color-primary)] ring-4 ring-[var(--color-background)]\" />\n\n {/* Date row */}\n <div className=\"flex items-center gap-4 mb-2\">\n <time className=\"text-xs font-medium uppercase text-[var(--color-text-muted)]\">\n {release.date}\n </time>\n {release.latest && (\n <Badge color=\"primary\" variant=\"soft\" size=\"sm\">\n Latest\n </Badge>\n )}\n <Link className=\"ml-auto flex\" size=\"sm\">\n Read more\n <ArrowRightIcon className=\"size-3\" strokeWidth={2} />\n </Link>\n </div>\n\n {release.image && (\n <div className=\"h-72 bg-[var(--color-background-tertiary)] rounded-lg w-full my-4\" />\n )}\n\n {/* Title */}\n <h2 className=\"text-lg font-bold text-[var(--color-text-primary)] mb-2\">\n {release.title}\n </h2>\n\n {/* Tags */}\n <div className=\"flex flex-wrap gap-1.5 mb-3\">\n {release.tags.map((tag) => (\n <Badge\n key={tag.label}\n color={tag.color}\n variant=\"filled\"\n size=\"sm\"\n >\n {tag.label}\n </Badge>\n ))}\n </div>\n\n {/* Description */}\n <p className=\"text-base text-[var(--color-text-secondary)] mb-6\">\n {release.description}\n </p>\n\n {/* Authors */}\n <div className=\"flex items-center gap-2\">\n <AvatarGroup\n avatars={release.authors}\n size=\"xs\"\n spacing=\"loose\"\n max={4}\n />\n <span className=\"text-sm font-medium text-[var(--color-text-primary)]\">\n {release.authors.map((a) => a.name).join(\", \")}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n);\n\nexport const Default: Story = {\n render: () => <ChangelogPage />,\n parameters: {\n controls: { disable: true },\n },\n};"
|
|
9677
|
-
},
|
|
9678
9817
|
{
|
|
9679
9818
|
"name": "ErrorLayout",
|
|
9680
9819
|
"title": "Blocks/ErrorLayout",
|
|
@@ -9684,6 +9823,21 @@
|
|
|
9684
9823
|
],
|
|
9685
9824
|
"source": "import type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport { Button } from \"../../components/core\";\nimport {\n HomeIcon,\n ArrowPathIcon,\n ArrowLeftIcon,\n ExclamationTriangleIcon,\n} from \"@heroicons/react/24/outline\";\n\nconst meta: Meta = {\n title: \"Blocks/ErrorLayout\",\n parameters: {\n layout: \"fullscreen\",\n },\n};\n\nexport default meta;\ntype Story = StoryObj;\n\nexport const NotFound: Story = {\n render: () => (\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--color-background)] px-6\">\n <div className=\"text-center max-w-md\">\n <div className=\"text-8xl font-bold text-[var(--color-primary)] mb-4\">\n 404\n </div>\n <h1 className=\"text-2xl font-semibold text-[var(--color-text-primary)] mb-2\">\n Page not found\n </h1>\n <p className=\"text-[var(--color-text-muted)] mb-8\">\n Sorry, we couldn't find the page you're looking for. The page may have\n been moved or deleted.\n </p>\n <div className=\"flex items-center justify-center gap-3\">\n <Button variant=\"outline\" color=\"neutral\">\n <ArrowLeftIcon className=\"size-4\" /> Go Back\n </Button>\n <Button>\n <HomeIcon className=\"size-4\" /> Go Home\n </Button>\n </div>\n </div>\n </div>\n ),\n parameters: {\n controls: { disable: true },\n },\n};\n\nexport const ServerError: Story = {\n render: () => (\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--color-background)] px-6\">\n <div className=\"text-center max-w-md\">\n <div className=\"flex justify-center mb-6\">\n <div className=\"p-4 rounded-full bg-[var(--color-danger-50)]\">\n <ExclamationTriangleIcon className=\"size-12 text-[var(--color-danger)]\" />\n </div>\n </div>\n <div className=\"text-8xl font-bold text-[var(--color-danger)] mb-4\">\n 500\n </div>\n <h1 className=\"text-2xl font-semibold text-[var(--color-text-primary)] mb-2\">\n Internal Server Error\n </h1>\n <p className=\"text-[var(--color-text-muted)] mb-8\">\n We're experiencing a temporary outage. Our team has been notified and\n is working on a fix. Please try again in a few minutes.\n </p>\n <div className=\"flex items-center justify-center gap-3\">\n <Button variant=\"outline\" color=\"neutral\">\n <ArrowLeftIcon className=\"size-4\" /> Go Back\n </Button>\n <Button>\n <ArrowPathIcon className=\"size-4\" /> Refresh Page\n </Button>\n </div>\n </div>\n </div>\n ),\n parameters: {\n controls: { disable: true },\n },\n};"
|
|
9686
9825
|
},
|
|
9826
|
+
{
|
|
9827
|
+
"name": "GenerativeUI",
|
|
9828
|
+
"title": "vs. last month",
|
|
9829
|
+
"description": "Generative UI on the real engine: the (simulated) model emits a recursive UINode spec that selects and parameterizes already-compiled FlikkUI components. validate() repairs it against the generated schema and <GenerativeView> from @flikk/ui/generative renders it. Swap",
|
|
9830
|
+
"componentsUsed": [
|
|
9831
|
+
"AspectRatio",
|
|
9832
|
+
"Avatar",
|
|
9833
|
+
"Badge",
|
|
9834
|
+
"Button",
|
|
9835
|
+
"Card",
|
|
9836
|
+
"PageHeading",
|
|
9837
|
+
"Segmented"
|
|
9838
|
+
],
|
|
9839
|
+
"source": "import { GenerativeView, validate, GENERATIVE_TOOL } from \"@flikk/ui/generative\";\n\n// 1. Give the model the generated tool contract (or load @flikk/ui/tools.json)\n// const reply = await anthropic.messages.create({ tools: [GENERATIVE_TOOL], ... });\n\n// 2. The model emits a recursive UINode spec — pure JSON, no code:\nconst spec = {\n component: \"Stack\",\n props: { gap: 4 },\n children: [\n { component: \"Grid\", props: { cols: 3, gap: 4 }, children: [\n { component: \"Metric\", props: { value: \"$182,000\", label: \"Total Revenue\",\n trendValue: \"+12%\", trendDirection: \"up\", icon: \"CurrencyDollar\",\n color: \"success\", variant: \"ghost\" } },\n ]},\n { component: \"Card\", props: { title: \"New Signups\" }, children: [\n { component: \"AreaChart\", props: { data, config } },\n ]},\n ],\n};\n\n// 3. Validate/repair (drops handlers/unknown props, coerces enums) → render.\n// Save the JSON to your DB; replay it later with no LLM.\nconst { spec: safeSpec, issues } = validate(spec);\n<GenerativeView spec={safeSpec} />"
|
|
9840
|
+
},
|
|
9687
9841
|
{
|
|
9688
9842
|
"name": "InboxLayout",
|
|
9689
9843
|
"title": "Blocks/InboxLayout",
|
|
@@ -9713,6 +9867,28 @@
|
|
|
9713
9867
|
],
|
|
9714
9868
|
"source": "import type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport {\n Badge,\n Button,\n ButtonGroup,\n Card,\n Separator,\n} from \"../../components/core\";\nimport { Table } from \"../../components/data-display\";\nimport {\n ArrowDownTrayIcon,\n PaperAirplaneIcon,\n CheckIcon,\n} from \"@heroicons/react/24/outline\";\n\nconst meta: Meta = {\n title: \"Blocks/InvoiceLayout\",\n parameters: {\n layout: \"fullscreen\",\n },\n};\n\nexport default meta;\ntype Story = StoryObj;\n\ntype InvoiceItem = {\n description: string;\n detail: string;\n quantity: string;\n unitPrice: string;\n amount: string;\n};\n\ntype Invoice = {\n status: \"paid\" | \"overdue\";\n title: string;\n customer: string;\n customerEmail: string;\n customerAddress: string;\n issued: string;\n due: string;\n paidOn?: string;\n terms: string;\n subtotal: string;\n tax: string;\n total: string;\n noteTitle: string;\n note: string;\n items: InvoiceItem[];\n};\n\nconst paidInvoice: Invoice = {\n status: \"paid\",\n title: \"INV-2024-001\",\n customer: \"Acme Corporation\",\n customerEmail: \"billing@acme.com\",\n customerAddress: \"456 Business Ave, New York, NY 10001\",\n issued: \"Jan 15, 2025\",\n due: \"Feb 15, 2025\",\n paidOn: \"Feb 10, 2025\",\n terms: \"Net 30\",\n subtotal: \"$1,273.00\",\n tax: \"$127.30\",\n total: \"$1,400.30\",\n noteTitle: \"Payment received\",\n note: \"Bank transfer cleared on Feb 10, 2025. Receipt sent to billing@acme.com.\",\n items: [\n {\n description: \"UI Component Library License\",\n detail: \"Pro plan, annual billing\",\n quantity: \"1\",\n unitPrice: \"$299.00\",\n amount: \"$299.00\",\n },\n {\n description: \"Priority Support Package\",\n detail: \"Annual SLA with email and chat coverage\",\n quantity: \"1\",\n unitPrice: \"$149.00\",\n amount: \"$149.00\",\n },\n {\n description: \"Custom Theme Development\",\n detail: \"Brand token setup and interaction states\",\n quantity: \"3\",\n unitPrice: \"$75.00\",\n amount: \"$225.00\",\n },\n {\n description: \"Design Consultation\",\n detail: \"Implementation review and component guidance\",\n quantity: \"5\",\n unitPrice: \"$120.00\",\n amount: \"$600.00\",\n },\n ],\n};\n\nconst overdueInvoice: Invoice = {\n status: \"overdue\",\n title: \"INV-2025-019\",\n customer: \"Globex Corporation\",\n customerEmail: \"accounts@globex.com\",\n customerAddress: \"789 Industry Blvd, Chicago, IL 60601\",\n issued: \"Dec 1, 2025\",\n due: \"Dec 31, 2025\",\n terms: \"Net 30\",\n subtotal: \"$4,950.00\",\n tax: \"$495.00\",\n total: \"$5,445.00\",\n noteTitle: \"Payment overdue\",\n note: \"A reminder was sent to accounts@globex.com. Keep the payment link active until the balance is settled.\",\n items: [\n {\n description: \"Enterprise License\",\n detail: \"Unlimited seats and advanced permissions\",\n quantity: \"1\",\n unitPrice: \"$2,400.00\",\n amount: \"$2,400.00\",\n },\n {\n description: \"Dedicated Onboarding\",\n detail: \"Two live training sessions for admins\",\n quantity: \"2\",\n unitPrice: \"$800.00\",\n amount: \"$1,600.00\",\n },\n {\n description: \"Custom SSO Integration\",\n detail: \"SAML configuration and launch support\",\n quantity: \"1\",\n unitPrice: \"$950.00\",\n amount: \"$950.00\",\n },\n ],\n};\n\nconst InvoiceLayout = ({ invoice }: { invoice: Invoice }) => {\n const isPaid = invoice.status === \"paid\";\n\n return (\n <div className=\"min-h-screen bg-[var(--color-background)] px-4 py-6 text-[var(--color-text-primary)] sm:px-6 lg:px-8\">\n <div className=\"mx-auto max-w-5xl space-y-5\">\n <div className=\"flex flex-col gap-4 rounded-2xl border border-[var(--color-border)] bg-[var(--color-surface)]/80 px-4 py-4 shadow-[0_16px_40px_rgba(50,50,93,0.08)] backdrop-blur sm:flex-row sm:items-center sm:justify-between sm:px-5\">\n <div className=\"min-w-0\">\n <div className=\"mb-2 flex items-center gap-2\">\n {isPaid ? (\n <Badge color=\"success\" variant=\"soft\" withDot pill>\n Paid\n </Badge>\n ) : (\n <Badge color=\"danger\" variant=\"soft\" withDot pill>\n Past due\n </Badge>\n )}\n <span className=\"text-xs font-medium uppercase tracking-wide text-[var(--color-text-muted)]\">\n Flikkui Billing\n </span>\n </div>\n <h1 className=\"truncate text-xl font-semibold text-[var(--color-text-primary)] sm:text-2xl\">\n Invoice {invoice.title}\n </h1>\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <ButtonGroup>\n <Button variant=\"outline\" color=\"neutral\" size=\"sm\">\n <ArrowDownTrayIcon className=\"size-4\" />\n Download\n </Button>\n <Button variant=\"outline\" color=\"neutral\" size=\"sm\">\n <PaperAirplaneIcon className=\"size-4\" />\n {isPaid ? \"Send receipt\" : \"Send reminder\"}\n </Button>\n </ButtonGroup>\n {!isPaid && (\n <Button variant=\"filled\" color=\"primary\" size=\"sm\">\n <CheckIcon className=\"size-4\" />\n Mark as paid\n </Button>\n )}\n </div>\n </div>\n\n <Card className=\"overflow-hidden border-[var(--color-border)] bg-[var(--color-surface)] shadow-[0_24px_64px_rgba(50,50,93,0.12)]\">\n <Card.Body className=\"p-0\">\n <div className=\"grid gap-8 border-b border-[var(--color-border)] px-5 py-8 sm:px-8 lg:grid-cols-[1fr_300px] lg:px-10\">\n <div className=\"space-y-10\">\n <div>\n <div className=\"mb-8 flex items-center gap-3\">\n <div className=\"flex size-10 items-center justify-center rounded-xl bg-[var(--color-primary)] text-sm font-bold text-[var(--color-primary-contrast)] shadow-[0_8px_24px_rgba(99,91,255,0.28)]\">\n F\n </div>\n <div>\n <div className=\"text-base font-semibold text-[var(--color-text-primary)]\">\n Flikkui Inc.\n </div>\n <div className=\"text-sm text-[var(--color-text-secondary)]\">\n hello@flikkui.com\n </div>\n </div>\n </div>\n\n <p className=\"max-w-xl text-4xl font-semibold leading-tight text-[var(--color-text-primary)] sm:text-5xl\">\n {invoice.total}\n </p>\n <p className=\"mt-2 text-sm text-[var(--color-text-secondary)]\">\n Due {invoice.due} for {invoice.customer}\n </p>\n </div>\n\n <div className=\"grid gap-6 sm:grid-cols-2\">\n <div>\n <div className=\"text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\">\n Bill to\n </div>\n <div className=\"mt-3 text-sm font-medium text-[var(--color-text-primary)]\">\n {invoice.customer}\n </div>\n <div className=\"mt-1 max-w-xs text-sm leading-6 text-[var(--color-text-secondary)]\">\n {invoice.customerAddress}\n <br />\n {invoice.customerEmail}\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4 text-sm\">\n <InvoiceFact label=\"Invoice\" value={invoice.title} />\n <InvoiceFact label=\"Terms\" value={invoice.terms} />\n <InvoiceFact label=\"Issued\" value={invoice.issued} />\n <InvoiceFact\n label={isPaid ? \"Paid\" : \"Due\"}\n value={\n isPaid ? invoice.paidOn || invoice.due : invoice.due\n }\n tone={isPaid ? \"success\" : \"danger\"}\n />\n </div>\n </div>\n </div>\n\n <div className=\"self-start rounded-2xl border border-[var(--color-border)] p-5\">\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n <div className=\"text-sm font-semibold text-[var(--color-text-primary)]\">\n Amount {isPaid ? \"paid\" : \"due\"}\n </div>\n <div className=\"mt-1 text-sm text-[var(--color-text-secondary)]\">\n {isPaid\n ? \"Settled by bank transfer\"\n : \"Awaiting customer payment\"}\n </div>\n </div>\n {isPaid ? (\n <Badge color=\"success\" variant=\"soft\" size=\"sm\" pill>\n Complete\n </Badge>\n ) : (\n <Badge color=\"danger\" variant=\"soft\" size=\"sm\" pill>\n Action needed\n </Badge>\n )}\n </div>\n\n <Separator className=\"my-4\" />\n\n <div className=\"space-y-2.5 text-sm\">\n <SummaryRow label=\"Subtotal\" value={invoice.subtotal} />\n <SummaryRow label=\"Tax\" value={invoice.tax} muted />\n </div>\n\n <div className=\"mt-4 flex items-baseline justify-between border-t border-[var(--color-border)] pt-4\">\n <span className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n Total\n </span>\n <span className=\"text-xl font-semibold text-[var(--color-text-primary)]\">\n {invoice.total}\n </span>\n </div>\n </div>\n </div>\n\n <div className=\"px-5 py-6 sm:px-8 lg:px-10\">\n <Table\n padding=\"flush\"\n className=\"min-w-[680px] border-separate border-spacing-0\"\n >\n <Table.Header>\n <Table.Row className=\"hover:bg-transparent dark:hover:bg-transparent\">\n <Table.HeaderCell className=\"border-b border-[var(--color-border)] bg-[var(--color-surface)] pb-3 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\">\n Description\n </Table.HeaderCell>\n <Table.HeaderCell\n align=\"center\"\n className=\"border-b border-[var(--color-border)] bg-[var(--color-surface)] pb-3 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\"\n >\n Qty\n </Table.HeaderCell>\n <Table.HeaderCell\n align=\"right\"\n className=\"border-b border-[var(--color-border)] bg-[var(--color-surface)] pb-3 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\"\n >\n Unit price\n </Table.HeaderCell>\n <Table.HeaderCell\n align=\"right\"\n className=\"border-b border-[var(--color-border)] bg-[var(--color-surface)] pb-3 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\"\n >\n Amount\n </Table.HeaderCell>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {invoice.items.map((item, idx) => {\n const border =\n idx === invoice.items.length - 1 ? \"border-b-0\" : \"\";\n return (\n <Table.Row\n key={item.description}\n className=\"hover:bg-transparent dark:hover:bg-transparent\"\n >\n <Table.Cell className={`${border} py-5`}>\n <div className=\"font-medium text-[var(--color-text-primary)]\">\n {item.description}\n </div>\n <div className=\"mt-1 text-sm text-[var(--color-text-secondary)]\">\n {item.detail}\n </div>\n </Table.Cell>\n <Table.Cell\n align=\"center\"\n className={`${border} py-5 text-[var(--color-text-secondary)]`}\n >\n {item.quantity}\n </Table.Cell>\n <Table.Cell\n align=\"right\"\n className={`${border} py-5 text-[var(--color-text-secondary)]`}\n >\n {item.unitPrice}\n </Table.Cell>\n <Table.Cell\n align=\"right\"\n className={`${border} py-5 font-medium text-[var(--color-text-primary)]`}\n >\n {item.amount}\n </Table.Cell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table>\n </div>\n\n <div className=\"border-t border-[var(--color-border)] bg-[var(--color-surface)] px-5 py-5 sm:px-8 lg:px-10\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <div className=\"text-sm font-semibold text-[var(--color-text-primary)]\">\n {invoice.noteTitle}\n </div>\n <div className=\"mt-1 max-w-2xl text-sm leading-6 text-[var(--color-text-secondary)]\">\n {invoice.note}\n </div>\n </div>\n <div className=\"text-sm font-medium text-[var(--color-primary)]\">\n flikkui.com/pay/{invoice.title.toLowerCase()}\n </div>\n </div>\n </div>\n </Card.Body>\n </Card>\n </div>\n </div>\n );\n};\n\nconst InvoiceFact = ({\n label,\n value,\n tone,\n}: {\n label: string;\n value: string;\n tone?: \"success\" | \"danger\";\n}) => {\n const toneClass =\n tone === \"success\"\n ? \"text-[var(--color-success)]\"\n : tone === \"danger\"\n ? \"text-[var(--color-danger)]\"\n : \"text-[var(--color-text-primary)]\";\n\n return (\n <div>\n <div className=\"text-xs font-semibold uppercase tracking-wide text-[var(--color-text-muted)]\">\n {label}\n </div>\n <div className={`mt-2 font-medium ${toneClass}`}>{value}</div>\n </div>\n );\n};\n\nconst SummaryRow = ({\n label,\n value,\n muted = false,\n}: {\n label: string;\n value: string;\n muted?: boolean;\n}) => (\n <div\n className={`flex items-center justify-between ${\n muted ? \"text-[var(--color-text-secondary)]\" : \"text-[var(--color-text-primary)]\"\n }`}\n >\n <span>{label}</span>\n <span className=\"font-medium\">{value}</span>\n </div>\n);\n\nexport const Default: Story = {\n render: () => <InvoiceLayout invoice={paidInvoice} />,\n parameters: {\n controls: { disable: true },\n },\n};\n\nexport const Overdue: Story = {\n render: () => <InvoiceLayout invoice={overdueInvoice} />,\n parameters: {\n controls: { disable: true },\n },\n};"
|
|
9715
9869
|
},
|
|
9870
|
+
{
|
|
9871
|
+
"name": "LMSDashboardLayout",
|
|
9872
|
+
"title": "Blocks/LMSDashboardLayout",
|
|
9873
|
+
"description": "Full-page composition using AppShell, Avatar, Badge, Button, ….",
|
|
9874
|
+
"componentsUsed": [
|
|
9875
|
+
"AppShell",
|
|
9876
|
+
"Avatar",
|
|
9877
|
+
"Badge",
|
|
9878
|
+
"Button",
|
|
9879
|
+
"Card",
|
|
9880
|
+
"Grid",
|
|
9881
|
+
"Metric",
|
|
9882
|
+
"NavItem",
|
|
9883
|
+
"Progress",
|
|
9884
|
+
"PromptInput",
|
|
9885
|
+
"Section",
|
|
9886
|
+
"Sidebar",
|
|
9887
|
+
"Table",
|
|
9888
|
+
"Timeline"
|
|
9889
|
+
],
|
|
9890
|
+
"source": "import React from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport {\n Avatar,\n Badge,\n Button,\n Card,\n NavItem,\n Progress,\n Sidebar,\n} from \"../../components/core\";\nimport { AppShell, Grid, Section } from \"../../components/layout\";\nimport { Metric, Table, Timeline } from \"../../components/data-display\";\nimport type { Column } from \"../../components/data-display\";\nimport { PromptInput, PromptSuggestion } from \"../../components/ai\";\nimport {\n AcademicCapIcon,\n ArrowRightIcon,\n BookOpenIcon,\n ChartBarIcon,\n ChatBubbleLeftRightIcon,\n CheckCircleIcon,\n ClockIcon,\n FireIcon,\n HomeIcon,\n PresentationChartLineIcon,\n ShieldCheckIcon,\n SparklesIcon,\n Squares2X2Icon,\n TrophyIcon,\n UserGroupIcon,\n VideoCameraIcon,\n} from \"@heroicons/react/24/outline\";\nimport { StarIcon as StarSolidIcon } from \"@heroicons/react/24/solid\";\n\nconst meta: Meta = {\n title: \"Blocks/LMSDashboardLayout\",\n parameters: { layout: \"fullscreen\" },\n};\n\nexport default meta;\ntype Story = StoryObj;\n\n// --- To do: assigned learning, sorted by due date ---\n\ninterface Assignment {\n id: string;\n title: string;\n detail: string;\n type: \"Course\" | \"Path\" | \"Live\";\n due: string;\n urgency: \"overdue\" | \"soon\" | \"later\";\n progress: number;\n icon: React.ReactNode;\n iconClassName: string;\n}\n\nconst assignments: Assignment[] = [\n {\n id: \"1\",\n title: \"Security & Data Privacy Essentials\",\n detail: \"Annual compliance · 6 lessons\",\n type: \"Course\",\n due: \"Overdue · Jun 10\",\n urgency: \"overdue\",\n progress: 45,\n icon: <ShieldCheckIcon className=\"size-4\" />,\n iconClassName: \"bg-[var(--color-danger-50)] text-[var(--color-danger-600)]\",\n },\n {\n id: \"2\",\n title: \"Giving Effective Feedback\",\n detail: \"Manager Essentials path · Step 3 of 5\",\n type: \"Path\",\n due: \"Due tomorrow\",\n urgency: \"soon\",\n progress: 70,\n icon: <ChatBubbleLeftRightIcon className=\"size-4\" />,\n iconClassName:\n \"bg-[var(--color-primary-50)] text-[var(--color-primary-600)]\",\n },\n {\n id: \"3\",\n title: \"Q3 Product Deep-Dive\",\n detail: \"Live session · Hosted by Product team\",\n type: \"Live\",\n due: \"Jun 16 · 4:00 PM\",\n urgency: \"later\",\n progress: 0,\n icon: <VideoCameraIcon className=\"size-4\" />,\n iconClassName:\n \"bg-[var(--color-success-50)] text-[var(--color-success-600)]\",\n },\n {\n id: \"4\",\n title: \"Figma for Cross-Functional Teams\",\n detail: \"Design fundamentals · 9 lessons\",\n type: \"Course\",\n due: \"Due Jun 24\",\n urgency: \"later\",\n progress: 20,\n icon: <Squares2X2Icon className=\"size-4\" />,\n iconClassName:\n \"bg-[var(--color-warning-50)] text-[var(--color-warning-600)]\",\n },\n];\n\nconst dueBadgeColor: Record<Assignment[\"urgency\"], \"danger\" | \"warning\" | \"neutral\"> = {\n overdue: \"danger\",\n soon: \"warning\",\n later: \"neutral\",\n};\n\nconst assignmentColumns: Column<Assignment>[] = [\n {\n id: \"title\",\n header: \"Assignment\",\n accessor: \"title\",\n cell: (row) => (\n <div className=\"flex items-center gap-3\">\n <div\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg ${row.iconClassName}`}\n >\n {row.icon}\n </div>\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-[var(--color-text-primary)]\">\n {row.title}\n </div>\n <div className=\"truncate text-xs text-[var(--color-text-muted)]\">\n {row.detail}\n </div>\n </div>\n </div>\n ),\n },\n {\n id: \"type\",\n header: \"Type\",\n accessor: \"type\",\n cell: (row) => (\n <Badge color=\"secondary\" variant=\"soft\" size=\"sm\">\n {row.type}\n </Badge>\n ),\n },\n {\n id: \"due\",\n header: \"Due\",\n accessor: \"due\",\n cell: (row) => (\n <Badge color={dueBadgeColor[row.urgency]} variant=\"soft\" size=\"sm\">\n {row.due}\n </Badge>\n ),\n },\n {\n id: \"progress\",\n header: \"Progress\",\n accessor: \"progress\",\n width: 180,\n cell: (row) =>\n row.type === \"Live\" ? (\n <span className=\"text-xs text-[var(--color-text-muted)]\">\n Enrolled\n </span>\n ) : (\n <Progress value={row.progress} size=\"sm\" showLabel />\n ),\n },\n {\n id: \"action\",\n header: \"\",\n accessor: \"id\",\n align: \"right\",\n cell: (row) => (\n <Button variant=\"ghost\" color=\"neutral\" size=\"sm\">\n {row.type === \"Live\" ? \"Join\" : \"Continue\"}\n <ArrowRightIcon className=\"size-3.5\" />\n </Button>\n ),\n },\n];\n\n// --- Continue learning ---\n\nconst inProgressCourses = [\n {\n title: \"Advanced Prompt Engineering\",\n category: \"AI & Data\",\n lessons: \"Lesson 12 of 18\",\n progress: 68,\n timeLeft: \"24 min left\",\n gradient:\n \"from-[var(--color-primary-400)] to-[var(--color-primary-700)]\",\n icon: <SparklesIcon className=\"size-7\" />,\n },\n {\n title: \"Storytelling with Data\",\n category: \"Communication\",\n lessons: \"Lesson 4 of 11\",\n progress: 35,\n timeLeft: \"1h 10m left\",\n gradient:\n \"from-[var(--color-warning-400)] to-[var(--color-warning-600)]\",\n icon: <PresentationChartLineIcon className=\"size-7\" />,\n },\n {\n title: \"Negotiation Fundamentals\",\n category: \"Sales\",\n lessons: \"Lesson 9 of 10\",\n progress: 82,\n timeLeft: \"15 min left\",\n gradient:\n \"from-[var(--color-success-400)] to-[var(--color-success-700)]\",\n icon: <UserGroupIcon className=\"size-7\" />,\n },\n];\n\n// --- Leaderboard ---\n\nconst leaderboard = [\n {\n rank: 1,\n name: \"Jonas Lindqvist\",\n team: \"Engineering\",\n points: 2840,\n avatar: \"https://i.pravatar.cc/150?u=jonas-lindqvist\",\n },\n {\n rank: 2,\n name: \"Priya Sharma\",\n team: \"Product\",\n points: 2615,\n avatar: \"https://i.pravatar.cc/150?u=priya-sharma\",\n },\n {\n rank: 3,\n name: \"Tom Becker\",\n team: \"Sales\",\n points: 2390,\n avatar: \"https://i.pravatar.cc/150?u=tom-becker\",\n },\n {\n rank: 4,\n name: \"Maya Patel\",\n team: \"Design\",\n points: 2210,\n avatar: \"https://i.pravatar.cc/150?u=maya-patel\",\n isYou: true,\n },\n {\n rank: 5,\n name: \"Sofia Reyes\",\n team: \"Marketing\",\n points: 2045,\n avatar: \"https://i.pravatar.cc/150?u=sofia-reyes\",\n },\n];\n\n// --- AI recommendations ---\n\nconst recommendations = [\n {\n title: \"Running Inclusive Meetings\",\n category: \"Leadership\",\n duration: \"35 min\",\n rating: 4.8,\n icon: <UserGroupIcon className=\"size-5\" />,\n iconClassName:\n \"bg-[var(--color-primary-50)] text-[var(--color-primary-600)]\",\n },\n {\n title: \"SQL for Product Managers\",\n category: \"AI & Data\",\n duration: \"1h 20m\",\n rating: 4.9,\n icon: <ChartBarIcon className=\"size-5\" />,\n iconClassName:\n \"bg-[var(--color-success-50)] text-[var(--color-success-600)]\",\n },\n {\n title: \"Writing Crisp Product Specs\",\n category: \"Communication\",\n duration: \"50 min\",\n rating: 4.7,\n icon: <BookOpenIcon className=\"size-5\" />,\n iconClassName:\n \"bg-[var(--color-warning-50)] text-[var(--color-warning-600)]\",\n },\n {\n title: \"Coaching Through Change\",\n category: \"Leadership\",\n duration: \"45 min\",\n rating: 4.6,\n icon: <ChatBubbleLeftRightIcon className=\"size-5\" />,\n iconClassName:\n \"bg-[var(--color-danger-50)] text-[var(--color-danger-600)]\",\n },\n];\n\nexport const Default: Story = {\n render: () => (\n <AppShell contentPadding=\"lg\" contentWidth=\"wide\">\n <AppShell.Sidebar\n width=\"auto\"\n collapsedOnMobile={false}\n theme={{ sidebar: \"flex flex-col shrink-0\" }}\n >\n <Sidebar variant=\"floating\">\n <Sidebar.Header\n logo={\n <Sidebar.Logo\n icon={\n <div className=\"flex size-8 items-center justify-center rounded-lg bg-[var(--color-primary)] text-white\">\n <AcademicCapIcon className=\"size-5\" />\n </div>\n }\n text=\"Flikk Learn\"\n />\n }\n />\n <Sidebar.Search placeholder=\"Search learning…\" />\n <Sidebar.Content>\n <Sidebar.Nav>\n <Sidebar.NavGroup title=\"Learn\">\n <NavItem startContent={<HomeIcon />} active>\n Home\n </NavItem>\n <NavItem startContent={<BookOpenIcon />} notification={3}>\n My Learning\n </NavItem>\n <NavItem startContent={<Squares2X2Icon />}>Library</NavItem>\n <NavItem startContent={<VideoCameraIcon />}>\n Live Sessions\n </NavItem>\n <NavItem startContent={<TrophyIcon />}>Skills</NavItem>\n </Sidebar.NavGroup>\n <Sidebar.NavGroup title=\"Manage\">\n <NavItem startContent={<ChartBarIcon />}>Insights</NavItem>\n </Sidebar.NavGroup>\n </Sidebar.Nav>\n </Sidebar.Content>\n <Sidebar.Footer>\n <Sidebar.Toggle />\n <Sidebar.UserProfile\n name=\"Maya Patel\"\n email=\"maya@flikk.io\"\n avatar=\"https://i.pravatar.cc/150?u=maya-patel\"\n status=\"online\"\n />\n </Sidebar.Footer>\n </Sidebar>\n </AppShell.Sidebar>\n\n {/* Recessed floor (NodeCanvas-style) so the borderless white cards read\n as panels above the canvas — the GenerativeUI-block look. */}\n <AppShell.Main\n theme={{ mainScroll: \"min-h-0 flex-1 bg-[var(--color-surface-sunken)]\" }}\n >\n <div className=\"mx-auto max-w-6xl space-y-10 pb-12\">\n {/* Hero — greeting + AI ask bar (the Sana signature) */}\n <div className=\"flex flex-col items-center pt-8 text-center\">\n <h1 className=\"text-3xl font-semibold tracking-tight text-[var(--color-text-primary)]\">\n Good morning, Maya\n </h1>\n <p className=\"mt-2 text-sm text-[var(--color-text-muted)]\">\n You have 2 assignments due this week and a live session today at\n 4:00 PM.\n </p>\n <div className=\"mt-6 w-full max-w-2xl\">\n <PromptInput\n placeholder=\"Ask anything — find a course, company knowledge, or get help…\"\n showAttachmentButton={false}\n showVoiceButton={false}\n showModelSelector={false}\n showSettingsButton={false}\n onSubmit={() => {}}\n />\n </div>\n <div className=\"mt-4 flex flex-wrap items-center justify-center gap-2\">\n <PromptSuggestion\n icon={<SparklesIcon className=\"size-4\" />}\n onSelect={() => {}}\n >\n What should I learn next?\n </PromptSuggestion>\n <PromptSuggestion\n icon={<SparklesIcon className=\"size-4\" />}\n onSelect={() => {}}\n >\n Summarize my overdue work\n </PromptSuggestion>\n <PromptSuggestion\n icon={<SparklesIcon className=\"size-4\" />}\n onSelect={() => {}}\n >\n Find courses on negotiation\n </PromptSuggestion>\n </div>\n </div>\n\n {/* Stats strip — bare ghost Metrics on the canvas (GenerativeUI\n treatment). Metric renders its own Card shell internally, so it\n must NOT be wrapped in another Card. */}\n <Grid cols={4} gap={4}>\n <Metric\n label=\"Courses completed\"\n value={12}\n trendValue=\"+3 this month\"\n trendDirection=\"up\"\n icon={<CheckCircleIcon />}\n color=\"success\"\n size=\"sm\"\n variant=\"ghost\"\n />\n <Metric\n label=\"Learning streak\"\n value=\"8 days\"\n subtitle=\"Best: 21 days\"\n icon={<FireIcon />}\n color=\"warning\"\n size=\"sm\"\n variant=\"ghost\"\n />\n <Metric\n label=\"Time this month\"\n value=\"14.5h\"\n trendValue=\"+2.1h\"\n trendDirection=\"up\"\n icon={<ClockIcon />}\n color=\"primary\"\n size=\"sm\"\n variant=\"ghost\"\n />\n <Metric\n label=\"Badges earned\"\n value={6}\n subtitle=\"2 skills in progress\"\n icon={<TrophyIcon />}\n color=\"secondary\"\n size=\"sm\"\n variant=\"ghost\"\n />\n </Grid>\n\n {/* To do */}\n <Section\n title=\"To do\"\n subtitle=\"Assigned learning, sorted by due date\"\n actions={\n <Button variant=\"ghost\" color=\"neutral\" size=\"sm\">\n View all\n </Button>\n }\n >\n <Card>\n <Table\n data={assignments}\n columns={assignmentColumns}\n rowKey=\"id\"\n padding=\"flush\"\n />\n </Card>\n </Section>\n\n {/* Continue learning */}\n <Section\n title=\"Continue learning\"\n subtitle=\"Pick up where you left off\"\n >\n <Grid cols={3} gap={4}>\n {inProgressCourses.map((course) => (\n <Card key={course.title} className=\"overflow-hidden\">\n <div\n className={`flex h-28 items-center justify-center bg-gradient-to-br text-white ${course.gradient}`}\n >\n {course.icon}\n </div>\n <Card.Body>\n <Badge color=\"secondary\" variant=\"soft\" size=\"sm\">\n {course.category}\n </Badge>\n <h3 className=\"mt-2 font-medium text-[var(--color-text-primary)]\">\n {course.title}\n </h3>\n <p className=\"mt-0.5 text-xs text-[var(--color-text-muted)]\">\n {course.lessons}\n </p>\n <div className=\"mt-3\">\n <Progress value={course.progress} size=\"sm\" showLabel />\n </div>\n <div className=\"mt-4 flex items-center justify-between\">\n <span className=\"text-xs text-[var(--color-text-muted)]\">\n {course.timeLeft}\n </span>\n <Button size=\"sm\">\n Resume\n <ArrowRightIcon className=\"size-3.5\" />\n </Button>\n </div>\n </Card.Body>\n </Card>\n ))}\n </Grid>\n </Section>\n\n {/* Sessions + leaderboard */}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <Card\n title=\"Upcoming live sessions\"\n subtitle=\"Self-enroll while seats last\"\n actions={\n <Button variant=\"ghost\" color=\"neutral\" size=\"sm\">\n View calendar\n </Button>\n }\n className=\"lg:col-span-2\"\n >\n <Timeline\n items={[\n {\n status: \"active\",\n title: \"Q3 Product Deep-Dive\",\n description: (\n <span className=\"flex flex-wrap items-center gap-2\">\n Hosted by the Product team\n <Badge color=\"success\" variant=\"soft\" size=\"sm\">\n 14 seats left\n </Badge>\n </span>\n ),\n timestamp: \"Today · 4:00 PM\",\n icon: <VideoCameraIcon className=\"size-3.5\" />,\n },\n {\n status: \"pending\",\n title: \"Manager AMA with the People team\",\n description: \"Open Q&A — bring your trickiest situations\",\n timestamp: \"Jun 16 · 11:00 AM\",\n },\n {\n status: \"pending\",\n title: \"Workshop: Storytelling with Data\",\n description: (\n <span className=\"flex flex-wrap items-center gap-2\">\n Hands-on, capped at 20 participants\n <Badge color=\"warning\" variant=\"soft\" size=\"sm\">\n 3 seats left\n </Badge>\n </span>\n ),\n timestamp: \"Jun 19 · 2:00 PM\",\n },\n ]}\n />\n </Card>\n\n <Card title=\"Skills leaderboard\" subtitle=\"This quarter\">\n <div className=\"space-y-1\">\n {leaderboard.map((person) => (\n <div\n key={person.rank}\n className={`flex items-center gap-3 rounded-lg px-2 py-2 ${\n person.isYou ? \"bg-[var(--color-primary-50)]\" : \"\"\n }`}\n >\n <span className=\"w-5 text-center text-sm font-semibold text-[var(--color-text-muted)]\">\n {person.rank}\n </span>\n <Avatar src={person.avatar} name={person.name} size=\"sm\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium text-[var(--color-text-primary)]\">\n {person.name}\n </div>\n <div className=\"truncate text-xs text-[var(--color-text-muted)]\">\n {person.team}\n {person.isYou && (\n <span className=\"text-[var(--color-primary-600)]\">\n {\" \"}\n · You\n </span>\n )}\n </div>\n </div>\n <span className=\"text-sm font-semibold text-[var(--color-text-secondary)]\">\n {person.points.toLocaleString()}\n </span>\n {person.rank === 1 && (\n <TrophyIcon className=\"size-4 text-[var(--color-warning-500)]\" />\n )}\n </div>\n ))}\n </div>\n </Card>\n </div>\n\n {/* AI recommendations */}\n <Section\n title=\"You might like\"\n subtitle=\"Picked for you based on your role and recent learning\"\n >\n <Grid cols={4} gap={4}>\n {recommendations.map((course) => (\n <Card key={course.title} className=\"transition-shadow hover:shadow-md\">\n <Card.Body>\n <div\n className={`flex size-10 items-center justify-center rounded-lg ${course.iconClassName}`}\n >\n {course.icon}\n </div>\n <h3 className=\"mt-3 text-sm font-medium text-[var(--color-text-primary)]\">\n {course.title}\n </h3>\n <div className=\"mt-2 flex items-center gap-2 text-xs text-[var(--color-text-muted)]\">\n <span>{course.duration}</span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"flex items-center gap-0.5\">\n <StarSolidIcon className=\"size-3.5 text-[var(--color-warning-500)]\" />\n {course.rating}\n </span>\n </div>\n <div className=\"mt-3\">\n <Badge color=\"secondary\" variant=\"soft\" size=\"sm\">\n {course.category}\n </Badge>\n </div>\n </Card.Body>\n </Card>\n ))}\n </Grid>\n </Section>\n </div>\n </AppShell.Main>\n </AppShell>\n ),\n parameters: {\n controls: { disable: true },\n },\n};"
|
|
9891
|
+
},
|
|
9716
9892
|
{
|
|
9717
9893
|
"name": "MailComposerLayout",
|
|
9718
9894
|
"title": "Blocks/MailComposerLayout",
|
|
@@ -9746,19 +9922,15 @@
|
|
|
9746
9922
|
"source": "import React from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport {\n Avatar,\n Button,\n Masonry,\n Segmented,\n Tooltip,\n} from \"../../components/core\";\nimport { Input } from \"../../components/forms\";\nimport { cn } from \"../../utils\";\nimport {\n MagnifyingGlassIcon,\n ArrowUpTrayIcon,\n HeartIcon,\n ArrowDownTrayIcon,\n EyeIcon,\n} from \"@heroicons/react/24/outline\";\nimport { HeartIcon as HeartSolidIcon } from \"@heroicons/react/24/solid\";\n\nconst meta: Meta = {\n title: \"Blocks/MediaGalleryLayout\",\n parameters: { layout: \"fullscreen\" },\n};\n\nexport default meta;\ntype Story = StoryObj;\n\n// --- Gallery items with varied heights ---\n\ntype GalleryItem = {\n id: string;\n src: string;\n title: string;\n author: string;\n avatar: string;\n likes: number;\n views: string;\n liked: boolean;\n heightClassName: string;\n};\n\nconst galleryItems: GalleryItem[] = [\n {\n id: \"1\",\n src: \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=600&h=400&fit=crop\",\n title: \"Mountain Sunrise\",\n author: \"Sarah Chen\",\n avatar:\n \"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=80&h=80&fit=crop&crop=face\",\n likes: 342,\n views: \"2.1k\",\n liked: true,\n heightClassName: \"h-48 sm:h-56\",\n },\n {\n id: \"2\",\n src: \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=600&h=800&fit=crop\",\n title: \"Misty Forest\",\n author: \"James Wilson\",\n avatar:\n \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=80&h=80&fit=crop&crop=face\",\n likes: 218,\n views: \"1.4k\",\n liked: false,\n heightClassName: \"h-64 sm:h-80\",\n },\n {\n id: \"3\",\n src: \"https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?w=600&h=400&fit=crop\",\n title: \"Ocean Waves\",\n author: \"Emily Rodriguez\",\n avatar:\n \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=80&h=80&fit=crop&crop=face\",\n likes: 567,\n views: \"3.8k\",\n liked: true,\n heightClassName: \"h-48 sm:h-52\",\n },\n {\n id: \"4\",\n src: \"https://images.unsplash.com/photo-1501854140801-50d01698950b?w=600&h=600&fit=crop\",\n title: \"Autumn Valley\",\n author: \"David Kim\",\n avatar:\n \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=80&h=80&fit=crop&crop=face\",\n likes: 891,\n views: \"5.2k\",\n liked: false,\n heightClassName: \"h-56 sm:h-64\",\n },\n {\n id: \"5\",\n src: \"https://images.unsplash.com/photo-1469474968028-56623f02e42e?w=600&h=400&fit=crop\",\n title: \"Sunlit Meadow\",\n author: \"Lisa Thompson\",\n avatar:\n \"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=80&h=80&fit=crop&crop=face\",\n likes: 156,\n views: \"890\",\n liked: false,\n heightClassName: \"h-44 sm:h-48\",\n },\n {\n id: \"6\",\n src: \"https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=600&h=700&fit=crop\",\n title: \"Northern Lights\",\n author: \"Alex Rivera\",\n avatar:\n \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=80&h=80&fit=crop&crop=face\",\n likes: 1203,\n views: \"8.4k\",\n liked: true,\n heightClassName: \"h-60 sm:h-72\",\n },\n {\n id: \"7\",\n src: \"https://images.unsplash.com/photo-1473580044384-7ba9967e16a0?w=600&h=400&fit=crop\",\n title: \"Desert Dunes\",\n author: \"Sarah Chen\",\n avatar:\n \"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=80&h=80&fit=crop&crop=face\",\n likes: 445,\n views: \"2.9k\",\n liked: false,\n heightClassName: \"h-48 sm:h-56\",\n },\n {\n id: \"8\",\n src: \"https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=600&h=500&fit=crop\",\n title: \"Spring Bloom\",\n author: \"James Wilson\",\n avatar:\n \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=80&h=80&fit=crop&crop=face\",\n likes: 312,\n views: \"1.7k\",\n liked: true,\n heightClassName: \"h-52 sm:h-60\",\n },\n];\n\nconst galleryColumns = { 640: 1, 768: 2, 1024: 3, 1280: 4 };\nconst noop = () => undefined;\n\ntype GalleryActionButtonProps = {\n label: string;\n delayClassName?: string;\n children: React.ReactNode;\n};\n\nconst GalleryActionButton = ({\n label,\n delayClassName,\n children,\n}: GalleryActionButtonProps) => (\n <Tooltip content={label}>\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n \"flex size-8 translate-y-2 scale-95 items-center justify-center rounded-full bg-white/20 text-white opacity-0 backdrop-blur-sm transition-[opacity,transform,background-color] duration-300 ease-out hover:bg-white/30 focus:outline-none focus:ring-2 focus:ring-white/70 group-hover:translate-y-0 group-hover:scale-100 group-hover:opacity-100 group-focus-within:translate-y-0 group-focus-within:scale-100 group-focus-within:opacity-100\",\n delayClassName,\n )}\n >\n {children}\n </button>\n </Tooltip>\n);\n\nconst GalleryCard = ({ item }: { item: GalleryItem }) => (\n <article className=\"group relative overflow-hidden rounded-lg bg-[var(--color-background-tertiary)]\">\n <div className={cn(item.heightClassName, \"overflow-hidden\")}>\n <img\n src={item.src}\n alt={item.title}\n loading=\"lazy\"\n decoding=\"async\"\n className=\"h-full w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n </div>\n\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/65 via-black/10 to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100\">\n <div className=\"absolute right-3 top-3 flex gap-2\">\n <GalleryActionButton\n label={item.liked ? \"Unlike\" : \"Like\"}\n delayClassName=\"delay-75\"\n >\n {item.liked ? (\n <HeartSolidIcon className=\"size-4 text-red-400\" />\n ) : (\n <HeartIcon className=\"size-4\" />\n )}\n </GalleryActionButton>\n <GalleryActionButton\n label={`Download ${item.title}`}\n delayClassName=\"delay-150\"\n >\n <ArrowDownTrayIcon className=\"size-4\" />\n </GalleryActionButton>\n </div>\n\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <h3 className=\"translate-y-3 truncate text-sm font-medium text-white opacity-0 transition-[opacity,transform] delay-100 duration-300 ease-out group-hover:translate-y-0 group-hover:opacity-100 group-focus-within:translate-y-0 group-focus-within:opacity-100\">\n {item.title}\n </h3>\n <div className=\"mt-2 flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 translate-y-3 items-center gap-2 opacity-0 transition-[opacity,transform] delay-150 duration-300 ease-out group-hover:translate-y-0 group-hover:opacity-100 group-focus-within:translate-y-0 group-focus-within:opacity-100\">\n <Avatar src={item.avatar} name={item.author} size=\"xs\" />\n <span className=\"truncate text-xs text-white/80\">\n {item.author}\n </span>\n </div>\n <div className=\"flex shrink-0 translate-y-3 items-center gap-3 text-xs text-white/70 opacity-0 transition-[opacity,transform] delay-200 duration-300 ease-out group-hover:translate-y-0 group-hover:opacity-100 group-focus-within:translate-y-0 group-focus-within:opacity-100\">\n <span className=\"flex items-center gap-1\">\n <HeartIcon className=\"size-3\" aria-hidden=\"true\" />\n {item.likes}\n </span>\n <span className=\"flex items-center gap-1\">\n <EyeIcon className=\"size-3\" aria-hidden=\"true\" />\n {item.views}\n </span>\n </div>\n </div>\n </div>\n </div>\n </article>\n);\n\nexport const Default: Story = {\n render: () => (\n <div className=\"min-h-screen bg-[var(--color-background)]\">\n {/* Header */}\n <div className=\"sticky top-0 z-10 bg-[var(--color-background)]/80 backdrop-blur-md border-b border-[var(--color-border)]\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 py-4\">\n <div className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n <div className=\"shrink-0\">\n <h1 className=\"text-2xl font-bold text-[var(--color-text-primary)]\">\n Gallery\n </h1>\n <p className=\"text-sm text-[var(--color-text-muted)]\">\n Explore the community collection\n </p>\n </div>\n <div className=\"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center md:flex-1 md:justify-end\">\n <Input\n placeholder=\"Search...\"\n iconStart={<MagnifyingGlassIcon className=\"size-4\" />}\n size=\"sm\"\n className=\"w-full sm:w-56 lg:w-72 xl:w-96\"\n />\n <Segmented value=\"all\" onChange={noop} size=\"sm\">\n <Segmented.Item value=\"all\">All</Segmented.Item>\n <Segmented.Item value=\"photos\">Photos</Segmented.Item>\n <Segmented.Item value=\"videos\">Videos</Segmented.Item>\n </Segmented>\n <Button size=\"sm\" className=\"w-full shrink-0 sm:w-auto\">\n <ArrowUpTrayIcon className=\"size-4\" /> Upload\n </Button>\n </div>\n </div>\n </div>\n </div>\n\n {/* Gallery grid */}\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 py-6\">\n <Masonry columns={galleryColumns} gap={16}>\n {galleryItems.map((item) => (\n <GalleryCard key={item.id} item={item} />\n ))}\n </Masonry>\n </div>\n </div>\n ),\n parameters: {\n controls: { disable: true },\n },\n};"
|
|
9747
9923
|
},
|
|
9748
9924
|
{
|
|
9749
|
-
"name": "
|
|
9750
|
-
"title": "
|
|
9751
|
-
"description": "Full-page composition using
|
|
9925
|
+
"name": "NodeCanvasEditorLayout",
|
|
9926
|
+
"title": "Generated image",
|
|
9927
|
+
"description": "Full-page composition using Button, Input, Spinner.",
|
|
9752
9928
|
"componentsUsed": [
|
|
9753
|
-
"AvatarGroup",
|
|
9754
|
-
"Badge",
|
|
9755
9929
|
"Button",
|
|
9756
|
-
"DotPattern",
|
|
9757
|
-
"Icon",
|
|
9758
9930
|
"Input",
|
|
9759
|
-
"
|
|
9931
|
+
"Spinner"
|
|
9760
9932
|
],
|
|
9761
|
-
"source": "import
|
|
9933
|
+
"source": "import { useState } from \"react\";\nimport {\n NodeCanvas, BaseNode, Handle, Background, NodeControls, MiniMap, CanvasToolbar,\n applyNodeChanges, applyEdgeChanges,\n} from \"@flikk/ui/canvas\";\n\n// The engine is type-agnostic — your app owns the type→color/icon map.\nconst WIRE = { text: \"#cbd5e1\", image: \"#7dd3fc\", video: \"#c4b5fd\", audio: \"#f9a8d4\" };\nconst portType = (handleId) => handleId?.split(\"-\")[0];\n\nfunction ImageNode({ data, selected }) {\n return (\n <BaseNode selected={selected} className=\"w-90 p-0\">\n {/* header strip, inset media, caption … */}\n <Handle type=\"target\" id=\"text-in\" position=\"left\"\n className=\"size-5 rounded-full bg-slate-200 text-slate-600\">T</Handle>\n <Handle type=\"source\" id=\"image-out\" position=\"right\"\n className=\"size-5 rounded-full bg-sky-200 text-sky-700\">\n <PhotoIcon className=\"size-3\" />\n </Handle>\n </BaseNode>\n );\n}\n\nfunction Editor() {\n const [nodes, setNodes] = useState(initialNodes);\n const [edges, setEdges] = useState(initialEdges);\n\n function runFlow() {\n // 🧠 YOUR LOGIC GOES HERE — walk nodes + edges in dependency order, call\n // your image/video/speech models, write results back into node data.\n }\n\n return (\n <NodeCanvas\n nodeTypes={{ text: PromptNode, image: ImageNode /* … */ }}\n nodes={nodes} edges={edges}\n onNodesChange={(c) => setNodes((ns) => applyNodeChanges(c, ns))}\n onEdgesChange={(c) => setEdges((es) => applyEdgeChanges(c, es))}\n // Required in controlled mode — without it, drag-to-connect drops the new edge.\n // Stamp edge.color from the source port's type for pastel typed wires.\n onConnect={(conn) => setEdges((es) => [...es,\n { id: \\"
|
|
9762
9934
|
}
|
|
9763
9935
|
],
|
|
9764
9936
|
"cssVariables": {
|
|
@@ -9989,7 +10161,19 @@
|
|
|
9989
10161
|
"--ui-scrollbar-thumb-rest",
|
|
9990
10162
|
"--ui-scrollbar-thumb-active",
|
|
9991
10163
|
"--ui-scrollbar-track-rest",
|
|
9992
|
-
"--ui-scrollbar-track-active"
|
|
10164
|
+
"--ui-scrollbar-track-active",
|
|
10165
|
+
"--elevation-real-sm",
|
|
10166
|
+
"--elevation-real-md",
|
|
10167
|
+
"--elevation-real-lg",
|
|
10168
|
+
"--elevation-real-xl",
|
|
10169
|
+
"--elevation-real-2xl",
|
|
10170
|
+
"--elevation-real-3xl",
|
|
10171
|
+
"--elevation-inner-real-sm",
|
|
10172
|
+
"--elevation-inner-real-md",
|
|
10173
|
+
"--elevation-inner-real-lg",
|
|
10174
|
+
"--elevation-inner-real-xl",
|
|
10175
|
+
"--elevation-inner-real-2xl",
|
|
10176
|
+
"--elevation-inner-real-3xl"
|
|
9993
10177
|
]
|
|
9994
10178
|
},
|
|
9995
10179
|
"peerDependencies": {
|