@questpie/admin 2.0.0 → 3.0.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/README.md +119 -122
- package/dist/augmentation.d.mts +110 -11
- package/dist/client/blocks/block-renderer.d.mts +5 -12
- package/dist/client/blocks/block-renderer.mjs +89 -55
- package/dist/client/blocks/index.d.mts +2 -4
- package/dist/client/blocks/types.d.mts +3 -4
- package/dist/client/blocks/types.mjs +1 -2
- package/dist/client/builder/admin-types.d.mts +11 -44
- package/dist/client/builder/admin.d.mts +34 -45
- package/dist/client/builder/admin.mjs +35 -44
- package/dist/client/builder/field/field.d.mts +27 -205
- package/dist/client/builder/field/field.mjs +22 -68
- package/dist/client/builder/index.d.mts +23 -28
- package/dist/client/builder/page/page.d.mts +15 -27
- package/dist/client/builder/page/page.mjs +21 -17
- package/dist/client/builder/registry.d.mts +14 -34
- package/dist/client/builder/types/action-registry.mjs +148 -14
- package/dist/client/builder/types/action-types.d.mts +8 -35
- package/dist/client/builder/types/collection-types.mjs +1 -2
- package/dist/client/builder/types/common.d.mts +6 -20
- package/dist/client/builder/types/field-types.d.mts +4 -5
- package/dist/client/builder/types/field-types.mjs +1 -2
- package/dist/client/builder/types/ui-config.d.mts +3 -5
- package/dist/client/builder/types/widget-types.d.mts +19 -20
- package/dist/client/builder/validation.d.mts +33 -3
- package/dist/client/builder/validation.mjs +169 -150
- package/dist/client/builder/view/view.d.mts +26 -106
- package/dist/client/builder/view/view.mjs +14 -96
- package/dist/client/builder/widget/widget.d.mts +16 -22
- package/dist/client/builder/widget/widget.mjs +11 -16
- package/dist/client/components/actions/action-button.mjs +207 -97
- package/dist/client/components/actions/action-dialog.mjs +471 -176
- package/dist/client/components/actions/confirmation-dialog.mjs +166 -47
- package/dist/client/components/actions/header-actions.mjs +164 -71
- package/dist/client/components/admin-link.d.mts +8 -9
- package/dist/client/components/admin-link.mjs +127 -48
- package/dist/client/components/auth/auth-guard.d.mts +6 -7
- package/dist/client/components/auth/auth-guard.mjs +9 -9
- package/dist/client/components/auth/auth-loading.d.mts +3 -4
- package/dist/client/components/auth/auth-loading.mjs +38 -10
- package/dist/client/components/blocks/block-canvas.mjs +111 -42
- package/dist/client/components/blocks/block-editor-context.mjs +90 -23
- package/dist/client/components/blocks/block-editor-layout.mjs +176 -59
- package/dist/client/components/blocks/block-editor-provider.mjs +219 -139
- package/dist/client/components/blocks/block-fields-renderer.mjs +212 -42
- package/dist/client/components/blocks/block-insert-button.mjs +168 -51
- package/dist/client/components/blocks/block-item-menu.mjs +312 -110
- package/dist/client/components/blocks/block-item.mjs +372 -125
- package/dist/client/components/blocks/block-library-sidebar.mjs +209 -114
- package/dist/client/components/blocks/block-tree.mjs +73 -15
- package/dist/client/components/blocks/block-type-icon.mjs +65 -20
- package/dist/client/components/blocks/utils/tree-utils.mjs +1 -2
- package/dist/client/components/component-renderer.d.mts +11 -22
- package/dist/client/components/component-renderer.mjs +151 -38
- package/dist/client/components/error-boundary.mjs +77 -25
- package/dist/client/components/fields/array-field.mjs +474 -199
- package/dist/client/components/fields/asset-preview-field.mjs +143 -44
- package/dist/client/components/fields/blocks-field/blocks-field.mjs +143 -35
- package/dist/client/components/fields/boolean-field.mjs +62 -32
- package/dist/client/components/fields/date-field.mjs +46 -12
- package/dist/client/components/fields/datetime-field.mjs +42 -11
- package/dist/client/components/fields/email-field.mjs +57 -28
- package/dist/client/components/fields/field-utils.mjs +1 -2
- package/dist/client/components/fields/field-wrapper.mjs +107 -32
- package/dist/client/components/fields/json-field.mjs +323 -110
- package/dist/client/components/fields/locale-badge.mjs +16 -8
- package/dist/client/components/fields/number-field.mjs +63 -30
- package/dist/client/components/fields/object-array-field.mjs +666 -272
- package/dist/client/components/fields/object-field.mjs +656 -98
- package/dist/client/components/fields/relation/displays/cards-display.mjs +225 -111
- package/dist/client/components/fields/relation/displays/chips-display.mjs +150 -77
- package/dist/client/components/fields/relation/displays/grid-display.mjs +186 -91
- package/dist/client/components/fields/relation/displays/list-display.mjs +230 -111
- package/dist/client/components/fields/relation/displays/table-display.mjs +241 -66
- package/dist/client/components/fields/relation/displays/types.mjs +2 -3
- package/dist/client/components/fields/relation/relation-items-display.mjs +131 -35
- package/dist/client/components/fields/relation-field.mjs +70 -15
- package/dist/client/components/fields/relation-picker.mjs +93 -98
- package/dist/client/components/fields/relation-select.mjs +42 -29
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +90 -41
- package/dist/client/components/fields/rich-text-editor/extensions.mjs +33 -7
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs +48 -23
- package/dist/client/components/fields/rich-text-editor/index.mjs +491 -158
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs +13 -14
- package/dist/client/components/fields/rich-text-editor/presets.mjs +1 -2
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +96 -53
- package/dist/client/components/fields/rich-text-editor/table-controls.mjs +416 -107
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs +476 -215
- package/dist/client/components/fields/rich-text-editor/types.mjs +1 -2
- package/dist/client/components/fields/rich-text-editor/utils.mjs +1 -2
- package/dist/client/components/fields/rich-text-field.mjs +55 -17
- package/dist/client/components/fields/select-field.mjs +79 -44
- package/dist/client/components/fields/text-field.mjs +62 -29
- package/dist/client/components/fields/textarea-field.mjs +61 -29
- package/dist/client/components/fields/time-field.mjs +39 -11
- package/dist/client/components/fields/upload-field.mjs +253 -129
- package/dist/client/components/filter-builder/columns-tab.mjs +287 -93
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs +437 -138
- package/dist/client/components/filter-builder/filters-tab.mjs +409 -126
- package/dist/client/components/filter-builder/saved-views-tab.mjs +259 -106
- package/dist/client/components/history-sidebar.mjs +496 -0
- package/dist/client/components/layout/field-layout-renderer.mjs +301 -0
- package/dist/client/components/locale-switcher.mjs +231 -108
- package/dist/client/components/media/media-grid.mjs +259 -84
- package/dist/client/components/media/media-picker-dialog.mjs +500 -192
- package/dist/client/components/preview/live-preview-mode.mjs +416 -124
- package/dist/client/components/preview/preview-pane.mjs +353 -144
- package/dist/client/components/primitives/asset-preview.mjs +665 -257
- package/dist/client/components/primitives/checkbox-input.mjs +37 -11
- package/dist/client/components/primitives/date-input.mjs +392 -149
- package/dist/client/components/primitives/dropzone.mjs +314 -185
- package/dist/client/components/primitives/number-input.mjs +14 -10
- package/dist/client/components/primitives/select-multi.mjs +519 -185
- package/dist/client/components/primitives/select-single.mjs +416 -126
- package/dist/client/components/primitives/text-input.mjs +10 -5
- package/dist/client/components/primitives/textarea-input.mjs +10 -5
- package/dist/client/components/primitives/time-input.mjs +118 -45
- package/dist/client/components/primitives/toggle-input.mjs +31 -11
- package/dist/client/components/primitives/types.mjs +1 -2
- package/dist/client/components/sheets/resource-sheet.mjs +72 -64
- package/dist/client/components/ui/accordion.mjs +156 -37
- package/dist/client/components/ui/alert.mjs +70 -17
- package/dist/client/components/ui/badge.mjs +57 -16
- package/dist/client/components/ui/button.mjs +49 -14
- package/dist/client/components/ui/card.mjs +194 -39
- package/dist/client/components/ui/checkbox.mjs +71 -16
- package/dist/client/components/ui/command.mjs +220 -50
- package/dist/client/components/ui/dialog.mjs +265 -52
- package/dist/client/components/ui/drawer.mjs +260 -57
- package/dist/client/components/ui/dropdown-menu.mjs +293 -67
- package/dist/client/components/ui/empty-state.mjs +72 -26
- package/dist/client/components/ui/field.mjs +332 -56
- package/dist/client/components/ui/input-group.mjs +174 -41
- package/dist/client/components/ui/input.mjs +38 -9
- package/dist/client/components/ui/kbd.mjs +37 -8
- package/dist/client/components/ui/label.mjs +38 -8
- package/dist/client/components/ui/popover.mjs +162 -35
- package/dist/client/components/ui/responsive-dialog.mjs +277 -71
- package/dist/client/components/ui/search-input.mjs +101 -36
- package/dist/client/components/ui/select.mjs +297 -57
- package/dist/client/components/ui/separator.mjs +39 -9
- package/dist/client/components/ui/sheet.mjs +253 -51
- package/dist/client/components/ui/sidebar.mjs +700 -182
- package/dist/client/components/ui/skeleton.mjs +33 -8
- package/dist/client/components/ui/sonner.d.mts +2 -3
- package/dist/client/components/ui/sonner.mjs +45 -15
- package/dist/client/components/ui/spinner.mjs +44 -10
- package/dist/client/components/ui/switch.mjs +47 -12
- package/dist/client/components/ui/table.mjs +260 -50
- package/dist/client/components/ui/tabs.mjs +140 -29
- package/dist/client/components/ui/textarea.mjs +33 -8
- package/dist/client/components/ui/toolbar.mjs +105 -23
- package/dist/client/components/ui/tooltip.mjs +130 -29
- package/dist/client/components/widgets/chart-widget.mjs +456 -156
- package/dist/client/components/widgets/progress-widget.mjs +150 -60
- package/dist/client/components/widgets/quick-actions-widget.mjs +175 -87
- package/dist/client/components/widgets/recent-items-widget.mjs +157 -62
- package/dist/client/components/widgets/stats-widget.mjs +153 -42
- package/dist/client/components/widgets/table-widget.mjs +198 -64
- package/dist/client/components/widgets/timeline-widget.mjs +193 -82
- package/dist/client/components/widgets/value-widget.mjs +257 -56
- package/dist/client/components/widgets/widget-skeletons.mjs +390 -108
- package/dist/client/contexts/breadcrumb-context.mjs +44 -16
- package/dist/client/{context → contexts}/focus-context.d.mts +6 -7
- package/dist/client/{context → contexts}/focus-context.mjs +134 -62
- package/dist/client/hooks/typed-hooks.d.mts +38 -12
- package/dist/client/hooks/typed-hooks.mjs +758 -142
- package/dist/client/hooks/use-action.mjs +197 -69
- package/dist/client/hooks/use-admin-config.mjs +39 -10
- package/dist/client/hooks/use-admin-preferences.mjs +118 -15
- package/dist/client/hooks/use-admin-routes.mjs +60 -27
- package/dist/client/hooks/use-audit-history.mjs +157 -0
- package/dist/client/hooks/use-auth.d.mts +14 -15
- package/dist/client/hooks/use-auth.mjs +8 -9
- package/dist/client/hooks/use-collection-fields.mjs +58 -19
- package/dist/client/hooks/use-collection-meta.mjs +45 -13
- package/dist/client/hooks/use-collection-schema.mjs +34 -11
- package/dist/client/hooks/use-collection-validation.mjs +39 -25
- package/dist/client/hooks/use-collection.d.mts +18 -8
- package/dist/client/hooks/use-collection.mjs +560 -101
- package/dist/client/hooks/use-current-user.d.mts +6 -3
- package/dist/client/hooks/use-current-user.mjs +2 -2
- package/dist/client/hooks/use-field-hooks.mjs +73 -65
- package/dist/client/hooks/use-field-options.d.mts +1 -34
- package/dist/client/hooks/use-field-options.mjs +233 -148
- package/dist/client/hooks/use-global-fields.mjs +47 -16
- package/dist/client/hooks/use-global-meta.mjs +57 -11
- package/dist/client/hooks/use-global-schema.mjs +31 -11
- package/dist/client/hooks/use-global.d.mts +13 -2
- package/dist/client/hooks/use-global.mjs +244 -34
- package/dist/client/hooks/use-locks.mjs +331 -124
- package/dist/client/hooks/use-media-query.d.mts +1 -2
- package/dist/client/hooks/use-media-query.mjs +38 -19
- package/dist/client/hooks/use-prefill-params.mjs +2 -2
- package/dist/client/hooks/use-questpie-query-options.mjs +33 -11
- package/dist/client/hooks/use-reactive-fields.d.mts +6 -3
- package/dist/client/hooks/use-reactive-fields.mjs +130 -93
- package/dist/client/hooks/use-realtime-highlight.mjs +115 -53
- package/dist/client/hooks/use-saved-views.mjs +109 -34
- package/dist/client/hooks/use-search-param-toggle.d.mts +12 -0
- package/dist/client/hooks/use-search-param-toggle.mjs +115 -0
- package/dist/client/hooks/use-search.mjs +147 -36
- package/dist/client/hooks/use-server-actions.mjs +191 -0
- package/dist/client/hooks/use-server-validation.mjs +164 -72
- package/dist/client/hooks/use-server-widget-data.d.mts +2 -3
- package/dist/client/hooks/use-server-widget-data.mjs +36 -11
- package/dist/client/hooks/use-setup-status.d.mts +3 -4
- package/dist/client/hooks/use-setup-status.mjs +28 -16
- package/dist/client/hooks/use-sidebar-search-param.d.mts +9 -0
- package/dist/client/hooks/use-sidebar-search-param.mjs +104 -0
- package/dist/client/hooks/use-transition-stage.mjs +125 -0
- package/dist/client/hooks/use-upload-collection.mjs +1 -2
- package/dist/client/hooks/use-upload.mjs +189 -125
- package/dist/client/hooks/use-validation-error-map.mjs +10 -6
- package/dist/client/hooks/use-view-state.mjs +380 -162
- package/dist/client/i18n/hooks.mjs +191 -67
- package/dist/client/i18n/intl-cache.mjs +1 -2
- package/dist/client/i18n/messages.mjs +1 -2
- package/dist/client/i18n/simple.d.mts +1 -2
- package/dist/client/i18n/simple.mjs +1 -2
- package/dist/client/i18n/types.d.mts +1 -2
- package/dist/client/lib/cookies.mjs +9 -0
- package/dist/client/lib/events.mjs +5 -0
- package/dist/client/lib/render-profiler.mjs +51 -0
- package/dist/client/lib/utils.mjs +1 -6
- package/dist/client/preview/block-scope-context.d.mts +5 -6
- package/dist/client/preview/block-scope-context.mjs +50 -27
- package/dist/client/preview/index.d.mts +2 -2
- package/dist/client/preview/preview-banner.d.mts +3 -4
- package/dist/client/preview/preview-banner.mjs +74 -35
- package/dist/client/preview/preview-field.d.mts +9 -10
- package/dist/client/preview/preview-field.mjs +163 -61
- package/dist/client/preview/types.d.mts +1 -2
- package/dist/client/preview/types.mjs +1 -2
- package/dist/client/preview/use-collection-preview.d.mts +1 -2
- package/dist/client/preview/use-collection-preview.mjs +105 -56
- package/dist/client/runtime/content-locales-provider.mjs +87 -36
- package/dist/client/runtime/index.d.mts +1 -3
- package/dist/client/runtime/index.mjs +1 -3
- package/dist/client/runtime/locale-scope.mjs +69 -29
- package/dist/client/runtime/provider.d.mts +18 -9922
- package/dist/client/runtime/provider.mjs +250 -86
- package/dist/client/runtime/routes.d.mts +7 -7
- package/dist/client/runtime/routes.mjs +4 -20
- package/dist/client/runtime/translations-provider.mjs +114 -53
- package/dist/client/scope/picker.d.mts +3 -4
- package/dist/client/scope/picker.mjs +324 -90
- package/dist/client/scope/provider.d.mts +4 -5
- package/dist/client/scope/provider.mjs +30 -22
- package/dist/client/scope/types.d.mts +1 -2
- package/dist/client/styles/index.css +301 -225
- package/dist/client/utils/auto-expand-fields.mjs +23 -5
- package/dist/client/utils/build-field-definitions-from-schema.mjs +10 -7
- package/dist/client/utils/dependency-tracker.mjs +61 -0
- package/dist/client/utils/detect-relations.mjs +1 -2
- package/dist/client/utils/locale-to-flag.d.mts +8 -7
- package/dist/client/utils/locale-to-flag.mjs +1 -2
- package/dist/client/utils/routes.mjs +1 -2
- package/dist/client/views/auth/accept-invite-form.d.mts +3 -4
- package/dist/client/views/auth/accept-invite-form.mjs +414 -121
- package/dist/client/views/auth/auth-layout.d.mts +7 -8
- package/dist/client/views/auth/auth-layout.mjs +93 -30
- package/dist/client/views/auth/forgot-password-form.d.mts +4 -5
- package/dist/client/views/auth/forgot-password-form.mjs +332 -100
- package/dist/client/views/auth/invite-form.mjs +447 -105
- package/dist/client/views/auth/login-form.d.mts +4 -5
- package/dist/client/views/auth/login-form.mjs +340 -120
- package/dist/client/views/auth/reset-password-form.d.mts +4 -5
- package/dist/client/views/auth/reset-password-form.mjs +458 -131
- package/dist/client/views/auth/setup-form.d.mts +4 -5
- package/dist/client/views/auth/setup-form.mjs +481 -141
- package/dist/client/views/collection/auto-form-fields.mjs +686 -266
- package/dist/client/views/collection/bulk-action-toolbar.mjs +392 -203
- package/dist/client/views/collection/cells/complex-cells.mjs +635 -216
- package/dist/client/views/collection/cells/primitive-cells.mjs +332 -102
- package/dist/client/views/collection/cells/relation-cells.mjs +227 -72
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +456 -136
- package/dist/client/views/collection/cells/shared/cell-helpers.mjs +49 -2
- package/dist/client/views/collection/cells/shared/relation-chip.mjs +109 -25
- package/dist/client/views/collection/cells/upload-cells.mjs +16 -8
- package/dist/client/views/collection/columns/build-columns.mjs +51 -12
- package/dist/client/views/collection/columns/column-defaults.mjs +17 -2
- package/dist/client/views/collection/field-context.mjs +10 -11
- package/dist/client/views/collection/field-renderer.mjs +237 -40
- package/dist/client/views/collection/form-view.mjs +1108 -445
- package/dist/client/views/collection/table-view.mjs +300 -163
- package/dist/client/views/collection/view-skeletons.mjs +181 -87
- package/dist/client/views/common/global-search.mjs +557 -233
- package/dist/client/views/dashboard/dashboard-grid.mjs +707 -211
- package/dist/client/views/dashboard/dashboard-widget.mjs +145 -58
- package/dist/client/views/dashboard/widget-card.mjs +315 -102
- package/dist/client/views/globals/global-form-view.mjs +1256 -131
- package/dist/client/views/layout/admin-layout-provider.d.mts +18 -21
- package/dist/client/views/layout/admin-layout-provider.mjs +135 -32
- package/dist/client/views/layout/admin-layout.d.mts +14 -32
- package/dist/client/views/layout/admin-layout.mjs +254 -96
- package/dist/client/views/layout/admin-router.d.mts +10 -42
- package/dist/client/views/layout/admin-router.mjs +1086 -426
- package/dist/client/views/layout/admin-sidebar.d.mts +10 -16
- package/dist/client/views/layout/admin-sidebar.mjs +1211 -382
- package/dist/client/views/layout/admin-topbar.mjs +220 -112
- package/dist/client/views/pages/accept-invite-page.d.mts +5 -6
- package/dist/client/views/pages/accept-invite-page.mjs +302 -96
- package/dist/client/views/pages/dashboard-page.d.mts +7 -16
- package/dist/client/views/pages/dashboard-page.mjs +62 -23
- package/dist/client/views/pages/forgot-password-page.d.mts +7 -10
- package/dist/client/views/pages/forgot-password-page.mjs +112 -40
- package/dist/client/views/pages/invite-page.d.mts +6 -7
- package/dist/client/views/pages/invite-page.mjs +121 -46
- package/dist/client/views/pages/login-page.d.mts +8 -15
- package/dist/client/views/pages/login-page.mjs +152 -57
- package/dist/client/views/pages/reset-password-page.d.mts +7 -10
- package/dist/client/views/pages/reset-password-page.mjs +209 -57
- package/dist/client/views/pages/setup-page.d.mts +7 -10
- package/dist/client/views/pages/setup-page.mjs +108 -43
- package/dist/client-module.d.mts +3 -0
- package/dist/client-module.mjs +3 -0
- package/dist/client.d.mts +55 -48
- package/dist/client.mjs +26 -28
- package/dist/components/rich-text/rich-text-renderer.d.mts +3 -4
- package/dist/components/rich-text/rich-text-renderer.mjs +97 -70
- package/dist/index.d.mts +36 -39
- package/dist/index.mjs +26 -28
- package/dist/plugin.d.mts +2 -0
- package/dist/plugin.mjs +3 -0
- package/dist/server/adapters/nextjs.d.mts +13 -14
- package/dist/server/adapters/nextjs.mjs +12 -13
- package/dist/server/adapters/tanstack.d.mts +10 -11
- package/dist/server/adapters/tanstack.mjs +11 -12
- package/dist/server/augmentation/actions.d.mts +279 -0
- package/dist/server/augmentation/common.d.mts +76 -0
- package/dist/server/augmentation/dashboard.d.mts +547 -0
- package/dist/server/augmentation/form-layout.d.mts +303 -0
- package/dist/server/augmentation/index.d.mts +44 -0
- package/dist/server/augmentation/index.mjs +10 -0
- package/dist/server/augmentation/sidebar.d.mts +181 -0
- package/dist/server/augmentation/views.d.mts +237 -0
- package/dist/server/augmentation.d.mts +7 -1523
- package/dist/server/block/index.d.mts +4 -3
- package/dist/server/codegen/admin-client-template.mjs +93 -0
- package/dist/server/codegen/projection-validator.mjs +67 -0
- package/dist/server/fields/blocks.d.mts +10 -78
- package/dist/server/fields/blocks.mjs +74 -115
- package/dist/server/fields/index.d.mts +6 -39
- package/dist/server/fields/index.mjs +6 -7
- package/dist/server/fields/rich-text.d.mts +10 -77
- package/dist/server/fields/rich-text.mjs +59 -100
- package/dist/server/i18n/index.mjs +8 -9
- package/dist/server/i18n/messages/cs.mjs +3 -3
- package/dist/server/i18n/messages/de.mjs +3 -3
- package/dist/server/i18n/messages/en.mjs +217 -3
- package/dist/server/i18n/messages/es.mjs +3 -3
- package/dist/server/i18n/messages/fr.mjs +3 -3
- package/dist/server/i18n/messages/index.mjs +1 -2
- package/dist/server/i18n/messages/pl.mjs +3 -3
- package/dist/server/i18n/messages/pt.mjs +3 -3
- package/dist/server/i18n/messages/sk.mjs +202 -3
- package/dist/server/modules/admin/.generated/module.d.mts +52 -0
- package/dist/server/modules/admin/.generated/module.mjs +78 -0
- package/dist/server/modules/admin/.generated/registries.d.mts +22 -0
- package/dist/server/{auth-helpers.d.mts → modules/admin/auth-helpers.d.mts} +13 -14
- package/dist/server/{auth-helpers.mjs → modules/admin/auth-helpers.mjs} +15 -16
- package/dist/server/{block → modules/admin/block}/block-builder.d.mts +96 -32
- package/dist/server/{block → modules/admin/block}/block-builder.mjs +113 -15
- package/dist/server/modules/admin/block/index.d.mts +3 -0
- package/dist/server/{block → modules/admin/block}/introspection.d.mts +10 -5
- package/dist/server/{block → modules/admin/block}/introspection.mjs +18 -7
- package/dist/server/{block → modules/admin/block}/prefetch.d.mts +17 -17
- package/dist/server/{block → modules/admin/block}/prefetch.mjs +17 -16
- package/dist/server/modules/admin/client/.generated/module.d.mts +94 -0
- package/dist/server/modules/admin/client/.generated/module.mjs +91 -0
- package/dist/server/modules/admin/client/components/badge.d.mts +1 -0
- package/dist/server/modules/admin/client/components/icon.d.mts +1 -0
- package/dist/server/modules/admin/client/fields/array.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/array.mjs +12 -0
- package/dist/server/modules/admin/client/fields/assetPreview.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/assetPreview.mjs +18 -0
- package/dist/server/modules/admin/client/fields/blocks.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/blocks.mjs +12 -0
- package/dist/server/modules/admin/client/fields/boolean.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/boolean.mjs +12 -0
- package/dist/server/modules/admin/client/fields/date.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/date.mjs +12 -0
- package/dist/server/modules/admin/client/fields/datetime.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/datetime.mjs +12 -0
- package/dist/server/modules/admin/client/fields/email.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/email.mjs +12 -0
- package/dist/server/modules/admin/client/fields/json.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/json.mjs +11 -0
- package/dist/server/modules/admin/client/fields/number.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/number.mjs +12 -0
- package/dist/server/modules/admin/client/fields/object.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/object.mjs +12 -0
- package/dist/server/modules/admin/client/fields/relation.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/relation.mjs +12 -0
- package/dist/server/modules/admin/client/fields/richText.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/richText.mjs +11 -0
- package/dist/server/modules/admin/client/fields/select.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/select.mjs +12 -0
- package/dist/server/modules/admin/client/fields/text.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/text.mjs +12 -0
- package/dist/server/modules/admin/client/fields/textarea.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/textarea.mjs +12 -0
- package/dist/server/modules/admin/client/fields/time.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/time.mjs +12 -0
- package/dist/server/modules/admin/client/fields/upload.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/upload.mjs +12 -0
- package/dist/server/modules/admin/client/fields/url.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/url.mjs +12 -0
- package/dist/server/modules/admin/client/index.d.mts +1 -0
- package/dist/server/modules/admin/client/pages/dashboard.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/dashboard.mjs +11 -0
- package/dist/server/modules/admin/client/pages/forgotPassword.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/forgotPassword.mjs +11 -0
- package/dist/server/modules/admin/client/pages/login.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/login.mjs +11 -0
- package/dist/server/modules/admin/client/pages/resetPassword.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/resetPassword.mjs +11 -0
- package/dist/server/modules/admin/client/pages/setup.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/setup.mjs +11 -0
- package/dist/server/modules/admin/client/views/collection-form.mjs +10 -0
- package/dist/server/modules/admin/client/views/collection-table.mjs +10 -0
- package/dist/server/modules/admin/client/views/global-form.mjs +10 -0
- package/dist/server/modules/admin/client/widgets/chart.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/chart.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/progress.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/progress.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/quickActions.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/quickActions.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/recentItems.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/recentItems.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/stats.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/stats.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/table.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/table.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/timeline.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/timeline.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/value.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/value.mjs +7 -0
- package/dist/server/modules/admin/collections/account.d.mts +77 -0
- package/dist/server/modules/admin/collections/account.mjs +23 -0
- package/dist/server/modules/admin/collections/admin-locks.d.mts +90 -0
- package/dist/server/modules/admin/collections/admin-locks.mjs +16 -0
- package/dist/server/modules/admin/collections/admin-preferences.d.mts +69 -0
- package/dist/server/modules/admin/collections/admin-preferences.mjs +16 -0
- package/dist/server/modules/admin/collections/admin-saved-views.d.mts +83 -0
- package/dist/server/modules/admin/collections/admin-saved-views.mjs +16 -0
- package/dist/server/modules/admin/collections/apikey.d.mts +99 -0
- package/dist/server/modules/admin/collections/apikey.mjs +15 -0
- package/dist/server/modules/admin/collections/assets.d.mts +72 -0
- package/dist/server/modules/admin/collections/assets.mjs +71 -0
- package/dist/server/modules/admin/collections/session.d.mts +69 -0
- package/dist/server/modules/admin/collections/session.mjs +15 -0
- package/dist/server/modules/admin/collections/user.d.mts +85 -0
- package/dist/server/modules/admin/collections/user.mjs +204 -0
- package/dist/server/modules/admin/collections/verification.d.mts +63 -0
- package/dist/server/modules/admin/collections/verification.mjs +15 -0
- package/dist/server/modules/admin/components/badge.d.mts +10 -0
- package/dist/server/modules/admin/components/badge.mjs +10 -0
- package/dist/server/modules/admin/components/icon.d.mts +9 -0
- package/dist/server/modules/admin/components/icon.mjs +11 -0
- package/dist/server/modules/admin/config/admin.mjs +34 -0
- package/dist/server/modules/admin/dto/admin-config.dto.mjs +102 -0
- package/dist/server/modules/admin/factories.mjs +172 -0
- package/dist/server/modules/admin/index.d.mts +1060 -16846
- package/dist/server/modules/admin/index.mjs +17 -240
- package/dist/server/modules/admin/modules.mjs +11 -0
- package/dist/server/modules/admin/plugin.mjs +13 -0
- package/dist/server/modules/admin/routes/admin-config.d.mts +28 -0
- package/dist/server/modules/admin/routes/admin-config.mjs +552 -0
- package/dist/server/modules/admin/{functions → routes}/execute-action.d.mts +17 -32
- package/dist/server/modules/admin/{functions → routes}/execute-action.mjs +146 -44
- package/dist/server/modules/admin/routes/locales.d.mts +18 -0
- package/dist/server/modules/admin/routes/locales.mjs +69 -0
- package/dist/server/modules/admin/{functions → routes}/preview.d.mts +25 -15
- package/dist/server/modules/admin/{functions → routes}/preview.mjs +84 -97
- package/dist/server/modules/admin/{functions → routes}/reactive.d.mts +19 -44
- package/dist/server/modules/admin/{functions → routes}/reactive.mjs +89 -117
- package/dist/server/modules/admin/routes/route-helpers.d.mts +23 -0
- package/dist/server/modules/admin/routes/route-helpers.mjs +76 -0
- package/dist/server/modules/admin/{functions → routes}/setup.d.mts +11 -32
- package/dist/server/modules/admin/routes/setup.mjs +114 -0
- package/dist/server/modules/admin/routes/translations.d.mts +26 -0
- package/dist/server/modules/admin/routes/translations.mjs +114 -0
- package/dist/server/modules/admin/routes/widget-data.d.mts +32 -0
- package/dist/server/modules/admin/routes/widget-data.mjs +62 -0
- package/dist/server/modules/admin/views/form.d.mts +8 -0
- package/dist/server/modules/admin/views/form.mjs +7 -0
- package/dist/server/modules/admin/views/global-form.d.mts +8 -0
- package/dist/server/modules/admin/views/global-form.mjs +7 -0
- package/dist/server/modules/admin/views/table.d.mts +8 -0
- package/dist/server/modules/admin/views/table.mjs +7 -0
- package/dist/server/modules/admin-preferences/collections/{admin-preferences.collection.mjs → admin-preferences.mjs} +13 -24
- package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +18 -42
- package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +99 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.mjs +38 -0
- package/dist/server/modules/audit/.generated/module.d.mts +60 -0
- package/dist/server/modules/audit/.generated/module.mjs +30 -0
- package/dist/server/modules/audit/collections/audit-log.d.mts +214 -0
- package/dist/server/modules/audit/collections/audit-log.mjs +107 -0
- package/dist/server/modules/audit/config/admin.mjs +21 -0
- package/dist/server/modules/audit/config/app.mjs +262 -0
- package/dist/server/modules/audit/index.d.mts +2 -0
- package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +13 -0
- package/dist/server/modules/audit/jobs/audit-cleanup.mjs +28 -0
- package/dist/server/plugin.d.mts +26 -0
- package/dist/server/plugin.mjs +385 -0
- package/dist/server/proxy-factories.d.mts +85 -0
- package/dist/server/proxy-factories.mjs +302 -0
- package/dist/server/registry-helpers.d.mts +83 -0
- package/dist/server/registry-helpers.mjs +104 -0
- package/dist/server.d.mts +30 -18
- package/dist/server.mjs +19 -16
- package/dist/shared/preview-utils.d.mts +2 -3
- package/dist/shared/preview-utils.mjs +2 -3
- package/dist/shared/types/saved-views.types.d.mts +2 -2
- package/package.json +50 -40
- package/skills/questpie-admin/SKILL.md +397 -0
- package/skills/questpie-admin/blocks/SKILL.md +305 -0
- package/skills/questpie-admin/custom-ui/SKILL.md +307 -0
- package/skills/questpie-admin/views/SKILL.md +442 -0
- package/dist/_virtual/rolldown_runtime.mjs +0 -18
- package/dist/augmentation.d.mts.map +0 -1
- package/dist/client/blocks/block-registry.d.mts +0 -199
- package/dist/client/blocks/block-registry.d.mts.map +0 -1
- package/dist/client/blocks/block-registry.mjs +0 -88
- package/dist/client/blocks/block-registry.mjs.map +0 -1
- package/dist/client/blocks/block-renderer.d.mts.map +0 -1
- package/dist/client/blocks/block-renderer.mjs.map +0 -1
- package/dist/client/blocks/prefetch.d.mts +0 -45
- package/dist/client/blocks/prefetch.d.mts.map +0 -1
- package/dist/client/blocks/prefetch.mjs +0 -26
- package/dist/client/blocks/prefetch.mjs.map +0 -1
- package/dist/client/blocks/types.d.mts.map +0 -1
- package/dist/client/blocks/types.mjs.map +0 -1
- package/dist/client/builder/admin-builder.d.mts +0 -112
- package/dist/client/builder/admin-builder.d.mts.map +0 -1
- package/dist/client/builder/admin-builder.mjs +0 -185
- package/dist/client/builder/admin-builder.mjs.map +0 -1
- package/dist/client/builder/admin-types.d.mts.map +0 -1
- package/dist/client/builder/admin.d.mts.map +0 -1
- package/dist/client/builder/admin.mjs.map +0 -1
- package/dist/client/builder/defaults/components.mjs +0 -20
- package/dist/client/builder/defaults/components.mjs.map +0 -1
- package/dist/client/builder/defaults/core.d.mts +0 -354
- package/dist/client/builder/defaults/core.d.mts.map +0 -1
- package/dist/client/builder/defaults/core.mjs +0 -49
- package/dist/client/builder/defaults/core.mjs.map +0 -1
- package/dist/client/builder/defaults/fields.mjs +0 -328
- package/dist/client/builder/defaults/fields.mjs.map +0 -1
- package/dist/client/builder/defaults/pages.mjs +0 -58
- package/dist/client/builder/defaults/pages.mjs.map +0 -1
- package/dist/client/builder/defaults/starter.d.mts +0 -351
- package/dist/client/builder/defaults/starter.d.mts.map +0 -1
- package/dist/client/builder/defaults/starter.mjs +0 -28
- package/dist/client/builder/defaults/starter.mjs.map +0 -1
- package/dist/client/builder/defaults/views.mjs +0 -27
- package/dist/client/builder/defaults/views.mjs.map +0 -1
- package/dist/client/builder/defaults/widgets.mjs +0 -31
- package/dist/client/builder/defaults/widgets.mjs.map +0 -1
- package/dist/client/builder/field/field.d.mts.map +0 -1
- package/dist/client/builder/field/field.mjs.map +0 -1
- package/dist/client/builder/index.d.mts.map +0 -1
- package/dist/client/builder/page/page.d.mts.map +0 -1
- package/dist/client/builder/page/page.mjs.map +0 -1
- package/dist/client/builder/proxies.d.mts +0 -2
- package/dist/client/builder/proxies.mjs +0 -24
- package/dist/client/builder/proxies.mjs.map +0 -1
- package/dist/client/builder/qa.d.mts +0 -50
- package/dist/client/builder/qa.d.mts.map +0 -1
- package/dist/client/builder/qa.mjs +0 -42
- package/dist/client/builder/qa.mjs.map +0 -1
- package/dist/client/builder/registry.d.mts.map +0 -1
- package/dist/client/builder/types/action-registry.d.mts +0 -2
- package/dist/client/builder/types/action-registry.mjs.map +0 -1
- package/dist/client/builder/types/action-types.d.mts.map +0 -1
- package/dist/client/builder/types/collection-types.d.mts +0 -199
- package/dist/client/builder/types/collection-types.d.mts.map +0 -1
- package/dist/client/builder/types/collection-types.mjs.map +0 -1
- package/dist/client/builder/types/common.d.mts.map +0 -1
- package/dist/client/builder/types/field-types.d.mts.map +0 -1
- package/dist/client/builder/types/field-types.mjs.map +0 -1
- package/dist/client/builder/types/global-types.d.mts +0 -22
- package/dist/client/builder/types/global-types.d.mts.map +0 -1
- package/dist/client/builder/types/ui-config.d.mts.map +0 -1
- package/dist/client/builder/types/views.d.mts +0 -89
- package/dist/client/builder/types/views.d.mts.map +0 -1
- package/dist/client/builder/types/widget-types.d.mts.map +0 -1
- package/dist/client/builder/validation.mjs.map +0 -1
- package/dist/client/builder/view/view.d.mts.map +0 -1
- package/dist/client/builder/view/view.mjs.map +0 -1
- package/dist/client/builder/widget/widget.d.mts.map +0 -1
- package/dist/client/builder/widget/widget.mjs.map +0 -1
- package/dist/client/components/actions/action-button.d.mts +0 -2
- package/dist/client/components/actions/action-button.mjs.map +0 -1
- package/dist/client/components/actions/action-dialog.d.mts +0 -2
- package/dist/client/components/actions/action-dialog.mjs.map +0 -1
- package/dist/client/components/actions/confirmation-dialog.d.mts +0 -2
- package/dist/client/components/actions/confirmation-dialog.mjs.map +0 -1
- package/dist/client/components/actions/header-actions.d.mts +0 -2
- package/dist/client/components/actions/header-actions.mjs.map +0 -1
- package/dist/client/components/actions/index.d.mts +0 -4
- package/dist/client/components/admin-link.d.mts.map +0 -1
- package/dist/client/components/admin-link.mjs.map +0 -1
- package/dist/client/components/auth/auth-guard.d.mts.map +0 -1
- package/dist/client/components/auth/auth-guard.mjs.map +0 -1
- package/dist/client/components/auth/auth-loading.d.mts.map +0 -1
- package/dist/client/components/auth/auth-loading.mjs.map +0 -1
- package/dist/client/components/auth/index.d.mts +0 -2
- package/dist/client/components/blocks/block-canvas.mjs.map +0 -1
- package/dist/client/components/blocks/block-editor-context.mjs.map +0 -1
- package/dist/client/components/blocks/block-editor-layout.mjs.map +0 -1
- package/dist/client/components/blocks/block-editor-provider.mjs.map +0 -1
- package/dist/client/components/blocks/block-fields-renderer.mjs.map +0 -1
- package/dist/client/components/blocks/block-insert-button.mjs.map +0 -1
- package/dist/client/components/blocks/block-item-menu.mjs.map +0 -1
- package/dist/client/components/blocks/block-item.mjs.map +0 -1
- package/dist/client/components/blocks/block-library-sidebar.mjs.map +0 -1
- package/dist/client/components/blocks/block-tree.mjs.map +0 -1
- package/dist/client/components/blocks/block-type-icon.mjs.map +0 -1
- package/dist/client/components/blocks/utils/tree-utils.mjs.map +0 -1
- package/dist/client/components/component-renderer.d.mts.map +0 -1
- package/dist/client/components/component-renderer.mjs.map +0 -1
- package/dist/client/components/error-boundary.mjs.map +0 -1
- package/dist/client/components/fields/array-field.d.mts +0 -44
- package/dist/client/components/fields/array-field.d.mts.map +0 -1
- package/dist/client/components/fields/array-field.mjs.map +0 -1
- package/dist/client/components/fields/asset-preview-field.d.mts +0 -52
- package/dist/client/components/fields/asset-preview-field.d.mts.map +0 -1
- package/dist/client/components/fields/asset-preview-field.mjs.map +0 -1
- package/dist/client/components/fields/blocks-field/blocks-field.d.mts +0 -41
- package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +0 -1
- package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +0 -1
- package/dist/client/components/fields/blocks-field/index.d.mts +0 -1
- package/dist/client/components/fields/boolean-field.d.mts +0 -30
- package/dist/client/components/fields/boolean-field.d.mts.map +0 -1
- package/dist/client/components/fields/boolean-field.mjs.map +0 -1
- package/dist/client/components/fields/custom-field.d.mts +0 -3
- package/dist/client/components/fields/date-field.d.mts +0 -22
- package/dist/client/components/fields/date-field.d.mts.map +0 -1
- package/dist/client/components/fields/date-field.mjs.map +0 -1
- package/dist/client/components/fields/datetime-field.d.mts +0 -23
- package/dist/client/components/fields/datetime-field.d.mts.map +0 -1
- package/dist/client/components/fields/datetime-field.mjs.map +0 -1
- package/dist/client/components/fields/email-field.d.mts +0 -19
- package/dist/client/components/fields/email-field.d.mts.map +0 -1
- package/dist/client/components/fields/email-field.mjs.map +0 -1
- package/dist/client/components/fields/embedded-collection.d.mts +0 -3
- package/dist/client/components/fields/field-types.d.mts +0 -571
- package/dist/client/components/fields/field-types.d.mts.map +0 -1
- package/dist/client/components/fields/field-utils.d.mts +0 -1
- package/dist/client/components/fields/field-utils.mjs.map +0 -1
- package/dist/client/components/fields/field-wrapper.d.mts +0 -3
- package/dist/client/components/fields/field-wrapper.mjs.map +0 -1
- package/dist/client/components/fields/index.d.mts +0 -33
- package/dist/client/components/fields/json-field.d.mts +0 -84
- package/dist/client/components/fields/json-field.d.mts.map +0 -1
- package/dist/client/components/fields/json-field.mjs.map +0 -1
- package/dist/client/components/fields/locale-badge.d.mts +0 -1
- package/dist/client/components/fields/locale-badge.mjs.map +0 -1
- package/dist/client/components/fields/number-field.d.mts +0 -23
- package/dist/client/components/fields/number-field.d.mts.map +0 -1
- package/dist/client/components/fields/number-field.mjs.map +0 -1
- package/dist/client/components/fields/object-array-field.d.mts +0 -2
- package/dist/client/components/fields/object-array-field.mjs.map +0 -1
- package/dist/client/components/fields/object-field.d.mts +0 -32
- package/dist/client/components/fields/object-field.d.mts.map +0 -1
- package/dist/client/components/fields/object-field.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/cards-display.d.mts +0 -2
- package/dist/client/components/fields/relation/displays/cards-display.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/chips-display.d.mts +0 -2
- package/dist/client/components/fields/relation/displays/chips-display.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/grid-display.d.mts +0 -2
- package/dist/client/components/fields/relation/displays/grid-display.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/index.d.mts +0 -6
- package/dist/client/components/fields/relation/displays/list-display.d.mts +0 -2
- package/dist/client/components/fields/relation/displays/list-display.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/table-display.d.mts +0 -2
- package/dist/client/components/fields/relation/displays/table-display.mjs.map +0 -1
- package/dist/client/components/fields/relation/displays/types.d.mts +0 -22
- package/dist/client/components/fields/relation/displays/types.d.mts.map +0 -1
- package/dist/client/components/fields/relation/displays/types.mjs.map +0 -1
- package/dist/client/components/fields/relation/index.d.mts +0 -3
- package/dist/client/components/fields/relation/relation-items-display.d.mts +0 -5
- package/dist/client/components/fields/relation/relation-items-display.mjs.map +0 -1
- package/dist/client/components/fields/relation-field.d.mts +0 -134
- package/dist/client/components/fields/relation-field.d.mts.map +0 -1
- package/dist/client/components/fields/relation-field.mjs.map +0 -1
- package/dist/client/components/fields/relation-picker.d.mts +0 -4
- package/dist/client/components/fields/relation-picker.mjs.map +0 -1
- package/dist/client/components/fields/relation-select.d.mts +0 -3
- package/dist/client/components/fields/relation-select.mjs.map +0 -1
- package/dist/client/components/fields/reverse-relation-field.d.mts +0 -2
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/index.d.mts +0 -4
- package/dist/client/components/fields/rich-text-editor/index.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/presets.d.mts +0 -11
- package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +0 -1
- package/dist/client/components/fields/rich-text-editor/presets.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/types.d.mts +0 -78
- package/dist/client/components/fields/rich-text-editor/types.d.mts.map +0 -1
- package/dist/client/components/fields/rich-text-editor/types.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/utils.mjs.map +0 -1
- package/dist/client/components/fields/rich-text-editor/variants.d.mts +0 -2
- package/dist/client/components/fields/rich-text-field.d.mts +0 -14
- package/dist/client/components/fields/rich-text-field.d.mts.map +0 -1
- package/dist/client/components/fields/rich-text-field.mjs.map +0 -1
- package/dist/client/components/fields/select-field.d.mts +0 -25
- package/dist/client/components/fields/select-field.d.mts.map +0 -1
- package/dist/client/components/fields/select-field.mjs.map +0 -1
- package/dist/client/components/fields/status-field.d.mts +0 -2
- package/dist/client/components/fields/text-field.d.mts +0 -22
- package/dist/client/components/fields/text-field.d.mts.map +0 -1
- package/dist/client/components/fields/text-field.mjs.map +0 -1
- package/dist/client/components/fields/textarea-field.d.mts +0 -22
- package/dist/client/components/fields/textarea-field.d.mts.map +0 -1
- package/dist/client/components/fields/textarea-field.mjs.map +0 -1
- package/dist/client/components/fields/time-field.d.mts +0 -20
- package/dist/client/components/fields/time-field.d.mts.map +0 -1
- package/dist/client/components/fields/time-field.mjs.map +0 -1
- package/dist/client/components/fields/upload-field.d.mts +0 -97
- package/dist/client/components/fields/upload-field.d.mts.map +0 -1
- package/dist/client/components/fields/upload-field.mjs.map +0 -1
- package/dist/client/components/filter-builder/columns-tab.d.mts +0 -1
- package/dist/client/components/filter-builder/columns-tab.mjs.map +0 -1
- package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +0 -1
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +0 -1
- package/dist/client/components/filter-builder/filters-tab.d.mts +0 -1
- package/dist/client/components/filter-builder/filters-tab.mjs.map +0 -1
- package/dist/client/components/filter-builder/index.d.mts +0 -5
- package/dist/client/components/filter-builder/saved-views-tab.d.mts +0 -1
- package/dist/client/components/filter-builder/saved-views-tab.mjs.map +0 -1
- package/dist/client/components/index.d.mts +0 -80
- package/dist/client/components/locale-switcher.d.mts +0 -2
- package/dist/client/components/locale-switcher.mjs.map +0 -1
- package/dist/client/components/media/media-grid.mjs.map +0 -1
- package/dist/client/components/media/media-picker-dialog.mjs.map +0 -1
- package/dist/client/components/preview/live-preview-mode.mjs.map +0 -1
- package/dist/client/components/preview/preview-pane.mjs.map +0 -1
- package/dist/client/components/primitives/asset-preview.mjs.map +0 -1
- package/dist/client/components/primitives/checkbox-input.mjs.map +0 -1
- package/dist/client/components/primitives/date-input.mjs.map +0 -1
- package/dist/client/components/primitives/dropzone.mjs.map +0 -1
- package/dist/client/components/primitives/number-input.mjs.map +0 -1
- package/dist/client/components/primitives/select-multi.mjs.map +0 -1
- package/dist/client/components/primitives/select-single.mjs.map +0 -1
- package/dist/client/components/primitives/text-input.mjs.map +0 -1
- package/dist/client/components/primitives/textarea-input.mjs.map +0 -1
- package/dist/client/components/primitives/time-input.mjs.map +0 -1
- package/dist/client/components/primitives/toggle-input.mjs.map +0 -1
- package/dist/client/components/primitives/types.d.mts +0 -14
- package/dist/client/components/primitives/types.d.mts.map +0 -1
- package/dist/client/components/primitives/types.mjs.map +0 -1
- package/dist/client/components/sheets/index.d.mts +0 -1
- package/dist/client/components/sheets/resource-sheet.d.mts +0 -1
- package/dist/client/components/sheets/resource-sheet.mjs.map +0 -1
- package/dist/client/components/ui/accordion.d.mts +0 -2
- package/dist/client/components/ui/accordion.mjs.map +0 -1
- package/dist/client/components/ui/alert.mjs.map +0 -1
- package/dist/client/components/ui/avatar.d.mts +0 -3
- package/dist/client/components/ui/badge.d.mts +0 -3
- package/dist/client/components/ui/badge.mjs.map +0 -1
- package/dist/client/components/ui/button.d.mts +0 -3
- package/dist/client/components/ui/button.mjs.map +0 -1
- package/dist/client/components/ui/card.d.mts +0 -2
- package/dist/client/components/ui/card.mjs.map +0 -1
- package/dist/client/components/ui/checkbox.d.mts +0 -2
- package/dist/client/components/ui/checkbox.mjs.map +0 -1
- package/dist/client/components/ui/combobox.d.mts +0 -3
- package/dist/client/components/ui/command.mjs.map +0 -1
- package/dist/client/components/ui/dialog.d.mts +0 -3
- package/dist/client/components/ui/dialog.mjs.map +0 -1
- package/dist/client/components/ui/drawer.mjs.map +0 -1
- package/dist/client/components/ui/dropdown-menu.d.mts +0 -3
- package/dist/client/components/ui/dropdown-menu.mjs.map +0 -1
- package/dist/client/components/ui/empty-state.mjs.map +0 -1
- package/dist/client/components/ui/field.d.mts +0 -3
- package/dist/client/components/ui/field.mjs.map +0 -1
- package/dist/client/components/ui/input-group.d.mts +0 -4
- package/dist/client/components/ui/input-group.mjs.map +0 -1
- package/dist/client/components/ui/input.d.mts +0 -2
- package/dist/client/components/ui/input.mjs.map +0 -1
- package/dist/client/components/ui/kbd.mjs.map +0 -1
- package/dist/client/components/ui/label.d.mts +0 -2
- package/dist/client/components/ui/label.mjs.map +0 -1
- package/dist/client/components/ui/popover.d.mts +0 -3
- package/dist/client/components/ui/popover.mjs.map +0 -1
- package/dist/client/components/ui/responsive-dialog.mjs.map +0 -1
- package/dist/client/components/ui/scroll-area.d.mts +0 -2
- package/dist/client/components/ui/search-input.mjs.map +0 -1
- package/dist/client/components/ui/select.d.mts +0 -3
- package/dist/client/components/ui/select.mjs.map +0 -1
- package/dist/client/components/ui/separator.d.mts +0 -2
- package/dist/client/components/ui/separator.mjs.map +0 -1
- package/dist/client/components/ui/sheet.d.mts +0 -3
- package/dist/client/components/ui/sheet.mjs.map +0 -1
- package/dist/client/components/ui/sidebar.d.mts +0 -8
- package/dist/client/components/ui/sidebar.mjs.map +0 -1
- package/dist/client/components/ui/skeleton.d.mts +0 -1
- package/dist/client/components/ui/skeleton.mjs.map +0 -1
- package/dist/client/components/ui/sonner.d.mts.map +0 -1
- package/dist/client/components/ui/sonner.mjs.map +0 -1
- package/dist/client/components/ui/spinner.d.mts +0 -1
- package/dist/client/components/ui/spinner.mjs.map +0 -1
- package/dist/client/components/ui/switch.d.mts +0 -2
- package/dist/client/components/ui/switch.mjs.map +0 -1
- package/dist/client/components/ui/table.d.mts +0 -2
- package/dist/client/components/ui/table.mjs.map +0 -1
- package/dist/client/components/ui/tabs.d.mts +0 -3
- package/dist/client/components/ui/tabs.mjs.map +0 -1
- package/dist/client/components/ui/textarea.d.mts +0 -2
- package/dist/client/components/ui/textarea.mjs.map +0 -1
- package/dist/client/components/ui/toolbar.mjs.map +0 -1
- package/dist/client/components/ui/tooltip.d.mts +0 -2
- package/dist/client/components/ui/tooltip.mjs.map +0 -1
- package/dist/client/components/widgets/chart-widget.d.mts +0 -57
- package/dist/client/components/widgets/chart-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/chart-widget.mjs.map +0 -1
- package/dist/client/components/widgets/progress-widget.d.mts +0 -41
- package/dist/client/components/widgets/progress-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/progress-widget.mjs.map +0 -1
- package/dist/client/components/widgets/quick-actions-widget.d.mts +0 -29
- package/dist/client/components/widgets/quick-actions-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/quick-actions-widget.mjs.map +0 -1
- package/dist/client/components/widgets/recent-items-widget.d.mts +0 -51
- package/dist/client/components/widgets/recent-items-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/recent-items-widget.mjs.map +0 -1
- package/dist/client/components/widgets/stats-widget.d.mts +0 -55
- package/dist/client/components/widgets/stats-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/stats-widget.mjs.map +0 -1
- package/dist/client/components/widgets/table-widget.d.mts +0 -31
- package/dist/client/components/widgets/table-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/table-widget.mjs.map +0 -1
- package/dist/client/components/widgets/timeline-widget.d.mts +0 -51
- package/dist/client/components/widgets/timeline-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/timeline-widget.mjs.map +0 -1
- package/dist/client/components/widgets/value-widget.d.mts +0 -39
- package/dist/client/components/widgets/value-widget.d.mts.map +0 -1
- package/dist/client/components/widgets/value-widget.mjs.map +0 -1
- package/dist/client/components/widgets/widget-skeletons.mjs.map +0 -1
- package/dist/client/context/focus-context.d.mts.map +0 -1
- package/dist/client/context/focus-context.mjs.map +0 -1
- package/dist/client/contexts/breadcrumb-context.mjs.map +0 -1
- package/dist/client/hooks/typed-hooks.d.mts.map +0 -1
- package/dist/client/hooks/typed-hooks.mjs.map +0 -1
- package/dist/client/hooks/use-action.mjs.map +0 -1
- package/dist/client/hooks/use-admin-config.mjs.map +0 -1
- package/dist/client/hooks/use-admin-preferences.mjs.map +0 -1
- package/dist/client/hooks/use-admin-routes.mjs.map +0 -1
- package/dist/client/hooks/use-auth.d.mts.map +0 -1
- package/dist/client/hooks/use-auth.mjs.map +0 -1
- package/dist/client/hooks/use-collection-fields.mjs.map +0 -1
- package/dist/client/hooks/use-collection-meta.mjs.map +0 -1
- package/dist/client/hooks/use-collection-schema.mjs.map +0 -1
- package/dist/client/hooks/use-collection-validation.mjs.map +0 -1
- package/dist/client/hooks/use-collection.d.mts.map +0 -1
- package/dist/client/hooks/use-collection.mjs.map +0 -1
- package/dist/client/hooks/use-current-user.d.mts.map +0 -1
- package/dist/client/hooks/use-current-user.mjs.map +0 -1
- package/dist/client/hooks/use-field-hooks.mjs.map +0 -1
- package/dist/client/hooks/use-field-options.d.mts.map +0 -1
- package/dist/client/hooks/use-field-options.mjs.map +0 -1
- package/dist/client/hooks/use-global-fields.mjs.map +0 -1
- package/dist/client/hooks/use-global-meta.mjs.map +0 -1
- package/dist/client/hooks/use-global-schema.mjs.map +0 -1
- package/dist/client/hooks/use-global.d.mts.map +0 -1
- package/dist/client/hooks/use-global.mjs.map +0 -1
- package/dist/client/hooks/use-locks.mjs.map +0 -1
- package/dist/client/hooks/use-media-query.d.mts.map +0 -1
- package/dist/client/hooks/use-media-query.mjs.map +0 -1
- package/dist/client/hooks/use-prefill-params.mjs.map +0 -1
- package/dist/client/hooks/use-questpie-query-options.mjs.map +0 -1
- package/dist/client/hooks/use-reactive-fields.d.mts.map +0 -1
- package/dist/client/hooks/use-reactive-fields.mjs.map +0 -1
- package/dist/client/hooks/use-realtime-highlight.mjs.map +0 -1
- package/dist/client/hooks/use-saved-views.mjs.map +0 -1
- package/dist/client/hooks/use-search.mjs.map +0 -1
- package/dist/client/hooks/use-server-validation.mjs.map +0 -1
- package/dist/client/hooks/use-server-widget-data.d.mts.map +0 -1
- package/dist/client/hooks/use-server-widget-data.mjs.map +0 -1
- package/dist/client/hooks/use-setup-status.d.mts.map +0 -1
- package/dist/client/hooks/use-setup-status.mjs.map +0 -1
- package/dist/client/hooks/use-upload-collection.mjs.map +0 -1
- package/dist/client/hooks/use-upload.d.mts +0 -23
- package/dist/client/hooks/use-upload.d.mts.map +0 -1
- package/dist/client/hooks/use-upload.mjs.map +0 -1
- package/dist/client/hooks/use-validation-error-map.mjs.map +0 -1
- package/dist/client/hooks/use-view-state.mjs.map +0 -1
- package/dist/client/i18n/hooks.mjs.map +0 -1
- package/dist/client/i18n/intl-cache.mjs.map +0 -1
- package/dist/client/i18n/messages.mjs.map +0 -1
- package/dist/client/i18n/simple.d.mts.map +0 -1
- package/dist/client/i18n/simple.mjs.map +0 -1
- package/dist/client/i18n/types.d.mts.map +0 -1
- package/dist/client/lib/utils.d.mts +0 -1
- package/dist/client/lib/utils.mjs.map +0 -1
- package/dist/client/preview/block-scope-context.d.mts.map +0 -1
- package/dist/client/preview/block-scope-context.mjs.map +0 -1
- package/dist/client/preview/preview-banner.d.mts.map +0 -1
- package/dist/client/preview/preview-banner.mjs.map +0 -1
- package/dist/client/preview/preview-field.d.mts.map +0 -1
- package/dist/client/preview/preview-field.mjs.map +0 -1
- package/dist/client/preview/types.d.mts.map +0 -1
- package/dist/client/preview/types.mjs.map +0 -1
- package/dist/client/preview/use-collection-preview.d.mts.map +0 -1
- package/dist/client/preview/use-collection-preview.mjs.map +0 -1
- package/dist/client/runtime/content-locales-provider.mjs.map +0 -1
- package/dist/client/runtime/locale-scope.mjs.map +0 -1
- package/dist/client/runtime/provider.d.mts.map +0 -1
- package/dist/client/runtime/provider.mjs.map +0 -1
- package/dist/client/runtime/routes.d.mts.map +0 -1
- package/dist/client/runtime/routes.mjs.map +0 -1
- package/dist/client/runtime/translations-provider.d.mts +0 -2
- package/dist/client/runtime/translations-provider.mjs.map +0 -1
- package/dist/client/scope/picker.d.mts.map +0 -1
- package/dist/client/scope/picker.mjs.map +0 -1
- package/dist/client/scope/provider.d.mts.map +0 -1
- package/dist/client/scope/provider.mjs.map +0 -1
- package/dist/client/scope/types.d.mts.map +0 -1
- package/dist/client/utils/auto-expand-fields.mjs.map +0 -1
- package/dist/client/utils/build-field-definitions-from-schema.mjs.map +0 -1
- package/dist/client/utils/detect-relations.mjs.map +0 -1
- package/dist/client/utils/locale-to-flag.d.mts.map +0 -1
- package/dist/client/utils/locale-to-flag.mjs.map +0 -1
- package/dist/client/utils/routes.mjs.map +0 -1
- package/dist/client/views/auth/accept-invite-form.d.mts.map +0 -1
- package/dist/client/views/auth/accept-invite-form.mjs.map +0 -1
- package/dist/client/views/auth/auth-layout.d.mts.map +0 -1
- package/dist/client/views/auth/auth-layout.mjs.map +0 -1
- package/dist/client/views/auth/forgot-password-form.d.mts.map +0 -1
- package/dist/client/views/auth/forgot-password-form.mjs.map +0 -1
- package/dist/client/views/auth/index.d.mts +0 -7
- package/dist/client/views/auth/invite-form.d.mts +0 -1
- package/dist/client/views/auth/invite-form.mjs.map +0 -1
- package/dist/client/views/auth/login-form.d.mts.map +0 -1
- package/dist/client/views/auth/login-form.mjs.map +0 -1
- package/dist/client/views/auth/reset-password-form.d.mts.map +0 -1
- package/dist/client/views/auth/reset-password-form.mjs.map +0 -1
- package/dist/client/views/auth/setup-form.d.mts.map +0 -1
- package/dist/client/views/auth/setup-form.mjs.map +0 -1
- package/dist/client/views/collection/auto-form-fields.d.mts +0 -4
- package/dist/client/views/collection/auto-form-fields.mjs.map +0 -1
- package/dist/client/views/collection/bulk-action-toolbar.mjs.map +0 -1
- package/dist/client/views/collection/cells/complex-cells.d.mts +0 -46
- package/dist/client/views/collection/cells/complex-cells.d.mts.map +0 -1
- package/dist/client/views/collection/cells/complex-cells.mjs.map +0 -1
- package/dist/client/views/collection/cells/index.d.mts +0 -7
- package/dist/client/views/collection/cells/primitive-cells.d.mts +0 -76
- package/dist/client/views/collection/cells/primitive-cells.d.mts.map +0 -1
- package/dist/client/views/collection/cells/primitive-cells.mjs.map +0 -1
- package/dist/client/views/collection/cells/relation-cells.d.mts +0 -21
- package/dist/client/views/collection/cells/relation-cells.d.mts.map +0 -1
- package/dist/client/views/collection/cells/relation-cells.mjs.map +0 -1
- package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +0 -1
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +0 -1
- package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +0 -2
- package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +0 -1
- package/dist/client/views/collection/cells/shared/relation-chip.d.mts +0 -1
- package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +0 -1
- package/dist/client/views/collection/cells/upload-cells.d.mts +0 -25
- package/dist/client/views/collection/cells/upload-cells.d.mts.map +0 -1
- package/dist/client/views/collection/cells/upload-cells.mjs.map +0 -1
- package/dist/client/views/collection/columns/build-columns.d.mts +0 -2
- package/dist/client/views/collection/columns/build-columns.mjs.map +0 -1
- package/dist/client/views/collection/columns/column-defaults.d.mts +0 -2
- package/dist/client/views/collection/columns/column-defaults.mjs.map +0 -1
- package/dist/client/views/collection/columns/index.d.mts +0 -3
- package/dist/client/views/collection/columns/types.d.mts +0 -2
- package/dist/client/views/collection/field-context.mjs.map +0 -1
- package/dist/client/views/collection/field-renderer.mjs.map +0 -1
- package/dist/client/views/collection/form-view.d.mts +0 -112
- package/dist/client/views/collection/form-view.d.mts.map +0 -1
- package/dist/client/views/collection/form-view.mjs.map +0 -1
- package/dist/client/views/collection/index.d.mts +0 -9
- package/dist/client/views/collection/table-view.d.mts +0 -102
- package/dist/client/views/collection/table-view.d.mts.map +0 -1
- package/dist/client/views/collection/table-view.mjs.map +0 -1
- package/dist/client/views/collection/view-skeletons.mjs.map +0 -1
- package/dist/client/views/common/global-search.d.mts +0 -1
- package/dist/client/views/common/global-search.mjs.map +0 -1
- package/dist/client/views/common/index.d.mts +0 -1
- package/dist/client/views/dashboard/dashboard-grid.mjs.map +0 -1
- package/dist/client/views/dashboard/dashboard-widget.mjs.map +0 -1
- package/dist/client/views/dashboard/widget-card.mjs.map +0 -1
- package/dist/client/views/globals/global-form-view.d.mts +0 -74
- package/dist/client/views/globals/global-form-view.d.mts.map +0 -1
- package/dist/client/views/globals/global-form-view.mjs.map +0 -1
- package/dist/client/views/index.d.mts +0 -28
- package/dist/client/views/layout/admin-layout-provider.d.mts.map +0 -1
- package/dist/client/views/layout/admin-layout-provider.mjs.map +0 -1
- package/dist/client/views/layout/admin-layout.d.mts.map +0 -1
- package/dist/client/views/layout/admin-layout.mjs.map +0 -1
- package/dist/client/views/layout/admin-root.d.mts +0 -7
- package/dist/client/views/layout/admin-router.d.mts.map +0 -1
- package/dist/client/views/layout/admin-router.mjs.map +0 -1
- package/dist/client/views/layout/admin-sidebar.d.mts.map +0 -1
- package/dist/client/views/layout/admin-sidebar.mjs.map +0 -1
- package/dist/client/views/layout/admin-topbar.mjs.map +0 -1
- package/dist/client/views/layout/index.d.mts +0 -5
- package/dist/client/views/pages/accept-invite-page.d.mts.map +0 -1
- package/dist/client/views/pages/accept-invite-page.mjs.map +0 -1
- package/dist/client/views/pages/dashboard-page.d.mts.map +0 -1
- package/dist/client/views/pages/dashboard-page.mjs.map +0 -1
- package/dist/client/views/pages/forgot-password-page.d.mts.map +0 -1
- package/dist/client/views/pages/forgot-password-page.mjs.map +0 -1
- package/dist/client/views/pages/index.d.mts +0 -7
- package/dist/client/views/pages/invite-page.d.mts.map +0 -1
- package/dist/client/views/pages/invite-page.mjs.map +0 -1
- package/dist/client/views/pages/login-page.d.mts.map +0 -1
- package/dist/client/views/pages/login-page.mjs.map +0 -1
- package/dist/client/views/pages/reset-password-page.d.mts.map +0 -1
- package/dist/client/views/pages/reset-password-page.mjs.map +0 -1
- package/dist/client/views/pages/setup-page.d.mts.map +0 -1
- package/dist/client/views/pages/setup-page.mjs.map +0 -1
- package/dist/client.d.mts.map +0 -1
- package/dist/components/rich-text/rich-text-renderer.d.mts.map +0 -1
- package/dist/components/rich-text/rich-text-renderer.mjs.map +0 -1
- package/dist/server/adapters/nextjs.d.mts.map +0 -1
- package/dist/server/adapters/nextjs.mjs.map +0 -1
- package/dist/server/adapters/tanstack.d.mts.map +0 -1
- package/dist/server/adapters/tanstack.mjs.map +0 -1
- package/dist/server/augmentation.d.mts.map +0 -1
- package/dist/server/auth-helpers.d.mts.map +0 -1
- package/dist/server/auth-helpers.mjs.map +0 -1
- package/dist/server/block/block-builder.d.mts.map +0 -1
- package/dist/server/block/block-builder.mjs.map +0 -1
- package/dist/server/block/introspection.d.mts.map +0 -1
- package/dist/server/block/introspection.mjs.map +0 -1
- package/dist/server/block/prefetch.d.mts.map +0 -1
- package/dist/server/block/prefetch.mjs.map +0 -1
- package/dist/server/fields/blocks.d.mts.map +0 -1
- package/dist/server/fields/blocks.mjs.map +0 -1
- package/dist/server/fields/index.d.mts.map +0 -1
- package/dist/server/fields/index.mjs.map +0 -1
- package/dist/server/fields/rich-text.d.mts.map +0 -1
- package/dist/server/fields/rich-text.mjs.map +0 -1
- package/dist/server/i18n/index.d.mts +0 -16
- package/dist/server/i18n/index.d.mts.map +0 -1
- package/dist/server/i18n/index.mjs.map +0 -1
- package/dist/server/i18n/messages/cs.mjs.map +0 -1
- package/dist/server/i18n/messages/de.mjs.map +0 -1
- package/dist/server/i18n/messages/en.mjs.map +0 -1
- package/dist/server/i18n/messages/es.mjs.map +0 -1
- package/dist/server/i18n/messages/fr.mjs.map +0 -1
- package/dist/server/i18n/messages/index.mjs.map +0 -1
- package/dist/server/i18n/messages/pl.mjs.map +0 -1
- package/dist/server/i18n/messages/pt.mjs.map +0 -1
- package/dist/server/i18n/messages/sk.mjs.map +0 -1
- package/dist/server/index.d.mts +0 -20
- package/dist/server/modules/admin/functions/admin-config.mjs +0 -348
- package/dist/server/modules/admin/functions/admin-config.mjs.map +0 -1
- package/dist/server/modules/admin/functions/execute-action.d.mts.map +0 -1
- package/dist/server/modules/admin/functions/execute-action.mjs.map +0 -1
- package/dist/server/modules/admin/functions/locales.mjs +0 -80
- package/dist/server/modules/admin/functions/locales.mjs.map +0 -1
- package/dist/server/modules/admin/functions/preview.d.mts.map +0 -1
- package/dist/server/modules/admin/functions/preview.mjs.map +0 -1
- package/dist/server/modules/admin/functions/reactive.d.mts.map +0 -1
- package/dist/server/modules/admin/functions/reactive.mjs.map +0 -1
- package/dist/server/modules/admin/functions/setup.d.mts.map +0 -1
- package/dist/server/modules/admin/functions/setup.mjs +0 -131
- package/dist/server/modules/admin/functions/setup.mjs.map +0 -1
- package/dist/server/modules/admin/functions/translations.mjs +0 -125
- package/dist/server/modules/admin/functions/translations.mjs.map +0 -1
- package/dist/server/modules/admin/functions/widget-data.d.mts +0 -33
- package/dist/server/modules/admin/functions/widget-data.d.mts.map +0 -1
- package/dist/server/modules/admin/functions/widget-data.mjs +0 -70
- package/dist/server/modules/admin/functions/widget-data.mjs.map +0 -1
- package/dist/server/modules/admin/index.d.mts.map +0 -1
- package/dist/server/modules/admin/index.mjs.map +0 -1
- package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +0 -3
- package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +0 -1
- package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +0 -3
- package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +0 -1
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +0 -1490
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +0 -1
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +0 -57
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +0 -1
- package/dist/server/patch.d.mts +0 -100
- package/dist/server/patch.d.mts.map +0 -1
- package/dist/server/patch.mjs +0 -1062
- package/dist/server/patch.mjs.map +0 -1
- package/dist/shared/preview-utils.d.mts.map +0 -1
- package/dist/shared/preview-utils.mjs.map +0 -1
- package/dist/shared/types/saved-views.types.d.mts.map +0 -1
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { BaseFieldProps } from "./field-types.mjs";
|
|
2
|
-
import * as React$1 from "react";
|
|
3
|
-
import * as react_jsx_runtime210 from "react/jsx-runtime";
|
|
4
|
-
|
|
5
|
-
//#region src/client/components/fields/json-field.d.ts
|
|
6
|
-
|
|
7
|
-
type JsonFieldMode = "code" | "form";
|
|
8
|
-
type JsonFieldProps = BaseFieldProps & {
|
|
9
|
-
/**
|
|
10
|
-
* Is the field readonly
|
|
11
|
-
*/
|
|
12
|
-
readOnly?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Initial editing mode
|
|
15
|
-
* @default "code"
|
|
16
|
-
*/
|
|
17
|
-
defaultMode?: JsonFieldMode;
|
|
18
|
-
/**
|
|
19
|
-
* Allow switching between modes
|
|
20
|
-
* @default true
|
|
21
|
-
*/
|
|
22
|
-
allowModeSwitch?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Minimum height for the editor
|
|
25
|
-
* @default 200
|
|
26
|
-
*/
|
|
27
|
-
minHeight?: number;
|
|
28
|
-
/**
|
|
29
|
-
* Maximum height for the editor (0 = no limit)
|
|
30
|
-
* @default 400
|
|
31
|
-
*/
|
|
32
|
-
maxHeight?: number;
|
|
33
|
-
/**
|
|
34
|
-
* Custom render function for form mode
|
|
35
|
-
* Receives current value and onChange handler
|
|
36
|
-
*/
|
|
37
|
-
renderForm?: (props: {
|
|
38
|
-
value: any;
|
|
39
|
-
onChange: (value: any) => void;
|
|
40
|
-
disabled?: boolean;
|
|
41
|
-
readOnly?: boolean;
|
|
42
|
-
}) => React$1.ReactNode;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* JSON field with code editor and optional form mode.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```tsx
|
|
49
|
-
* // Basic JSON editor
|
|
50
|
-
* <JsonField
|
|
51
|
-
* name="metadata"
|
|
52
|
-
* label="Metadata"
|
|
53
|
-
* description="Additional metadata as JSON"
|
|
54
|
-
* />
|
|
55
|
-
*
|
|
56
|
-
* // With custom form mode
|
|
57
|
-
* <JsonField
|
|
58
|
-
* name="settings"
|
|
59
|
-
* label="Settings"
|
|
60
|
-
* renderForm={({ value, onChange }) => (
|
|
61
|
-
* <SettingsForm value={value} onChange={onChange} />
|
|
62
|
-
* )}
|
|
63
|
-
* />
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
declare function JsonField({
|
|
67
|
-
name,
|
|
68
|
-
label,
|
|
69
|
-
description,
|
|
70
|
-
required,
|
|
71
|
-
disabled,
|
|
72
|
-
readOnly,
|
|
73
|
-
placeholder,
|
|
74
|
-
defaultMode,
|
|
75
|
-
allowModeSwitch,
|
|
76
|
-
minHeight,
|
|
77
|
-
maxHeight,
|
|
78
|
-
renderForm,
|
|
79
|
-
control: controlProp,
|
|
80
|
-
className
|
|
81
|
-
}: JsonFieldProps): react_jsx_runtime210.JSX.Element | null;
|
|
82
|
-
//#endregion
|
|
83
|
-
export { JsonField, JsonFieldMode, JsonFieldProps };
|
|
84
|
-
//# sourceMappingURL=json-field.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/json-field.tsx"],"sourcesContent":[],"mappings":";;;;;;AA4FgB,KAlEJ,aAAA,GAkEa,MAAA,GAAA,MAAA;AACvB,KAjEU,cAAA,GAAiB,cAiE3B,GAAA;EACA;;;EAGA,QAAA,CAAA,EAAA,OAAA;EACA;;;;EAIA,WAAA,CAAA,EAhEc,aAgEd;EACA;;;;EAIC,eAAA,CAAA,EAAA,OAAA;EAAc;;;;;;;;;;;;;;;;;;;QAxCT,OAAA,CAAM;;;;;;;;;;;;;;;;;;;;;;;;iBAyBE,SAAA;;;;;;;;;;;;;WAaL;;GAER,iBAAc,oBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/json-field.tsx"],"sourcesContent":["/**\n * JsonField Component\n *\n * JSON field with two editing modes:\n * - \"code\" - Raw JSON editing with syntax highlighting\n * - \"form\" - Structured form editing (if schema provided)\n *\n * Integrates with react-hook-form via Controller.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport { Textarea } from \"../ui/textarea\";\nimport type { BaseFieldProps } from \"./field-types\";\n\nexport type JsonFieldMode = \"code\" | \"form\";\n\nexport type JsonFieldProps = BaseFieldProps & {\n /**\n * Is the field readonly\n */\n readOnly?: boolean;\n\n /**\n * Initial editing mode\n * @default \"code\"\n */\n defaultMode?: JsonFieldMode;\n\n /**\n * Allow switching between modes\n * @default true\n */\n allowModeSwitch?: boolean;\n\n /**\n * Minimum height for the editor\n * @default 200\n */\n minHeight?: number;\n\n /**\n * Maximum height for the editor (0 = no limit)\n * @default 400\n */\n maxHeight?: number;\n\n /**\n * Custom render function for form mode\n * Receives current value and onChange handler\n */\n renderForm?: (props: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n }) => React.ReactNode;\n};\n\n/**\n * JSON field with code editor and optional form mode.\n *\n * @example\n * ```tsx\n * // Basic JSON editor\n * <JsonField\n * name=\"metadata\"\n * label=\"Metadata\"\n * description=\"Additional metadata as JSON\"\n * />\n *\n * // With custom form mode\n * <JsonField\n * name=\"settings\"\n * label=\"Settings\"\n * renderForm={({ value, onChange }) => (\n * <SettingsForm value={value} onChange={onChange} />\n * )}\n * />\n * ```\n */\nexport function JsonField({\n name,\n label,\n description,\n required,\n disabled,\n readOnly,\n placeholder = '{\\n \"key\": \"value\"\\n}',\n defaultMode = \"code\",\n allowModeSwitch = true,\n minHeight = 200,\n maxHeight = 400,\n renderForm,\n control: controlProp,\n className,\n}: JsonFieldProps) {\n const resolveText = useResolveText();\n const resolvedLabel = label ? resolveText(label) : undefined;\n const resolvedDescription = description\n ? resolveText(description)\n : undefined;\n const formContext = useFormContext();\n const control = controlProp ?? formContext?.control;\n const [mode, setMode] = React.useState<JsonFieldMode>(defaultMode);\n\n if (!control) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"JsonField: No form control found. Make sure to use within FormProvider or pass control prop.\",\n );\n }\n return null;\n }\n\n // Only show mode switch if form rendering is available\n const showModeSwitch = allowModeSwitch && renderForm;\n\n return (\n <Controller\n name={name}\n control={control}\n rules={{\n required: required ? `${resolvedLabel || name} is required` : undefined,\n validate: (value) => {\n if (!value) return true;\n // In code mode, validate JSON\n if (mode === \"code\" && typeof value === \"string\") {\n try {\n JSON.parse(value);\n return true;\n } catch {\n return \"Invalid JSON format\";\n }\n }\n return true;\n },\n }}\n render={({ field, fieldState }) => {\n const error = fieldState.error?.message;\n\n return (\n <Field data-invalid={!!error} className={className}>\n {/* Header with label and mode switch */}\n <div className=\"flex items-center justify-between\">\n {resolvedLabel && (\n <FieldLabel htmlFor={name}>\n {resolvedLabel}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n\n {showModeSwitch && (\n <div className=\"flex gap-1\">\n <Button\n type=\"button\"\n variant={mode === \"code\" ? \"secondary\" : \"ghost\"}\n size=\"icon-xs\"\n onClick={() => setMode(\"code\")}\n disabled={disabled}\n title=\"Code editor\"\n >\n <Icon icon=\"ph:code-bold\" />\n </Button>\n <Button\n type=\"button\"\n variant={mode === \"form\" ? \"secondary\" : \"ghost\"}\n size=\"icon-xs\"\n onClick={() => setMode(\"form\")}\n disabled={disabled}\n title=\"Form editor\"\n >\n <Icon icon=\"ph:list-bullets-bold\" />\n </Button>\n </div>\n )}\n </div>\n\n <FieldContent>\n {mode === \"code\" ? (\n <JsonCodeEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n minHeight={minHeight}\n maxHeight={maxHeight}\n error={!!error}\n />\n ) : renderForm ? (\n <JsonFormEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n renderForm={renderForm}\n />\n ) : (\n <JsonCodeEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n minHeight={minHeight}\n maxHeight={maxHeight}\n error={!!error}\n />\n )}\n\n {resolvedDescription && !error && (\n <FieldDescription>{resolvedDescription}</FieldDescription>\n )}\n <FieldError>{error}</FieldError>\n </FieldContent>\n </Field>\n );\n }}\n />\n );\n}\n\n/**\n * Code editor for JSON (using Textarea for simplicity)\n * Can be replaced with Monaco/CodeMirror in the future\n */\nfunction JsonCodeEditor({\n value,\n onChange,\n disabled,\n readOnly,\n placeholder,\n minHeight,\n maxHeight,\n error,\n}: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n maxHeight?: number;\n error?: boolean;\n}) {\n const [localValue, setLocalValue] = React.useState<string>(() => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"\";\n }\n });\n const [parseError, setParseError] = React.useState<string | null>(null);\n\n // Sync local value when external value changes\n React.useEffect(() => {\n if (typeof value === \"string\") {\n setLocalValue(value);\n } else if (value !== null && value !== undefined) {\n try {\n setLocalValue(JSON.stringify(value, null, 2));\n } catch {\n // Keep current local value if stringification fails\n }\n } else {\n setLocalValue(\"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n // Try to parse and update form value\n if (!newValue.trim()) {\n setParseError(null);\n onChange(null);\n return;\n }\n\n try {\n const parsed = JSON.parse(newValue);\n setParseError(null);\n onChange(parsed);\n } catch (err) {\n setParseError(\"Invalid JSON\");\n // Still update with raw string so validation can catch it\n onChange(newValue);\n }\n };\n\n const handleFormat = () => {\n try {\n const parsed = JSON.parse(localValue);\n const formatted = JSON.stringify(parsed, null, 2);\n setLocalValue(formatted);\n setParseError(null);\n onChange(parsed);\n } catch {\n // Can't format invalid JSON\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"relative\">\n <Textarea\n value={localValue}\n onChange={handleChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n className={cn(\n \"font-mono text-xs\",\n error || parseError ? \"border-destructive\" : \"\",\n )}\n style={{\n minHeight: `${minHeight}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n resize: maxHeight ? \"none\" : \"vertical\",\n }}\n aria-invalid={!!error || !!parseError}\n />\n\n {/* Parse error indicator */}\n {parseError && (\n <div className=\"text-destructive absolute right-2 top-2 flex items-center gap-1 text-xs\">\n <Icon icon=\"ph:warning-circle-fill\" className=\"size-3\" />\n {parseError}\n </div>\n )}\n </div>\n\n {/* Format button */}\n {!readOnly && !disabled && localValue && (\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleFormat}\n disabled={!!parseError}\n >\n Format JSON\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Form-based editor wrapper\n */\nfunction JsonFormEditor({\n value,\n onChange,\n disabled,\n readOnly,\n renderForm,\n}: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n renderForm: JsonFieldProps[\"renderForm\"];\n}) {\n // Ensure value is an object for form mode\n const safeValue = React.useMemo(() => {\n if (typeof value === \"object\" && value !== null) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return {};\n }\n }\n return {};\n }, [value]);\n\n if (!renderForm) return null;\n\n return (\n <div className=\"rounded-lg border p-4\">\n {renderForm({\n value: safeValue,\n onChange,\n disabled,\n readOnly,\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FA,SAAgB,UAAU,EACxB,MACA,OACA,aACA,UACA,UACA,UACA,cAAc,8BACd,cAAc,QACd,kBAAkB,MAClB,YAAY,KACZ,YAAY,KACZ,YACA,SAAS,aACT,aACiB;CACjB,MAAM,cAAc,gBAAgB;CACpC,MAAM,gBAAgB,QAAQ,YAAY,MAAM,GAAG;CACnD,MAAM,sBAAsB,cACxB,YAAY,YAAY,GACxB;CACJ,MAAM,cAAc,gBAAgB;CACpC,MAAM,UAAU,eAAe,aAAa;CAC5C,MAAM,CAAC,MAAM,WAAWA,QAAM,SAAwB,YAAY;AAElE,KAAI,CAAC,SAAS;AACZ,MAAI,QAAQ,IAAI,aAAa,aAC3B,SAAQ,KACN,+FACD;AAEH,SAAO;;CAIT,MAAM,iBAAiB,mBAAmB;AAE1C,QACE,oBAAC;EACO;EACG;EACT,OAAO;GACL,UAAU,WAAW,GAAG,iBAAiB,KAAK,gBAAgB;GAC9D,WAAW,UAAU;AACnB,QAAI,CAAC,MAAO,QAAO;AAEnB,QAAI,SAAS,UAAU,OAAO,UAAU,SACtC,KAAI;AACF,UAAK,MAAM,MAAM;AACjB,YAAO;YACD;AACN,YAAO;;AAGX,WAAO;;GAEV;EACD,SAAS,EAAE,OAAO,iBAAiB;GACjC,MAAM,QAAQ,WAAW,OAAO;AAEhC,UACE,qBAAC;IAAM,gBAAc,CAAC,CAAC;IAAkB;eAEvC,qBAAC;KAAI,WAAU;gBACZ,iBACC,qBAAC;MAAW,SAAS;iBAClB,eACA,YAAY,oBAAC;OAAK,WAAU;iBAAwB;QAAQ;OAClD,EAGd,kBACC,qBAAC;MAAI,WAAU;iBACb,oBAAC;OACC,MAAK;OACL,SAAS,SAAS,SAAS,cAAc;OACzC,MAAK;OACL,eAAe,QAAQ,OAAO;OACpB;OACV,OAAM;iBAEN,oBAAC,QAAK,MAAK,iBAAiB;QACrB,EACT,oBAAC;OACC,MAAK;OACL,SAAS,SAAS,SAAS,cAAc;OACzC,MAAK;OACL,eAAe,QAAQ,OAAO;OACpB;OACV,OAAM;iBAEN,oBAAC,QAAK,MAAK,yBAAyB;QAC7B;OACL;MAEJ,EAEN,qBAAC;KACE,SAAS,SACR,oBAAC;MACC,OAAO,MAAM;MACb,UAAU,MAAM;MACN;MACA;MACG;MACF;MACA;MACX,OAAO,CAAC,CAAC;OACT,GACA,aACF,oBAAC;MACC,OAAO,MAAM;MACb,UAAU,MAAM;MACN;MACA;MACE;OACZ,GAEF,oBAAC;MACC,OAAO,MAAM;MACb,UAAU,MAAM;MACN;MACA;MACG;MACF;MACA;MACX,OAAO,CAAC,CAAC;OACT;KAGH,uBAAuB,CAAC,SACvB,oBAAC,8BAAkB,sBAAuC;KAE5D,oBAAC,wBAAY,QAAmB;QACnB;KACT;;GAGZ;;;;;;AAQN,SAAS,eAAe,EACtB,OACA,UACA,UACA,UACA,aACA,WACA,WACA,SAUC;CACD,MAAM,CAAC,YAAY,iBAAiBA,QAAM,eAAuB;AAC/D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI;AACF,UAAO,KAAK,UAAU,OAAO,MAAM,EAAE;UAC/B;AACN,UAAO;;GAET;CACF,MAAM,CAAC,YAAY,iBAAiBA,QAAM,SAAwB,KAAK;AAGvE,SAAM,gBAAgB;AACpB,MAAI,OAAO,UAAU,SACnB,eAAc,MAAM;WACX,UAAU,QAAQ,UAAU,OACrC,KAAI;AACF,iBAAc,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC;UACvC;MAIR,eAAc,GAAG;IAElB,CAAC,MAAM,CAAC;CAEX,MAAM,gBAAgB,MAA8C;EAClE,MAAM,WAAW,EAAE,OAAO;AAC1B,gBAAc,SAAS;AAGvB,MAAI,CAAC,SAAS,MAAM,EAAE;AACpB,iBAAc,KAAK;AACnB,YAAS,KAAK;AACd;;AAGF,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,SAAS;AACnC,iBAAc,KAAK;AACnB,YAAS,OAAO;WACT,KAAK;AACZ,iBAAc,eAAe;AAE7B,YAAS,SAAS;;;CAItB,MAAM,qBAAqB;AACzB,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,WAAW;AAErC,iBADkB,KAAK,UAAU,QAAQ,MAAM,EAAE,CACzB;AACxB,iBAAc,KAAK;AACnB,YAAS,OAAO;UACV;;AAKV,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAI,WAAU;cACb,oBAAC;IACC,OAAO;IACP,UAAU;IACA;IACA;IACG;IACb,WAAW,GACT,qBACA,SAAS,aAAa,uBAAuB,GAC9C;IACD,OAAO;KACL,WAAW,GAAG,UAAU;KACxB,WAAW,YAAY,GAAG,UAAU,MAAM;KAC1C,QAAQ,YAAY,SAAS;KAC9B;IACD,gBAAc,CAAC,CAAC,SAAS,CAAC,CAAC;KAC3B,EAGD,cACC,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAK,MAAK;KAAyB,WAAU;MAAW,EACxD;KACG;IAEJ,EAGL,CAAC,YAAY,CAAC,YAAY,cACzB,oBAAC;GAAI,WAAU;aACb,oBAAC;IACC,MAAK;IACL,SAAQ;IACR,MAAK;IACL,SAAS;IACT,UAAU,CAAC,CAAC;cACb;KAEQ;IACL;GAEJ;;;;;AAOV,SAAS,eAAe,EACtB,OACA,UACA,UACA,UACA,cAOC;CAED,MAAM,YAAYA,QAAM,cAAc;AACpC,MAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;AAET,MAAI,OAAO,UAAU,SACnB,KAAI;AACF,UAAO,KAAK,MAAM,MAAM;UAClB;AACN,UAAO,EAAE;;AAGb,SAAO,EAAE;IACR,CAAC,MAAM,CAAC;AAEX,KAAI,CAAC,WAAY,QAAO;AAExB,QACE,oBAAC;EAAI,WAAU;YACZ,WAAW;GACV,OAAO;GACP;GACA;GACA;GACD,CAAC;GACE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "react/jsx-runtime";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"locale-badge.mjs","names":[],"sources":["../../../../src/client/components/fields/locale-badge.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Badge } from \"../ui/badge\";\n\ntype LocaleBadgeProps = {\n locale?: string;\n};\n\nexport function LocaleBadge({ locale }: LocaleBadgeProps) {\n if (!locale) return null;\n return (\n <Badge variant=\"secondary\" className=\"uppercase text-[10px] tracking-wide\">\n {locale}\n </Badge>\n );\n}\n"],"mappings":";;;;;AAOA,SAAgB,YAAY,EAAE,UAA4B;AACxD,KAAI,CAAC,OAAQ,QAAO;AACpB,QACE,oBAAC;EAAM,SAAQ;EAAY,WAAU;YAClC;GACK"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { NumberFieldProps } from "./field-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime209 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/fields/number-field.d.ts
|
|
5
|
-
declare function NumberField({
|
|
6
|
-
name,
|
|
7
|
-
label,
|
|
8
|
-
description,
|
|
9
|
-
placeholder,
|
|
10
|
-
required,
|
|
11
|
-
disabled,
|
|
12
|
-
localized,
|
|
13
|
-
locale,
|
|
14
|
-
control,
|
|
15
|
-
className,
|
|
16
|
-
min,
|
|
17
|
-
max,
|
|
18
|
-
step,
|
|
19
|
-
showButtons
|
|
20
|
-
}: NumberFieldProps): react_jsx_runtime209.JSX.Element;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { NumberField };
|
|
23
|
-
//# sourceMappingURL=number-field.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/number-field.tsx"],"sourcesContent":[],"mappings":";;;;iBAMgB,WAAA;;;;;;;;;;;;;;;GAeb,mBAAgB,oBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number-field.mjs","names":[],"sources":["../../../../src/client/components/fields/number-field.tsx"],"sourcesContent":["import { Controller } from \"react-hook-form\";\nimport { NumberInput } from \"../primitives/number-input\";\nimport type { NumberFieldProps } from \"./field-types\";\nimport { useResolvedControl } from \"./field-utils\";\nimport { FieldWrapper } from \"./field-wrapper\";\n\nexport function NumberField({\n name,\n label,\n description,\n placeholder,\n required,\n disabled,\n localized,\n locale,\n control,\n className,\n min,\n max,\n step,\n showButtons,\n}: NumberFieldProps) {\n const resolvedControl = useResolvedControl(control);\n\n return (\n <Controller\n name={name}\n control={resolvedControl}\n render={({ field, fieldState }) => (\n <FieldWrapper\n name={name}\n label={label}\n description={description}\n required={required}\n disabled={disabled}\n localized={localized}\n locale={locale}\n error={fieldState.error?.message}\n >\n <NumberInput\n id={name}\n value={field.value ?? null}\n onChange={field.onChange}\n placeholder={placeholder}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n showButtons={showButtons}\n aria-invalid={!!fieldState.error}\n className={className}\n />\n </FieldWrapper>\n )}\n />\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,YAAY,EAC1B,MACA,OACA,aACA,aACA,UACA,UACA,WACA,QACA,SACA,WACA,KACA,KACA,MACA,eACmB;AAGnB,QACE,oBAAC;EACO;EACN,SALoB,mBAAmB,QAAQ;EAM/C,SAAS,EAAE,OAAO,iBAChB,oBAAC;GACO;GACC;GACM;GACH;GACA;GACC;GACH;GACR,OAAO,WAAW,OAAO;aAEzB,oBAAC;IACC,IAAI;IACJ,OAAO,MAAM,SAAS;IACtB,UAAU,MAAM;IACH;IACH;IACL;IACA;IACC;IACO;IACb,gBAAc,CAAC,CAAC,WAAW;IAChB;KACX;IACW;GAEjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-array-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/object-array-field.tsx"],"sourcesContent":["/**\n * ObjectArrayField Component\n *\n * Manages arrays of objects with inline, modal, or drawer editing.\n * Similar to EmbeddedCollectionField but with inline field definitions.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { useFieldArray, useFormContext, useWatch } from \"react-hook-form\";\nimport type { FieldDefinition } from \"../../builder/field/field\";\nimport { createFieldRegistryProxy } from \"../../builder/proxies\";\nimport { useResolveText, useTranslation } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectAdmin, useAdminStore } from \"../../runtime\";\nimport { Button } from \"../ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n} from \"../ui/dialog\";\nimport {\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n} from \"../ui/sheet\";\nimport type { ArrayFieldConfig, BaseFieldProps } from \"./field-types\";\nimport { gridColumnClasses } from \"./field-utils\";\nimport { LocaleBadge } from \"./locale-badge\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ObjectArrayFieldProps\n\textends BaseFieldProps,\n\t\tPick<\n\t\t\tArrayFieldConfig,\n\t\t\t| \"item\"\n\t\t\t| \"mode\"\n\t\t\t| \"layout\"\n\t\t\t| \"columns\"\n\t\t\t| \"itemLabel\"\n\t\t\t| \"orderable\"\n\t\t\t| \"minItems\"\n\t\t\t| \"maxItems\"\n\t\t> {}\n\n// ============================================================================\n// Nested Field Renderer (for object items)\n// ============================================================================\n\ninterface ItemFieldRendererProps {\n\tfieldName: string;\n\tfieldDef: FieldDefinition;\n\tparentName: string;\n\tdisabled?: boolean;\n}\n\nfunction ItemFieldRenderer({\n\tfieldName,\n\tfieldDef,\n\tparentName,\n\tdisabled,\n}: ItemFieldRendererProps) {\n\tconst resolveText = useResolveText();\n\tconst fullName = `${parentName}.${fieldName}`;\n\tconst options = fieldDef[\"~options\"] || {};\n\n\t// Get the component from the field definition (registry-based)\n\tconst Component = fieldDef.field?.component as\n\t\t| React.ComponentType<any>\n\t\t| undefined;\n\n\tif (!Component) {\n\t\treturn (\n\t\t\t<div className=\"text-sm text-destructive\">\n\t\t\t\tNo component for field type: {fieldDef.name}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Strip UI-specific options that are handled separately\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder,\n\t\trequired,\n\t\tdisabled: optionsDisabled,\n\t\treadOnly,\n\t\thidden,\n\t\tlocalized,\n\t\tlocale,\n\t\t...fieldSpecificOptions\n\t} = options;\n\n\treturn (\n\t\t<Component\n\t\t\tname={fullName}\n\t\t\tlabel={resolveText(label)}\n\t\t\tdescription={resolveText(description)}\n\t\t\tplaceholder={resolveText(placeholder)}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled || optionsDisabled}\n\t\t\treadOnly={readOnly}\n\t\t\tlocalized={localized}\n\t\t\tlocale={locale}\n\t\t\t{...fieldSpecificOptions}\n\t\t/>\n\t);\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function ObjectArrayField({\n\tname,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\trequired,\n\tdisabled,\n\tlocalized,\n\tlocale,\n\titem: itemProp,\n\tmode = \"inline\",\n\tlayout = \"stack\",\n\tcolumns = 2,\n\titemLabel: itemLabelProp,\n\torderable = false,\n\tminItems,\n\tmaxItems,\n}: ObjectArrayFieldProps) {\n\tconst { t } = useTranslation();\n\tconst resolveText = useResolveText();\n\tconst resolvedPlaceholder = placeholder\n\t\t? resolveText(placeholder)\n\t\t: undefined;\n\tconst resolvedLabel = label ? resolveText(label) : undefined;\n\tconst form = useFormContext();\n\tconst { control } = form;\n\tconst { fields, append, remove, move } = useFieldArray({ control, name });\n\tconst values = useWatch({ control, name }) as any[] | undefined;\n\n\tconst admin = useAdminStore(selectAdmin);\n\tconst [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\tconst [isOpen, setIsOpen] = React.useState(false);\n\n\t// Resolve item field definitions\n\tconst itemFields = React.useMemo(() => {\n\t\tif (!itemProp) return {};\n\n\t\tif (typeof itemProp === \"function\") {\n\t\t\tconst registeredFields = admin.getFields();\n\t\t\tconst r = createFieldRegistryProxy(registeredFields as any);\n\t\t\treturn itemProp({ r });\n\t\t}\n\n\t\treturn itemProp;\n\t}, [itemProp, admin]);\n\n\tconst fieldEntries = Object.entries(itemFields);\n\tconst canAddMore = !maxItems || fields.length < maxItems;\n\tconst canRemove = !minItems || fields.length > minItems;\n\tconst fallbackLabel = resolvedLabel || \"Item\";\n\tconst emptyLabel = t(\"array.empty\", { name: fallbackLabel });\n\tconst addLabel = t(\"array.addItem\", { name: fallbackLabel });\n\n\t// Resolve item label\n\tconst resolveItemLabel = React.useCallback(\n\t\t(item: any, index: number) => {\n\t\t\tif (typeof itemLabelProp === \"function\") {\n\t\t\t\tconst labelValue = itemLabelProp(item, index);\n\t\t\t\tif (labelValue) return labelValue;\n\t\t\t}\n\t\t\tif (typeof itemLabelProp === \"string\") {\n\t\t\t\treturn resolveText(itemLabelProp);\n\t\t\t}\n\t\t\t// Try common label fields\n\t\t\tif (item?.name) return String(item.name);\n\t\t\tif (item?.title) return String(item.title);\n\t\t\tif (item?.label) return String(item.label);\n\t\t\treturn `${fallbackLabel} ${index + 1}`;\n\t\t},\n\t\t[fallbackLabel, itemLabelProp, resolveText],\n\t);\n\n\tconst handleAdd = () => {\n\t\tif (disabled || !canAddMore) return;\n\t\t// Create empty object with keys from field definitions (immutable pattern)\n\t\tconst emptyItem = Object.fromEntries(\n\t\t\tfieldEntries.map(([key]) => [key, undefined]),\n\t\t);\n\t\tappend(emptyItem);\n\t\tif (mode !== \"inline\") {\n\t\t\tsetActiveIndex(fields.length);\n\t\t\tsetIsOpen(true);\n\t\t}\n\t};\n\n\tconst handleRemove = (index: number) => {\n\t\tif (!canRemove) return;\n\t\tremove(index);\n\t\tif (activeIndex === null) return;\n\t\tif (index === activeIndex) {\n\t\t\tsetIsOpen(false);\n\t\t\tsetActiveIndex(null);\n\t\t} else if (index < activeIndex) {\n\t\t\tsetActiveIndex(activeIndex - 1);\n\t\t}\n\t};\n\n\tconst handleMove = (from: number, to: number) => {\n\t\tif (to < 0 || to >= fields.length) return;\n\t\tmove(from, to);\n\t\tif (activeIndex === null) return;\n\t\tif (activeIndex === from) {\n\t\t\tsetActiveIndex(to);\n\t\t} else if (activeIndex === to) {\n\t\t\tsetActiveIndex(from);\n\t\t}\n\t};\n\n\tconst handleOpenChange = (open: boolean) => {\n\t\tsetIsOpen(open);\n\t\tif (!open) {\n\t\t\tsetActiveIndex(null);\n\t\t}\n\t};\n\n\t// Render fields for an item at given index\n\tconst renderItemFields = (index: number) => {\n\t\tif (fieldEntries.length === 0) {\n\t\t\treturn (\n\t\t\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\tNo fields configured for items.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tconst fieldElements = fieldEntries.map(([fieldName, fieldDef]) => (\n\t\t\t<ItemFieldRenderer\n\t\t\t\tkey={fieldName}\n\t\t\t\tfieldName={fieldName}\n\t\t\t\tfieldDef={fieldDef as FieldDefinition}\n\t\t\t\tparentName={`${name}.${index}`}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>\n\t\t));\n\n\t\tif (layout === \"inline\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-wrap items-end gap-2\">{fieldElements}</div>\n\t\t\t);\n\t\t}\n\n\t\tif (layout === \"grid\") {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"grid gap-4\",\n\t\t\t\t\t\tgridColumnClasses[columns] || \"grid-cols-2\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fieldElements}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// Default: stack\n\t\treturn <div className=\"space-y-4\">{fieldElements}</div>;\n\t};\n\n\tconst emptyState = (\n\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t{resolvedPlaceholder || emptyLabel}\n\t\t\t</p>\n\t\t</div>\n\t);\n\n\tconst editorContent =\n\t\tactiveIndex !== null ? renderItemFields(activeIndex) : null;\n\tconst editorTitle =\n\t\tactiveIndex !== null\n\t\t\t? resolveItemLabel(values?.[activeIndex], activeIndex)\n\t\t\t: fallbackLabel;\n\n\tconst showEditor = mode === \"modal\" || mode === \"drawer\";\n\n\treturn (\n\t\t<div className=\"space-y-2\">\n\t\t\t{label && (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<label htmlFor={name} className=\"text-sm font-medium\">\n\t\t\t\t\t\t{resolvedLabel}\n\t\t\t\t\t\t{required && <span className=\"text-destructive\">*</span>}\n\t\t\t\t\t\t{maxItems && (\n\t\t\t\t\t\t\t<span className=\"ml-2 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t({fields.length}/{maxItems})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</label>\n\t\t\t\t\t{localized && <LocaleBadge locale={locale || \"i18n\"} />}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{description && (\n\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t{resolveText(description)}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t<div className=\"space-y-3\">\n\t\t\t\t{fields.length === 0\n\t\t\t\t\t? emptyState\n\t\t\t\t\t: fields.map((field, index) => {\n\t\t\t\t\t\t\tconst itemValue = values?.[index];\n\t\t\t\t\t\t\tconst itemLabel = resolveItemLabel(itemValue, index);\n\t\t\t\t\t\t\tconst canMoveUp = orderable && index > 0;\n\t\t\t\t\t\t\tconst canMoveDown = orderable && index < fields.length - 1;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between border-b px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t#{index + 1}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium\">{itemLabel}</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{orderable && (\n\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleMove(index, index - 1)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canMoveUp || disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Move up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Move item up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:caret-up\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleMove(index, index + 1)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canMoveDown || disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Move down\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Move item down\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:caret-down\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{mode !== \"inline\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(true);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={t(\"common.edit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t(\"common.edit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{canRemove && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleRemove(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={t(\"common.remove\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t(\"common.remove\")}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:trash\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{mode === \"inline\" && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"p-3\">{renderItemFields(index)}</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{canAddMore && (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tonClick={handleAdd}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<Icon icon=\"ph:plus\" className=\"h-4 w-4\" />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t{showEditor && mode === \"modal\" && (\n\t\t\t\t<Dialog open={isOpen} onOpenChange={handleOpenChange}>\n\t\t\t\t\t<DialogContent className=\"sm:max-w-2xl\">\n\t\t\t\t\t\t<DialogHeader>\n\t\t\t\t\t\t\t<DialogTitle>{editorTitle}</DialogTitle>\n\t\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\t\t\t\t{resolveText(description)}\n\t\t\t\t\t\t\t\t</DialogDescription>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t\t<div className=\"space-y-4\">{editorContent}</div>\n\t\t\t\t\t</DialogContent>\n\t\t\t\t</Dialog>\n\t\t\t)}\n\n\t\t\t{showEditor && mode === \"drawer\" && (\n\t\t\t\t<Sheet open={isOpen} onOpenChange={handleOpenChange}>\n\t\t\t\t\t<SheetContent side=\"right\" className=\"sm:max-w-lg\">\n\t\t\t\t\t\t<SheetHeader>\n\t\t\t\t\t\t\t<SheetTitle>{editorTitle}</SheetTitle>\n\t\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t\t<SheetDescription>{resolveText(description)}</SheetDescription>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t\t<div className=\"space-y-4 p-4\">{editorContent}</div>\n\t\t\t\t\t</SheetContent>\n\t\t\t\t</Sheet>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { BaseFieldProps, ObjectFieldConfig } from "./field-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime216 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/fields/object-field.d.ts
|
|
5
|
-
|
|
6
|
-
interface ObjectFieldProps extends BaseFieldProps, Omit<ObjectFieldConfig, "fields"> {
|
|
7
|
-
/**
|
|
8
|
-
* Nested field definitions.
|
|
9
|
-
* Can be a callback (evaluated at render time) or pre-evaluated record.
|
|
10
|
-
*/
|
|
11
|
-
fields?: ((ctx: {
|
|
12
|
-
r: any;
|
|
13
|
-
}) => Record<string, any>) | Record<string, any>;
|
|
14
|
-
}
|
|
15
|
-
declare function ObjectField({
|
|
16
|
-
name,
|
|
17
|
-
label,
|
|
18
|
-
description,
|
|
19
|
-
required,
|
|
20
|
-
disabled,
|
|
21
|
-
localized,
|
|
22
|
-
locale,
|
|
23
|
-
className,
|
|
24
|
-
fields: fieldsProp,
|
|
25
|
-
wrapper,
|
|
26
|
-
layout,
|
|
27
|
-
columns,
|
|
28
|
-
defaultCollapsed
|
|
29
|
-
}: ObjectFieldProps): react_jsx_runtime216.JSX.Element | null;
|
|
30
|
-
//#endregion
|
|
31
|
-
export { ObjectField, ObjectFieldProps };
|
|
32
|
-
//# sourceMappingURL=object-field.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/object-field.tsx"],"sourcesContent":[],"mappings":";;;;;AA8BuD,UAPtC,gBAAA,SACR,cAM8C,EALrD,IAKqD,CALhD,iBAKgD,EAAA,QAAA,CAAA,CAAA;EAN9C;;;AAgFT;EACC,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA;IACA,CAAA,EAAA,GAAA;EACA,CAAA,EAAA,GA7E+B,MA6E/B,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,GA7EsD,MA6EtD,CAAA,MAAA,EAAA,GAAA,CAAA;;AAEA,iBALe,WAAA,CAKf;EAAA,IAAA;EAAA,KAAA;EAAA,WAAA;EAAA,QAAA;EAAA,QAAA;EAAA,SAAA;EAAA,MAAA;EAAA,SAAA;EAAA,MAAA,EAIQ,UAJR;EAAA,OAAA;EAAA,MAAA;EAAA,OAAA;EAAA;AAAA,CAAA,EASE,gBATF,CAAA,EASkB,oBAAA,CAAA,GAAA,CAAA,OAAA,GATlB,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/object-field.tsx"],"sourcesContent":["/**\n * ObjectField Component\n *\n * Renders nested fields for JSON object structures.\n * Supports wrapper modes (flat, collapsible) and layout modes (stack, inline, grid).\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\n\nimport type { FieldDefinition } from \"../../builder/field/field\";\nimport { createFieldRegistryProxy } from \"../../builder/proxies\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectAdmin, useAdminStore } from \"../../runtime\";\nimport type { BaseFieldProps, ObjectFieldConfig } from \"./field-types\";\nimport { gridColumnClasses } from \"./field-utils\";\nimport { FieldWrapper } from \"./field-wrapper\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ObjectFieldProps\n\textends BaseFieldProps,\n\t\tOmit<ObjectFieldConfig, \"fields\"> {\n\t/**\n\t * Nested field definitions.\n\t * Can be a callback (evaluated at render time) or pre-evaluated record.\n\t */\n\tfields?: ((ctx: { r: any }) => Record<string, any>) | Record<string, any>;\n}\n\n// ============================================================================\n// Nested Field Renderer\n// ============================================================================\n\ninterface NestedFieldRendererProps {\n\tfieldName: string;\n\tfieldDef: FieldDefinition;\n\tparentName: string;\n\tdisabled?: boolean;\n}\n\nfunction NestedFieldRenderer({\n\tfieldName,\n\tfieldDef,\n\tparentName,\n\tdisabled,\n}: NestedFieldRendererProps) {\n\tconst resolveText = useResolveText();\n\tconst fullName = `${parentName}.${fieldName}`;\n\tconst options = fieldDef[\"~options\"] || {};\n\n\t// Get the component from the field definition (registry-based)\n\t// Cast to ComponentType since MaybeLazyComponent includes lazy variants\n\tconst Component = fieldDef.field?.component as\n\t\t| React.ComponentType<any>\n\t\t| undefined;\n\n\tif (!Component) {\n\t\t// Fallback error display if no component found\n\t\treturn (\n\t\t\t<div className=\"text-sm text-destructive\">\n\t\t\t\tNo component for field type: {fieldDef.name}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Strip UI-specific options that are handled by FieldWrapper\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder,\n\t\trequired,\n\t\tdisabled: optionsDisabled,\n\t\treadOnly,\n\t\thidden,\n\t\tlocalized,\n\t\tlocale,\n\t\t...fieldSpecificOptions\n\t} = options;\n\n\t// Render using the component from the field registry\n\treturn (\n\t\t<Component\n\t\t\tname={fullName}\n\t\t\tlabel={resolveText(label)}\n\t\t\tdescription={resolveText(description)}\n\t\t\tplaceholder={resolveText(placeholder)}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled || optionsDisabled}\n\t\t\treadOnly={readOnly}\n\t\t\tlocalized={localized}\n\t\t\tlocale={locale}\n\t\t\t{...fieldSpecificOptions}\n\t\t/>\n\t);\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function ObjectField({\n\tname,\n\tlabel,\n\tdescription,\n\trequired,\n\tdisabled,\n\tlocalized,\n\tlocale,\n\tclassName,\n\tfields: fieldsProp,\n\twrapper = \"flat\",\n\tlayout = \"stack\",\n\tcolumns = 2,\n\tdefaultCollapsed = true,\n}: ObjectFieldProps) {\n\tconst resolveText = useResolveText();\n\tconst admin = useAdminStore(selectAdmin);\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed);\n\n\t// Resolve nested field definitions\n\tconst nestedFields = React.useMemo(() => {\n\t\tif (!fieldsProp) return {};\n\n\t\t// If it's a callback, evaluate it with field registry\n\t\tif (typeof fieldsProp === \"function\") {\n\t\t\tconst registeredFields = admin.getFields();\n\t\t\tconst r = createFieldRegistryProxy(registeredFields as any);\n\t\t\treturn fieldsProp({ r });\n\t\t}\n\n\t\t// Otherwise it's already evaluated\n\t\treturn fieldsProp;\n\t}, [fieldsProp, admin]);\n\n\tconst fieldEntries = Object.entries(nestedFields);\n\n\tif (fieldEntries.length === 0) {\n\t\treturn null;\n\t}\n\n\t// Render nested fields based on layout\n\tconst renderFields = () => {\n\t\tconst fieldElements = fieldEntries.map(([fieldName, fieldDef]) => (\n\t\t\t<NestedFieldRenderer\n\t\t\t\tkey={fieldName}\n\t\t\t\tfieldName={fieldName}\n\t\t\t\tfieldDef={fieldDef as FieldDefinition}\n\t\t\t\tparentName={name}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>\n\t\t));\n\n\t\tif (layout === \"inline\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-wrap items-end gap-2\">{fieldElements}</div>\n\t\t\t);\n\t\t}\n\n\t\tif (layout === \"grid\") {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"grid gap-4\",\n\t\t\t\t\t\tgridColumnClasses[columns] || \"grid-cols-2\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fieldElements}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// Default: stack\n\t\treturn <div className=\"space-y-4\">{fieldElements}</div>;\n\t};\n\n\t// Collapsible wrapper (also support legacy layout=\"collapsible\" for backwards compatibility)\n\tif (wrapper === \"collapsible\" || (layout as string) === \"collapsible\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\tclassName=\"flex w-full items-center justify-between p-3 text-left hover:bg-muted/50\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<Icon icon=\"ph:caret-right\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Icon icon=\"ph:caret-down\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<span className=\"font-medium\">{resolveText(label ?? name)}</span>\n\t\t\t\t\t\t{required && <span className=\"text-destructive\">*</span>}\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t<div className=\"border-t p-4\">\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<p className=\"mb-4 text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t{resolveText(description)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{renderFields()}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Flat wrapper with optional label\n\tif (label) {\n\t\treturn (\n\t\t\t<FieldWrapper\n\t\t\t\tname={name}\n\t\t\t\tlabel={resolveText(label)}\n\t\t\t\tdescription={description}\n\t\t\t\trequired={required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tlocalized={localized}\n\t\t\t\tlocale={locale}\n\t\t\t>\n\t\t\t\t<div className={cn(\"pt-1\", className)}>{renderFields()}</div>\n\t\t\t</FieldWrapper>\n\t\t);\n\t}\n\n\t// No label - just render fields\n\treturn <div className={className}>{renderFields()}</div>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA4CA,SAAS,oBAAoB,EAC5B,WACA,UACA,YACA,YAC4B;CAC5B,MAAM,cAAc,gBAAgB;CACpC,MAAM,WAAW,GAAG,WAAW,GAAG;CAClC,MAAM,UAAU,SAAS,eAAe,EAAE;CAI1C,MAAM,YAAY,SAAS,OAAO;AAIlC,KAAI,CAAC,UAEJ,QACC,qBAAC;EAAI,WAAU;aAA2B,iCACX,SAAS;GAClC;CAKR,MAAM,EACL,OACA,aACA,aACA,UACA,UAAU,iBACV,UACA,QACA,WACA,QACA,GAAG,yBACA;AAGJ,QACC,oBAAC;EACA,MAAM;EACN,OAAO,YAAY,MAAM;EACzB,aAAa,YAAY,YAAY;EACrC,aAAa,YAAY,YAAY;EAC3B;EACV,UAAU,YAAY;EACZ;EACC;EACH;EACR,GAAI;GACH;;AAQJ,SAAgB,YAAY,EAC3B,MACA,OACA,aACA,UACA,UACA,WACA,QACA,WACA,QAAQ,YACR,UAAU,QACV,SAAS,SACT,UAAU,GACV,mBAAmB,QACC;CACpB,MAAM,cAAc,gBAAgB;CACpC,MAAM,QAAQ,cAAc,YAAY;CACxC,MAAM,CAAC,aAAa,kBAAkBA,QAAM,SAAS,iBAAiB;CAGtE,MAAM,eAAeA,QAAM,cAAc;AACxC,MAAI,CAAC,WAAY,QAAO,EAAE;AAG1B,MAAI,OAAO,eAAe,WAGzB,QAAO,WAAW,EAAE,GADV,yBADe,MAAM,WAAW,CACiB,EACpC,CAAC;AAIzB,SAAO;IACL,CAAC,YAAY,MAAM,CAAC;CAEvB,MAAM,eAAe,OAAO,QAAQ,aAAa;AAEjD,KAAI,aAAa,WAAW,EAC3B,QAAO;CAIR,MAAM,qBAAqB;EAC1B,MAAM,gBAAgB,aAAa,KAAK,CAAC,WAAW,cACnD,oBAAC;GAEW;GACD;GACV,YAAY;GACF;KAJL,UAKJ,CACD;AAEF,MAAI,WAAW,SACd,QACC,oBAAC;GAAI,WAAU;aAAkC;IAAoB;AAIvE,MAAI,WAAW,OACd,QACC,oBAAC;GACA,WAAW,GACV,cACA,kBAAkB,YAAY,cAC9B;aAEA;IACI;AAKR,SAAO,oBAAC;GAAI,WAAU;aAAa;IAAoB;;AAIxD,KAAI,YAAY,iBAAkB,WAAsB,cACvD,QACC,qBAAC;EACA,WAAW,GACV,kEACA,UACA;aAED,oBAAC;GACA,MAAK;GACL,eAAe,eAAe,CAAC,YAAY;GAC3C,WAAU;GACA;aAEV,qBAAC;IAAI,WAAU;;KACb,cACA,oBAAC;MAAK,MAAK;MAAiB,WAAU;OAAY,GAElD,oBAAC;MAAK,MAAK;MAAgB,WAAU;OAAY;KAElD,oBAAC;MAAK,WAAU;gBAAe,YAAY,SAAS,KAAK;OAAQ;KAChE,YAAY,oBAAC;MAAK,WAAU;gBAAmB;OAAQ;;KACnD;IACE,EACR,CAAC,eACD,qBAAC;GAAI,WAAU;cACb,eACA,oBAAC;IAAE,WAAU;cACX,YAAY,YAAY;KACtB,EAEJ,cAAc;IACV;GAEF;AAKR,KAAI,MACH,QACC,oBAAC;EACM;EACN,OAAO,YAAY,MAAM;EACZ;EACH;EACA;EACC;EACH;YAER,oBAAC;GAAI,WAAW,GAAG,QAAQ,UAAU;aAAG,cAAc;IAAO;GAC/C;AAKjB,QAAO,oBAAC;EAAe;YAAY,cAAc;GAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cards-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/cards-display.tsx"],"sourcesContent":["/**\n * Cards Display - card grid with image, title, subtitle, meta\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { useResolveText } from \"../../../../i18n/hooks\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tformatCellValue,\n\tformatColumnHeader,\n\tgetImageUrl,\n\tgetItemDisplayValue,\n\ttype RelationDisplayProps,\n} from \"./types\";\n\nconst gridCols = {\n\t1: \"grid-cols-1\",\n\t2: \"grid-cols-1 sm:grid-cols-2\",\n\t3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n\t4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n};\n\nfunction CardsSkeleton({\n\tcount = 3,\n\tgridColumns = 2,\n\thasImage = false,\n}: {\n\tcount?: number;\n\tgridColumns?: 1 | 2 | 3 | 4;\n\thasImage?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className={`grid gap-4 ${gridCols[gridColumns]}`}>\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={key}\n\t\t\t\t\tclassName=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{hasImage && <Skeleton className=\"aspect-video w-full\" />}\n\t\t\t\t\t<div className=\"p-3 space-y-2\">\n\t\t\t\t\t\t<Skeleton className=\"h-5 w-3/4 rounded\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-1/2 rounded\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function CardsDisplay({\n\titems,\n\tcollection,\n\tactions,\n\teditable = false,\n\tfields,\n\tgridColumns = 2,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst resolveText = useResolveText();\n\tconst getTitle = (item: any) =>\n\t\titem[fields?.title || \"_title\"] || getItemDisplayValue(item);\n\tconst getSubtitle = (item: any) =>\n\t\tfields?.subtitle ? item[fields.subtitle] : null;\n\tconst getImage = (item: any) => getImageUrl(item, fields?.image);\n\tconst getMeta = (item: any) => {\n\t\tif (!fields?.meta?.length) return [];\n\t\treturn fields.meta\n\t\t\t.map((field) => ({\n\t\t\t\tlabel: formatColumnHeader(field),\n\t\t\t\tvalue: formatCellValue(item[field]),\n\t\t\t}))\n\t\t\t.filter((m) => m.value !== \"-\");\n\t};\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn (\n\t\t\t<CardsSkeleton\n\t\t\t\tcount={loadingCount}\n\t\t\t\tgridColumns={gridColumns}\n\t\t\t\thasImage={!!fields?.image}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={`grid gap-4 ${gridCols[gridColumns]}`}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst image = getImage(item);\n\t\t\t\tconst subtitle = getSubtitle(item);\n\t\t\t\tconst meta = getMeta(item);\n\n\t\t\t\tconst cardContent = (\n\t\t\t\t\t<div className=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm hover:bg-card/50 transition-colors overflow-hidden h-full\">\n\t\t\t\t\t\t{image && (\n\t\t\t\t\t\t\t<div className=\"aspect-video bg-muted\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\t\talt={getTitle(item)}\n\t\t\t\t\t\t\t\t\tclassName=\"w-full h-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"p-3\">\n\t\t\t\t\t\t\t<div className=\"flex items-start justify-between gap-2\">\n\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t<div className=\"font-medium truncate\">{getTitle(item)}</div>\n\t\t\t\t\t\t\t\t\t{subtitle && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"text-sm text-muted-foreground truncate mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/* Action buttons for editable mode */}\n\t\t\t\t\t\t\t\t{editable && (actions?.onEdit || actions?.onRemove) && (\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tactions.onEdit?.(item);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tactions.onRemove?.(item);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{meta.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-x-3 gap-y-1 mt-2 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{meta.map((m) => (\n\t\t\t\t\t\t\t\t\t\t<span key={String(m.label)}>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t{resolveText(m.label)}:\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t{m.value}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\t\t// Non-editable with sheet edit\n\t\t\t\tif (!editable && actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"text-left w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cardContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Non-editable with link to detail\n\t\t\t\tif (!editable && linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cardContent}\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Editable or read-only\n\t\t\t\treturn <div key={item.id}>{cardContent}</div>;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chips-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/chips-display.tsx"],"sourcesContent":["/**\n * Chips Display - compact badge/tag style\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Badge } from \"../../../ui/badge\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { getItemDisplayValue, type RelationDisplayProps } from \"./types\";\n\nfunction ChipsSkeleton({ count = 3 }: { count?: number }) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<Skeleton key={key} className=\"h-6 w-20 rounded-full\" />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function ChipsDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst iconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3 text-muted-foreground\",\n\t});\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <ChipsSkeleton count={loadingCount} />;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{items.map((item) => {\n\t\t\t\tconst displayText = getItemDisplayValue(item);\n\n\t\t\t\t// Editable mode - show edit/remove buttons\n\t\t\t\tif (editable && (actions?.onEdit || actions?.onRemove)) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 rounded-md border bg-secondary/50 pl-2 pr-1 py-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t<span className=\"text-sm\">{displayText}</span>\n\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-5 w-5\"\n\t\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-5 w-5\"\n\t\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Clickable for edit in sheet\n\t\t\t\tif (actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"inline-flex\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclassName=\"hover:bg-secondary/80 cursor-pointer gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Link to detail page\n\t\t\t\tif (linkToDetail && actions?.onNavigate) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"inline-flex\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclassName=\"hover:bg-secondary/80 cursor-pointer gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Read-only badge\n\t\t\t\treturn (\n\t\t\t\t\t<Badge key={item.id} variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t{displayText}\n\t\t\t\t\t</Badge>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;AAaA,SAAS,cAAc,EAAE,QAAQ,KAAyB;AAMzD,QACC,oBAAC;EAAI,WAAU;YANKA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP,CAIe,KAAK,QAClB,oBAAC,YAAmB,WAAU,2BAAf,IAAyC,CACvD;GACG;;AAIR,SAAgB,aAAa,EAC5B,OACA,YACA,gBACA,SACA,WAAW,OACX,eAAe,OACf,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,cAAc,mBAAmB,gBAAgB,EACtD,WAAW,gCACX,CAAC;AAGF,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC,iBAAc,OAAO,eAAgB;AAG9C,QACC,oBAAC;EAAI,WAAU;YACb,MAAM,KAAK,SAAS;GACpB,MAAM,cAAc,oBAAoB,KAAK;AAG7C,OAAI,aAAa,SAAS,UAAU,SAAS,UAC5C,QACC,qBAAC;IAEA,WAAU;;KAET;KACD,oBAAC;MAAK,WAAU;gBAAW;OAAmB;KAC7C,SAAS,UACT,oBAAC;MACA,MAAK;MACL,SAAQ;MACR,MAAK;MACL,WAAU;MACV,eAAe,QAAQ,SAAS,KAAK;MACrC,cAAW;gBAEX,oBAAC;OAAK,MAAK;OAAY,WAAU;QAAW;OACpC;KAET,SAAS,YACT,oBAAC;MACA,MAAK;MACL,SAAQ;MACR,MAAK;MACL,WAAU;MACV,eAAe,QAAQ,WAAW,KAAK;MACvC,cAAW;gBAEX,oBAAC;OAAK,MAAK;OAAO,WAAU;QAAW;OAC/B;;MA3BL,KAAK,GA6BL;AAKR,OAAI,SAAS,OACZ,QACC,oBAAC;IAEA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;cAEV,qBAAC;KACA,SAAQ;KACR,WAAU;;MAET;MACA;MACD,oBAAC;OAAK,MAAK;OAAY,WAAU;QAAW;;MACrC;MAZH,KAAK,GAaF;AAKX,OAAI,gBAAgB,SAAS,WAC5B,QACC,oBAAC;IAEY;IACZ,IAAI,KAAK;IACT,WAAU;cAEV,qBAAC;KACA,SAAQ;KACR,WAAU;gBAET,aACA;MACM;MAXH,KAAK,GAYU;AAKvB,UACC,qBAAC;IAAoB,SAAQ;IAAY,WAAU;eACjD,aACA;MAFU,KAAK,GAGT;IAER;GACG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grid-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/grid-display.tsx"],"sourcesContent":["/**\n * Grid Display - compact grid with thumbnails\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tgetImageUrl,\n\tgetItemDisplayValue,\n\ttype RelationDisplayProps,\n} from \"./types\";\n\nconst gridCols = {\n\t1: \"grid-cols-1\",\n\t2: \"grid-cols-2\",\n\t3: \"grid-cols-2 sm:grid-cols-3\",\n\t4: \"grid-cols-2 sm:grid-cols-3 lg:grid-cols-4\",\n};\n\nfunction GridSkeleton({\n\tcount = 6,\n\tgridColumns = 3,\n}: {\n\tcount?: number;\n\tgridColumns?: 1 | 2 | 3 | 4;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className={`grid gap-2 ${gridCols[gridColumns]}`}>\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={key}\n\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t>\n\t\t\t\t\t<Skeleton className=\"size-8 shrink-0 rounded\" />\n\t\t\t\t\t<Skeleton className=\"h-4 flex-1 max-w-[120px] rounded\" />\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function GridDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\tfields,\n\tgridColumns = 3,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 6,\n}: RelationDisplayProps) {\n\tconst getTitle = (item: any) =>\n\t\titem[fields?.title || \"_title\"] || getItemDisplayValue(item);\n\tconst getImage = (item: any) => getImageUrl(item, fields?.image);\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <GridSkeleton count={loadingCount} gridColumns={gridColumns} />;\n\t}\n\n\treturn (\n\t\t<div className={`grid gap-2 ${gridCols[gridColumns]}`}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst image = getImage(item);\n\n\t\t\t\tconst gridContent = (\n\t\t\t\t\t<div className=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2 hover:bg-card/50 transition-colors h-full\">\n\t\t\t\t\t\t{image ? (\n\t\t\t\t\t\t\t<div className=\"size-8 rounded bg-muted shrink-0 overflow-hidden\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\t\talt={getTitle(item)}\n\t\t\t\t\t\t\t\t\tclassName=\"w-full h-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : collectionIcon ? (\n\t\t\t\t\t\t\t<div className=\"size-8 rounded bg-muted shrink-0 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t{resolveIconElement(collectionIcon, {\n\t\t\t\t\t\t\t\t\tclassName: \"size-4 text-muted-foreground\",\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<span className=\"text-sm truncate flex-1\">{getTitle(item)}</span>\n\t\t\t\t\t\t{/* Action buttons for editable mode */}\n\t\t\t\t\t\t{editable && (actions?.onEdit || actions?.onRemove) && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\tactions.onEdit?.(item);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\tactions.onRemove?.(item);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\t\t// Non-editable with sheet edit\n\t\t\t\tif (!editable && actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"text-left w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{gridContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Non-editable with link to detail\n\t\t\t\tif (!editable && linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{gridContent}\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Editable or read-only\n\t\t\t\treturn <div key={item.id}>{gridContent}</div>;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,WAAW;CAChB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH;AAED,SAAS,aAAa,EACrB,QAAQ,GACR,cAAc,KAIZ;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,QACC,oBAAC;EAAI,WAAW,cAAc,SAAS;YACrC,aAAa,KAAK,QAClB,qBAAC;GAEA,WAAU;cAEV,oBAAC,YAAS,WAAU,4BAA4B,EAChD,oBAAC,YAAS,WAAU,qCAAqC;KAJpD,IAKA,CACL;GACG;;AAIR,SAAgB,YAAY,EAC3B,OACA,YACA,gBACA,SACA,WAAW,OACX,QACA,cAAc,GACd,eAAe,OACf,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,YAAY,SACjB,KAAK,QAAQ,SAAS,aAAa,oBAAoB,KAAK;CAC7D,MAAM,YAAY,SAAc,YAAY,MAAM,QAAQ,MAAM;AAGhE,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC;EAAa,OAAO;EAA2B;GAAe;AAGvE,QACC,oBAAC;EAAI,WAAW,cAAc,SAAS;YACrC,MAAM,KAAK,SAAS;GACpB,MAAM,QAAQ,SAAS,KAAK;GAE5B,MAAM,cACL,qBAAC;IAAI,WAAU;;KACb,QACA,oBAAC;MAAI,WAAU;gBACd,oBAAC;OACA,KAAK;OACL,KAAK,SAAS,KAAK;OACnB,WAAU;QACT;OACG,GACH,iBACH,oBAAC;MAAI,WAAU;gBACb,mBAAmB,gBAAgB,EACnC,WAAW,gCACX,CAAC;OACG,GACH;KACJ,oBAAC;MAAK,WAAU;gBAA2B,SAAS,KAAK;OAAQ;KAEhE,aAAa,SAAS,UAAU,SAAS,aACzC,qBAAC;MAAI,WAAU;iBACb,SAAS,UACT,oBAAC;OACA,MAAK;OACL,SAAQ;OACR,MAAK;OACL,WAAU;OACV,UAAU,MAAM;AACf,UAAE,gBAAgB;AAClB,UAAE,iBAAiB;AACnB,gBAAQ,SAAS,KAAK;;OAEvB,cAAW;iBAEX,oBAAC;QAAK,MAAK;QAAY,WAAU;SAAW;QACpC,EAET,SAAS,YACT,oBAAC;OACA,MAAK;OACL,SAAQ;OACR,MAAK;OACL,WAAU;OACV,UAAU,MAAM;AACf,UAAE,gBAAgB;AAClB,UAAE,iBAAiB;AACnB,gBAAQ,WAAW,KAAK;;OAEzB,cAAW;iBAEX,oBAAC;QAAK,MAAK;QAAO,WAAU;SAAW;QAC/B;OAEL;;KAEF;AAIP,OAAI,CAAC,YAAY,SAAS,OACzB,QACC,oBAAC;IAEA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;cAET;MALI,KAAK,GAMF;AAKX,OAAI,CAAC,YAAY,aAChB,QACC,oBAAC;IAEY;IACZ,IAAI,KAAK;IACT,WAAU;cAET;MALI,KAAK,GAMU;AAKvB,UAAO,oBAAC,mBAAmB,eAAV,KAAK,GAAuB;IAC5C;GACG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/list-display.tsx"],"sourcesContent":["/**\n * List Display - vertical list with action buttons\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { getItemDisplayValue, type RelationDisplayProps } from \"./types\";\n\nfunction ListSkeleton({\n\tcount = 3,\n\teditable = false,\n}: {\n\tcount?: number;\n\teditable?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\tif (editable) {\n\t\treturn (\n\t\t\t<div className=\"space-y-2 rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm p-3\">\n\t\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Skeleton className=\"size-3.5 rounded\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 flex-1 max-w-[200px] rounded\" />\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className=\"space-y-1\">\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<li key={key} className=\"flex items-center gap-1\">\n\t\t\t\t\t<Skeleton className=\"size-3 rounded\" />\n\t\t\t\t\t<Skeleton className=\"h-4 w-32 rounded\" />\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n\nexport function ListDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\torderable = false,\n\tlinkToDetail = false,\n\trenderItem,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst iconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3.5 text-muted-foreground shrink-0\",\n\t});\n\tconst smallIconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3 text-muted-foreground\",\n\t});\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <ListSkeleton count={loadingCount} editable={editable} />;\n\t}\n\n\t// Editable list with cards\n\tif (editable) {\n\t\treturn (\n\t\t\t<div className=\"space-y-2 rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm p-3\">\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Drag Handle */}\n\t\t\t\t\t\t{orderable && (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"cursor-grab text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\taria-label=\"Drag to reorder\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:dots-six-vertical\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Item Display */}\n\t\t\t\t\t\t<div className=\"flex-1 flex items-center gap-2 min-w-0\">\n\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t{renderItem ? (\n\t\t\t\t\t\t\t\trenderItem(item, index)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"text-sm truncate\">\n\t\t\t\t\t\t\t\t\t{getItemDisplayValue(item)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Edit Button */}\n\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\tclassName=\"h-7 w-7 shrink-0\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\ttitle=\"Edit\"\n\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Remove Button */}\n\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\tclassName=\"h-7 w-7 shrink-0\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\ttitle=\"Remove\"\n\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Read-only list\n\treturn (\n\t\t<ul className=\"space-y-1\">\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst displayText = renderItem\n\t\t\t\t\t? renderItem(item, index)\n\t\t\t\t\t: getItemDisplayValue(item);\n\n\t\t\t\t// Clickable for sheet edit\n\t\t\t\tif (actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\tclassName=\"text-sm text-primary hover:underline inline-flex items-center gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Link to detail page\n\t\t\t\tif (linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\t\tclassName=\"text-sm text-primary hover:underline inline-flex items-center gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:arrow-right\" className=\"size-3\" />\n\t\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Read-only\n\t\t\t\treturn (\n\t\t\t\t\t<li key={item.id} className=\"text-sm flex items-center gap-1\">\n\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t{displayText}\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ul>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,SAAS,aAAa,EACrB,QAAQ,GACR,WAAW,SAIT;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,KAAI,SACH,QACC,oBAAC;EAAI,WAAU;YACb,aAAa,KAAK,QAClB,qBAAC;GAEA,WAAU;cAEV,oBAAC,YAAS,WAAU,qBAAqB,EACzC,oBAAC,YAAS,WAAU,qCAAqC;KAJpD,IAKA,CACL;GACG;AAIR,QACC,oBAAC;EAAG,WAAU;YACZ,aAAa,KAAK,QAClB,qBAAC;GAAa,WAAU;cACvB,oBAAC,YAAS,WAAU,mBAAmB,EACvC,oBAAC,YAAS,WAAU,qBAAqB;KAFjC,IAGJ,CACJ;GACE;;AAIP,SAAgB,YAAY,EAC3B,OACA,YACA,gBACA,SACA,WAAW,OACX,YAAY,OACZ,eAAe,OACf,YACA,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,cAAc,mBAAmB,gBAAgB,EACtD,WAAW,2CACX,CAAC;CACF,MAAM,mBAAmB,mBAAmB,gBAAgB,EAC3D,WAAW,gCACX,CAAC;AAGF,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC;EAAa,OAAO;EAAwB;GAAY;AAIjE,KAAI,SACH,QACC,oBAAC;EAAI,WAAU;YACb,MAAM,KAAK,MAAM,UACjB,qBAAC;GAEA,WAAU;;IAGT,aACA,oBAAC;KACA,MAAK;KACL,WAAU;KACV,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAuB,WAAU;OAAY;MAChD;IAIV,qBAAC;KAAI,WAAU;gBACb,aACA,aACA,WAAW,MAAM,MAAM,GAEvB,oBAAC;MAAK,WAAU;gBACd,oBAAoB,KAAK;OACpB;MAEH;IAGL,SAAS,UACT,oBAAC;KACA,MAAK;KACL,SAAQ;KACR,MAAK;KACL,WAAU;KACV,eAAe,QAAQ,SAAS,KAAK;KACrC,OAAM;KACN,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAY,WAAU;OAAY;MACrC;IAIT,SAAS,YACT,oBAAC;KACA,MAAK;KACL,SAAQ;KACR,MAAK;KACL,WAAU;KACV,eAAe,QAAQ,WAAW,KAAK;KACvC,OAAM;KACN,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAO,WAAU;OAAY;MAChC;;KArDL,KAAK,GAuDL,CACL;GACG;AAKR,QACC,oBAAC;EAAG,WAAU;YACZ,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,cAAc,aACjB,WAAW,MAAM,MAAM,GACvB,oBAAoB,KAAK;AAG5B,OAAI,SAAS,OACZ,QACC,oBAAC,kBACA,qBAAC;IACA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;;KAET;KACA;KACD,oBAAC;MAAK,MAAK;MAAY,WAAU;OAAW;;KACpC,IATD,KAAK,GAUT;AAKP,OAAI,aACH,QACC,oBAAC,kBACA,qBAAC;IACY;IACZ,IAAI,KAAK;IACT,WAAU;;KAET;KACA;KACD,oBAAC;MAAK,MAAK;MAAiB,WAAU;OAAW;;KAC7B,IATb,KAAK,GAUT;AAKP,UACC,qBAAC;IAAiB,WAAU;eAC1B,kBACA;MAFO,KAAK,GAGT;IAEL;GACE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/table-display.tsx"],"sourcesContent":["/**\n * Table Display - table with columns\n *\n * Uses the same cell components as TableView for consistent rendering.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tformatColumnHeader,\n\ttype RelationDisplayProps,\n\tresolveCellForColumn,\n} from \"./types\";\n\nfunction TableSkeleton({\n\tcount = 3,\n\tcolumns = [\"_title\"],\n\thasActions = false,\n}: {\n\tcount?: number;\n\tcolumns?: string[];\n\thasActions?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<table className=\"w-full text-sm\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"border-b border-border/40 bg-card/10 backdrop-blur-sm\">\n\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t<th key={col} className=\"px-3 py-2 text-left font-medium\">\n\t\t\t\t\t\t\t\t{formatColumnHeader(col)}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{hasActions && <th className=\"px-3 py-2 w-20\" />}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t\t\t<tr key={key} className=\"border-b last:border-0\">\n\t\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t\t<td key={col} className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-24 rounded\" />\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hasActions && (\n\t\t\t\t\t\t\t\t<td className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-end gap-1\">\n\t\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-7 w-7 rounded\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t))}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n}\n\n/**\n * Cell renderer that uses resolved cell components from field registry\n */\nfunction CellRenderer({\n\titem,\n\tcolumn,\n\tcollectionConfig,\n}: {\n\titem: any;\n\tcolumn: string;\n\tcollectionConfig?: RelationDisplayProps[\"collectionConfig\"];\n}) {\n\tconst resolved = React.useMemo(\n\t\t() => resolveCellForColumn(column, collectionConfig),\n\t\t[column, collectionConfig],\n\t);\n\n\tconst value = item[resolved.accessorKey];\n\tconst { component: CellComponent, fieldDef, needsFieldDef } = resolved;\n\n\tif (needsFieldDef) {\n\t\treturn <CellComponent value={value} row={item} fieldDef={fieldDef} />;\n\t}\n\n\treturn <CellComponent value={value} row={item} />;\n}\n\nexport function TableDisplay({\n\titems,\n\tcollection,\n\tactions,\n\teditable = false,\n\tcolumns = [\"_title\"],\n\tlinkToDetail = false,\n\tcollectionConfig,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst hasActions = editable || linkToDetail || !!actions?.onEdit;\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn (\n\t\t\t<TableSkeleton\n\t\t\t\tcount={loadingCount}\n\t\t\t\tcolumns={columns}\n\t\t\t\thasActions={hasActions}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<table className=\"w-full text-sm\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"border-b border-border/40 bg-card/10 backdrop-blur-sm\">\n\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t<th key={col} className=\"px-3 py-2 text-left font-medium\">\n\t\t\t\t\t\t\t\t{formatColumnHeader(col)}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{hasActions && <th className=\"px-3 py-2 w-20\" />}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<tr key={item.id} className=\"border-b last:border-0\">\n\t\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t\t<td key={col} className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<CellRenderer\n\t\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\t\tcolumn={col}\n\t\t\t\t\t\t\t\t\t\tcollectionConfig={collectionConfig}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hasActions && (\n\t\t\t\t\t\t\t\t<td className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-end gap-1\">\n\t\t\t\t\t\t\t\t\t\t{/* Edit button */}\n\t\t\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Remove button (editable mode) */}\n\t\t\t\t\t\t\t\t\t\t{editable && actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Link to detail (non-editable mode) */}\n\t\t\t\t\t\t\t\t\t\t{!editable && linkToDetail && !actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-primary hover:underline\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:arrow-right\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t))}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAS,cAAc,EACtB,QAAQ,GACR,UAAU,CAAC,SAAS,EACpB,aAAa,SAKX;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,QACC,oBAAC;EAAI,WAAU;YACd,qBAAC;GAAM,WAAU;cAChB,oBAAC,qBACA,qBAAC;IAAG,WAAU;eACZ,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACtB,mBAAmB,IAAI;OADhB,IAEJ,CACJ,EACD,cAAc,oBAAC,QAAG,WAAU,mBAAmB;KAC5C,GACE,EACR,oBAAC,qBACC,aAAa,KAAK,QAClB,qBAAC;IAAa,WAAU;eACtB,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACvB,oBAAC,YAAS,WAAU,qBAAqB;OADjC,IAEJ,CACJ,EACD,cACA,oBAAC;KAAG,WAAU;eACb,oBAAC;MAAI,WAAU;gBACd,oBAAC,YAAS,WAAU,oBAAoB;OACnC;MACF;MAXE,IAaJ,CACJ,GACK;IACD;GACH;;;;;AAOR,SAAS,aAAa,EACrB,MACA,QACA,oBAKE;CACF,MAAM,WAAWA,QAAM,cAChB,qBAAqB,QAAQ,iBAAiB,EACpD,CAAC,QAAQ,iBAAiB,CAC1B;CAED,MAAM,QAAQ,KAAK,SAAS;CAC5B,MAAM,EAAE,WAAW,eAAe,UAAU,kBAAkB;AAE9D,KAAI,cACH,QAAO,oBAAC;EAAqB;EAAO,KAAK;EAAgB;GAAY;AAGtE,QAAO,oBAAC;EAAqB;EAAO,KAAK;GAAQ;;AAGlD,SAAgB,aAAa,EAC5B,OACA,YACA,SACA,WAAW,OACX,UAAU,CAAC,SAAS,EACpB,eAAe,OACf,kBACA,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,aAAa,YAAY,gBAAgB,CAAC,CAAC,SAAS;AAG1D,KAAI,aAAa,MAAM,WAAW,EACjC,QACC,oBAAC;EACA,OAAO;EACE;EACG;GACX;AAIJ,QACC,oBAAC;EAAI,WAAU;YACd,qBAAC;GAAM,WAAU;cAChB,oBAAC,qBACA,qBAAC;IAAG,WAAU;eACZ,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACtB,mBAAmB,IAAI;OADhB,IAEJ,CACJ,EACD,cAAc,oBAAC,QAAG,WAAU,mBAAmB;KAC5C,GACE,EACR,oBAAC,qBACC,MAAM,KAAK,SACX,qBAAC;IAAiB,WAAU;eAC1B,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACvB,oBAAC;MACM;MACN,QAAQ;MACU;OACjB;OALM,IAMJ,CACJ,EACD,cACA,oBAAC;KAAG,WAAU;eACb,qBAAC;MAAI,WAAU;;OAEb,SAAS,UACT,oBAAC;QACA,MAAK;QACL,SAAQ;QACR,MAAK;QACL,WAAU;QACV,eAAe,QAAQ,SAAS,KAAK;QACrC,cAAW;kBAEX,oBAAC;SAAK,MAAK;SAAY,WAAU;UAAW;SACpC;OAIT,YAAY,SAAS,YACrB,oBAAC;QACA,MAAK;QACL,SAAQ;QACR,MAAK;QACL,WAAU;QACV,eAAe,QAAQ,WAAW,KAAK;QACvC,cAAW;kBAEX,oBAAC;SAAK,MAAK;SAAO,WAAU;UAAW;SAC/B;OAIT,CAAC,YAAY,gBAAgB,CAAC,SAAS,UACvC,oBAAC;QACY;QACZ,IAAI,KAAK;QACT,WAAU;kBAEV,oBAAC;SAAK,MAAK;SAAiB,WAAU;UAAW;SAC7B;;OAEjB;MACF;MApDE,KAAK,GAsDT,CACJ,GACK;IACD;GACH"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import "../../../../../server/index.mjs";
|
|
2
|
-
import "../../../../builder/field/field.mjs";
|
|
3
|
-
import "react";
|
|
4
|
-
|
|
5
|
-
//#region src/client/components/fields/relation/displays/types.d.ts
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Display mode for relation items
|
|
9
|
-
*/
|
|
10
|
-
type RelationDisplayMode = "chips" | "list" | "table" | "cards" | "grid";
|
|
11
|
-
/**
|
|
12
|
-
* Field mapping for cards/grid display
|
|
13
|
-
*/
|
|
14
|
-
interface RelationDisplayFields {
|
|
15
|
-
title?: string;
|
|
16
|
-
subtitle?: string;
|
|
17
|
-
image?: string;
|
|
18
|
-
meta?: string[];
|
|
19
|
-
}
|
|
20
|
-
//#endregion
|
|
21
|
-
export { RelationDisplayFields, RelationDisplayMode };
|
|
22
|
-
//# sourceMappingURL=types.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../src/client/components/fields/relation/displays/types.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAqBY,mBAAA;;;;UAcK,qBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","names":["component: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>","accessorKey: string"],"sources":["../../../../../../src/client/components/fields/relation/displays/types.ts"],"sourcesContent":["/**\n * Shared types for relation display components\n */\n\nimport type * as React from \"react\";\nimport type { ComponentReference } from \"#questpie/admin/server\";\nimport type { FieldDefinition } from \"../../../../builder/field/field\";\nimport { formatLabel } from \"../../../../lib/utils\";\nimport { DefaultCell } from \"../../../../views/collection/cells\";\n\n/**\n * Icon type that can be a React component or a server-defined ComponentReference\n */\nexport type IconType =\n\t| React.ComponentType<{ className?: string }>\n\t| ComponentReference\n\t| undefined;\n\n/**\n * Display mode for relation items\n */\nexport type RelationDisplayMode = \"chips\" | \"list\" | \"table\" | \"cards\" | \"grid\";\n\n/**\n * Action handlers for relation items\n */\nexport interface RelationItemActions {\n\tonEdit?: (item: any) => void;\n\tonRemove?: (item: any) => void;\n\tonNavigate?: (item: any) => void;\n}\n\n/**\n * Field mapping for cards/grid display\n */\nexport interface RelationDisplayFields {\n\ttitle?: string;\n\tsubtitle?: string;\n\timage?: string;\n\tmeta?: string[];\n}\n\n/**\n * Collection field definitions for cell rendering\n */\nexport interface CollectionFieldsConfig {\n\tfields?: Record<string, FieldDefinition>;\n}\n\n/**\n * Common props for all display components\n */\nexport interface RelationDisplayProps {\n\t/**\n\t * Items to display\n\t */\n\titems: any[];\n\n\t/**\n\t * Collection name for navigation links\n\t */\n\tcollection: string;\n\n\t/**\n\t * Collection icon (React component or server ComponentReference)\n\t */\n\tcollectionIcon?: IconType;\n\n\t/**\n\t * Action handlers\n\t */\n\tactions?: RelationItemActions;\n\n\t/**\n\t * Whether items are editable (shows edit/remove buttons)\n\t */\n\teditable?: boolean;\n\n\t/**\n\t * Whether items are orderable (shows drag handle)\n\t */\n\torderable?: boolean;\n\n\t/**\n\t * Columns to show in table display\n\t */\n\tcolumns?: string[];\n\n\t/**\n\t * Field mapping for cards/grid display\n\t */\n\tfields?: RelationDisplayFields;\n\n\t/**\n\t * Number of columns for grid/cards layout\n\t */\n\tgridColumns?: 1 | 2 | 3 | 4;\n\n\t/**\n\t * Whether to show navigation link to detail page\n\t */\n\tlinkToDetail?: boolean;\n\n\t/**\n\t * Custom render function for items\n\t */\n\trenderItem?: (item: any, index: number) => React.ReactNode;\n\n\t/**\n\t * Collection config for cell rendering (enables proper cell components)\n\t */\n\tcollectionConfig?: CollectionFieldsConfig;\n\n\t/**\n\t * Whether items are being loaded\n\t */\n\tisLoading?: boolean;\n\n\t/**\n\t * Number of skeleton items to show when loading\n\t */\n\tloadingCount?: number;\n}\n\n/**\n * Get display value from item (_title fallback chain)\n */\nexport function getItemDisplayValue(item: any): string {\n\treturn item?._title || item?.name || item?.title || item?.id || \"\";\n}\n\n/**\n * Format column header (camelCase to Title Case)\n */\nexport function formatColumnHeader(column: string): string {\n\tif (column === \"_title\") return \"Name\";\n\treturn formatLabel(column);\n}\n\n/**\n * Format cell value for display\n */\nexport function formatCellValue(value: unknown): string {\n\tif (value === null || value === undefined) return \"-\";\n\tif (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n\tif (value instanceof Date) return value.toLocaleDateString();\n\tif (typeof value === \"object\") return JSON.stringify(value);\n\treturn String(value);\n}\n\n/**\n * Get image URL from item field\n */\nexport function getImageUrl(item: any, imageField?: string): string | null {\n\tif (!imageField) return null;\n\tconst imageValue = item[imageField];\n\tif (typeof imageValue === \"string\") return imageValue;\n\tif (imageValue?.url) return imageValue.url;\n\tif (imageValue?.key) return imageValue.key;\n\treturn null;\n}\n\n/**\n * Field types that need fieldDef passed to their cell component\n */\nconst FIELD_TYPES_NEEDING_FIELD_DEF = new Set([\n\t\"object\",\n\t\"array\",\n\t\"relation\",\n\t\"reverseRelation\",\n]);\n\n/**\n * Resolved cell info for rendering\n */\nexport interface ResolvedCell {\n\tcomponent: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>;\n\tfieldDef?: FieldDefinition;\n\tneedsFieldDef: boolean;\n\taccessorKey: string;\n}\n\n/**\n * Resolve cell component for a column based on field config\n * Uses the same priority as buildColumns:\n * 1. Cell from field registry (fieldDef.cell.component)\n * 2. DefaultCell fallback\n */\nexport function resolveCellForColumn(\n\tcolumn: string,\n\tcollectionConfig?: CollectionFieldsConfig,\n): ResolvedCell {\n\tconst fieldDef = collectionConfig?.fields?.[column];\n\tconst fieldType = fieldDef?.name ?? \"text\";\n\tconst fieldOptions = (fieldDef as any)?.[\"~options\"] ?? {};\n\n\t// Resolve cell component\n\tlet component: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>;\n\n\tif (fieldDef?.cell?.component) {\n\t\t// Cell from field registry\n\t\tcomponent = fieldDef.cell.component as React.ComponentType<{\n\t\t\tvalue: unknown;\n\t\t\trow?: unknown;\n\t\t\tfieldDef?: FieldDefinition;\n\t\t}>;\n\t} else {\n\t\t// DefaultCell fallback\n\t\tcomponent = DefaultCell;\n\t}\n\n\tconst needsFieldDef = FIELD_TYPES_NEEDING_FIELD_DEF.has(fieldType);\n\n\t// For relation fields, use relationName as accessor if specified\n\tconst accessorKey: string =\n\t\tfieldType === \"relation\" && fieldOptions.relationName\n\t\t\t? fieldOptions.relationName\n\t\t\t: column;\n\n\treturn {\n\t\tcomponent,\n\t\tfieldDef,\n\t\tneedsFieldDef,\n\t\taccessorKey,\n\t};\n}\n"],"mappings":";;;;;;;AA+HA,SAAgB,oBAAoB,MAAmB;AACtD,QAAO,MAAM,UAAU,MAAM,QAAQ,MAAM,SAAS,MAAM,MAAM;;;;;AAMjE,SAAgB,mBAAmB,QAAwB;AAC1D,KAAI,WAAW,SAAU,QAAO;AAChC,QAAO,YAAY,OAAO;;;;;AAM3B,SAAgB,gBAAgB,OAAwB;AACvD,KAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,KAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,QAAQ;AACvD,KAAI,iBAAiB,KAAM,QAAO,MAAM,oBAAoB;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,MAAM;AAC3D,QAAO,OAAO,MAAM;;;;;AAMrB,SAAgB,YAAY,MAAW,YAAoC;AAC1E,KAAI,CAAC,WAAY,QAAO;CACxB,MAAM,aAAa,KAAK;AACxB,KAAI,OAAO,eAAe,SAAU,QAAO;AAC3C,KAAI,YAAY,IAAK,QAAO,WAAW;AACvC,KAAI,YAAY,IAAK,QAAO,WAAW;AACvC,QAAO;;;;;AAMR,MAAM,gCAAgC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA,CAAC;;;;;;;AAsBF,SAAgB,qBACf,QACA,kBACe;CACf,MAAM,WAAW,kBAAkB,SAAS;CAC5C,MAAM,YAAY,UAAU,QAAQ;CACpC,MAAM,eAAgB,WAAmB,eAAe,EAAE;CAG1D,IAAIA;AAMJ,KAAI,UAAU,MAAM,UAEnB,aAAY,SAAS,KAAK;KAO1B,aAAY;CAGb,MAAM,gBAAgB,8BAA8B,IAAI,UAAU;CAGlE,MAAMC,cACL,cAAc,cAAc,aAAa,eACtC,aAAa,eACb;AAEJ,QAAO;EACN;EACA;EACA;EACA;EACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relation-items-display.mjs","names":["displayProps: RelationDisplayProps"],"sources":["../../../../../src/client/components/fields/relation/relation-items-display.tsx"],"sourcesContent":["/**\n * RelationItemsDisplay Component\n *\n * Unified display component for relation items.\n * Renders items using the specified display mode.\n *\n * Used by:\n * - RelationPicker (editable M:N relations)\n * - ReverseRelationField (read-only reverse relations)\n */\n\nimport type * as React from \"react\";\nimport { useResolveText } from \"../../../i18n/hooks\";\nimport type { I18nText } from \"../../../i18n/types\";\nimport type {\n\tCollectionFieldsConfig,\n\tIconType,\n\tRelationDisplayFields,\n\tRelationDisplayMode,\n\tRelationDisplayProps,\n\tRelationItemActions,\n} from \"./displays\";\nimport { CardsDisplay } from \"./displays/cards-display\";\nimport { ChipsDisplay } from \"./displays/chips-display\";\nimport { GridDisplay } from \"./displays/grid-display\";\nimport { ListDisplay } from \"./displays/list-display\";\nimport { TableDisplay } from \"./displays/table-display\";\n\nexport interface RelationItemsDisplayProps {\n\t/**\n\t * Display mode\n\t */\n\tdisplay?: RelationDisplayMode;\n\n\t/**\n\t * Items to display\n\t */\n\titems: any[];\n\n\t/**\n\t * Collection name\n\t */\n\tcollection: string;\n\n\t/**\n\t * Collection icon (React component or server ComponentReference)\n\t */\n\tcollectionIcon?: IconType;\n\n\t/**\n\t * Action handlers\n\t */\n\tactions?: RelationItemActions;\n\n\t/**\n\t * Whether items are editable (shows edit/remove buttons inline)\n\t */\n\teditable?: boolean;\n\n\t/**\n\t * Whether items can be reordered (shows drag handle)\n\t */\n\torderable?: boolean;\n\n\t/**\n\t * Columns for table display\n\t */\n\tcolumns?: string[];\n\n\t/**\n\t * Field mapping for cards/grid display\n\t */\n\tfields?: RelationDisplayFields;\n\n\t/**\n\t * Number of columns for grid/cards layout\n\t */\n\tgridColumns?: 1 | 2 | 3 | 4;\n\n\t/**\n\t * Show link to detail page (for read-only displays)\n\t */\n\tlinkToDetail?: boolean;\n\n\t/**\n\t * Custom render function for list items\n\t */\n\trenderItem?: (item: any, index: number) => React.ReactNode;\n\n\t/**\n\t * Message to show when no items\n\t */\n\temptyMessage?: I18nText;\n\n\t/**\n\t * Collection config for cell rendering (enables proper cell components in table mode)\n\t */\n\tcollectionConfig?: CollectionFieldsConfig;\n\n\t/**\n\t * Whether items are being loaded\n\t */\n\tisLoading?: boolean;\n\n\t/**\n\t * Number of skeleton items to show when loading\n\t */\n\tloadingCount?: number;\n}\n\nexport function RelationItemsDisplay({\n\tdisplay = \"list\",\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\torderable = false,\n\tcolumns,\n\tfields,\n\tgridColumns,\n\tlinkToDetail = false,\n\trenderItem,\n\temptyMessage = \"No items\",\n\tcollectionConfig,\n\tisLoading = false,\n\tloadingCount,\n}: RelationItemsDisplayProps) {\n\tconst resolveText = useResolveText();\n\tconst resolvedEmptyMessage = resolveText(emptyMessage ?? \"No items\");\n\n\t// Show loading state (skeletons) when loading\n\t// Pass to display components so they can render skeletons\n\tconst displayProps: RelationDisplayProps = {\n\t\titems,\n\t\tcollection,\n\t\tcollectionIcon,\n\t\tactions,\n\t\teditable,\n\t\torderable,\n\t\tcolumns: columns || [\"_title\"],\n\t\tfields,\n\t\tgridColumns,\n\t\tlinkToDetail,\n\t\trenderItem,\n\t\tcollectionConfig,\n\t\tisLoading,\n\t\tloadingCount,\n\t};\n\n\t// Empty state - only show when not loading and no items\n\tif (!isLoading && (!items || items.length === 0)) {\n\t\treturn (\n\t\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t\t<p className=\"text-sm text-muted-foreground\">{resolvedEmptyMessage}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tswitch (display) {\n\t\tcase \"chips\":\n\t\t\treturn <ChipsDisplay {...displayProps} />;\n\t\tcase \"table\":\n\t\t\treturn <TableDisplay {...displayProps} />;\n\t\tcase \"cards\":\n\t\t\treturn <CardsDisplay {...displayProps} />;\n\t\tcase \"grid\":\n\t\t\treturn <GridDisplay {...displayProps} />;\n\t\tcase \"list\":\n\t\tdefault:\n\t\t\treturn <ListDisplay {...displayProps} />;\n\t}\n}\n\n// Re-export types for convenience\nexport type {\n\tCollectionFieldsConfig,\n\tRelationDisplayFields,\n\tRelationDisplayMode,\n\tRelationDisplayProps,\n\tRelationItemActions,\n} from \"./displays\";\n"],"mappings":";;;;;;;;;AA8GA,SAAgB,qBAAqB,EACpC,UAAU,QACV,OACA,YACA,gBACA,SACA,WAAW,OACX,YAAY,OACZ,SACA,QACA,aACA,eAAe,OACf,YACA,eAAe,YACf,kBACA,YAAY,OACZ,gBAC6B;CAE7B,MAAM,uBADc,gBAAgB,CACK,gBAAgB,WAAW;CAIpE,MAAMA,eAAqC;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW,CAAC,SAAS;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGD,KAAI,CAAC,cAAc,CAAC,SAAS,MAAM,WAAW,GAC7C,QACC,oBAAC;EAAI,WAAU;YACd,oBAAC;GAAE,WAAU;aAAiC;IAAyB;GAClE;AAIR,SAAQ,SAAR;EACC,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,OACJ,QAAO,oBAAC,eAAY,GAAI,eAAgB;EACzC,KAAK;EACL,QACC,QAAO,oBAAC,eAAY,GAAI,eAAgB"}
|