@object-ui/components 3.3.0 → 3.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 +20 -0
- package/README.md +21 -1
- package/dist/index.css +6339 -2
- package/dist/index.js +17600 -17481
- package/dist/index.umd.cjs +36 -36
- package/dist/packages/components/src/custom/empty.d.ts +12 -1
- package/dist/packages/components/src/renderers/action/action-bar.d.ts +12 -1
- package/dist/packages/components/src/ui/chart.d.ts +10 -29
- package/package.json +65 -44
- package/.turbo/turbo-build.log +0 -84
- package/README_SHADCN_SYNC.md +0 -281
- package/TESTING.md +0 -335
- package/docs/FilterBuilder.md +0 -268
- package/metadata/Chart.component.yml +0 -30
- package/metadata/FilterBuilder.component.yml +0 -39
- package/metadata/GridLayout.component.yml +0 -27
- package/metadata/Menu.component.yml +0 -31
- package/metadata/ObjectForm.component.yml +0 -34
- package/metadata/ObjectGrid.component.yml +0 -72
- package/metadata/Page.component.yml +0 -24
- package/postcss.config.js +0 -14
- package/shadcn-components.json +0 -440
- package/src/SchemaRenderer.tsx +0 -28
- package/src/__tests__/PageRendererRegions.test.tsx +0 -668
- package/src/__tests__/README.md +0 -124
- package/src/__tests__/__snapshots__/snapshot-critical.test.tsx.snap +0 -811
- package/src/__tests__/__snapshots__/snapshot.test.tsx.snap +0 -327
- package/src/__tests__/accessibility.test.tsx +0 -137
- package/src/__tests__/action-bar.test.tsx +0 -206
- package/src/__tests__/api-consistency.test.tsx +0 -596
- package/src/__tests__/basic-renderers.test.tsx +0 -255
- package/src/__tests__/color-contrast.test.tsx +0 -212
- package/src/__tests__/complex-disclosure-renderers.test.tsx +0 -302
- package/src/__tests__/compliance.test.tsx +0 -72
- package/src/__tests__/config-field-renderer.test.tsx +0 -307
- package/src/__tests__/config-panel-renderer.test.tsx +0 -580
- package/src/__tests__/config-primitives.test.tsx +0 -106
- package/src/__tests__/edge-cases.test.tsx +0 -285
- package/src/__tests__/feedback-overlay-renderers.test.tsx +0 -349
- package/src/__tests__/filter-builder.test.tsx +0 -409
- package/src/__tests__/form-renderers.test.tsx +0 -364
- package/src/__tests__/layout-data-renderers.test.tsx +0 -340
- package/src/__tests__/mobile-accessibility.test.tsx +0 -120
- package/src/__tests__/navigation-overlay.test.tsx +0 -370
- package/src/__tests__/snapshot-critical.test.tsx +0 -317
- package/src/__tests__/snapshot.test.tsx +0 -205
- package/src/__tests__/test-utils.tsx +0 -190
- package/src/__tests__/use-config-draft.test.tsx +0 -295
- package/src/__tests__/view-compliance.test.tsx +0 -153
- package/src/__tests__/wcag-audit.test.tsx +0 -493
- package/src/custom/action-param-dialog.tsx +0 -264
- package/src/custom/button-group.tsx +0 -91
- package/src/custom/combobox.tsx +0 -104
- package/src/custom/config-field-renderer.tsx +0 -276
- package/src/custom/config-panel-renderer.tsx +0 -306
- package/src/custom/config-row.tsx +0 -50
- package/src/custom/date-picker.tsx +0 -61
- package/src/custom/empty.tsx +0 -112
- package/src/custom/field.tsx +0 -81
- package/src/custom/filter-builder.tsx +0 -418
- package/src/custom/index.ts +0 -21
- package/src/custom/input-group.tsx +0 -53
- package/src/custom/item.tsx +0 -201
- package/src/custom/kbd.tsx +0 -36
- package/src/custom/mobile-dialog-content.tsx +0 -67
- package/src/custom/native-select.tsx +0 -33
- package/src/custom/navigation-overlay.tsx +0 -334
- package/src/custom/section-header.tsx +0 -68
- package/src/custom/sort-builder.tsx +0 -129
- package/src/custom/spinner.tsx +0 -26
- package/src/custom/view-skeleton.tsx +0 -243
- package/src/custom/view-states.tsx +0 -153
- package/src/debug/DebugPanel.tsx +0 -313
- package/src/debug/__tests__/DebugPanel.test.tsx +0 -134
- package/src/debug/index.ts +0 -10
- package/src/hooks/use-config-draft.ts +0 -127
- package/src/hooks/use-mobile.tsx +0 -27
- package/src/index.css +0 -245
- package/src/index.ts +0 -47
- package/src/lib/use-sync-external-store-shim.ts +0 -10
- package/src/lib/use-sync-external-store-with-selector-shim.ts +0 -90
- package/src/lib/utils.tsx +0 -35
- package/src/new-components.test.ts +0 -73
- package/src/renderers/action/action-bar.tsx +0 -221
- package/src/renderers/action/action-button.tsx +0 -158
- package/src/renderers/action/action-group.tsx +0 -270
- package/src/renderers/action/action-icon.tsx +0 -150
- package/src/renderers/action/action-menu.tsx +0 -203
- package/src/renderers/action/index.ts +0 -19
- package/src/renderers/action/resolve-icon.ts +0 -35
- package/src/renderers/basic/button-group.tsx +0 -79
- package/src/renderers/basic/div.tsx +0 -60
- package/src/renderers/basic/html.tsx +0 -43
- package/src/renderers/basic/icon.tsx +0 -89
- package/src/renderers/basic/image.tsx +0 -49
- package/src/renderers/basic/index.ts +0 -18
- package/src/renderers/basic/navigation-menu.tsx +0 -81
- package/src/renderers/basic/pagination.tsx +0 -109
- package/src/renderers/basic/separator.tsx +0 -57
- package/src/renderers/basic/span.tsx +0 -63
- package/src/renderers/basic/text.tsx +0 -52
- package/src/renderers/complex/README-KANBAN.md +0 -208
- package/src/renderers/complex/TIMELINE.md +0 -353
- package/src/renderers/complex/__tests__/data-table-airtable-ux.test.tsx +0 -239
- package/src/renderers/complex/__tests__/data-table-batch-editing.test.tsx +0 -275
- package/src/renderers/complex/__tests__/data-table-cell-renderer.test.tsx +0 -120
- package/src/renderers/complex/__tests__/data-table-editing.test.tsx +0 -221
- package/src/renderers/complex/__tests__/data-table.test.ts +0 -76
- package/src/renderers/complex/carousel.tsx +0 -69
- package/src/renderers/complex/data-table.tsx +0 -1243
- package/src/renderers/complex/filter-builder.tsx +0 -77
- package/src/renderers/complex/index.ts +0 -16
- package/src/renderers/complex/resizable.tsx +0 -66
- package/src/renderers/complex/scroll-area.tsx +0 -58
- package/src/renderers/complex/table.tsx +0 -95
- package/src/renderers/data-display/alert.tsx +0 -46
- package/src/renderers/data-display/avatar.tsx +0 -38
- package/src/renderers/data-display/badge.tsx +0 -55
- package/src/renderers/data-display/breadcrumb.tsx +0 -61
- package/src/renderers/data-display/index.ts +0 -18
- package/src/renderers/data-display/kbd.tsx +0 -50
- package/src/renderers/data-display/list.tsx +0 -75
- package/src/renderers/data-display/statistic.tsx +0 -95
- package/src/renderers/data-display/table.tsx +0 -78
- package/src/renderers/data-display/tree-view.tsx +0 -176
- package/src/renderers/disclosure/accordion.tsx +0 -69
- package/src/renderers/disclosure/collapsible.tsx +0 -53
- package/src/renderers/disclosure/index.ts +0 -11
- package/src/renderers/disclosure/toggle-group.tsx +0 -79
- package/src/renderers/feedback/empty.tsx +0 -49
- package/src/renderers/feedback/index.ts +0 -16
- package/src/renderers/feedback/loading.tsx +0 -78
- package/src/renderers/feedback/progress.tsx +0 -29
- package/src/renderers/feedback/skeleton.tsx +0 -31
- package/src/renderers/feedback/sonner.tsx +0 -56
- package/src/renderers/feedback/spinner.tsx +0 -55
- package/src/renderers/feedback/toast.tsx +0 -59
- package/src/renderers/feedback/toaster.tsx +0 -23
- package/src/renderers/form/button.tsx +0 -103
- package/src/renderers/form/calendar.tsx +0 -34
- package/src/renderers/form/checkbox.tsx +0 -71
- package/src/renderers/form/combobox.tsx +0 -48
- package/src/renderers/form/command.tsx +0 -58
- package/src/renderers/form/date-picker.tsx +0 -84
- package/src/renderers/form/file-upload.tsx +0 -184
- package/src/renderers/form/form.tsx +0 -540
- package/src/renderers/form/index.ts +0 -26
- package/src/renderers/form/input-otp.tsx +0 -51
- package/src/renderers/form/input.tsx +0 -121
- package/src/renderers/form/label.tsx +0 -45
- package/src/renderers/form/radio-group.tsx +0 -63
- package/src/renderers/form/select.tsx +0 -94
- package/src/renderers/form/slider.tsx +0 -61
- package/src/renderers/form/switch.tsx +0 -48
- package/src/renderers/form/textarea.tsx +0 -76
- package/src/renderers/form/toggle.tsx +0 -42
- package/src/renderers/index.ts +0 -18
- package/src/renderers/layout/aspect-ratio.tsx +0 -51
- package/src/renderers/layout/card.tsx +0 -85
- package/src/renderers/layout/container.tsx +0 -122
- package/src/renderers/layout/flex.tsx +0 -132
- package/src/renderers/layout/grid.tsx +0 -178
- package/src/renderers/layout/index.ts +0 -19
- package/src/renderers/layout/page.tsx +0 -466
- package/src/renderers/layout/semantic.tsx +0 -48
- package/src/renderers/layout/stack.tsx +0 -132
- package/src/renderers/layout/tabs.tsx +0 -97
- package/src/renderers/navigation/header-bar.tsx +0 -118
- package/src/renderers/navigation/index.ts +0 -10
- package/src/renderers/navigation/sidebar.tsx +0 -208
- package/src/renderers/overlay/alert-dialog.tsx +0 -72
- package/src/renderers/overlay/context-menu.tsx +0 -100
- package/src/renderers/overlay/dialog.tsx +0 -77
- package/src/renderers/overlay/drawer.tsx +0 -77
- package/src/renderers/overlay/dropdown-menu.tsx +0 -99
- package/src/renderers/overlay/hover-card.tsx +0 -55
- package/src/renderers/overlay/index.ts +0 -18
- package/src/renderers/overlay/menubar.tsx +0 -76
- package/src/renderers/overlay/popover.tsx +0 -56
- package/src/renderers/overlay/sheet.tsx +0 -77
- package/src/renderers/overlay/tooltip.tsx +0 -67
- package/src/renderers/placeholders.tsx +0 -107
- package/src/stories/CRMApp.stories.tsx +0 -706
- package/src/stories/ConfigPanel.stories.tsx +0 -232
- package/src/stories/Guide.mdx +0 -55
- package/src/stories/MockedData.stories.tsx +0 -121
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +0 -1
- package/src/stories/assets/addon-library.png +0 -0
- package/src/stories/assets/assets.png +0 -0
- package/src/stories/assets/avif-test-image.avif +0 -0
- package/src/stories/assets/context.png +0 -0
- package/src/stories/assets/discord.svg +0 -1
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +0 -1
- package/src/stories/assets/share.png +0 -0
- package/src/stories/assets/styling.png +0 -0
- package/src/stories/assets/testing.png +0 -0
- package/src/stories/assets/theming.png +0 -0
- package/src/stories/assets/tutorials.svg +0 -1
- package/src/stories/assets/youtube.svg +0 -1
- package/src/stories/button.css +0 -30
- package/src/stories/header.css +0 -32
- package/src/stories/page.css +0 -68
- package/src/stories-json/Accessibility.mdx +0 -297
- package/src/stories-json/EdgeCases.stories.tsx +0 -160
- package/src/stories-json/GettingStarted.mdx +0 -89
- package/src/stories-json/Introduction.mdx +0 -127
- package/src/stories-json/accordion.stories.tsx +0 -43
- package/src/stories-json/aggrid.stories.tsx +0 -103
- package/src/stories-json/alert.stories.tsx +0 -39
- package/src/stories-json/aspect-ratio.stories.tsx +0 -34
- package/src/stories-json/avatar.stories.tsx +0 -38
- package/src/stories-json/badge.stories.tsx +0 -53
- package/src/stories-json/breadcrumb.stories.tsx +0 -30
- package/src/stories-json/button-group.stories.tsx +0 -43
- package/src/stories-json/button.stories.tsx +0 -73
- package/src/stories-json/calendar.stories.tsx +0 -85
- package/src/stories-json/card.stories.tsx +0 -48
- package/src/stories-json/carousel.stories.tsx +0 -33
- package/src/stories-json/charts.stories.tsx +0 -195
- package/src/stories-json/chatbot.stories.tsx +0 -349
- package/src/stories-json/code-editor.stories.tsx +0 -92
- package/src/stories-json/collapsible.stories.tsx +0 -40
- package/src/stories-json/controls.stories.tsx +0 -36
- package/src/stories-json/crm-live-data.stories.tsx +0 -154
- package/src/stories-json/dashboard.stories.tsx +0 -318
- package/src/stories-json/data-table.stories.tsx +0 -136
- package/src/stories-json/data_display_extras.stories.tsx +0 -102
- package/src/stories-json/date-picker.stories.tsx +0 -28
- package/src/stories-json/detail-view.stories.tsx +0 -258
- package/src/stories-json/dialog.stories.tsx +0 -43
- package/src/stories-json/feedback_extras.stories.tsx +0 -40
- package/src/stories-json/feedback_others.stories.tsx +0 -46
- package/src/stories-json/form-variants.stories.tsx +0 -210
- package/src/stories-json/form_advanced.stories.tsx +0 -117
- package/src/stories-json/form_extras.stories.tsx +0 -123
- package/src/stories-json/grid.stories.tsx +0 -56
- package/src/stories-json/icon.stories.tsx +0 -36
- package/src/stories-json/input.stories.tsx +0 -52
- package/src/stories-json/kanban.stories.tsx +0 -295
- package/src/stories-json/layout_extended.stories.tsx +0 -76
- package/src/stories-json/layout_flex.stories.tsx +0 -107
- package/src/stories-json/list-view.stories.tsx +0 -97
- package/src/stories-json/markdown.stories.tsx +0 -129
- package/src/stories-json/menus.stories.tsx +0 -63
- package/src/stories-json/metric-card.stories.tsx +0 -143
- package/src/stories-json/navigation-menu.stories.tsx +0 -37
- package/src/stories-json/object-aggrid-advanced.stories.tsx +0 -389
- package/src/stories-json/object-aggrid.stories.tsx +0 -252
- package/src/stories-json/object-form.stories.tsx +0 -130
- package/src/stories-json/object-gantt.stories.tsx +0 -114
- package/src/stories-json/object-grid.stories.tsx +0 -315
- package/src/stories-json/object-map.stories.tsx +0 -116
- package/src/stories-json/object-view.stories.tsx +0 -118
- package/src/stories-json/overlay_extras.stories.tsx +0 -113
- package/src/stories-json/overlay_others.stories.tsx +0 -76
- package/src/stories-json/page.stories.tsx +0 -55
- package/src/stories-json/reports.stories.tsx +0 -163
- package/src/stories-json/resizable.stories.tsx +0 -44
- package/src/stories-json/select.stories.tsx +0 -34
- package/src/stories-json/separator.stories.tsx +0 -41
- package/src/stories-json/sidebar.stories.tsx +0 -147
- package/src/stories-json/statistic.stories.tsx +0 -44
- package/src/stories-json/tabs.stories.tsx +0 -51
- package/src/stories-json/timeline.stories.tsx +0 -188
- package/src/stories-json/typography.stories.tsx +0 -45
- package/src/types/config-panel.ts +0 -101
- package/src/ui/accordion.tsx +0 -66
- package/src/ui/alert-dialog.tsx +0 -149
- package/src/ui/alert.tsx +0 -67
- package/src/ui/aspect-ratio.tsx +0 -15
- package/src/ui/avatar.tsx +0 -58
- package/src/ui/badge.tsx +0 -44
- package/src/ui/breadcrumb.tsx +0 -123
- package/src/ui/button.tsx +0 -64
- package/src/ui/calendar.tsx +0 -221
- package/src/ui/card.tsx +0 -87
- package/src/ui/carousel.tsx +0 -270
- package/src/ui/chart.tsx +0 -377
- package/src/ui/checkbox.tsx +0 -38
- package/src/ui/collapsible.tsx +0 -19
- package/src/ui/command.tsx +0 -161
- package/src/ui/context-menu.tsx +0 -208
- package/src/ui/dialog.tsx +0 -130
- package/src/ui/drawer.tsx +0 -126
- package/src/ui/dropdown-menu.tsx +0 -208
- package/src/ui/form.tsx +0 -186
- package/src/ui/hover-card.tsx +0 -37
- package/src/ui/index.ts +0 -56
- package/src/ui/input-otp.tsx +0 -79
- package/src/ui/input.tsx +0 -30
- package/src/ui/label.tsx +0 -34
- package/src/ui/menubar.tsx +0 -264
- package/src/ui/navigation-menu.tsx +0 -136
- package/src/ui/pagination.tsx +0 -125
- package/src/ui/popover.tsx +0 -39
- package/src/ui/progress.tsx +0 -36
- package/src/ui/radio-group.tsx +0 -52
- package/src/ui/resizable.tsx +0 -53
- package/src/ui/scroll-area.tsx +0 -56
- package/src/ui/select.tsx +0 -168
- package/src/ui/separator.tsx +0 -39
- package/src/ui/sheet.tsx +0 -150
- package/src/ui/sidebar.tsx +0 -781
- package/src/ui/skeleton.tsx +0 -23
- package/src/ui/slider.tsx +0 -39
- package/src/ui/sonner.tsx +0 -53
- package/src/ui/switch.tsx +0 -37
- package/src/ui/table.tsx +0 -125
- package/src/ui/tabs.tsx +0 -63
- package/src/ui/textarea.tsx +0 -30
- package/src/ui/toast.tsx +0 -137
- package/src/ui/toggle-group.tsx +0 -69
- package/src/ui/toggle.tsx +0 -53
- package/src/ui/tooltip.tsx +0 -38
- package/src/ui/typography.tsx +0 -85
- package/tsconfig.json +0 -19
- package/vite.config.ts +0 -71
- package/vitest.config.ts +0 -5
|
@@ -1,95 +0,0 @@
|
|
|
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 { StatisticSchema } from '@object-ui/types';
|
|
11
|
-
import { cn } from '../../lib/utils';
|
|
12
|
-
import { TrendingUp, TrendingDown, Minus } from 'lucide-react';
|
|
13
|
-
import * as LucideIcons from 'lucide-react';
|
|
14
|
-
|
|
15
|
-
// Helper to resolve icon
|
|
16
|
-
const getIcon = (name: string) => {
|
|
17
|
-
if (!name) return null;
|
|
18
|
-
const pascalName = name.split('-').map(part => part.charAt(0).toUpperCase() + part.slice(1)).join('');
|
|
19
|
-
// Dynamic icon lookup from Lucide
|
|
20
|
-
const Icon = LucideIcons[pascalName] || LucideIcons[name];
|
|
21
|
-
return Icon;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const StatisticRenderer = ({ schema }: { schema: StatisticSchema }) => {
|
|
25
|
-
const Icon = schema.icon ? getIcon(schema.icon) : null;
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<div className={cn(
|
|
29
|
-
"group relative flex flex-col p-4 sm:p-5 md:p-6 rounded-xl border bg-card text-card-foreground shadow-sm",
|
|
30
|
-
schema.className
|
|
31
|
-
)}>
|
|
32
|
-
{/* Label & Header Icon */}
|
|
33
|
-
<div className="flex items-center justify-between mb-2">
|
|
34
|
-
{schema.label && (
|
|
35
|
-
<p className="text-sm font-medium text-muted-foreground">
|
|
36
|
-
{schema.label}
|
|
37
|
-
</p>
|
|
38
|
-
)}
|
|
39
|
-
{/* Dynamic icon resolution from Lucide, not component creation during render */}
|
|
40
|
-
{/* eslint-disable-next-line */}
|
|
41
|
-
{Icon && <Icon className="h-4 w-4 text-muted-foreground" />}
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
{/* Value Area */}
|
|
45
|
-
<div className="flex items-baseline gap-2">
|
|
46
|
-
<h3 className="text-2xl font-bold tracking-tight">
|
|
47
|
-
{schema.value}
|
|
48
|
-
</h3>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
{/* Footer / Trend */}
|
|
52
|
-
{(schema.trend || schema.description) && (
|
|
53
|
-
<div className="mt-1 flex items-center text-xs text-muted-foreground">
|
|
54
|
-
{schema.trend === 'up' && <TrendingUp className="mr-1 h-3 w-3 text-emerald-500" />}
|
|
55
|
-
{schema.trend === 'down' && <TrendingDown className="mr-1 h-3 w-3 text-rose-500" />}
|
|
56
|
-
{schema.trend === 'neutral' && <Minus className="mr-1 h-3 w-3" />}
|
|
57
|
-
<span className={cn(
|
|
58
|
-
schema.trend === 'up' && "text-emerald-500 font-medium",
|
|
59
|
-
schema.trend === 'down' && "text-rose-500 font-medium",
|
|
60
|
-
)}>
|
|
61
|
-
{schema.description}
|
|
62
|
-
</span>
|
|
63
|
-
</div>
|
|
64
|
-
)}
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
ComponentRegistry.register('statistic', StatisticRenderer, {
|
|
70
|
-
namespace: 'ui',
|
|
71
|
-
label: 'Statistic',
|
|
72
|
-
category: 'data-display',
|
|
73
|
-
icon: 'Activity',
|
|
74
|
-
inputs: [
|
|
75
|
-
{ name: 'label', type: 'string', label: 'Label' },
|
|
76
|
-
{ name: 'value', type: 'string', label: 'Value' },
|
|
77
|
-
{ name: 'description', type: 'string', label: 'Description' },
|
|
78
|
-
{
|
|
79
|
-
name: 'trend',
|
|
80
|
-
type: 'enum',
|
|
81
|
-
enum: [
|
|
82
|
-
{ label: 'Up', value: 'up' },
|
|
83
|
-
{ label: 'Down', value: 'down' },
|
|
84
|
-
{ label: 'Neutral', value: 'neutral' }
|
|
85
|
-
],
|
|
86
|
-
label: 'Trend'
|
|
87
|
-
}
|
|
88
|
-
],
|
|
89
|
-
defaultProps: {
|
|
90
|
-
label: 'Total Revenue',
|
|
91
|
-
value: '$45,231.89',
|
|
92
|
-
trend: 'up',
|
|
93
|
-
description: '+20.1% from last month'
|
|
94
|
-
}
|
|
95
|
-
});
|
|
@@ -1,78 +0,0 @@
|
|
|
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 }: any) => {
|
|
23
|
-
// Try to get data from binding first, then fall back to inline data
|
|
24
|
-
const boundData = useDataScope(schema.bind);
|
|
25
|
-
const data = boundData || schema.data || schema.props?.data || [];
|
|
26
|
-
const columns = Array.isArray(schema.columns) ? schema.columns : Array.isArray(schema.props?.columns) ? schema.props.columns : [];
|
|
27
|
-
|
|
28
|
-
// If we have data but it's not an array, show error.
|
|
29
|
-
// If data is undefined, we might just be loading or empty.
|
|
30
|
-
if (data && !Array.isArray(data)) {
|
|
31
|
-
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>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const displayData = Array.isArray(data) ? data : [];
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<div className={cn("rounded-md border", className)}>
|
|
38
|
-
<Table>
|
|
39
|
-
<TableHeader>
|
|
40
|
-
<TableRow>
|
|
41
|
-
{columns.map((col: any, index: number) => (
|
|
42
|
-
<TableHead key={col.key || col.accessorKey || index}>
|
|
43
|
-
{col.label || col.header}
|
|
44
|
-
</TableHead>
|
|
45
|
-
))}
|
|
46
|
-
</TableRow>
|
|
47
|
-
</TableHeader>
|
|
48
|
-
<TableBody>
|
|
49
|
-
{displayData.length === 0 ? (
|
|
50
|
-
<TableRow>
|
|
51
|
-
<TableCell colSpan={columns.length} className="h-24 text-center">
|
|
52
|
-
No results.
|
|
53
|
-
</TableCell>
|
|
54
|
-
</TableRow>
|
|
55
|
-
) : (
|
|
56
|
-
displayData.map((row: any, i: number) => (
|
|
57
|
-
<TableRow key={row.id || i}>
|
|
58
|
-
{columns.map((col: any, index: number) => {
|
|
59
|
-
const accessor = col.key || col.accessorKey || '';
|
|
60
|
-
const value = accessor ? row[accessor] : '';
|
|
61
|
-
return (
|
|
62
|
-
<TableCell key={col.key || col.accessorKey || index}>
|
|
63
|
-
{value != null && typeof value === 'object' ? String(value) : value}
|
|
64
|
-
</TableCell>
|
|
65
|
-
);
|
|
66
|
-
})}
|
|
67
|
-
</TableRow>
|
|
68
|
-
))
|
|
69
|
-
)}
|
|
70
|
-
</TableBody>
|
|
71
|
-
</Table>
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
ComponentRegistry.register('table', SimpleTableRenderer, {
|
|
77
|
-
namespace: 'ui'
|
|
78
|
-
});
|
|
@@ -1,176 +0,0 @@
|
|
|
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 { TreeViewSchema, TreeNode } from '@object-ui/types';
|
|
11
|
-
import { ChevronRight, ChevronDown, Folder, File, FolderOpen, CircuitBoard } from 'lucide-react';
|
|
12
|
-
import { useState } from 'react';
|
|
13
|
-
import { cn } from '../../lib/utils';
|
|
14
|
-
import { useDataScope } from '@object-ui/react';
|
|
15
|
-
|
|
16
|
-
const TreeNodeComponent = ({
|
|
17
|
-
node,
|
|
18
|
-
onNodeClick
|
|
19
|
-
}: {
|
|
20
|
-
node: TreeNode;
|
|
21
|
-
onNodeClick?: (node: TreeNode) => void;
|
|
22
|
-
}) => {
|
|
23
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
24
|
-
const hasChildren = node.children && node.children.length > 0;
|
|
25
|
-
|
|
26
|
-
const handleToggle = (e: React.MouseEvent) => {
|
|
27
|
-
e.stopPropagation();
|
|
28
|
-
setIsOpen(!isOpen);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const handleClick = () => {
|
|
32
|
-
if (onNodeClick) {
|
|
33
|
-
onNodeClick(node);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<div className="relative">
|
|
39
|
-
<div
|
|
40
|
-
className={cn(
|
|
41
|
-
'group flex items-center py-1.5 px-2 rounded-sm cursor-pointer transition-colors',
|
|
42
|
-
'hover:bg-accent hover:text-accent-foreground',
|
|
43
|
-
isOpen && hasChildren && 'bg-accent/50'
|
|
44
|
-
)}
|
|
45
|
-
onClick={handleClick}
|
|
46
|
-
>
|
|
47
|
-
{hasChildren ? (
|
|
48
|
-
<button
|
|
49
|
-
onClick={handleToggle}
|
|
50
|
-
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"
|
|
51
|
-
>
|
|
52
|
-
{isOpen ? (
|
|
53
|
-
<ChevronDown className="h-4 w-4" />
|
|
54
|
-
) : (
|
|
55
|
-
<ChevronRight className="h-4 w-4" />
|
|
56
|
-
)}
|
|
57
|
-
</button>
|
|
58
|
-
) : (
|
|
59
|
-
<span className="mr-2 w-5 flex justify-center">
|
|
60
|
-
<div className="w-1 h-1 rounded-full bg-muted-foreground/50" />
|
|
61
|
-
</span>
|
|
62
|
-
)}
|
|
63
|
-
|
|
64
|
-
{node.icon === 'folder' || hasChildren ? (
|
|
65
|
-
isOpen ?
|
|
66
|
-
<FolderOpen className="h-4 w-4 mr-2 text-primary" /> :
|
|
67
|
-
<Folder className="h-4 w-4 mr-2 text-muted-foreground group-hover:text-primary transition-colors" />
|
|
68
|
-
) : (
|
|
69
|
-
<File className="h-4 w-4 mr-2 text-muted-foreground group-hover:text-primary transition-colors" />
|
|
70
|
-
)}
|
|
71
|
-
|
|
72
|
-
<span className={cn(
|
|
73
|
-
"text-sm transition-colors",
|
|
74
|
-
isOpen ? "font-medium text-foreground" : "text-muted-foreground group-hover:text-foreground"
|
|
75
|
-
)}>
|
|
76
|
-
{node.label}
|
|
77
|
-
</span>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
{hasChildren && isOpen && (
|
|
81
|
-
<div className="relative ml-[11px] pl-3 border-l border-border animate-in slide-in-from-left-2 fade-in duration-200">
|
|
82
|
-
{node.children!.map((child) => (
|
|
83
|
-
<TreeNodeComponent
|
|
84
|
-
key={child.id}
|
|
85
|
-
node={child}
|
|
86
|
-
onNodeClick={onNodeClick}
|
|
87
|
-
/>
|
|
88
|
-
))}
|
|
89
|
-
</div>
|
|
90
|
-
)}
|
|
91
|
-
</div>
|
|
92
|
-
);
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
ComponentRegistry.register('tree-view',
|
|
96
|
-
({ schema, className, ...props }) => {
|
|
97
|
-
const handleNodeClick = (node: TreeNode) => {
|
|
98
|
-
if (schema.onNodeClick) {
|
|
99
|
-
schema.onNodeClick(node);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
// Support data binding
|
|
104
|
-
const boundData = useDataScope(schema.bind);
|
|
105
|
-
const rawNodes = boundData || schema.nodes || schema.data || [];
|
|
106
|
-
const nodes = Array.isArray(rawNodes) ? rawNodes : [];
|
|
107
|
-
|
|
108
|
-
return (
|
|
109
|
-
<div className={cn(
|
|
110
|
-
'relative border rounded-lg p-3 bg-card text-card-foreground',
|
|
111
|
-
className
|
|
112
|
-
)}
|
|
113
|
-
{...props}
|
|
114
|
-
>
|
|
115
|
-
{schema.title && (
|
|
116
|
-
<div className="flex items-center gap-2 mb-3 pb-2 border-b">
|
|
117
|
-
<h3 className="text-sm font-semibold">{schema.title}</h3>
|
|
118
|
-
</div>
|
|
119
|
-
)}
|
|
120
|
-
<div className="space-y-1">
|
|
121
|
-
{nodes.map((node: TreeNode) => (
|
|
122
|
-
<TreeNodeComponent
|
|
123
|
-
key={node.id}
|
|
124
|
-
node={node}
|
|
125
|
-
onNodeClick={handleNodeClick}
|
|
126
|
-
/>
|
|
127
|
-
))}
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
);
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
namespace: 'ui',
|
|
134
|
-
label: 'Tree View',
|
|
135
|
-
inputs: [
|
|
136
|
-
{ name: 'title', type: 'string', label: 'Title' },
|
|
137
|
-
{
|
|
138
|
-
name: 'nodes',
|
|
139
|
-
type: 'array',
|
|
140
|
-
label: 'Tree Nodes',
|
|
141
|
-
description: 'Array of { id, label, icon, children, data }'
|
|
142
|
-
},
|
|
143
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
144
|
-
],
|
|
145
|
-
defaultProps: {
|
|
146
|
-
title: 'File Explorer',
|
|
147
|
-
nodes: [
|
|
148
|
-
{
|
|
149
|
-
id: '1',
|
|
150
|
-
label: 'Documents',
|
|
151
|
-
icon: 'folder',
|
|
152
|
-
children: [
|
|
153
|
-
{ id: '1-1', label: 'Resume.pdf', icon: 'file' },
|
|
154
|
-
{ id: '1-2', label: 'Cover Letter.docx', icon: 'file' }
|
|
155
|
-
]
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
id: '2',
|
|
159
|
-
label: 'Photos',
|
|
160
|
-
icon: 'folder',
|
|
161
|
-
children: [
|
|
162
|
-
{ id: '2-1', label: 'Vacation', icon: 'folder', children: [
|
|
163
|
-
{ id: '2-1-1', label: 'Beach.jpg', icon: 'file' }
|
|
164
|
-
]},
|
|
165
|
-
{ id: '2-2', label: 'Family.jpg', icon: 'file' }
|
|
166
|
-
]
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
id: '3',
|
|
170
|
-
label: 'README.md',
|
|
171
|
-
icon: 'file'
|
|
172
|
-
}
|
|
173
|
-
]
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
);
|
|
@@ -1,69 +0,0 @@
|
|
|
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 { AccordionSchema } from '@object-ui/types';
|
|
11
|
-
import {
|
|
12
|
-
Accordion,
|
|
13
|
-
AccordionItem,
|
|
14
|
-
AccordionTrigger,
|
|
15
|
-
AccordionContent
|
|
16
|
-
} from '../../ui';
|
|
17
|
-
import { renderChildren } from '../../lib/utils';
|
|
18
|
-
|
|
19
|
-
ComponentRegistry.register('accordion',
|
|
20
|
-
({ schema, className, ...props }: { schema: AccordionSchema; className?: string; [key: string]: any }) => (
|
|
21
|
-
<Accordion type={schema.accordionType || 'single'} collapsible={schema.collapsible} className={className} {...props}>
|
|
22
|
-
{schema.items?.map((item, index: number) => (
|
|
23
|
-
<AccordionItem key={item.value || index} value={item.value || `item-${index}`}>
|
|
24
|
-
<AccordionTrigger>{item.title}</AccordionTrigger>
|
|
25
|
-
<AccordionContent>
|
|
26
|
-
{renderChildren(item.content)}
|
|
27
|
-
</AccordionContent>
|
|
28
|
-
</AccordionItem>
|
|
29
|
-
))}
|
|
30
|
-
</Accordion>
|
|
31
|
-
),
|
|
32
|
-
{
|
|
33
|
-
namespace: 'ui',
|
|
34
|
-
label: 'Accordion',
|
|
35
|
-
inputs: [
|
|
36
|
-
{ name: 'accordionType', type: 'enum', enum: ['single', 'multiple'], defaultValue: 'single', label: 'Type' },
|
|
37
|
-
{ name: 'collapsible', type: 'boolean', label: 'Collapsible (for single type)' },
|
|
38
|
-
{
|
|
39
|
-
name: 'items',
|
|
40
|
-
type: 'array',
|
|
41
|
-
label: 'Items',
|
|
42
|
-
description: 'Array of { trigger, content, value }'
|
|
43
|
-
},
|
|
44
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
45
|
-
],
|
|
46
|
-
defaultProps: {
|
|
47
|
-
accordionType: 'single',
|
|
48
|
-
collapsible: true,
|
|
49
|
-
items: [
|
|
50
|
-
{
|
|
51
|
-
label: 'Item 1',
|
|
52
|
-
value: 'item-1',
|
|
53
|
-
content: [{ type: 'text', content: 'Content for item 1' }]
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
label: 'Item 2',
|
|
57
|
-
value: 'item-2',
|
|
58
|
-
content: [{ type: 'text', content: 'Content for item 2' }]
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
label: 'Item 3',
|
|
62
|
-
value: 'item-3',
|
|
63
|
-
content: [{ type: 'text', content: 'Content for item 3' }]
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
className: 'w-full'
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
);
|
|
@@ -1,53 +0,0 @@
|
|
|
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 { CollapsibleSchema } from '@object-ui/types';
|
|
11
|
-
import {
|
|
12
|
-
Collapsible,
|
|
13
|
-
CollapsibleTrigger,
|
|
14
|
-
CollapsibleContent
|
|
15
|
-
} from '../../ui';
|
|
16
|
-
import { renderChildren } from '../../lib/utils';
|
|
17
|
-
|
|
18
|
-
ComponentRegistry.register('collapsible',
|
|
19
|
-
({ schema, className, ...props }: { schema: CollapsibleSchema; className?: string; [key: string]: any }) => (
|
|
20
|
-
<Collapsible defaultOpen={schema.defaultOpen} disabled={schema.disabled} className={className} {...props}>
|
|
21
|
-
<CollapsibleTrigger asChild>
|
|
22
|
-
{renderChildren(schema.trigger)}
|
|
23
|
-
</CollapsibleTrigger>
|
|
24
|
-
<CollapsibleContent>
|
|
25
|
-
{renderChildren(schema.content)}
|
|
26
|
-
</CollapsibleContent>
|
|
27
|
-
</Collapsible>
|
|
28
|
-
),
|
|
29
|
-
{
|
|
30
|
-
namespace: 'ui',
|
|
31
|
-
label: 'Collapsible',
|
|
32
|
-
inputs: [
|
|
33
|
-
{ name: 'defaultOpen', type: 'boolean', label: 'Default Open' },
|
|
34
|
-
{ name: 'disabled', type: 'boolean', label: 'Disabled' },
|
|
35
|
-
{
|
|
36
|
-
name: 'trigger',
|
|
37
|
-
type: 'slot',
|
|
38
|
-
label: 'Trigger'
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'content',
|
|
42
|
-
type: 'slot',
|
|
43
|
-
label: 'Content'
|
|
44
|
-
},
|
|
45
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
46
|
-
],
|
|
47
|
-
defaultProps: {
|
|
48
|
-
trigger: [{ type: 'button', label: 'Toggle', variant: 'outline' }],
|
|
49
|
-
content: [{ type: 'text', content: 'Collapsible content goes here' }],
|
|
50
|
-
className: 'w-full'
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
);
|
|
@@ -1,11 +0,0 @@
|
|
|
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 './accordion';
|
|
10
|
-
import './collapsible';
|
|
11
|
-
import './toggle-group';
|
|
@@ -1,79 +0,0 @@
|
|
|
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
|
-
type, // Extract type to prevent overriding the one we set below
|
|
20
|
-
...toggleGroupProps
|
|
21
|
-
} = props;
|
|
22
|
-
|
|
23
|
-
return (
|
|
24
|
-
<ToggleGroup
|
|
25
|
-
type={(schema.selectionType || 'single') as any}
|
|
26
|
-
variant={schema.variant}
|
|
27
|
-
size={schema.size}
|
|
28
|
-
value={schema.value as any}
|
|
29
|
-
className={schema.className}
|
|
30
|
-
{...toggleGroupProps}
|
|
31
|
-
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
|
|
32
|
-
>
|
|
33
|
-
{schema.items?.map((item, idx) => (
|
|
34
|
-
<ToggleGroupItem key={idx} value={item.value} aria-label={item.label}>
|
|
35
|
-
{item.label}
|
|
36
|
-
</ToggleGroupItem>
|
|
37
|
-
))}
|
|
38
|
-
</ToggleGroup>
|
|
39
|
-
);
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
namespace: 'ui',
|
|
43
|
-
label: 'Toggle Group',
|
|
44
|
-
inputs: [
|
|
45
|
-
{
|
|
46
|
-
name: 'selectionType',
|
|
47
|
-
type: 'enum',
|
|
48
|
-
enum: ['single', 'multiple'],
|
|
49
|
-
defaultValue: 'single',
|
|
50
|
-
label: 'Selection Type'
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: 'variant',
|
|
54
|
-
type: 'enum',
|
|
55
|
-
enum: ['default', 'outline'],
|
|
56
|
-
defaultValue: 'default',
|
|
57
|
-
label: 'Variant'
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
name: 'size',
|
|
61
|
-
type: 'enum',
|
|
62
|
-
enum: ['default', 'sm', 'lg'],
|
|
63
|
-
defaultValue: 'default',
|
|
64
|
-
label: 'Size'
|
|
65
|
-
},
|
|
66
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
67
|
-
],
|
|
68
|
-
defaultProps: {
|
|
69
|
-
selectionType: 'single',
|
|
70
|
-
variant: 'default',
|
|
71
|
-
size: 'default',
|
|
72
|
-
items: [
|
|
73
|
-
{ value: 'bold', label: 'Bold' },
|
|
74
|
-
{ value: 'italic', label: 'Italic' },
|
|
75
|
-
{ value: 'underline', label: 'Underline' }
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
);
|
|
@@ -1,49 +0,0 @@
|
|
|
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
|
-
namespace: 'ui',
|
|
39
|
-
label: 'Empty',
|
|
40
|
-
inputs: [
|
|
41
|
-
{ name: 'title', type: 'string', label: 'Title', defaultValue: 'No data' },
|
|
42
|
-
{ name: 'description', type: 'string', label: 'Description' },
|
|
43
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
44
|
-
],
|
|
45
|
-
defaultProps: {
|
|
46
|
-
title: 'No data'
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
);
|
|
@@ -1,16 +0,0 @@
|
|
|
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 './progress';
|
|
10
|
-
import './skeleton';
|
|
11
|
-
import './toaster';
|
|
12
|
-
import './loading';
|
|
13
|
-
import './toast';
|
|
14
|
-
import './spinner';
|
|
15
|
-
import './empty';
|
|
16
|
-
import './sonner';
|