@object-ui/components 0.3.0 → 0.3.1
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/CHANGELOG.md +10 -0
- package/ISSUES_FOUND.md +128 -0
- package/README.md +19 -1
- package/README_SHADCN_SYNC.md +281 -0
- package/TESTING.md +335 -0
- package/dist/index.css +1 -1
- package/dist/index.js +30981 -30027
- package/dist/index.umd.cjs +30 -39
- package/dist/src/hooks/use-mobile.d.ts +7 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/renderers/basic/button-group.d.ts +8 -0
- package/dist/src/renderers/basic/div.d.ts +7 -0
- package/dist/src/renderers/basic/html.d.ts +7 -0
- package/dist/src/renderers/basic/icon.d.ts +7 -0
- package/dist/src/renderers/basic/image.d.ts +7 -0
- package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
- package/dist/src/renderers/basic/pagination.d.ts +8 -0
- package/dist/src/renderers/basic/separator.d.ts +7 -0
- package/dist/src/renderers/basic/span.d.ts +7 -0
- package/dist/src/renderers/basic/text.d.ts +7 -0
- package/dist/src/renderers/complex/carousel.d.ts +7 -0
- package/dist/src/renderers/complex/data-table.d.ts +7 -0
- package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
- package/dist/src/renderers/complex/resizable.d.ts +7 -0
- package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
- package/dist/src/renderers/complex/table.d.ts +7 -0
- package/dist/src/renderers/data-display/alert.d.ts +7 -0
- package/dist/src/renderers/data-display/avatar.d.ts +7 -0
- package/dist/src/renderers/data-display/badge.d.ts +7 -0
- package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
- package/dist/src/renderers/data-display/kbd.d.ts +8 -0
- package/dist/src/renderers/data-display/list.d.ts +7 -0
- package/dist/src/renderers/data-display/statistic.d.ts +7 -0
- package/dist/src/renderers/data-display/table.d.ts +8 -0
- package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
- package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
- package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
- package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
- package/dist/src/renderers/feedback/empty.d.ts +8 -0
- package/dist/src/renderers/feedback/loading.d.ts +7 -0
- package/dist/src/renderers/feedback/progress.d.ts +7 -0
- package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
- package/dist/src/renderers/feedback/sonner.d.ts +8 -0
- package/dist/src/renderers/feedback/spinner.d.ts +8 -0
- package/dist/src/renderers/feedback/toast.d.ts +8 -0
- package/dist/src/renderers/feedback/toaster.d.ts +7 -0
- package/dist/src/renderers/form/button.d.ts +7 -0
- package/dist/src/renderers/form/calendar.d.ts +7 -0
- package/dist/src/renderers/form/checkbox.d.ts +7 -0
- package/dist/src/renderers/form/combobox.d.ts +8 -0
- package/dist/src/renderers/form/command.d.ts +8 -0
- package/dist/src/renderers/form/date-picker.d.ts +7 -0
- package/dist/src/renderers/form/file-upload.d.ts +7 -0
- package/dist/src/renderers/form/form.d.ts +7 -0
- package/dist/src/renderers/form/input-otp.d.ts +7 -0
- package/dist/src/renderers/form/input.d.ts +7 -0
- package/dist/src/renderers/form/label.d.ts +7 -0
- package/dist/src/renderers/form/radio-group.d.ts +7 -0
- package/dist/src/renderers/form/select.d.ts +7 -0
- package/dist/src/renderers/form/slider.d.ts +7 -0
- package/dist/src/renderers/form/switch.d.ts +7 -0
- package/dist/src/renderers/form/textarea.d.ts +7 -0
- package/dist/src/renderers/form/toggle.d.ts +7 -0
- package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
- package/dist/src/renderers/layout/card.d.ts +7 -0
- package/dist/src/renderers/layout/container.d.ts +7 -0
- package/dist/src/renderers/layout/flex.d.ts +7 -0
- package/dist/src/renderers/layout/grid.d.ts +7 -0
- package/dist/src/renderers/layout/semantic.d.ts +7 -0
- package/dist/src/renderers/layout/stack.d.ts +7 -0
- package/dist/src/renderers/layout/tabs.d.ts +7 -0
- package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
- package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
- package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/drawer.d.ts +7 -0
- package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
- package/dist/src/renderers/overlay/menubar.d.ts +8 -0
- package/dist/src/renderers/overlay/popover.d.ts +7 -0
- package/dist/src/renderers/overlay/sheet.d.ts +7 -0
- package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
- package/dist/src/renderers/placeholders.d.ts +9 -0
- package/dist/src/ui/accordion.d.ts +7 -0
- package/dist/src/ui/alert-dialog.d.ts +7 -0
- package/dist/src/ui/alert.d.ts +7 -0
- package/dist/src/ui/aspect-ratio.d.ts +7 -0
- package/dist/src/ui/avatar.d.ts +7 -0
- package/dist/src/ui/badge.d.ts +7 -0
- package/dist/src/ui/breadcrumb.d.ts +7 -0
- package/dist/src/ui/button.d.ts +10 -5
- package/dist/src/ui/calendar.d.ts +14 -7
- package/dist/src/ui/card.d.ts +7 -0
- package/dist/src/ui/carousel.d.ts +7 -0
- package/dist/src/ui/checkbox.d.ts +7 -0
- package/dist/src/ui/collapsible.d.ts +7 -0
- package/dist/src/ui/combobox.d.ts +22 -0
- package/dist/src/ui/command.d.ts +7 -0
- package/dist/src/ui/context-menu.d.ts +7 -0
- package/dist/src/ui/date-picker.d.ts +15 -0
- package/dist/src/ui/dialog.d.ts +7 -0
- package/dist/src/ui/drawer.d.ts +7 -0
- package/dist/src/ui/dropdown-menu.d.ts +7 -0
- package/dist/src/ui/filter-builder.d.ts +7 -0
- package/dist/src/ui/form.d.ts +7 -0
- package/dist/src/ui/hover-card.d.ts +7 -0
- package/dist/src/ui/index.d.ts +10 -5
- package/dist/src/ui/input-otp.d.ts +7 -0
- package/dist/src/ui/input.d.ts +7 -0
- package/dist/src/ui/item.d.ts +7 -0
- package/dist/src/ui/kbd.d.ts +7 -0
- package/dist/src/ui/label.d.ts +7 -0
- package/dist/src/ui/menubar.d.ts +7 -0
- package/dist/src/ui/navigation-menu.d.ts +7 -0
- package/dist/src/ui/pagination.d.ts +7 -0
- package/dist/src/ui/popover.d.ts +7 -0
- package/dist/src/ui/progress.d.ts +7 -0
- package/dist/src/ui/radio-group.d.ts +7 -0
- package/dist/src/ui/resizable.d.ts +7 -0
- package/dist/src/ui/scroll-area.d.ts +7 -0
- package/dist/src/ui/select.d.ts +9 -2
- package/dist/src/ui/separator.d.ts +7 -0
- package/dist/src/ui/sheet.d.ts +7 -0
- package/dist/src/ui/sidebar.d.ts +14 -9
- package/dist/src/ui/skeleton.d.ts +7 -0
- package/dist/src/ui/slider.d.ts +7 -0
- package/dist/src/ui/spinner.d.ts +7 -0
- package/dist/src/ui/switch.d.ts +7 -0
- package/dist/src/ui/table.d.ts +15 -8
- package/dist/src/ui/tabs.d.ts +7 -0
- package/dist/src/ui/textarea.d.ts +7 -0
- package/dist/src/ui/toggle-group.d.ts +8 -3
- package/dist/src/ui/toggle.d.ts +7 -0
- package/dist/src/ui/tooltip.d.ts +7 -0
- package/metadata/ObjectGrid.component.yml +72 -0
- package/package.json +23 -11
- package/postcss.config.js +9 -1
- package/shadcn-components.json +310 -0
- package/src/__tests__/README.md +124 -0
- package/src/__tests__/basic-renderers.test.tsx +255 -0
- package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
- package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
- package/src/__tests__/form-renderers.test.tsx +364 -0
- package/src/__tests__/layout-data-renderers.test.tsx +340 -0
- package/src/__tests__/test-utils.tsx +190 -0
- package/src/hooks/use-mobile.tsx +8 -0
- package/src/index.css +86 -54
- package/src/index.test.ts +8 -0
- package/src/index.ts +21 -1
- package/src/lib/utils.tsx +8 -0
- package/src/new-components.test.ts +8 -9
- package/src/renderers/basic/button-group.tsx +78 -0
- package/src/renderers/basic/div.tsx +9 -1
- package/src/renderers/basic/html.tsx +8 -0
- package/src/renderers/basic/icon.tsx +66 -3
- package/src/renderers/basic/image.tsx +12 -1
- package/src/renderers/basic/index.ts +11 -0
- package/src/renderers/basic/navigation-menu.tsx +80 -0
- package/src/renderers/basic/pagination.tsx +82 -0
- package/src/renderers/basic/separator.tsx +9 -1
- package/src/renderers/basic/span.tsx +9 -1
- package/src/renderers/basic/text.tsx +8 -0
- package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
- package/src/renderers/complex/carousel.tsx +11 -3
- package/src/renderers/complex/data-table.tsx +19 -4
- package/src/renderers/complex/filter-builder.tsx +8 -0
- package/src/renderers/complex/index.ts +9 -3
- package/src/renderers/complex/resizable.tsx +8 -0
- package/src/renderers/complex/scroll-area.tsx +8 -0
- package/src/renderers/complex/table.tsx +10 -2
- package/src/renderers/data-display/alert.tsx +8 -0
- package/src/renderers/data-display/avatar.tsx +8 -0
- package/src/renderers/data-display/badge.tsx +8 -0
- package/src/renderers/data-display/breadcrumb.tsx +59 -0
- package/src/renderers/data-display/index.ts +12 -0
- package/src/renderers/data-display/kbd.tsx +49 -0
- package/src/renderers/data-display/list.tsx +8 -0
- package/src/renderers/data-display/statistic.tsx +24 -43
- package/src/renderers/data-display/table.tsx +68 -0
- package/src/renderers/data-display/tree-view.tsx +26 -37
- package/src/renderers/disclosure/accordion.tsx +8 -0
- package/src/renderers/disclosure/collapsible.tsx +8 -0
- package/src/renderers/disclosure/index.ts +9 -0
- package/src/renderers/disclosure/toggle-group.tsx +77 -0
- package/src/renderers/feedback/empty.tsx +48 -0
- package/src/renderers/feedback/index.ts +12 -0
- package/src/renderers/feedback/loading.tsx +8 -0
- package/src/renderers/feedback/progress.tsx +8 -0
- package/src/renderers/feedback/skeleton.tsx +8 -0
- package/src/renderers/feedback/sonner.tsx +55 -0
- package/src/renderers/feedback/spinner.tsx +54 -0
- package/src/renderers/feedback/toast.tsx +58 -0
- package/src/renderers/feedback/toaster.tsx +13 -17
- package/src/renderers/form/button.tsx +8 -0
- package/src/renderers/form/calendar.tsx +8 -0
- package/src/renderers/form/checkbox.tsx +8 -0
- package/src/renderers/form/combobox.tsx +47 -0
- package/src/renderers/form/command.tsx +57 -0
- package/src/renderers/form/date-picker.tsx +10 -2
- package/src/renderers/form/file-upload.tsx +10 -2
- package/src/renderers/form/form.tsx +12 -3
- package/src/renderers/form/index.ts +10 -0
- package/src/renderers/form/input-otp.tsx +34 -15
- package/src/renderers/form/input.tsx +89 -50
- package/src/renderers/form/label.tsx +8 -0
- package/src/renderers/form/radio-group.tsx +8 -0
- package/src/renderers/form/select.tsx +8 -0
- package/src/renderers/form/slider.tsx +16 -1
- package/src/renderers/form/switch.tsx +8 -0
- package/src/renderers/form/textarea.tsx +8 -0
- package/src/renderers/form/toggle.tsx +8 -0
- package/src/renderers/index.ts +8 -0
- package/src/renderers/layout/aspect-ratio.tsx +50 -0
- package/src/renderers/layout/card.tsx +8 -0
- package/src/renderers/layout/container.tsx +20 -12
- package/src/renderers/layout/flex.tsx +16 -8
- package/src/renderers/layout/grid.tsx +8 -0
- package/src/renderers/layout/index.ts +9 -0
- package/src/renderers/layout/page.tsx +9 -1
- package/src/renderers/layout/semantic.tsx +8 -0
- package/src/renderers/layout/stack.tsx +16 -8
- package/src/renderers/layout/tabs.tsx +8 -0
- package/src/renderers/navigation/header-bar.tsx +9 -1
- package/src/renderers/navigation/index.ts +8 -0
- package/src/renderers/navigation/sidebar.tsx +8 -0
- package/src/renderers/overlay/alert-dialog.tsx +8 -0
- package/src/renderers/overlay/context-menu.tsx +9 -1
- package/src/renderers/overlay/dialog.tsx +8 -0
- package/src/renderers/overlay/drawer.tsx +8 -0
- package/src/renderers/overlay/dropdown-menu.tsx +8 -0
- package/src/renderers/overlay/hover-card.tsx +8 -0
- package/src/renderers/overlay/index.ts +9 -0
- package/src/renderers/overlay/menubar.tsx +75 -0
- package/src/renderers/overlay/popover.tsx +8 -0
- package/src/renderers/overlay/sheet.tsx +8 -0
- package/src/renderers/overlay/tooltip.tsx +8 -0
- package/src/renderers/placeholders.tsx +107 -0
- package/src/ui/accordion.tsx +8 -0
- package/src/ui/alert-dialog.tsx +8 -0
- package/src/ui/alert.tsx +14 -24
- package/src/ui/aspect-ratio.tsx +8 -0
- package/src/ui/avatar.tsx +8 -0
- package/src/ui/badge.tsx +13 -6
- package/src/ui/breadcrumb.tsx +8 -0
- package/src/ui/button-group.tsx +8 -0
- package/src/ui/button.tsx +38 -36
- package/src/ui/calendar.tsx +57 -200
- package/src/ui/card.tsx +8 -0
- package/src/ui/carousel.tsx +8 -0
- package/src/ui/checkbox.tsx +8 -0
- package/src/ui/collapsible.tsx +8 -0
- package/src/ui/combobox.tsx +104 -0
- package/src/ui/command.tsx +8 -0
- package/src/ui/context-menu.tsx +8 -0
- package/src/ui/date-picker.tsx +61 -0
- package/src/ui/dialog.tsx +8 -0
- package/src/ui/drawer.tsx +8 -0
- package/src/ui/dropdown-menu.tsx +8 -0
- package/src/ui/empty.tsx +8 -0
- package/src/ui/filter-builder.tsx +8 -0
- package/src/ui/form.tsx +8 -0
- package/src/ui/hover-card.tsx +8 -0
- package/src/ui/index.ts +11 -5
- package/src/ui/input-otp.tsx +20 -12
- package/src/ui/input.tsx +8 -0
- package/src/ui/item.tsx +8 -0
- package/src/ui/kbd.tsx +8 -0
- package/src/ui/label.tsx +8 -0
- package/src/ui/menubar.tsx +8 -0
- package/src/ui/navigation-menu.tsx +8 -0
- package/src/ui/pagination.tsx +8 -0
- package/src/ui/popover.tsx +9 -1
- package/src/ui/progress.tsx +11 -15
- package/src/ui/radio-group.tsx +8 -0
- package/src/ui/resizable.tsx +8 -0
- package/src/ui/scroll-area.tsx +9 -1
- package/src/ui/select.tsx +17 -9
- package/src/ui/separator.tsx +8 -0
- package/src/ui/sheet.tsx +8 -0
- package/src/ui/sidebar.tsx +34 -15
- package/src/ui/skeleton.tsx +8 -0
- package/src/ui/slider.tsx +8 -0
- package/src/ui/sonner.tsx +12 -20
- package/src/ui/spinner.tsx +11 -23
- package/src/ui/switch.tsx +8 -0
- package/src/ui/table.tsx +102 -97
- package/src/ui/tabs.tsx +8 -0
- package/src/ui/textarea.tsx +8 -0
- package/src/ui/toggle-group.tsx +12 -21
- package/src/ui/toggle.tsx +15 -12
- package/src/ui/tooltip.tsx +8 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +11 -1
- package/dist/src/index.test.d.ts +0 -1
- package/dist/src/new-components.test.d.ts +0 -1
- package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
- package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
- package/dist/src/renderers/complex/timeline.d.ts +0 -1
- package/dist/src/ui/calendar-view.d.ts +0 -21
- package/dist/src/ui/chatbot.d.ts +0 -36
- package/dist/src/ui/field.d.ts +0 -24
- package/dist/src/ui/input-group.d.ts +0 -16
- package/dist/src/ui/timeline.d.ts +0 -25
- package/metadata/ObjectTable.component.yml +0 -41
- package/src/renderers/complex/calendar-view.tsx +0 -219
- package/src/renderers/complex/chatbot.test.ts +0 -44
- package/src/renderers/complex/chatbot.tsx +0 -185
- package/src/renderers/complex/timeline.tsx +0 -466
- package/src/ui/calendar-view.tsx +0 -503
- package/src/ui/chatbot.tsx +0 -240
- package/src/ui/field.tsx +0 -246
- package/src/ui/input-group.tsx +0 -170
- package/src/ui/timeline.tsx +0 -266
- package/tailwind.config.js +0 -75
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { StatisticSchema } from '@object-ui/types';
|
|
3
11
|
import { cn } from '../../lib/utils';
|
|
@@ -6,66 +14,39 @@ import { TrendingUp, TrendingDown, Minus } from 'lucide-react';
|
|
|
6
14
|
const StatisticRenderer = ({ schema }: { schema: StatisticSchema }) => {
|
|
7
15
|
return (
|
|
8
16
|
<div className={cn(
|
|
9
|
-
"group relative flex flex-col p-5 rounded-xl
|
|
10
|
-
"bg-slate-950/40 border border-slate-800/60 backdrop-blur-sm",
|
|
11
|
-
"hover:bg-slate-900/60 hover:border-cyan-500/50 hover:shadow-[0_0_30px_-10px_rgba(6,182,212,0.3)]",
|
|
17
|
+
"group relative flex flex-col p-4 sm:p-5 md:p-6 rounded-xl border bg-card text-card-foreground shadow-sm",
|
|
12
18
|
schema.className
|
|
13
19
|
)}>
|
|
14
|
-
{/* Decorative scanner line */}
|
|
15
|
-
<div className="absolute top-0 left-0 w-full h-[1px] bg-linear-to-r from-transparent via-cyan-500/50 to-transparent -translate-x-full group-hover:animate-[shimmer_1.5s_infinite]" />
|
|
16
|
-
<div className="absolute inset-0 bg-[url('https://grainy-gradients.vercel.app/noise.svg')] opacity-5 pointer-events-none" />
|
|
17
|
-
|
|
18
20
|
{/* Label */}
|
|
19
21
|
{schema.label && (
|
|
20
22
|
<div className="flex items-center gap-2 mb-2">
|
|
21
|
-
<
|
|
22
|
-
<p className="text-[10px] font-mono font-bold uppercase tracking-[0.2em] text-cyan-600/80 group-hover:text-cyan-400 transition-colors">
|
|
23
|
+
<p className="text-sm font-medium text-muted-foreground">
|
|
23
24
|
{schema.label}
|
|
24
25
|
</p>
|
|
25
26
|
</div>
|
|
26
27
|
)}
|
|
27
28
|
|
|
28
29
|
{/* Value Area */}
|
|
29
|
-
<div className="flex items-baseline gap-
|
|
30
|
-
<h3 className=
|
|
31
|
-
"text-4xl font-black tracking-tight text-white transition-all duration-300",
|
|
32
|
-
"drop-shadow-[0_0_10px_rgba(255,255,255,0.3)]",
|
|
33
|
-
"group-hover:scale-110 group-hover:text-cyan-100 group-hover:drop-shadow-[0_0_15px_rgba(6,182,212,0.6)] group-hover:-translate-y-1"
|
|
34
|
-
)}>
|
|
30
|
+
<div className="flex items-baseline gap-2">
|
|
31
|
+
<h3 className="text-2xl font-bold tracking-tight">
|
|
35
32
|
{schema.value}
|
|
36
33
|
</h3>
|
|
34
|
+
</div>
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<div className=
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
schema.trend === 'down' && "text-rose-400 border-rose-500/30 bg-rose-950/30 shadow-[0_0_10px_-4px_rgba(251,113,133,0.5)]",
|
|
44
|
-
schema.trend === 'neutral' && "text-amber-400 border-amber-500/30 bg-amber-950/30 shadow-[0_0_10px_-4px_rgba(251,191,36,0.5)]",
|
|
45
|
-
"group-hover:scale-105"
|
|
46
|
-
)}>
|
|
47
|
-
{schema.trend === 'up' && <TrendingUp className="mr-1 h-3 w-3" />}
|
|
48
|
-
{schema.trend === 'down' && <TrendingDown className="mr-1 h-3 w-3" />}
|
|
36
|
+
{/* Footer / Trend */}
|
|
37
|
+
{(schema.trend || schema.description) && (
|
|
38
|
+
<div className="mt-1 flex items-center text-xs text-muted-foreground">
|
|
39
|
+
{schema.trend === 'up' && <TrendingUp className="mr-1 h-3 w-3 text-emerald-500" />}
|
|
40
|
+
{schema.trend === 'down' && <TrendingDown className="mr-1 h-3 w-3 text-rose-500" />}
|
|
49
41
|
{schema.trend === 'neutral' && <Minus className="mr-1 h-3 w-3" />}
|
|
50
|
-
|
|
42
|
+
<span className={cn(
|
|
43
|
+
schema.trend === 'up' && "text-emerald-500 font-medium",
|
|
44
|
+
schema.trend === 'down' && "text-rose-500 font-medium",
|
|
45
|
+
)}>
|
|
46
|
+
{schema.description}
|
|
47
|
+
</span>
|
|
51
48
|
</div>
|
|
52
|
-
)}
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
{/* Footer / Description Text if needed below (optional, mostly handled by trend pill now, but keeping separate if text is long) */}
|
|
56
|
-
{schema.description && !schema.trend && (
|
|
57
|
-
<p className="text-xs text-slate-500 font-mono mt-1 group-hover:text-slate-400 transition-colors">
|
|
58
|
-
{schema.description}
|
|
59
|
-
</p>
|
|
60
49
|
)}
|
|
61
|
-
|
|
62
|
-
{/* Decorative accent corners */}
|
|
63
|
-
<div className="absolute right-0 bottom-0 w-8 h-8 opacity-20 group-hover:opacity-100 transition-opacity">
|
|
64
|
-
<svg viewBox="0 0 24 24" fill="none" className="w-full h-full text-cyan-500" stroke="currentColor" strokeWidth="1">
|
|
65
|
-
<path d="M22 22L12 22L22 12Z" fill="currentColor" fillOpacity="0.2" />
|
|
66
|
-
<path d="M22 17L22 22L17 22" strokeLinecap="round" strokeLinejoin="round" />
|
|
67
|
-
</svg>
|
|
68
|
-
</div>
|
|
69
50
|
</div>
|
|
70
51
|
);
|
|
71
52
|
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import React from 'react';
|
|
10
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
11
|
+
import { useDataScope } from '@object-ui/react';
|
|
12
|
+
import {
|
|
13
|
+
Table,
|
|
14
|
+
TableBody,
|
|
15
|
+
TableCell,
|
|
16
|
+
TableHead,
|
|
17
|
+
TableHeader,
|
|
18
|
+
TableRow
|
|
19
|
+
} from '../../ui/table';
|
|
20
|
+
import { cn } from '../../lib/utils';
|
|
21
|
+
|
|
22
|
+
export const SimpleTableRenderer = ({ schema, className, ..._props }: any) => {
|
|
23
|
+
const data = useDataScope(schema.bind);
|
|
24
|
+
const columns = schema.props?.columns || [];
|
|
25
|
+
|
|
26
|
+
// If we have data but it's not an array, show error.
|
|
27
|
+
// If data is undefined, we might just be loading or empty.
|
|
28
|
+
if (data && !Array.isArray(data)) {
|
|
29
|
+
return <div className="text-red-500 p-2 border border-red-200 bg-red-50 rounded text-sm">Table data must be an array</div>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const displayData = Array.isArray(data) ? data : [];
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div className={cn("rounded-md border", className)}>
|
|
36
|
+
<Table>
|
|
37
|
+
<TableHeader>
|
|
38
|
+
<TableRow>
|
|
39
|
+
{columns.map((col: any) => (
|
|
40
|
+
<TableHead key={col.key}>{col.label}</TableHead>
|
|
41
|
+
))}
|
|
42
|
+
</TableRow>
|
|
43
|
+
</TableHeader>
|
|
44
|
+
<TableBody>
|
|
45
|
+
{displayData.length === 0 ? (
|
|
46
|
+
<TableRow>
|
|
47
|
+
<TableCell colSpan={columns.length} className="h-24 text-center">
|
|
48
|
+
No results.
|
|
49
|
+
</TableCell>
|
|
50
|
+
</TableRow>
|
|
51
|
+
) : (
|
|
52
|
+
displayData.map((row: any, i: number) => (
|
|
53
|
+
<TableRow key={row.id || i}>
|
|
54
|
+
{columns.map((col: any) => (
|
|
55
|
+
<TableCell key={col.key}>
|
|
56
|
+
{row[col.key]}
|
|
57
|
+
</TableCell>
|
|
58
|
+
))}
|
|
59
|
+
</TableRow>
|
|
60
|
+
))
|
|
61
|
+
)}
|
|
62
|
+
</TableBody>
|
|
63
|
+
</Table>
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
ComponentRegistry.register('table', SimpleTableRenderer);
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { TreeViewSchema, TreeNode } from '@object-ui/types';
|
|
3
11
|
import { ChevronRight, ChevronDown, Folder, File, FolderOpen, CircuitBoard } from 'lucide-react';
|
|
@@ -6,12 +14,10 @@ import { cn } from '../../lib/utils';
|
|
|
6
14
|
|
|
7
15
|
const TreeNodeComponent = ({
|
|
8
16
|
node,
|
|
9
|
-
onNodeClick
|
|
10
|
-
isChild = false
|
|
17
|
+
onNodeClick
|
|
11
18
|
}: {
|
|
12
19
|
node: TreeNode;
|
|
13
20
|
onNodeClick?: (node: TreeNode) => void;
|
|
14
|
-
isChild?: boolean;
|
|
15
21
|
}) => {
|
|
16
22
|
const [isOpen, setIsOpen] = useState(false);
|
|
17
23
|
const hasChildren = node.children && node.children.length > 0;
|
|
@@ -29,68 +35,56 @@ const TreeNodeComponent = ({
|
|
|
29
35
|
|
|
30
36
|
return (
|
|
31
37
|
<div className="relative">
|
|
32
|
-
{/* Connecting line for siblings (visual aid, tricky to do perfectly without depth context, so we focus on the left border of the container) */}
|
|
33
|
-
|
|
34
38
|
<div
|
|
35
39
|
className={cn(
|
|
36
|
-
'group flex items-center py-1.5 px-2 rounded-sm cursor-pointer transition-
|
|
37
|
-
'hover:bg-
|
|
38
|
-
isOpen && hasChildren && 'bg-
|
|
40
|
+
'group flex items-center py-1.5 px-2 rounded-sm cursor-pointer transition-colors',
|
|
41
|
+
'hover:bg-accent hover:text-accent-foreground',
|
|
42
|
+
isOpen && hasChildren && 'bg-accent/50'
|
|
39
43
|
)}
|
|
40
44
|
onClick={handleClick}
|
|
41
45
|
>
|
|
42
|
-
{/* Indentation adjustment triggered by parent's padding/margin, not calculated prop here to allow CSS lines */}
|
|
43
|
-
|
|
44
46
|
{hasChildren ? (
|
|
45
47
|
<button
|
|
46
48
|
onClick={handleToggle}
|
|
47
|
-
className="mr-2 p-0.5 h-5 w-5 flex items-center justify-center rounded-sm hover:bg-
|
|
49
|
+
className="mr-2 p-0.5 h-5 w-5 flex items-center justify-center rounded-sm hover:bg-muted text-muted-foreground transition-colors"
|
|
48
50
|
>
|
|
49
51
|
{isOpen ? (
|
|
50
|
-
<ChevronDown className="h-4 w-4
|
|
52
|
+
<ChevronDown className="h-4 w-4" />
|
|
51
53
|
) : (
|
|
52
54
|
<ChevronRight className="h-4 w-4" />
|
|
53
55
|
)}
|
|
54
56
|
</button>
|
|
55
57
|
) : (
|
|
56
58
|
<span className="mr-2 w-5 flex justify-center">
|
|
57
|
-
<div className="w-1 h-1 rounded-full bg-
|
|
59
|
+
<div className="w-1 h-1 rounded-full bg-muted-foreground/50" />
|
|
58
60
|
</span>
|
|
59
61
|
)}
|
|
60
62
|
|
|
61
63
|
{node.icon === 'folder' || hasChildren ? (
|
|
62
64
|
isOpen ?
|
|
63
|
-
<FolderOpen className="h-4 w-4 mr-2 text-
|
|
64
|
-
<Folder className="h-4 w-4 mr-2 text-
|
|
65
|
+
<FolderOpen className="h-4 w-4 mr-2 text-primary" /> :
|
|
66
|
+
<Folder className="h-4 w-4 mr-2 text-muted-foreground group-hover:text-primary transition-colors" />
|
|
65
67
|
) : (
|
|
66
|
-
<File className="h-4 w-4 mr-2 text-
|
|
68
|
+
<File className="h-4 w-4 mr-2 text-muted-foreground group-hover:text-primary transition-colors" />
|
|
67
69
|
)}
|
|
68
70
|
|
|
69
71
|
<span className={cn(
|
|
70
|
-
"text-sm
|
|
71
|
-
isOpen ? "
|
|
72
|
+
"text-sm transition-colors",
|
|
73
|
+
isOpen ? "font-medium text-foreground" : "text-muted-foreground group-hover:text-foreground"
|
|
72
74
|
)}>
|
|
73
75
|
{node.label}
|
|
74
76
|
</span>
|
|
75
77
|
</div>
|
|
76
78
|
|
|
77
|
-
{/* Children Container with Circuit Line */}
|
|
78
79
|
{hasChildren && isOpen && (
|
|
79
|
-
<div className="relative ml-[11px] pl-3 border-l border-
|
|
80
|
-
{/* Decorative little bulb at the junction */}
|
|
81
|
-
<div className="absolute top-0 -left-[1px] -translate-x-1/2 w-1.5 h-1.5 bg-cyan-700/50 rounded-full" />
|
|
82
|
-
|
|
80
|
+
<div className="relative ml-[11px] pl-3 border-l border-border animate-in slide-in-from-left-2 fade-in duration-200">
|
|
83
81
|
{node.children!.map((child) => (
|
|
84
82
|
<TreeNodeComponent
|
|
85
83
|
key={child.id}
|
|
86
84
|
node={child}
|
|
87
85
|
onNodeClick={onNodeClick}
|
|
88
|
-
isChild={true}
|
|
89
86
|
/>
|
|
90
87
|
))}
|
|
91
|
-
|
|
92
|
-
{/* Decorative end cap */}
|
|
93
|
-
<div className="absolute bottom-0 -left-[1px] -translate-x-1/2 w-1 h-1 bg-cyan-800/50 rounded-full" />
|
|
94
88
|
</div>
|
|
95
89
|
)}
|
|
96
90
|
</div>
|
|
@@ -107,23 +101,18 @@ ComponentRegistry.register('tree-view',
|
|
|
107
101
|
|
|
108
102
|
return (
|
|
109
103
|
<div className={cn(
|
|
110
|
-
'relative border
|
|
111
|
-
'shadow-lg shadow-primary/5',
|
|
104
|
+
'relative border rounded-lg p-3 bg-card text-card-foreground',
|
|
112
105
|
className
|
|
113
106
|
)}
|
|
114
107
|
{...props}
|
|
115
108
|
>
|
|
116
|
-
{/* Background Grid */}
|
|
117
|
-
<div className="absolute inset-0 bg-[linear-gradient(to_right,hsl(var(--border)/0.1)_1px,transparent_1px),linear-gradient(to_bottom,hsl(var(--border)/0.1)_1px,transparent_1px)] bg-[size:24px_24px] pointer-events-none" />
|
|
118
|
-
|
|
119
109
|
{schema.title && (
|
|
120
|
-
<div className="flex items-center gap-2 mb-3 pb-2 border-b
|
|
121
|
-
<
|
|
122
|
-
<h3 className="text-xs font-bold font-mono uppercase tracking-widest text-primary">{schema.title}</h3>
|
|
110
|
+
<div className="flex items-center gap-2 mb-3 pb-2 border-b">
|
|
111
|
+
<h3 className="text-sm font-semibold">{schema.title}</h3>
|
|
123
112
|
</div>
|
|
124
113
|
)}
|
|
125
|
-
<div className="space-y-1
|
|
126
|
-
{schema.nodes?.map((node: TreeNode) => (
|
|
114
|
+
<div className="space-y-1">
|
|
115
|
+
{(schema.nodes || schema.data)?.map((node: TreeNode) => (
|
|
127
116
|
<TreeNodeComponent
|
|
128
117
|
key={node.id}
|
|
129
118
|
node={node}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { AccordionSchema } from '@object-ui/types';
|
|
3
11
|
import {
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { CollapsibleSchema } from '@object-ui/types';
|
|
3
11
|
import {
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import './accordion';
|
|
2
10
|
import './collapsible';
|
|
11
|
+
import './toggle-group';
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
10
|
+
import type { ToggleGroupSchema } from '@object-ui/types';
|
|
11
|
+
import { ToggleGroup, ToggleGroupItem } from '../../ui/toggle-group';
|
|
12
|
+
|
|
13
|
+
ComponentRegistry.register('toggle-group',
|
|
14
|
+
({ schema, ...props }: { schema: ToggleGroupSchema; [key: string]: any }) => {
|
|
15
|
+
const {
|
|
16
|
+
'data-obj-id': dataObjId,
|
|
17
|
+
'data-obj-type': dataObjType,
|
|
18
|
+
style,
|
|
19
|
+
...toggleGroupProps
|
|
20
|
+
} = props;
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<ToggleGroup
|
|
24
|
+
type={(schema.selectionType || 'single') as any}
|
|
25
|
+
variant={schema.variant}
|
|
26
|
+
size={schema.size}
|
|
27
|
+
value={schema.value as any}
|
|
28
|
+
className={schema.className}
|
|
29
|
+
{...toggleGroupProps}
|
|
30
|
+
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
|
|
31
|
+
>
|
|
32
|
+
{schema.items?.map((item, idx) => (
|
|
33
|
+
<ToggleGroupItem key={idx} value={item.value} aria-label={item.label}>
|
|
34
|
+
{item.label}
|
|
35
|
+
</ToggleGroupItem>
|
|
36
|
+
))}
|
|
37
|
+
</ToggleGroup>
|
|
38
|
+
);
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Toggle Group',
|
|
42
|
+
inputs: [
|
|
43
|
+
{
|
|
44
|
+
name: 'selectionType',
|
|
45
|
+
type: 'enum',
|
|
46
|
+
enum: ['single', 'multiple'],
|
|
47
|
+
defaultValue: 'single',
|
|
48
|
+
label: 'Selection Type'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'variant',
|
|
52
|
+
type: 'enum',
|
|
53
|
+
enum: ['default', 'outline'],
|
|
54
|
+
defaultValue: 'default',
|
|
55
|
+
label: 'Variant'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'size',
|
|
59
|
+
type: 'enum',
|
|
60
|
+
enum: ['default', 'sm', 'lg'],
|
|
61
|
+
defaultValue: 'default',
|
|
62
|
+
label: 'Size'
|
|
63
|
+
},
|
|
64
|
+
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
65
|
+
],
|
|
66
|
+
defaultProps: {
|
|
67
|
+
selectionType: 'single',
|
|
68
|
+
variant: 'default',
|
|
69
|
+
size: 'default',
|
|
70
|
+
items: [
|
|
71
|
+
{ value: 'bold', label: 'Bold' },
|
|
72
|
+
{ value: 'italic', label: 'Italic' },
|
|
73
|
+
{ value: 'underline', label: 'Underline' }
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
10
|
+
import type { EmptySchema } from '@object-ui/types';
|
|
11
|
+
import { InboxIcon } from 'lucide-react';
|
|
12
|
+
import { cn } from '../../lib/utils';
|
|
13
|
+
|
|
14
|
+
ComponentRegistry.register('empty',
|
|
15
|
+
({ schema, ...props }: { schema: EmptySchema; [key: string]: any }) => {
|
|
16
|
+
const {
|
|
17
|
+
'data-obj-id': dataObjId,
|
|
18
|
+
'data-obj-type': dataObjType,
|
|
19
|
+
style,
|
|
20
|
+
...emptyProps
|
|
21
|
+
} = props;
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div
|
|
25
|
+
className={cn('flex flex-col items-center justify-center p-8 text-center', schema.className)}
|
|
26
|
+
{...emptyProps}
|
|
27
|
+
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
|
|
28
|
+
>
|
|
29
|
+
<InboxIcon className="h-12 w-12 text-muted-foreground mb-4" />
|
|
30
|
+
<h3 className="text-lg font-semibold">{schema.title || 'No data'}</h3>
|
|
31
|
+
{schema.description && (
|
|
32
|
+
<p className="text-sm text-muted-foreground mt-2">{schema.description}</p>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
label: 'Empty',
|
|
39
|
+
inputs: [
|
|
40
|
+
{ name: 'title', type: 'string', label: 'Title', defaultValue: 'No data' },
|
|
41
|
+
{ name: 'description', type: 'string', label: 'Description' },
|
|
42
|
+
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
43
|
+
],
|
|
44
|
+
defaultProps: {
|
|
45
|
+
title: 'No data'
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
);
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import './progress';
|
|
2
10
|
import './skeleton';
|
|
3
11
|
import './toaster';
|
|
4
12
|
import './loading';
|
|
13
|
+
import './toast';
|
|
14
|
+
import './spinner';
|
|
15
|
+
import './empty';
|
|
16
|
+
import './sonner';
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { LoadingSchema } from '@object-ui/types';
|
|
3
11
|
import { Spinner } from '../../ui';
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { ProgressSchema } from '@object-ui/types';
|
|
3
11
|
import { Progress } from '../../ui';
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import { ComponentRegistry } from '@object-ui/core';
|
|
2
10
|
import type { SkeletonSchema } from '@object-ui/types';
|
|
3
11
|
import { Skeleton } from '../../ui';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
10
|
+
import type { SonnerSchema } from '@object-ui/types';
|
|
11
|
+
import { toast } from 'sonner';
|
|
12
|
+
import { Button } from '../../ui';
|
|
13
|
+
|
|
14
|
+
ComponentRegistry.register('sonner',
|
|
15
|
+
({ schema, ...props }: { schema: SonnerSchema; [key: string]: any }) => {
|
|
16
|
+
const showToast = () => {
|
|
17
|
+
const toastFn = schema.variant === 'success' ? toast.success :
|
|
18
|
+
schema.variant === 'error' ? toast.error :
|
|
19
|
+
schema.variant === 'warning' ? toast.warning :
|
|
20
|
+
schema.variant === 'info' ? toast.info :
|
|
21
|
+
toast;
|
|
22
|
+
|
|
23
|
+
toastFn(schema.message || schema.title || 'Notification', {
|
|
24
|
+
description: schema.description,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Button onClick={showToast} variant={schema.buttonVariant} className={schema.className} {...props}>
|
|
30
|
+
{schema.buttonLabel || 'Show Toast'}
|
|
31
|
+
</Button>
|
|
32
|
+
);
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
label: 'Sonner Toast',
|
|
36
|
+
inputs: [
|
|
37
|
+
{ name: 'message', type: 'string', label: 'Message' },
|
|
38
|
+
{ name: 'description', type: 'string', label: 'Description' },
|
|
39
|
+
{
|
|
40
|
+
name: 'variant',
|
|
41
|
+
type: 'enum',
|
|
42
|
+
enum: ['default', 'success', 'error', 'warning', 'info'],
|
|
43
|
+
defaultValue: 'default',
|
|
44
|
+
label: 'Variant'
|
|
45
|
+
},
|
|
46
|
+
{ name: 'buttonLabel', type: 'string', label: 'Button Label' },
|
|
47
|
+
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
48
|
+
],
|
|
49
|
+
defaultProps: {
|
|
50
|
+
message: 'Notification',
|
|
51
|
+
buttonLabel: 'Show Toast',
|
|
52
|
+
variant: 'default'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { ComponentRegistry } from '@object-ui/core';
|
|
10
|
+
import type { SpinnerSchema } from '@object-ui/types';
|
|
11
|
+
import { Loader2 } from 'lucide-react';
|
|
12
|
+
import { cn } from '../../lib/utils';
|
|
13
|
+
|
|
14
|
+
ComponentRegistry.register('spinner',
|
|
15
|
+
({ schema, ...props }: { schema: SpinnerSchema; [key: string]: any }) => {
|
|
16
|
+
const {
|
|
17
|
+
'data-obj-id': dataObjId,
|
|
18
|
+
'data-obj-type': dataObjType,
|
|
19
|
+
style,
|
|
20
|
+
...spinnerProps
|
|
21
|
+
} = props;
|
|
22
|
+
|
|
23
|
+
const sizeClasses = {
|
|
24
|
+
sm: 'h-4 w-4',
|
|
25
|
+
md: 'h-6 w-6',
|
|
26
|
+
lg: 'h-8 w-8',
|
|
27
|
+
xl: 'h-12 w-12'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Loader2
|
|
32
|
+
className={cn('animate-spin', sizeClasses[schema.size || 'md'], schema.className)}
|
|
33
|
+
{...spinnerProps}
|
|
34
|
+
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
|
|
35
|
+
/>
|
|
36
|
+
);
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
label: 'Spinner',
|
|
40
|
+
inputs: [
|
|
41
|
+
{
|
|
42
|
+
name: 'size',
|
|
43
|
+
type: 'enum',
|
|
44
|
+
enum: ['sm', 'md', 'lg', 'xl'],
|
|
45
|
+
defaultValue: 'md',
|
|
46
|
+
label: 'Size'
|
|
47
|
+
},
|
|
48
|
+
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
49
|
+
],
|
|
50
|
+
defaultProps: {
|
|
51
|
+
size: 'md'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
);
|