@object-ui/components 0.3.0 → 0.5.0
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/.turbo/turbo-build.log +47 -0
- package/CHANGELOG.md +10 -0
- package/README.md +32 -1
- package/README_SHADCN_SYNC.md +281 -0
- package/TESTING.md +335 -0
- package/dist/index.css +1 -1
- package/dist/index.js +45067 -34357
- package/dist/index.umd.cjs +54 -42
- package/dist/src/SchemaRenderer.d.ts +3 -0
- package/dist/src/{ui → custom}/button-group.d.ts +1 -1
- package/dist/src/custom/combobox.d.ts +22 -0
- package/dist/src/custom/date-picker.d.ts +15 -0
- package/dist/src/custom/field.d.ts +19 -0
- package/dist/src/{ui → custom}/filter-builder.d.ts +7 -0
- package/dist/src/custom/index.d.ts +12 -0
- package/dist/src/custom/input-group.d.ts +14 -0
- package/dist/src/{ui → custom}/item.d.ts +8 -1
- package/dist/src/{ui → custom}/kbd.d.ts +7 -0
- package/dist/src/custom/native-select.d.ts +12 -0
- package/dist/src/custom/sort-builder.d.ts +22 -0
- package/dist/src/custom/spinner.d.ts +10 -0
- package/dist/src/hooks/use-mobile.d.ts +7 -0
- package/dist/src/index.d.ts +5 -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/page.d.ts +1 -1
- 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 +11 -4
- package/dist/src/ui/alert-dialog.d.ts +24 -11
- package/dist/src/ui/alert.d.ts +11 -5
- package/dist/src/ui/aspect-ratio.d.ts +8 -1
- package/dist/src/ui/avatar.d.ts +10 -3
- package/dist/src/ui/badge.d.ts +10 -3
- package/dist/src/ui/breadcrumb.d.ts +23 -8
- package/dist/src/ui/button.d.ts +10 -5
- package/dist/src/ui/calendar.d.ts +8 -1
- package/dist/src/ui/card.d.ts +14 -8
- package/dist/src/ui/carousel.d.ts +12 -6
- package/dist/src/ui/chart.d.ts +62 -0
- package/dist/src/ui/checkbox.d.ts +8 -1
- package/dist/src/ui/collapsible.d.ts +10 -3
- package/dist/src/ui/command.d.ts +85 -16
- package/dist/src/ui/context-menu.d.ts +21 -12
- package/dist/src/ui/dialog.d.ts +24 -13
- package/dist/src/ui/drawer.d.ts +26 -10
- package/dist/src/ui/dropdown-menu.d.ts +27 -18
- package/dist/src/ui/form.d.ts +13 -7
- package/dist/src/ui/hover-card.d.ts +10 -3
- package/dist/src/ui/index.d.ts +10 -11
- package/dist/src/ui/input-otp.d.ts +37 -7
- package/dist/src/ui/input.d.ts +7 -0
- package/dist/src/ui/label.d.ts +9 -1
- package/dist/src/ui/menubar.d.ts +26 -17
- package/dist/src/ui/navigation-menu.d.ts +16 -11
- package/dist/src/ui/pagination.d.ts +32 -10
- package/dist/src/ui/popover.d.ts +11 -5
- package/dist/src/ui/progress.d.ts +8 -1
- package/dist/src/ui/radio-group.d.ts +9 -2
- package/dist/src/ui/resizable.d.ts +12 -8
- package/dist/src/ui/scroll-area.d.ts +9 -2
- package/dist/src/ui/select.d.ts +18 -13
- package/dist/src/ui/separator.d.ts +7 -0
- package/dist/src/ui/sheet.d.ts +30 -11
- package/dist/src/ui/sidebar.d.ts +41 -38
- package/dist/src/ui/skeleton.d.ts +8 -1
- package/dist/src/ui/slider.d.ts +8 -1
- package/dist/src/ui/sonner.d.ts +2 -1
- package/dist/src/ui/switch.d.ts +9 -2
- package/dist/src/ui/table.d.ts +15 -8
- package/dist/src/ui/tabs.d.ts +8 -1
- package/dist/src/ui/textarea.d.ts +8 -1
- package/dist/src/ui/toast.d.ts +22 -0
- package/dist/src/ui/toggle-group.d.ts +15 -5
- package/dist/src/ui/toggle.d.ts +11 -1
- package/dist/src/ui/tooltip.d.ts +11 -4
- package/dist/src/ui/typography.d.ts +21 -0
- package/metadata/ObjectGrid.component.yml +72 -0
- package/package.json +35 -13
- package/postcss.config.js +9 -1
- package/shadcn-components.json +315 -0
- package/src/SchemaRenderer.tsx +28 -0
- package/src/__tests__/PageRendererRegions.test.tsx +59 -0
- package/src/__tests__/README.md +124 -0
- package/src/__tests__/Registry.test.ts +21 -0
- package/src/__tests__/basic-renderers.test.tsx +255 -0
- package/src/__tests__/complex-disclosure-renderers.test.tsx +302 -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/{ui → custom}/button-group.tsx +9 -1
- package/src/custom/combobox.tsx +104 -0
- package/src/custom/date-picker.tsx +61 -0
- package/src/{ui → custom}/empty.tsx +8 -0
- package/src/custom/field.tsx +81 -0
- package/src/{ui → custom}/filter-builder.tsx +11 -3
- package/src/custom/index.ts +12 -0
- package/src/custom/input-group.tsx +53 -0
- package/src/{ui → custom}/item.tsx +9 -1
- package/src/{ui → custom}/kbd.tsx +8 -0
- package/src/custom/native-select.tsx +33 -0
- package/src/custom/sort-builder.tsx +129 -0
- package/src/custom/spinner.tsx +26 -0
- package/src/hooks/use-mobile.tsx +8 -0
- package/src/index.css +105 -54
- package/src/index.test.ts +8 -0
- package/src/index.ts +22 -1
- package/src/lib/utils.tsx +8 -0
- package/src/new-components.test.ts +8 -9
- package/src/renderers/basic/button-group.tsx +79 -0
- package/src/renderers/basic/div.tsx +21 -2
- package/src/renderers/basic/html.tsx +9 -0
- package/src/renderers/basic/icon.tsx +67 -3
- package/src/renderers/basic/image.tsx +13 -1
- package/src/renderers/basic/index.ts +11 -0
- package/src/renderers/basic/navigation-menu.tsx +81 -0
- package/src/renderers/basic/pagination.tsx +109 -0
- package/src/renderers/basic/separator.tsx +10 -1
- package/src/renderers/basic/span.tsx +21 -2
- package/src/renderers/basic/text.tsx +12 -2
- package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
- package/src/renderers/complex/carousel.tsx +12 -3
- package/src/renderers/complex/data-table.tsx +150 -96
- package/src/renderers/complex/filter-builder.tsx +10 -1
- package/src/renderers/complex/index.ts +9 -3
- package/src/renderers/complex/resizable.tsx +10 -1
- package/src/renderers/complex/scroll-area.tsx +33 -7
- package/src/renderers/complex/table.tsx +11 -2
- package/src/renderers/data-display/alert.tsx +9 -0
- package/src/renderers/data-display/avatar.tsx +9 -0
- package/src/renderers/data-display/badge.tsx +9 -0
- package/src/renderers/data-display/breadcrumb.tsx +60 -0
- package/src/renderers/data-display/index.ts +12 -0
- package/src/renderers/data-display/kbd.tsx +50 -0
- package/src/renderers/data-display/list.tsx +29 -49
- package/src/renderers/data-display/statistic.tsx +45 -48
- package/src/renderers/data-display/table.tsx +78 -0
- package/src/renderers/data-display/tree-view.tsx +32 -37
- package/src/renderers/disclosure/accordion.tsx +9 -0
- package/src/renderers/disclosure/collapsible.tsx +9 -0
- package/src/renderers/disclosure/index.ts +9 -0
- package/src/renderers/disclosure/toggle-group.tsx +79 -0
- package/src/renderers/feedback/empty.tsx +49 -0
- package/src/renderers/feedback/index.ts +12 -0
- package/src/renderers/feedback/loading.tsx +10 -1
- package/src/renderers/feedback/progress.tsx +9 -0
- package/src/renderers/feedback/skeleton.tsx +9 -0
- package/src/renderers/feedback/sonner.tsx +56 -0
- package/src/renderers/feedback/spinner.tsx +55 -0
- package/src/renderers/feedback/toast.tsx +59 -0
- package/src/renderers/feedback/toaster.tsx +14 -17
- package/src/renderers/form/button.tsx +43 -1
- package/src/renderers/form/calendar.tsx +9 -0
- package/src/renderers/form/checkbox.tsx +46 -16
- package/src/renderers/form/combobox.tsx +48 -0
- package/src/renderers/form/command.tsx +58 -0
- package/src/renderers/form/date-picker.tsx +11 -2
- package/src/renderers/form/file-upload.tsx +11 -2
- package/src/renderers/form/form.tsx +104 -18
- package/src/renderers/form/index.ts +10 -0
- package/src/renderers/form/input-otp.tsx +35 -15
- package/src/renderers/form/input.tsx +92 -50
- package/src/renderers/form/label.tsx +9 -0
- package/src/renderers/form/radio-group.tsx +9 -0
- package/src/renderers/form/select.tsx +43 -15
- package/src/renderers/form/slider.tsx +17 -1
- package/src/renderers/form/switch.tsx +9 -0
- package/src/renderers/form/textarea.tsx +58 -27
- package/src/renderers/form/toggle.tsx +11 -45
- package/src/renderers/index.ts +8 -0
- package/src/renderers/layout/aspect-ratio.tsx +51 -0
- package/src/renderers/layout/card.tsx +18 -2
- package/src/renderers/layout/container.tsx +21 -12
- package/src/renderers/layout/flex.tsx +17 -8
- package/src/renderers/layout/grid.tsx +31 -8
- package/src/renderers/layout/index.ts +9 -0
- package/src/renderers/layout/page.tsx +44 -24
- package/src/renderers/layout/semantic.tsx +9 -0
- package/src/renderers/layout/stack.tsx +18 -9
- package/src/renderers/layout/tabs.tsx +51 -17
- package/src/renderers/navigation/header-bar.tsx +10 -1
- package/src/renderers/navigation/index.ts +8 -0
- package/src/renderers/navigation/sidebar.tsx +13 -0
- package/src/renderers/overlay/alert-dialog.tsx +9 -0
- package/src/renderers/overlay/context-menu.tsx +10 -1
- package/src/renderers/overlay/dialog.tsx +9 -0
- package/src/renderers/overlay/drawer.tsx +9 -0
- package/src/renderers/overlay/dropdown-menu.tsx +9 -0
- package/src/renderers/overlay/hover-card.tsx +9 -0
- package/src/renderers/overlay/index.ts +9 -0
- package/src/renderers/overlay/menubar.tsx +76 -0
- package/src/renderers/overlay/popover.tsx +9 -0
- package/src/renderers/overlay/sheet.tsx +9 -0
- package/src/renderers/overlay/tooltip.tsx +9 -0
- package/src/renderers/placeholders.tsx +107 -0
- package/src/stories/CRMApp.stories.tsx +706 -0
- package/src/stories/Guide.mdx +55 -0
- package/src/stories/Introduction.mdx +34 -0
- package/src/stories/MockedData.stories.tsx +71 -0
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +1 -0
- 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 +1 -0
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +1 -0
- 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 +1 -0
- package/src/stories/assets/youtube.svg +1 -0
- package/src/stories/button.css +30 -0
- package/src/stories/header.css +32 -0
- package/src/stories/page.css +68 -0
- package/src/stories-json/accordion.stories.tsx +43 -0
- package/src/stories-json/aggrid.stories.tsx +103 -0
- package/src/stories-json/alert.stories.tsx +39 -0
- package/src/stories-json/aspect-ratio.stories.tsx +34 -0
- package/src/stories-json/avatar.stories.tsx +38 -0
- package/src/stories-json/badge.stories.tsx +53 -0
- package/src/stories-json/breadcrumb.stories.tsx +30 -0
- package/src/stories-json/button-group.stories.tsx +43 -0
- package/src/stories-json/button.stories.tsx +73 -0
- package/src/stories-json/calendar.stories.tsx +85 -0
- package/src/stories-json/card.stories.tsx +48 -0
- package/src/stories-json/carousel.stories.tsx +33 -0
- package/src/stories-json/charts.stories.tsx +195 -0
- package/src/stories-json/chatbot.stories.tsx +248 -0
- package/src/stories-json/code-editor.stories.tsx +92 -0
- package/src/stories-json/collapsible.stories.tsx +40 -0
- package/src/stories-json/controls.stories.tsx +36 -0
- package/src/stories-json/dashboard.stories.tsx +318 -0
- package/src/stories-json/data-table.stories.tsx +60 -0
- package/src/stories-json/data_display_extras.stories.tsx +102 -0
- package/src/stories-json/date-picker.stories.tsx +28 -0
- package/src/stories-json/detail-view.stories.tsx +258 -0
- package/src/stories-json/dialog.stories.tsx +43 -0
- package/src/stories-json/feedback_extras.stories.tsx +40 -0
- package/src/stories-json/feedback_others.stories.tsx +46 -0
- package/src/stories-json/form_advanced.stories.tsx +117 -0
- package/src/stories-json/form_extras.stories.tsx +123 -0
- package/src/stories-json/grid.stories.tsx +56 -0
- package/src/stories-json/icon.stories.tsx +36 -0
- package/src/stories-json/input.stories.tsx +52 -0
- package/src/stories-json/kanban.stories.tsx +295 -0
- package/src/stories-json/layout_extended.stories.tsx +76 -0
- package/src/stories-json/layout_flex.stories.tsx +107 -0
- package/src/stories-json/list-view.stories.tsx +97 -0
- package/src/stories-json/markdown.stories.tsx +129 -0
- package/src/stories-json/menus.stories.tsx +63 -0
- package/src/stories-json/metric-card.stories.tsx +143 -0
- package/src/stories-json/navigation-menu.stories.tsx +37 -0
- package/src/stories-json/object-aggrid.stories.tsx +252 -0
- package/src/stories-json/object-form.stories.tsx +130 -0
- package/src/stories-json/object-gantt.stories.tsx +114 -0
- package/src/stories-json/object-grid.stories.tsx +157 -0
- package/src/stories-json/object-map.stories.tsx +116 -0
- package/src/stories-json/object-view.stories.tsx +118 -0
- package/src/stories-json/overlay_extras.stories.tsx +113 -0
- package/src/stories-json/overlay_others.stories.tsx +76 -0
- package/src/stories-json/page.stories.tsx +55 -0
- package/src/stories-json/reports.stories.tsx +163 -0
- package/src/stories-json/resizable.stories.tsx +44 -0
- package/src/stories-json/select.stories.tsx +34 -0
- package/src/stories-json/separator.stories.tsx +41 -0
- package/src/stories-json/sidebar.stories.tsx +147 -0
- package/src/stories-json/statistic.stories.tsx +44 -0
- package/src/stories-json/tabs.stories.tsx +51 -0
- package/src/stories-json/timeline.stories.tsx +188 -0
- package/src/stories-json/typography.stories.tsx +45 -0
- package/src/ui/accordion.tsx +55 -53
- package/src/ui/alert-dialog.tsx +111 -117
- package/src/ui/alert.tsx +46 -57
- package/src/ui/aspect-ratio.tsx +9 -5
- package/src/ui/avatar.tsx +49 -42
- package/src/ui/badge.tsx +18 -20
- package/src/ui/breadcrumb.tsx +89 -75
- package/src/ui/button.tsx +38 -37
- package/src/ui/calendar.tsx +37 -53
- package/src/ui/card.tsx +59 -110
- package/src/ui/carousel.tsx +144 -113
- package/src/ui/chart.tsx +367 -0
- package/src/ui/checkbox.tsx +28 -22
- package/src/ui/collapsible.tsx +13 -25
- package/src/ui/command.tsx +114 -135
- package/src/ui/context-menu.tsx +77 -116
- package/src/ui/dialog.tsx +102 -113
- package/src/ui/drawer.tsx +90 -99
- package/src/ui/dropdown-menu.tsx +142 -188
- package/src/ui/form.tsx +59 -40
- package/src/ui/hover-card.tsx +26 -33
- package/src/ui/index.ts +11 -11
- package/src/ui/input-otp.tsx +53 -55
- package/src/ui/input.tsx +21 -15
- package/src/ui/label.tsx +25 -15
- package/src/ui/menubar.tsx +196 -206
- package/src/ui/navigation-menu.tsx +104 -136
- package/src/ui/pagination.tsx +94 -96
- package/src/ui/popover.tsx +29 -38
- package/src/ui/progress.tsx +29 -34
- package/src/ui/radio-group.tsx +27 -20
- package/src/ui/resizable.tsx +40 -42
- package/src/ui/scroll-area.tsx +46 -48
- package/src/ui/select.tsx +140 -160
- package/src/ui/separator.tsx +10 -2
- package/src/ui/sheet.tsx +118 -107
- package/src/ui/sidebar.tsx +471 -418
- package/src/ui/skeleton.tsx +14 -11
- package/src/ui/slider.tsx +27 -54
- package/src/ui/sonner.tsx +29 -19
- package/src/ui/switch.tsx +27 -21
- package/src/ui/table.tsx +102 -97
- package/src/ui/tabs.tsx +14 -37
- package/src/ui/textarea.tsx +16 -4
- package/src/ui/toast.tsx +137 -0
- package/src/ui/toggle-group.tsx +37 -55
- package/src/ui/toggle.tsx +30 -27
- package/src/ui/tooltip.tsx +29 -52
- package/src/ui/typography.tsx +85 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +20 -2
- package/vitest.config.ts +5 -0
- 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/spinner.d.ts +0 -3
- 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/spinner.tsx +0 -38
- package/src/ui/timeline.tsx +0 -266
- package/tailwind.config.js +0 -75
- /package/dist/src/{ui → custom}/empty.d.ts +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
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 * as React from "react"
|
|
10
|
+
import { X, Plus, Trash2 } from "lucide-react"
|
|
11
|
+
|
|
12
|
+
import { cn } from "../lib/utils"
|
|
13
|
+
import { Button } from "../ui/button"
|
|
14
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"
|
|
15
|
+
|
|
16
|
+
export interface SortItem {
|
|
17
|
+
id: string;
|
|
18
|
+
field: string;
|
|
19
|
+
order: 'asc' | 'desc';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface SortBuilderProps {
|
|
23
|
+
fields?: Array<{
|
|
24
|
+
value: string
|
|
25
|
+
label: string
|
|
26
|
+
}>;
|
|
27
|
+
value?: SortItem[];
|
|
28
|
+
onChange?: (value: SortItem[]) => void;
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function SortBuilder({
|
|
33
|
+
fields = [],
|
|
34
|
+
value = [],
|
|
35
|
+
onChange,
|
|
36
|
+
className,
|
|
37
|
+
}: SortBuilderProps) {
|
|
38
|
+
// Use internal state initialization prop changes
|
|
39
|
+
const [items, setItems] = React.useState<SortItem[]>(value || []);
|
|
40
|
+
|
|
41
|
+
React.useEffect(() => {
|
|
42
|
+
if (value && JSON.stringify(value) !== JSON.stringify(items)) {
|
|
43
|
+
setItems(value);
|
|
44
|
+
}
|
|
45
|
+
}, [value]);
|
|
46
|
+
|
|
47
|
+
const handleChange = (newItems: SortItem[]) => {
|
|
48
|
+
setItems(newItems);
|
|
49
|
+
onChange?.(newItems);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const addItem = () => {
|
|
53
|
+
const newItem: SortItem = {
|
|
54
|
+
id: crypto.randomUUID(),
|
|
55
|
+
field: fields[0]?.value || "",
|
|
56
|
+
order: 'asc',
|
|
57
|
+
};
|
|
58
|
+
handleChange([...items, newItem]);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const updateItem = (id: string, updates: Partial<SortItem>) => {
|
|
62
|
+
handleChange(items.map(item => item.id === id ? { ...item, ...updates } : item));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const removeItem = (id: string) => {
|
|
66
|
+
handleChange(items.filter(item => item.id !== id));
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<div className={cn("space-y-3", className)}>
|
|
71
|
+
<div className="space-y-2">
|
|
72
|
+
{items.map((item, index) => (
|
|
73
|
+
<div key={item.id} className="flex items-center gap-2">
|
|
74
|
+
<span className="text-sm font-medium w-16 text-muted-foreground">
|
|
75
|
+
{index === 0 ? "Sort by" : "Then by"}
|
|
76
|
+
</span>
|
|
77
|
+
<div className="flex-1">
|
|
78
|
+
<Select
|
|
79
|
+
value={item.field}
|
|
80
|
+
onValueChange={(val) => updateItem(item.id, { field: val })}
|
|
81
|
+
>
|
|
82
|
+
<SelectTrigger className="h-9">
|
|
83
|
+
<SelectValue placeholder="Select field" />
|
|
84
|
+
</SelectTrigger>
|
|
85
|
+
<SelectContent>
|
|
86
|
+
{fields.map(f => (
|
|
87
|
+
<SelectItem key={f.value} value={f.value}>{f.label}</SelectItem>
|
|
88
|
+
))}
|
|
89
|
+
</SelectContent>
|
|
90
|
+
</Select>
|
|
91
|
+
</div>
|
|
92
|
+
<div className="w-28">
|
|
93
|
+
<Select
|
|
94
|
+
value={item.order}
|
|
95
|
+
onValueChange={(val) => updateItem(item.id, { order: val as 'asc' | 'desc' })}
|
|
96
|
+
>
|
|
97
|
+
<SelectTrigger className="h-9">
|
|
98
|
+
<SelectValue />
|
|
99
|
+
</SelectTrigger>
|
|
100
|
+
<SelectContent>
|
|
101
|
+
<SelectItem value="asc">A -> Z</SelectItem>
|
|
102
|
+
<SelectItem value="desc">Z -> A</SelectItem>
|
|
103
|
+
</SelectContent>
|
|
104
|
+
</Select>
|
|
105
|
+
</div>
|
|
106
|
+
<Button
|
|
107
|
+
variant="ghost"
|
|
108
|
+
size="icon-sm"
|
|
109
|
+
className="h-9 w-9 shrink-0"
|
|
110
|
+
onClick={() => removeItem(item.id)}
|
|
111
|
+
>
|
|
112
|
+
<X className="h-4 w-4" />
|
|
113
|
+
</Button>
|
|
114
|
+
</div>
|
|
115
|
+
))}
|
|
116
|
+
</div>
|
|
117
|
+
<Button
|
|
118
|
+
variant="outline"
|
|
119
|
+
size="sm"
|
|
120
|
+
onClick={addItem}
|
|
121
|
+
className="h-8"
|
|
122
|
+
disabled={fields.length === 0}
|
|
123
|
+
>
|
|
124
|
+
<Plus className="h-3 w-3 mr-2" />
|
|
125
|
+
Add sort
|
|
126
|
+
</Button>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 * as React from "react"
|
|
10
|
+
import { cn } from "../lib/utils"
|
|
11
|
+
import { Loader2 } from "lucide-react"
|
|
12
|
+
|
|
13
|
+
function Spinner({ className, ...props }: React.ComponentProps<"div">) {
|
|
14
|
+
return (
|
|
15
|
+
<div
|
|
16
|
+
role="status"
|
|
17
|
+
aria-label="Loading"
|
|
18
|
+
className={cn("flex items-center justify-center", className)}
|
|
19
|
+
{...props}
|
|
20
|
+
>
|
|
21
|
+
<Loader2 className="animate-spin text-muted-foreground w-full h-full min-w-4 min-h-4" />
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { Spinner }
|
package/src/hooks/use-mobile.tsx
CHANGED
|
@@ -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 * as React from "react"
|
|
2
10
|
|
|
3
11
|
const MOBILE_BREAKPOINT = 768
|
package/src/index.css
CHANGED
|
@@ -1,76 +1,127 @@
|
|
|
1
|
-
@
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
/* Scan sources for Tailwind classes */
|
|
4
|
+
@source '../src/**/*.{ts,tsx}';
|
|
5
|
+
|
|
6
|
+
/* Tailwind plugin for animations */
|
|
7
|
+
@plugin 'tailwindcss-animate';
|
|
8
|
+
|
|
9
|
+
/* Define theme colors for Tailwind 4 */
|
|
10
|
+
@theme {
|
|
11
|
+
/* Border radius tokens */
|
|
12
|
+
--radius-lg: var(--radius);
|
|
13
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
14
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
15
|
+
|
|
16
|
+
/* Color tokens mapped to CSS variables */
|
|
17
|
+
--color-border: hsl(var(--border));
|
|
18
|
+
--color-input: hsl(var(--input));
|
|
19
|
+
--color-ring: hsl(var(--ring));
|
|
20
|
+
--color-background: hsl(var(--background));
|
|
21
|
+
--color-foreground: hsl(var(--foreground));
|
|
22
|
+
--color-primary: hsl(var(--primary));
|
|
23
|
+
--color-primary-foreground: hsl(var(--primary-foreground));
|
|
24
|
+
--color-secondary: hsl(var(--secondary));
|
|
25
|
+
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
|
26
|
+
--color-destructive: hsl(var(--destructive));
|
|
27
|
+
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
|
28
|
+
--color-muted: hsl(var(--muted));
|
|
29
|
+
--color-muted-foreground: hsl(var(--muted-foreground));
|
|
30
|
+
--color-accent: hsl(var(--accent));
|
|
31
|
+
--color-accent-foreground: hsl(var(--accent-foreground));
|
|
32
|
+
--color-popover: hsl(var(--popover));
|
|
33
|
+
--color-popover-foreground: hsl(var(--popover-foreground));
|
|
34
|
+
--color-card: hsl(var(--card));
|
|
35
|
+
--color-card-foreground: hsl(var(--card-foreground));
|
|
36
|
+
|
|
37
|
+
/* Chart colors */
|
|
38
|
+
--color-chart-1: hsl(var(--chart-1));
|
|
39
|
+
--color-chart-2: hsl(var(--chart-2));
|
|
40
|
+
--color-chart-3: hsl(var(--chart-3));
|
|
41
|
+
--color-chart-4: hsl(var(--chart-4));
|
|
42
|
+
--color-chart-5: hsl(var(--chart-5));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* CSS custom properties for theme */
|
|
46
|
+
:root {
|
|
47
|
+
--background: 0 0% 100%;
|
|
48
|
+
--foreground: 222.2 84% 4.9%;
|
|
49
|
+
|
|
50
|
+
--card: 0 0% 100%;
|
|
51
|
+
--card-foreground: 222.2 84% 4.9%;
|
|
4
52
|
|
|
5
|
-
|
|
6
|
-
:
|
|
7
|
-
--background: 0 0% 100%;
|
|
8
|
-
--foreground: 222.2 84% 4.9%;
|
|
53
|
+
--popover: 0 0% 100%;
|
|
54
|
+
--popover-foreground: 222.2 84% 4.9%;
|
|
9
55
|
|
|
10
|
-
|
|
11
|
-
|
|
56
|
+
--primary: 222.2 47.4% 11.2%;
|
|
57
|
+
--primary-foreground: 210 40% 98%;
|
|
12
58
|
|
|
13
|
-
|
|
14
|
-
|
|
59
|
+
--secondary: 210 40% 96.1%;
|
|
60
|
+
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
15
61
|
|
|
16
|
-
|
|
17
|
-
|
|
62
|
+
--muted: 210 40% 96.1%;
|
|
63
|
+
--muted-foreground: 215.4 16.3% 46.9%;
|
|
18
64
|
|
|
19
|
-
|
|
20
|
-
|
|
65
|
+
--accent: 210 40% 96.1%;
|
|
66
|
+
--accent-foreground: 222.2 47.4% 11.2%;
|
|
21
67
|
|
|
22
|
-
|
|
23
|
-
|
|
68
|
+
--destructive: 0 84.2% 60.2%;
|
|
69
|
+
--destructive-foreground: 210 40% 98%;
|
|
24
70
|
|
|
25
|
-
|
|
26
|
-
|
|
71
|
+
--border: 214.3 31.8% 91.4%;
|
|
72
|
+
--input: 214.3 31.8% 91.4%;
|
|
73
|
+
--ring: 222.2 84% 4.9%;
|
|
27
74
|
|
|
28
|
-
|
|
29
|
-
--destructive-foreground: 210 40% 98%;
|
|
75
|
+
--radius: 0.5rem;
|
|
30
76
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
77
|
+
--chart-1: 12 76% 61%;
|
|
78
|
+
--chart-2: 173 58% 39%;
|
|
79
|
+
--chart-3: 197 37% 24%;
|
|
80
|
+
--chart-4: 43 74% 66%;
|
|
81
|
+
--chart-5: 27 87% 67%;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.dark {
|
|
85
|
+
--background: 222.2 84% 4.9%;
|
|
86
|
+
--foreground: 210 40% 98%;
|
|
34
87
|
|
|
35
|
-
|
|
36
|
-
|
|
88
|
+
--card: 222.2 84% 4.9%;
|
|
89
|
+
--card-foreground: 210 40% 98%;
|
|
37
90
|
|
|
38
|
-
.
|
|
39
|
-
|
|
40
|
-
--foreground: 210 40% 98%;
|
|
91
|
+
--popover: 222.2 84% 4.9%;
|
|
92
|
+
--popover-foreground: 210 40% 98%;
|
|
41
93
|
|
|
42
|
-
|
|
43
|
-
|
|
94
|
+
--primary: 210 40% 98%;
|
|
95
|
+
--primary-foreground: 222.2 47.4% 11.2%;
|
|
44
96
|
|
|
45
|
-
|
|
46
|
-
|
|
97
|
+
--secondary: 217.2 32.6% 17.5%;
|
|
98
|
+
--secondary-foreground: 210 40% 98%;
|
|
47
99
|
|
|
48
|
-
|
|
49
|
-
|
|
100
|
+
--muted: 217.2 32.6% 17.5%;
|
|
101
|
+
--muted-foreground: 215 20.2% 65.1%;
|
|
50
102
|
|
|
51
|
-
|
|
52
|
-
|
|
103
|
+
--accent: 217.2 32.6% 17.5%;
|
|
104
|
+
--accent-foreground: 210 40% 98%;
|
|
53
105
|
|
|
54
|
-
|
|
55
|
-
|
|
106
|
+
--destructive: 0 62.8% 30.6%;
|
|
107
|
+
--destructive-foreground: 210 40% 98%;
|
|
56
108
|
|
|
57
|
-
|
|
58
|
-
|
|
109
|
+
--border: 217.2 32.6% 17.5%;
|
|
110
|
+
--input: 217.2 32.6% 17.5%;
|
|
111
|
+
--ring: 212.7 26.8% 83.9%;
|
|
59
112
|
|
|
60
|
-
|
|
61
|
-
|
|
113
|
+
--chart-1: 220 70% 50%;
|
|
114
|
+
--chart-2: 160 60% 45%;
|
|
115
|
+
--chart-3: 30 80% 55%;
|
|
116
|
+
--chart-4: 280 65% 60%;
|
|
117
|
+
--chart-5: 340 75% 55%;
|
|
118
|
+
}
|
|
62
119
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
--ring: 212.7 26.8% 83.9%;
|
|
66
|
-
}
|
|
120
|
+
* {
|
|
121
|
+
border-color: hsl(var(--border));
|
|
67
122
|
}
|
|
68
123
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
body {
|
|
74
|
-
@apply bg-background text-foreground;
|
|
75
|
-
}
|
|
124
|
+
body {
|
|
125
|
+
background-color: hsl(var(--background));
|
|
126
|
+
color: hsl(var(--foreground));
|
|
76
127
|
}
|
package/src/index.test.ts
CHANGED
|
@@ -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 { describe, it, expect } from 'vitest';
|
|
2
10
|
|
|
3
11
|
describe('components', () => {
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
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 './index.css';
|
|
2
10
|
|
|
3
11
|
// Register all ObjectUI renderers (side-effects)
|
|
4
12
|
import './renderers';
|
|
5
13
|
|
|
6
14
|
// Export utils
|
|
7
|
-
export
|
|
15
|
+
export { cn } from './lib/utils';
|
|
16
|
+
export { renderChildren } from './lib/utils';
|
|
17
|
+
|
|
18
|
+
// Export placeholder registration
|
|
19
|
+
export { registerPlaceholders } from './renderers/placeholders';
|
|
8
20
|
|
|
9
21
|
// Export raw Shadcn UI components
|
|
10
22
|
export * from './ui';
|
|
23
|
+
export * from './custom';
|
|
24
|
+
|
|
25
|
+
// Export an init function to ensure components are registered
|
|
26
|
+
// This is a workaround for bundlers that might tree-shake side-effect imports
|
|
27
|
+
export function initializeComponents() {
|
|
28
|
+
// This function exists to ensure the import side-effects above are executed
|
|
29
|
+
// Simply importing this module should register all components
|
|
30
|
+
return true;
|
|
31
|
+
}
|
package/src/lib/utils.tsx
CHANGED
|
@@ -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 { clsx, type ClassValue } from "clsx"
|
|
2
10
|
import { twMerge } from "tailwind-merge"
|
|
3
11
|
import { SchemaRenderer } from "@object-ui/react"
|
|
@@ -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 { describe, it, expect, beforeAll } from 'vitest';
|
|
2
10
|
import { ComponentRegistry } from '@object-ui/core';
|
|
3
11
|
|
|
@@ -62,13 +70,4 @@ describe('New Components Registration', () => {
|
|
|
62
70
|
expect(component?.label).toBe('Loading');
|
|
63
71
|
});
|
|
64
72
|
});
|
|
65
|
-
|
|
66
|
-
describe('Complex Components', () => {
|
|
67
|
-
it('should register timeline component', () => {
|
|
68
|
-
const component = ComponentRegistry.getConfig('timeline');
|
|
69
|
-
expect(component).toBeDefined();
|
|
70
|
-
expect(component?.label).toBe('Timeline');
|
|
71
|
-
expect(component?.category).toBe('data-display');
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
73
|
});
|
|
@@ -0,0 +1,79 @@
|
|
|
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 { ButtonGroupSchema } from '@object-ui/types';
|
|
11
|
+
import { Button } from '../../ui';
|
|
12
|
+
import { cn } from '../../lib/utils';
|
|
13
|
+
|
|
14
|
+
ComponentRegistry.register('button-group',
|
|
15
|
+
({ schema, ...props }: { schema: ButtonGroupSchema; [key: string]: any }) => {
|
|
16
|
+
const {
|
|
17
|
+
'data-obj-id': dataObjId,
|
|
18
|
+
'data-obj-type': dataObjType,
|
|
19
|
+
style,
|
|
20
|
+
...buttonGroupProps
|
|
21
|
+
} = props;
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div
|
|
25
|
+
className={cn('flex flex-wrap sm:inline-flex rounded-md shadow-sm', schema.className)}
|
|
26
|
+
role="group"
|
|
27
|
+
{...buttonGroupProps}
|
|
28
|
+
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
|
|
29
|
+
>
|
|
30
|
+
{schema.buttons?.map((button, idx) => (
|
|
31
|
+
<Button
|
|
32
|
+
key={idx}
|
|
33
|
+
variant={button.variant || schema.variant}
|
|
34
|
+
size={button.size || schema.size}
|
|
35
|
+
className={cn(
|
|
36
|
+
'rounded-none',
|
|
37
|
+
idx === 0 && 'rounded-l-md',
|
|
38
|
+
idx === (schema.buttons?.length || 0) - 1 && 'rounded-r-md',
|
|
39
|
+
idx > 0 && '-ml-px',
|
|
40
|
+
button.className
|
|
41
|
+
)}
|
|
42
|
+
>
|
|
43
|
+
{button.label}
|
|
44
|
+
</Button>
|
|
45
|
+
))}
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
namespace: 'ui',
|
|
51
|
+
label: 'Button Group',
|
|
52
|
+
inputs: [
|
|
53
|
+
{
|
|
54
|
+
name: 'variant',
|
|
55
|
+
type: 'enum',
|
|
56
|
+
enum: ['default', 'destructive', 'outline', 'secondary', 'ghost', 'link'],
|
|
57
|
+
defaultValue: 'default',
|
|
58
|
+
label: 'Variant'
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'size',
|
|
62
|
+
type: 'enum',
|
|
63
|
+
enum: ['default', 'sm', 'lg', 'icon'],
|
|
64
|
+
defaultValue: 'default',
|
|
65
|
+
label: 'Size'
|
|
66
|
+
},
|
|
67
|
+
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
68
|
+
],
|
|
69
|
+
defaultProps: {
|
|
70
|
+
variant: 'default',
|
|
71
|
+
size: 'default',
|
|
72
|
+
buttons: [
|
|
73
|
+
{ label: 'Left' },
|
|
74
|
+
{ label: 'Middle' },
|
|
75
|
+
{ label: 'Right' }
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
);
|
|
@@ -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 { DivSchema } from '@object-ui/types';
|
|
3
11
|
import { renderChildren } from '../../lib/utils';
|
|
@@ -5,6 +13,16 @@ import { forwardRef } from 'react';
|
|
|
5
13
|
|
|
6
14
|
const DivRenderer = forwardRef<HTMLDivElement, { schema: DivSchema; className?: string; [key: string]: any }>(
|
|
7
15
|
({ schema, className, ...props }, ref) => {
|
|
16
|
+
// Deprecation warning
|
|
17
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
18
|
+
console.warn(
|
|
19
|
+
'[ObjectUI] The "div" component is deprecated. Please use Shadcn components instead:\n' +
|
|
20
|
+
' - For containers: use "card", "flex", or semantic layout components\n' +
|
|
21
|
+
' - For simple wrappers: use layout components like "container", "stack", or "grid"\n' +
|
|
22
|
+
'See documentation at https://www.objectui.org/docs/components for alternatives.'
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
8
26
|
// Extract designer-related props
|
|
9
27
|
const {
|
|
10
28
|
'data-obj-id': dataObjId,
|
|
@@ -30,12 +48,13 @@ const DivRenderer = forwardRef<HTMLDivElement, { schema: DivSchema; className?:
|
|
|
30
48
|
ComponentRegistry.register('div',
|
|
31
49
|
DivRenderer,
|
|
32
50
|
{
|
|
33
|
-
|
|
51
|
+
namespace: 'ui',
|
|
52
|
+
label: 'Container (Deprecated)',
|
|
34
53
|
inputs: [
|
|
35
54
|
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
36
55
|
],
|
|
37
56
|
defaultProps: {
|
|
38
|
-
className: 'p-4 border border-dashed border-gray-300 rounded min-h-[100px]'
|
|
57
|
+
className: 'p-2 sm:p-4 border border-dashed border-gray-300 rounded min-h-[100px]'
|
|
39
58
|
}
|
|
40
59
|
}
|
|
41
60
|
);
|
|
@@ -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 React from 'react';
|
|
2
10
|
import { ComponentRegistry } from '@object-ui/core';
|
|
3
11
|
import type { HtmlSchema } from '@object-ui/types';
|
|
@@ -26,6 +34,7 @@ ComponentRegistry.register('html',
|
|
|
26
34
|
);
|
|
27
35
|
},
|
|
28
36
|
{
|
|
37
|
+
namespace: 'ui',
|
|
29
38
|
label: 'HTML Content',
|
|
30
39
|
inputs: [
|
|
31
40
|
{ name: 'html', type: 'string', label: 'HTML', description: 'Raw HTML content' }
|
|
@@ -1,24 +1,88 @@
|
|
|
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 { IconSchema } from '@object-ui/types';
|
|
3
11
|
import { icons } from 'lucide-react';
|
|
4
12
|
import React, { forwardRef } from 'react';
|
|
13
|
+
import { cn } from '../../lib/utils';
|
|
14
|
+
|
|
15
|
+
// Convert kebab-case to PascalCase for Lucide icon names
|
|
16
|
+
// e.g., "arrow-right" -> "ArrowRight", "home" -> "Home"
|
|
17
|
+
function toPascalCase(str: string): string {
|
|
18
|
+
return str
|
|
19
|
+
.split('-')
|
|
20
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
21
|
+
.join('');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Map of renamed icons in lucide-react (from old name to new name)
|
|
25
|
+
const iconNameMap: Record<string, string> = {
|
|
26
|
+
'Home': 'House', // "Home" was renamed to "House" in lucide-react's icons object
|
|
27
|
+
};
|
|
5
28
|
|
|
6
29
|
const IconRenderer = forwardRef<SVGSVGElement, { schema: IconSchema; className?: string; [key: string]: any }>(
|
|
7
30
|
({ schema, className, ...props }, ref) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
31
|
+
// Extract designer-related props
|
|
32
|
+
const {
|
|
33
|
+
'data-obj-id': dataObjId,
|
|
34
|
+
'data-obj-type': dataObjType,
|
|
35
|
+
style,
|
|
36
|
+
...iconProps
|
|
37
|
+
} = props;
|
|
38
|
+
|
|
39
|
+
// Convert icon name to PascalCase for Lucide lookup
|
|
40
|
+
const iconName = toPascalCase(schema.name);
|
|
41
|
+
// Apply icon name mapping for renamed icons
|
|
42
|
+
const mappedIconName = iconNameMap[iconName] || iconName;
|
|
43
|
+
const Icon = (icons as any)[mappedIconName];
|
|
44
|
+
|
|
45
|
+
if (!Icon) {
|
|
46
|
+
console.warn(`Icon "${schema.name}" (lookup: "${iconName}"${mappedIconName !== iconName ? ` -> "${mappedIconName}"` : ''}) not found in lucide-react`);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Build size style
|
|
51
|
+
const sizeStyle = schema.size ? { width: schema.size, height: schema.size } : undefined;
|
|
52
|
+
|
|
53
|
+
// Merge classNames: schema color, schema className, prop className
|
|
54
|
+
const mergedClassName = cn(
|
|
55
|
+
schema.color,
|
|
56
|
+
schema.className,
|
|
57
|
+
className
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<Icon
|
|
62
|
+
ref={ref}
|
|
63
|
+
className={mergedClassName}
|
|
64
|
+
style={{ ...sizeStyle, ...style }}
|
|
65
|
+
{...iconProps}
|
|
66
|
+
// Apply designer props
|
|
67
|
+
{...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType }}
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
11
70
|
}
|
|
12
71
|
);
|
|
13
72
|
|
|
73
|
+
IconRenderer.displayName = 'IconRenderer';
|
|
74
|
+
|
|
14
75
|
ComponentRegistry.register('icon',
|
|
15
76
|
IconRenderer,
|
|
16
77
|
{
|
|
78
|
+
namespace: 'ui',
|
|
17
79
|
label: 'Icon',
|
|
18
80
|
icon: 'smile',
|
|
19
81
|
category: 'basic',
|
|
20
82
|
inputs: [
|
|
21
83
|
{ name: 'name', type: 'string', label: 'Icon Name', defaultValue: 'smile' },
|
|
84
|
+
{ name: 'size', type: 'number', label: 'Size (px)' },
|
|
85
|
+
{ name: 'color', type: 'string', label: 'Color Class' },
|
|
22
86
|
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
23
87
|
]
|
|
24
88
|
}
|