@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
package/src/ui/dropdown-menu.tsx
CHANGED
|
@@ -1,145 +1,150 @@
|
|
|
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
|
+
"use client"
|
|
10
|
+
|
|
1
11
|
import * as React from "react"
|
|
2
12
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
|
|
3
|
-
import {
|
|
13
|
+
import { Check, ChevronRight, Circle } from "lucide-react"
|
|
4
14
|
|
|
5
15
|
import { cn } from "../lib/utils"
|
|
6
16
|
|
|
7
|
-
|
|
8
|
-
...props
|
|
9
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
|
|
10
|
-
return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
|
|
11
|
-
}
|
|
17
|
+
const DropdownMenu = DropdownMenuPrimitive.Root
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
...props
|
|
15
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
|
|
16
|
-
return (
|
|
17
|
-
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
|
|
18
|
-
)
|
|
19
|
-
}
|
|
19
|
+
const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
...props
|
|
23
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
|
|
24
|
-
return (
|
|
25
|
-
<DropdownMenuPrimitive.Trigger
|
|
26
|
-
data-slot="dropdown-menu-trigger"
|
|
27
|
-
{...props}
|
|
28
|
-
/>
|
|
29
|
-
)
|
|
30
|
-
}
|
|
21
|
+
const DropdownMenuGroup = DropdownMenuPrimitive.Group
|
|
31
22
|
|
|
32
|
-
|
|
33
|
-
className,
|
|
34
|
-
sideOffset = 4,
|
|
35
|
-
...props
|
|
36
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
|
|
37
|
-
return (
|
|
38
|
-
<DropdownMenuPrimitive.Portal>
|
|
39
|
-
<DropdownMenuPrimitive.Content
|
|
40
|
-
data-slot="dropdown-menu-content"
|
|
41
|
-
sideOffset={sideOffset}
|
|
42
|
-
className={cn(
|
|
43
|
-
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
|
|
44
|
-
className
|
|
45
|
-
)}
|
|
46
|
-
{...props}
|
|
47
|
-
/>
|
|
48
|
-
</DropdownMenuPrimitive.Portal>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
23
|
+
const DropdownMenuPortal = DropdownMenuPrimitive.Portal
|
|
51
24
|
|
|
52
|
-
|
|
53
|
-
...props
|
|
54
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
|
|
55
|
-
return (
|
|
56
|
-
<DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
|
|
57
|
-
)
|
|
58
|
-
}
|
|
25
|
+
const DropdownMenuSub = DropdownMenuPrimitive.Sub
|
|
59
26
|
|
|
60
|
-
|
|
61
|
-
className,
|
|
62
|
-
inset,
|
|
63
|
-
variant = "default",
|
|
64
|
-
...props
|
|
65
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
66
|
-
inset?: boolean
|
|
67
|
-
variant?: "default" | "destructive"
|
|
68
|
-
}) {
|
|
69
|
-
return (
|
|
70
|
-
<DropdownMenuPrimitive.Item
|
|
71
|
-
data-slot="dropdown-menu-item"
|
|
72
|
-
data-inset={inset}
|
|
73
|
-
data-variant={variant}
|
|
74
|
-
className={cn(
|
|
75
|
-
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
76
|
-
className
|
|
77
|
-
)}
|
|
78
|
-
{...props}
|
|
79
|
-
/>
|
|
80
|
-
)
|
|
81
|
-
}
|
|
27
|
+
const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
|
|
82
28
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
29
|
+
const DropdownMenuSubTrigger = React.forwardRef<
|
|
30
|
+
React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
|
|
31
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
32
|
+
inset?: boolean
|
|
33
|
+
}
|
|
34
|
+
>(({ className, inset, children, ...props }, ref) => (
|
|
35
|
+
<DropdownMenuPrimitive.SubTrigger
|
|
36
|
+
ref={ref}
|
|
37
|
+
className={cn(
|
|
38
|
+
"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
39
|
+
inset && "pl-8",
|
|
40
|
+
className
|
|
41
|
+
)}
|
|
42
|
+
{...props}
|
|
43
|
+
>
|
|
44
|
+
{children}
|
|
45
|
+
<ChevronRight className="ml-auto" />
|
|
46
|
+
</DropdownMenuPrimitive.SubTrigger>
|
|
47
|
+
))
|
|
48
|
+
DropdownMenuSubTrigger.displayName =
|
|
49
|
+
DropdownMenuPrimitive.SubTrigger.displayName
|
|
50
|
+
|
|
51
|
+
const DropdownMenuSubContent = React.forwardRef<
|
|
52
|
+
React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
|
|
53
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
|
|
54
|
+
>(({ className, ...props }, ref) => (
|
|
55
|
+
<DropdownMenuPrimitive.SubContent
|
|
56
|
+
ref={ref}
|
|
57
|
+
className={cn(
|
|
58
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
59
|
+
className
|
|
60
|
+
)}
|
|
61
|
+
{...props}
|
|
62
|
+
/>
|
|
63
|
+
))
|
|
64
|
+
DropdownMenuSubContent.displayName =
|
|
65
|
+
DropdownMenuPrimitive.SubContent.displayName
|
|
66
|
+
|
|
67
|
+
const DropdownMenuContent = React.forwardRef<
|
|
68
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Content>,
|
|
69
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
|
|
70
|
+
>(({ className, sideOffset = 4, ...props }, ref) => (
|
|
71
|
+
<DropdownMenuPrimitive.Portal>
|
|
72
|
+
<DropdownMenuPrimitive.Content
|
|
73
|
+
ref={ref}
|
|
74
|
+
sideOffset={sideOffset}
|
|
92
75
|
className={cn(
|
|
93
|
-
"
|
|
76
|
+
"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
94
77
|
className
|
|
95
78
|
)}
|
|
96
|
-
checked={checked}
|
|
97
|
-
{...props}
|
|
98
|
-
>
|
|
99
|
-
<span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
|
|
100
|
-
<DropdownMenuPrimitive.ItemIndicator>
|
|
101
|
-
<CheckIcon className="size-4" />
|
|
102
|
-
</DropdownMenuPrimitive.ItemIndicator>
|
|
103
|
-
</span>
|
|
104
|
-
{children}
|
|
105
|
-
</DropdownMenuPrimitive.CheckboxItem>
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function DropdownMenuRadioGroup({
|
|
110
|
-
...props
|
|
111
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
|
|
112
|
-
return (
|
|
113
|
-
<DropdownMenuPrimitive.RadioGroup
|
|
114
|
-
data-slot="dropdown-menu-radio-group"
|
|
115
79
|
{...props}
|
|
116
80
|
/>
|
|
117
|
-
|
|
118
|
-
|
|
81
|
+
</DropdownMenuPrimitive.Portal>
|
|
82
|
+
))
|
|
83
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
|
|
119
84
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
85
|
+
const DropdownMenuItem = React.forwardRef<
|
|
86
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Item>,
|
|
87
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
|
|
88
|
+
inset?: boolean
|
|
89
|
+
}
|
|
90
|
+
>(({ className, inset, ...props }, ref) => (
|
|
91
|
+
<DropdownMenuPrimitive.Item
|
|
92
|
+
ref={ref}
|
|
93
|
+
className={cn(
|
|
94
|
+
"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
95
|
+
inset && "pl-8",
|
|
96
|
+
className
|
|
97
|
+
)}
|
|
98
|
+
{...props}
|
|
99
|
+
/>
|
|
100
|
+
))
|
|
101
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
|
|
102
|
+
|
|
103
|
+
const DropdownMenuCheckboxItem = React.forwardRef<
|
|
104
|
+
React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
|
|
105
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
|
|
106
|
+
>(({ className, children, checked, ...props }, ref) => (
|
|
107
|
+
<DropdownMenuPrimitive.CheckboxItem
|
|
108
|
+
ref={ref}
|
|
109
|
+
className={cn(
|
|
110
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
111
|
+
className
|
|
112
|
+
)}
|
|
113
|
+
checked={checked}
|
|
114
|
+
{...props}
|
|
115
|
+
>
|
|
116
|
+
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
117
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
118
|
+
<Check className="h-4 w-4" />
|
|
119
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
120
|
+
</span>
|
|
121
|
+
{children}
|
|
122
|
+
</DropdownMenuPrimitive.CheckboxItem>
|
|
123
|
+
))
|
|
124
|
+
DropdownMenuCheckboxItem.displayName =
|
|
125
|
+
DropdownMenuPrimitive.CheckboxItem.displayName
|
|
126
|
+
|
|
127
|
+
const DropdownMenuRadioItem = React.forwardRef<
|
|
128
|
+
React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
|
|
129
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
|
|
130
|
+
>(({ className, children, ...props }, ref) => (
|
|
131
|
+
<DropdownMenuPrimitive.RadioItem
|
|
132
|
+
ref={ref}
|
|
133
|
+
className={cn(
|
|
134
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
135
|
+
className
|
|
136
|
+
)}
|
|
137
|
+
{...props}
|
|
138
|
+
>
|
|
139
|
+
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
140
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
141
|
+
<Circle className="h-2 w-2 fill-current" />
|
|
142
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
143
|
+
</span>
|
|
144
|
+
{children}
|
|
145
|
+
</DropdownMenuPrimitive.RadioItem>
|
|
146
|
+
))
|
|
147
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
|
|
143
148
|
|
|
144
149
|
const DropdownMenuLabel = React.forwardRef<
|
|
145
150
|
React.ElementRef<typeof DropdownMenuPrimitive.Label>,
|
|
@@ -149,10 +154,9 @@ const DropdownMenuLabel = React.forwardRef<
|
|
|
149
154
|
>(({ className, inset, ...props }, ref) => (
|
|
150
155
|
<DropdownMenuPrimitive.Label
|
|
151
156
|
ref={ref}
|
|
152
|
-
data-slot="dropdown-menu-label"
|
|
153
|
-
data-inset={inset}
|
|
154
157
|
className={cn(
|
|
155
|
-
"px-2 py-1.5 text-sm font-
|
|
158
|
+
"px-2 py-1.5 text-sm font-semibold",
|
|
159
|
+
inset && "pl-8",
|
|
156
160
|
className
|
|
157
161
|
)}
|
|
158
162
|
{...props}
|
|
@@ -166,89 +170,39 @@ const DropdownMenuSeparator = React.forwardRef<
|
|
|
166
170
|
>(({ className, ...props }, ref) => (
|
|
167
171
|
<DropdownMenuPrimitive.Separator
|
|
168
172
|
ref={ref}
|
|
169
|
-
|
|
170
|
-
className={cn("bg-border -mx-1 my-1 h-px", className)}
|
|
173
|
+
className={cn("-mx-1 my-1 h-px bg-muted", className)}
|
|
171
174
|
{...props}
|
|
172
175
|
/>
|
|
173
176
|
))
|
|
174
177
|
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
|
|
175
178
|
|
|
176
|
-
|
|
179
|
+
const DropdownMenuShortcut = ({
|
|
177
180
|
className,
|
|
178
181
|
...props
|
|
179
|
-
}: React.
|
|
182
|
+
}: React.HTMLAttributes<HTMLSpanElement>) => {
|
|
180
183
|
return (
|
|
181
184
|
<span
|
|
182
|
-
|
|
183
|
-
className={cn(
|
|
184
|
-
"text-muted-foreground ml-auto text-xs tracking-widest",
|
|
185
|
-
className
|
|
186
|
-
)}
|
|
187
|
-
{...props}
|
|
188
|
-
/>
|
|
189
|
-
)
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function DropdownMenuSub({
|
|
193
|
-
...props
|
|
194
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
|
|
195
|
-
return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function DropdownMenuSubTrigger({
|
|
199
|
-
className,
|
|
200
|
-
inset,
|
|
201
|
-
children,
|
|
202
|
-
...props
|
|
203
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
204
|
-
inset?: boolean
|
|
205
|
-
}) {
|
|
206
|
-
return (
|
|
207
|
-
<DropdownMenuPrimitive.SubTrigger
|
|
208
|
-
data-slot="dropdown-menu-sub-trigger"
|
|
209
|
-
data-inset={inset}
|
|
210
|
-
className={cn(
|
|
211
|
-
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
212
|
-
className
|
|
213
|
-
)}
|
|
214
|
-
{...props}
|
|
215
|
-
>
|
|
216
|
-
{children}
|
|
217
|
-
<ChevronRightIcon className="ml-auto size-4" />
|
|
218
|
-
</DropdownMenuPrimitive.SubTrigger>
|
|
219
|
-
)
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function DropdownMenuSubContent({
|
|
223
|
-
className,
|
|
224
|
-
...props
|
|
225
|
-
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
|
|
226
|
-
return (
|
|
227
|
-
<DropdownMenuPrimitive.SubContent
|
|
228
|
-
data-slot="dropdown-menu-sub-content"
|
|
229
|
-
className={cn(
|
|
230
|
-
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
|
|
231
|
-
className
|
|
232
|
-
)}
|
|
185
|
+
className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
|
|
233
186
|
{...props}
|
|
234
187
|
/>
|
|
235
188
|
)
|
|
236
189
|
}
|
|
190
|
+
DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
|
|
237
191
|
|
|
238
192
|
export {
|
|
239
193
|
DropdownMenu,
|
|
240
|
-
DropdownMenuPortal,
|
|
241
194
|
DropdownMenuTrigger,
|
|
242
195
|
DropdownMenuContent,
|
|
243
|
-
DropdownMenuGroup,
|
|
244
|
-
DropdownMenuLabel,
|
|
245
196
|
DropdownMenuItem,
|
|
246
197
|
DropdownMenuCheckboxItem,
|
|
247
|
-
DropdownMenuRadioGroup,
|
|
248
198
|
DropdownMenuRadioItem,
|
|
199
|
+
DropdownMenuLabel,
|
|
249
200
|
DropdownMenuSeparator,
|
|
250
201
|
DropdownMenuShortcut,
|
|
202
|
+
DropdownMenuGroup,
|
|
203
|
+
DropdownMenuPortal,
|
|
251
204
|
DropdownMenuSub,
|
|
252
|
-
DropdownMenuSubTrigger,
|
|
253
205
|
DropdownMenuSubContent,
|
|
206
|
+
DropdownMenuSubTrigger,
|
|
207
|
+
DropdownMenuRadioGroup,
|
|
254
208
|
}
|
package/src/ui/form.tsx
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
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
|
"use client"
|
|
2
10
|
|
|
3
11
|
import * as React from "react"
|
|
4
|
-
import
|
|
12
|
+
import * as LabelPrimitive from "@radix-ui/react-label"
|
|
5
13
|
import { Slot } from "@radix-ui/react-slot"
|
|
6
14
|
import {
|
|
7
15
|
Controller,
|
|
8
16
|
FormProvider,
|
|
9
17
|
useFormContext,
|
|
10
|
-
useFormState,
|
|
11
18
|
type ControllerProps,
|
|
12
19
|
type FieldPath,
|
|
13
20
|
type FieldValues,
|
|
@@ -20,18 +27,16 @@ const Form = FormProvider
|
|
|
20
27
|
|
|
21
28
|
type FormFieldContextValue<
|
|
22
29
|
TFieldValues extends FieldValues = FieldValues,
|
|
23
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues
|
|
30
|
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
|
|
24
31
|
> = {
|
|
25
32
|
name: TName
|
|
26
33
|
}
|
|
27
34
|
|
|
28
|
-
const FormFieldContext = React.createContext<FormFieldContextValue>(
|
|
29
|
-
{} as FormFieldContextValue
|
|
30
|
-
)
|
|
35
|
+
const FormFieldContext = React.createContext<FormFieldContextValue | null>(null)
|
|
31
36
|
|
|
32
37
|
const FormField = <
|
|
33
38
|
TFieldValues extends FieldValues = FieldValues,
|
|
34
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues
|
|
39
|
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
|
|
35
40
|
>({
|
|
36
41
|
...props
|
|
37
42
|
}: ControllerProps<TFieldValues, TName>) => {
|
|
@@ -45,14 +50,18 @@ const FormField = <
|
|
|
45
50
|
const useFormField = () => {
|
|
46
51
|
const fieldContext = React.useContext(FormFieldContext)
|
|
47
52
|
const itemContext = React.useContext(FormItemContext)
|
|
48
|
-
const { getFieldState } = useFormContext()
|
|
49
|
-
const formState = useFormState({ name: fieldContext.name })
|
|
50
|
-
const fieldState = getFieldState(fieldContext.name, formState)
|
|
53
|
+
const { getFieldState, formState } = useFormContext()
|
|
51
54
|
|
|
52
55
|
if (!fieldContext) {
|
|
53
56
|
throw new Error("useFormField should be used within <FormField>")
|
|
54
57
|
}
|
|
55
58
|
|
|
59
|
+
if (!itemContext) {
|
|
60
|
+
throw new Error("useFormField should be used within <FormItem>")
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const fieldState = getFieldState(fieldContext.name, formState)
|
|
64
|
+
|
|
56
65
|
const { id } = itemContext
|
|
57
66
|
|
|
58
67
|
return {
|
|
@@ -69,47 +78,48 @@ type FormItemContextValue = {
|
|
|
69
78
|
id: string
|
|
70
79
|
}
|
|
71
80
|
|
|
72
|
-
const FormItemContext = React.createContext<FormItemContextValue>(
|
|
73
|
-
{} as FormItemContextValue
|
|
74
|
-
)
|
|
81
|
+
const FormItemContext = React.createContext<FormItemContextValue | null>(null)
|
|
75
82
|
|
|
76
|
-
|
|
83
|
+
const FormItem = React.forwardRef<
|
|
84
|
+
HTMLDivElement,
|
|
85
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
86
|
+
>(({ className, ...props }, ref) => {
|
|
77
87
|
const id = React.useId()
|
|
78
88
|
|
|
79
89
|
return (
|
|
80
90
|
<FormItemContext.Provider value={{ id }}>
|
|
81
|
-
<div
|
|
82
|
-
data-slot="form-item"
|
|
83
|
-
className={cn("grid gap-2", className)}
|
|
84
|
-
{...props}
|
|
85
|
-
/>
|
|
91
|
+
<div ref={ref} className={cn("space-y-2", className)} {...props} />
|
|
86
92
|
</FormItemContext.Provider>
|
|
87
93
|
)
|
|
88
|
-
}
|
|
94
|
+
})
|
|
95
|
+
FormItem.displayName = "FormItem"
|
|
89
96
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
97
|
+
const FormLabel = React.forwardRef<
|
|
98
|
+
React.ElementRef<typeof LabelPrimitive.Root>,
|
|
99
|
+
React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
|
|
100
|
+
>(({ className, ...props }, ref) => {
|
|
94
101
|
const { error, formItemId } = useFormField()
|
|
95
102
|
|
|
96
103
|
return (
|
|
97
104
|
<Label
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
className={cn("data-[error=true]:text-destructive", className)}
|
|
105
|
+
ref={ref}
|
|
106
|
+
className={cn(error && "text-destructive", className)}
|
|
101
107
|
htmlFor={formItemId}
|
|
102
108
|
{...props}
|
|
103
109
|
/>
|
|
104
110
|
)
|
|
105
|
-
}
|
|
111
|
+
})
|
|
112
|
+
FormLabel.displayName = "FormLabel"
|
|
106
113
|
|
|
107
|
-
|
|
114
|
+
const FormControl = React.forwardRef<
|
|
115
|
+
React.ElementRef<typeof Slot>,
|
|
116
|
+
React.ComponentPropsWithoutRef<typeof Slot>
|
|
117
|
+
>(({ ...props }, ref) => {
|
|
108
118
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
|
|
109
119
|
|
|
110
120
|
return (
|
|
111
121
|
<Slot
|
|
112
|
-
|
|
122
|
+
ref={ref}
|
|
113
123
|
id={formItemId}
|
|
114
124
|
aria-describedby={
|
|
115
125
|
!error
|
|
@@ -120,24 +130,32 @@ function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
|
|
|
120
130
|
{...props}
|
|
121
131
|
/>
|
|
122
132
|
)
|
|
123
|
-
}
|
|
133
|
+
})
|
|
134
|
+
FormControl.displayName = "FormControl"
|
|
124
135
|
|
|
125
|
-
|
|
136
|
+
const FormDescription = React.forwardRef<
|
|
137
|
+
HTMLParagraphElement,
|
|
138
|
+
React.HTMLAttributes<HTMLParagraphElement>
|
|
139
|
+
>(({ className, ...props }, ref) => {
|
|
126
140
|
const { formDescriptionId } = useFormField()
|
|
127
141
|
|
|
128
142
|
return (
|
|
129
143
|
<p
|
|
130
|
-
|
|
144
|
+
ref={ref}
|
|
131
145
|
id={formDescriptionId}
|
|
132
|
-
className={cn("text-muted-foreground
|
|
146
|
+
className={cn("text-sm text-muted-foreground", className)}
|
|
133
147
|
{...props}
|
|
134
148
|
/>
|
|
135
149
|
)
|
|
136
|
-
}
|
|
150
|
+
})
|
|
151
|
+
FormDescription.displayName = "FormDescription"
|
|
137
152
|
|
|
138
|
-
|
|
153
|
+
const FormMessage = React.forwardRef<
|
|
154
|
+
HTMLParagraphElement,
|
|
155
|
+
React.HTMLAttributes<HTMLParagraphElement>
|
|
156
|
+
>(({ className, children, ...props }, ref) => {
|
|
139
157
|
const { error, formMessageId } = useFormField()
|
|
140
|
-
const body = error ? String(error?.message ?? "") :
|
|
158
|
+
const body = error ? String(error?.message ?? "") : children
|
|
141
159
|
|
|
142
160
|
if (!body) {
|
|
143
161
|
return null
|
|
@@ -145,15 +163,16 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
|
|
|
145
163
|
|
|
146
164
|
return (
|
|
147
165
|
<p
|
|
148
|
-
|
|
166
|
+
ref={ref}
|
|
149
167
|
id={formMessageId}
|
|
150
|
-
className={cn("text-
|
|
168
|
+
className={cn("text-sm font-medium text-destructive", className)}
|
|
151
169
|
{...props}
|
|
152
170
|
>
|
|
153
171
|
{body}
|
|
154
172
|
</p>
|
|
155
173
|
)
|
|
156
|
-
}
|
|
174
|
+
})
|
|
175
|
+
FormMessage.displayName = "FormMessage"
|
|
157
176
|
|
|
158
177
|
export {
|
|
159
178
|
useFormField,
|
package/src/ui/hover-card.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
|
"use client"
|
|
2
10
|
|
|
3
11
|
import * as React from "react"
|
|
@@ -5,40 +13,25 @@ import * as HoverCardPrimitive from "@radix-ui/react-hover-card"
|
|
|
5
13
|
|
|
6
14
|
import { cn } from "../lib/utils"
|
|
7
15
|
|
|
8
|
-
|
|
9
|
-
...props
|
|
10
|
-
}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
|
|
11
|
-
return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />
|
|
12
|
-
}
|
|
16
|
+
const HoverCard = HoverCardPrimitive.Root
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
...props
|
|
16
|
-
}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
|
|
17
|
-
return (
|
|
18
|
-
<HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />
|
|
19
|
-
)
|
|
20
|
-
}
|
|
18
|
+
const HoverCardTrigger = HoverCardPrimitive.Trigger
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
{...props}
|
|
39
|
-
/>
|
|
40
|
-
</HoverCardPrimitive.Portal>
|
|
41
|
-
)
|
|
42
|
-
}
|
|
20
|
+
const HoverCardContent = React.forwardRef<
|
|
21
|
+
React.ElementRef<typeof HoverCardPrimitive.Content>,
|
|
22
|
+
React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
|
|
23
|
+
>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
|
|
24
|
+
<HoverCardPrimitive.Content
|
|
25
|
+
ref={ref}
|
|
26
|
+
align={align}
|
|
27
|
+
sideOffset={sideOffset}
|
|
28
|
+
className={cn(
|
|
29
|
+
"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]",
|
|
30
|
+
className
|
|
31
|
+
)}
|
|
32
|
+
{...props}
|
|
33
|
+
/>
|
|
34
|
+
))
|
|
35
|
+
HoverCardContent.displayName = HoverCardPrimitive.Content.displayName
|
|
43
36
|
|
|
44
37
|
export { HoverCard, HoverCardTrigger, HoverCardContent }
|