@questpie/admin 2.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -143
- 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 +5 -6
- 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 +2 -3
- 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 +21 -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 +51 -40
- 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,57 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime37 from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
//#region src/client/components/widgets/chart-widget.d.ts
|
|
4
|
-
declare namespace chart_widget_d_exports {
|
|
5
|
-
export { ChartWidgetConfig, ChartWidgetProps, ChartWidget as default };
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Chart Widget
|
|
9
|
-
*
|
|
10
|
-
* Displays data visualization over time.
|
|
11
|
-
* Uses WidgetCard for consistent styling.
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Chart widget config (local type for component props)
|
|
15
|
-
*/
|
|
16
|
-
type ChartWidgetConfig = {
|
|
17
|
-
id: string;
|
|
18
|
-
collection: string;
|
|
19
|
-
/** Field to aggregate by (e.g., "createdAt" for time series, "status" for categories) */
|
|
20
|
-
field: string;
|
|
21
|
-
chartType?: "line" | "bar" | "area" | "pie";
|
|
22
|
-
timeRange?: "7d" | "30d" | "90d" | "1y";
|
|
23
|
-
label?: string;
|
|
24
|
-
realtime?: boolean;
|
|
25
|
-
/** Color for the chart (CSS color value) */
|
|
26
|
-
color?: string;
|
|
27
|
-
/** Show grid lines */
|
|
28
|
-
showGrid?: boolean;
|
|
29
|
-
/** Aggregation type */
|
|
30
|
-
aggregation?: "count" | "sum" | "average";
|
|
31
|
-
/** Value field for sum/average aggregation */
|
|
32
|
-
valueField?: string;
|
|
33
|
-
/** Server has a fetchFn for this widget */
|
|
34
|
-
hasFetchFn?: boolean;
|
|
35
|
-
/** Refresh interval in ms */
|
|
36
|
-
refreshInterval?: number;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Chart widget props
|
|
40
|
-
*/
|
|
41
|
-
type ChartWidgetProps = {
|
|
42
|
-
config: ChartWidgetConfig;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Chart widget component
|
|
46
|
-
*
|
|
47
|
-
* Displays:
|
|
48
|
-
* - Time series data visualization
|
|
49
|
-
* - Multiple chart types (line, bar, area, pie)
|
|
50
|
-
* - Configurable time ranges
|
|
51
|
-
*/
|
|
52
|
-
declare function ChartWidget({
|
|
53
|
-
config
|
|
54
|
-
}: ChartWidgetProps): react_jsx_runtime37.JSX.Element;
|
|
55
|
-
//#endregion
|
|
56
|
-
export { chart_widget_d_exports };
|
|
57
|
-
//# sourceMappingURL=chart-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/chart-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;AAuCY,KAAA,iBAAA,GAAiB;EA0BjB,EAAA,EAAA,MAAA;EA6CY,UAAA,EAAA,MAAW;EAAG;EAAU,KAAA,EAAA,MAAA;EAAgB,SAAA,CAAA,EAAA,MAAA,GAAA,KAAA,GAAA,MAAA,GAAA,KAAA;EAAA,SAAA,CAAA,EAAA,IAAA,GAAA,KAAA,GAAA,KAAA,GAAA,IAAA;;;;;;;;;;;;;;;;;;;KA7CpD,gBAAA;UACF;;;;;;;;;;iBA4Cc,WAAA;;GAAwB,mBAAgB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-widget.mjs","names":["React","key: string"],"sources":["../../../../src/client/components/widgets/chart-widget.tsx"],"sourcesContent":["/**\n * Chart Widget\n *\n * Displays data visualization over time.\n * Uses WidgetCard for consistent styling.\n */\n\nimport * as React from \"react\";\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n type TooltipProps,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport type {\n NameType,\n ValueType,\n} from \"recharts/types/component/DefaultTooltipContent\";\nimport { useCollectionList } from \"../../hooks/use-collection\";\nimport { useServerWidgetData } from \"../../hooks/use-server-widget-data\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { formatCollectionName } from \"../../lib/utils\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { ChartWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Chart widget config (local type for component props)\n */\nexport type ChartWidgetConfig = {\n id: string;\n collection: string;\n /** Field to aggregate by (e.g., \"createdAt\" for time series, \"status\" for categories) */\n field: string;\n chartType?: \"line\" | \"bar\" | \"area\" | \"pie\";\n timeRange?: \"7d\" | \"30d\" | \"90d\" | \"1y\";\n label?: string;\n realtime?: boolean;\n /** Color for the chart (CSS color value) */\n color?: string;\n /** Show grid lines */\n showGrid?: boolean;\n /** Aggregation type */\n aggregation?: \"count\" | \"sum\" | \"average\";\n /** Value field for sum/average aggregation */\n valueField?: string;\n /** Server has a fetchFn for this widget */\n hasFetchFn?: boolean;\n /** Refresh interval in ms */\n refreshInterval?: number;\n};\n\n/**\n * Chart widget props\n */\nexport type ChartWidgetProps = {\n config: ChartWidgetConfig;\n};\n\n// Theme-aware chart colors using CSS variables\n// Note: CSS vars contain full oklch() value, so use var() directly\nconst CHART_COLORS = [\n \"var(--color-chart-1)\",\n \"var(--color-chart-2)\",\n \"var(--color-chart-3)\",\n \"var(--color-chart-4)\",\n \"var(--color-chart-5)\",\n];\n\n/**\n * Custom tooltip component matching shadcn style\n */\nfunction ChartTooltip({\n active,\n payload,\n label,\n}: TooltipProps<ValueType, NameType>) {\n if (!active || !payload?.length) return null;\n\n return (\n <div className=\"rounded-md border border-border bg-background px-3 py-2 text-xs shadow-md\">\n <p className=\"font-medium text-foreground\">{label}</p>\n {payload.map((entry) => (\n <p key={String(entry.name)} className=\"text-muted-foreground\">\n {entry.name}:{\" \"}\n <span className=\"font-medium text-foreground\">{entry.value}</span>\n </p>\n ))}\n </div>\n );\n}\n\n/**\n * Chart widget component\n *\n * Displays:\n * - Time series data visualization\n * - Multiple chart types (line, bar, area, pie)\n * - Configurable time ranges\n */\nexport default function ChartWidget({ config }: ChartWidgetProps) {\n const resolveText = useResolveText();\n const {\n collection,\n field,\n chartType = \"area\",\n timeRange = \"30d\",\n label,\n color = \"var(--color-chart-1)\",\n showGrid = true,\n realtime,\n hasFetchFn,\n refreshInterval,\n } = config;\n\n // Server-side data fetching (when hasFetchFn is true)\n type ChartDataPoint = { name: string; value: number };\n const serverQuery = useServerWidgetData<ChartDataPoint[]>(config.id, {\n enabled: !!hasFetchFn,\n refreshInterval,\n });\n\n // Fetch collection data (limited to 1000 items for performance)\n const collectionQuery = useCollectionList(\n collection as any,\n {\n limit: 1000,\n },\n undefined,\n { realtime },\n );\n\n const { isLoading, error, refetch } = hasFetchFn\n ? serverQuery\n : collectionQuery;\n\n // API returns PaginatedResult with { docs, totalDocs, ... }\n const collectionItems = hasFetchFn\n ? []\n : Array.isArray((collectionQuery.data as any)?.docs)\n ? (collectionQuery.data as any).docs\n : [];\n const displayLabel = label\n ? resolveText(label)\n : `${formatCollectionName(collection)} by ${field}`;\n\n // Process data for chart\n const chartData = React.useMemo(() => {\n // When using server data, it's already in the right format\n if (hasFetchFn) {\n return (serverQuery.data as ChartDataPoint[] | undefined) ?? [];\n }\n\n if (!collectionItems.length) return [];\n\n // Group by field value\n const grouped = collectionItems.reduce(\n (acc: Record<string, number>, item: any) => {\n const value = item[field];\n if (value === undefined || value === null) return acc;\n\n // For date fields, group by day/week/month based on timeRange\n let key: string;\n if (value instanceof Date || !isNaN(Date.parse(value))) {\n const date = new Date(value);\n key = formatDateForRange(date, timeRange);\n } else {\n key = String(value);\n }\n\n acc[key] = (acc[key] || 0) + 1;\n return acc;\n },\n {} as Record<string, number>,\n );\n\n // Convert to array and sort\n return Object.entries(grouped)\n .map(([name, value]) => ({ name, value: value as number }))\n .sort((a, b) => a.name.localeCompare(b.name));\n }, [hasFetchFn, serverQuery.data, collectionItems, field, timeRange]);\n\n // Empty state content\n const emptyContent = (\n <div className=\"flex h-48 items-center justify-center text-muted-foreground\">\n <p className=\"text-sm\">No data available</p>\n </div>\n );\n\n // Chart content\n const chartContent =\n chartData.length === 0 ? (\n emptyContent\n ) : (\n <div className=\"h-48 w-full\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart(chartType, chartData, color, showGrid)}\n </ResponsiveContainer>\n </div>\n );\n\n return (\n <WidgetCard\n title={displayLabel}\n isLoading={isLoading}\n loadingSkeleton={<ChartWidgetSkeleton />}\n error={\n error instanceof Error ? error : error ? new Error(String(error)) : null\n }\n onRefresh={() => refetch()}\n >\n {chartContent}\n </WidgetCard>\n );\n}\n\n/**\n * Render the appropriate chart type\n */\nfunction renderChart(\n type: ChartWidgetConfig[\"chartType\"],\n data: Array<{ name: string; value: number }>,\n color: string,\n showGrid: boolean,\n) {\n const commonProps = {\n data,\n margin: { top: 5, right: 5, left: -20, bottom: 5 },\n };\n\n // Use CSS color variables (already contain full oklch values)\n const axisStyle = {\n fontSize: 10,\n fill: \"var(--color-muted-foreground)\",\n };\n\n switch (type) {\n case \"line\":\n return (\n <LineChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"var(--color-border)\"\n opacity={0.5}\n />\n )}\n <XAxis\n dataKey=\"name\"\n tick={axisStyle}\n tickLine={false}\n axisLine={false}\n />\n <YAxis tick={axisStyle} tickLine={false} axisLine={false} />\n <Tooltip content={<ChartTooltip />} />\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={color}\n strokeWidth={2}\n dot={false}\n />\n </LineChart>\n );\n\n case \"bar\":\n return (\n <BarChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"var(--color-border)\"\n opacity={0.5}\n />\n )}\n <XAxis\n dataKey=\"name\"\n tick={axisStyle}\n tickLine={false}\n axisLine={false}\n />\n <YAxis tick={axisStyle} tickLine={false} axisLine={false} />\n <Tooltip\n content={<ChartTooltip />}\n cursor={{ fill: \"var(--color-muted)\", opacity: 0.3 }}\n />\n <Bar dataKey=\"value\" fill={color} radius={[2, 2, 0, 0]} />\n </BarChart>\n );\n\n case \"pie\":\n return (\n <PieChart>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={60}\n label={({ name }) => name}\n labelLine={false}\n stroke=\"var(--color-background)\"\n strokeWidth={2}\n >\n {data.map((entry) => (\n <Cell\n key={`cell-${entry.name}`}\n fill={CHART_COLORS[data.indexOf(entry) % CHART_COLORS.length]}\n />\n ))}\n </Pie>\n <Tooltip content={<ChartTooltip />} />\n </PieChart>\n );\n\n case \"area\":\n default:\n return (\n <AreaChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"var(--color-border)\"\n opacity={0.5}\n />\n )}\n <XAxis\n dataKey=\"name\"\n tick={axisStyle}\n tickLine={false}\n axisLine={false}\n />\n <YAxis tick={axisStyle} tickLine={false} axisLine={false} />\n <Tooltip content={<ChartTooltip />} />\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke={color}\n fill={color}\n fillOpacity={0.15}\n />\n </AreaChart>\n );\n }\n}\n\n/**\n * Format date based on time range for grouping\n */\nfunction formatDateForRange(\n date: Date,\n timeRange: ChartWidgetConfig[\"timeRange\"],\n): string {\n const months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n\n switch (timeRange) {\n case \"7d\": {\n // Group by day: \"Mon 15\"\n const days = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n return `${days[date.getDay()]} ${date.getDate()}`;\n }\n\n case \"30d\":\n // Group by day: \"Jan 15\"\n return `${months[date.getMonth()]} ${date.getDate()}`;\n\n case \"90d\": {\n // Group by week: \"W1 Jan\"\n const weekNum = Math.ceil(date.getDate() / 7);\n return `W${weekNum} ${months[date.getMonth()]}`;\n }\n\n case \"1y\":\n // Group by month: \"Jan 2024\"\n return `${months[date.getMonth()]} ${date.getFullYear()}`;\n\n default:\n return `${months[date.getMonth()]} ${date.getDate()}`;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { ProgressWidgetConfig } from "../../builder/types/widget-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime38 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/widgets/progress-widget.d.ts
|
|
5
|
-
declare namespace progress_widget_d_exports {
|
|
6
|
-
export { ProgressWidgetProps, ProgressWidget as default };
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Progress widget props
|
|
10
|
-
*/
|
|
11
|
-
interface ProgressWidgetProps {
|
|
12
|
-
config: ProgressWidgetConfig;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Progress Widget Component
|
|
16
|
-
*
|
|
17
|
-
* Displays a progress bar with current/target values.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <ProgressWidget
|
|
22
|
-
* config={{
|
|
23
|
-
* type: "progress",
|
|
24
|
-
* id: "monthly-sales",
|
|
25
|
-
* title: "Monthly Sales Goal",
|
|
26
|
-
* fetchFn: async (client) => ({
|
|
27
|
-
* current: 75000,
|
|
28
|
-
* target: 100000,
|
|
29
|
-
* label: "$75,000 / $100,000"
|
|
30
|
-
* }),
|
|
31
|
-
* showPercentage: true,
|
|
32
|
-
* }}
|
|
33
|
-
* />
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
declare function ProgressWidget({
|
|
37
|
-
config
|
|
38
|
-
}: ProgressWidgetProps): react_jsx_runtime38.JSX.Element;
|
|
39
|
-
//#endregion
|
|
40
|
-
export { progress_widget_d_exports };
|
|
41
|
-
//# sourceMappingURL=progress-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/progress-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAmBA;AA0BwB,UA1BP,mBAAA,CA0BqB;EAAG,MAAA,EAzBhC,oBAyBgC;;;;;;;;;;;;;;;;;;;;;;;;iBAAjB,cAAA;;GAA2B,sBAAmB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-widget.mjs","names":[],"sources":["../../../../src/client/components/widgets/progress-widget.tsx"],"sourcesContent":["/**\n * Progress Widget\n *\n * Displays progress towards a goal.\n * Uses WidgetCard for consistent styling.\n */\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { ProgressWidgetConfig } from \"../../builder/types/widget-types\";\nimport { useServerWidgetData } from \"../../hooks/use-server-widget-data\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectClient, useAdminStore } from \"../../runtime\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { ProgressWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Progress widget props\n */\nexport interface ProgressWidgetProps {\n\tconfig: ProgressWidgetConfig;\n}\n\n/**\n * Progress Widget Component\n *\n * Displays a progress bar with current/target values.\n *\n * @example\n * ```tsx\n * <ProgressWidget\n * config={{\n * type: \"progress\",\n * id: \"monthly-sales\",\n * title: \"Monthly Sales Goal\",\n * fetchFn: async (client) => ({\n * current: 75000,\n * target: 100000,\n * label: \"$75,000 / $100,000\"\n * }),\n * showPercentage: true,\n * }}\n * />\n * ```\n */\nexport default function ProgressWidget({ config }: ProgressWidgetProps) {\n\tconst client = useAdminStore(selectClient);\n\tconst resolveText = useResolveText();\n\tconst { color, showPercentage = true } = config;\n\n\ttype ProgressData = {\n\t\tcurrent: number;\n\t\ttarget: number;\n\t\tlabel?: string;\n\t\tsubtitle?: string;\n\t};\n\tconst useServerData = !!config.hasFetchFn;\n\tconst serverQuery = useServerWidgetData<ProgressData>(config.id, {\n\t\tenabled: useServerData,\n\t\trefreshInterval: config.refreshInterval,\n\t});\n\tconst clientQuery = useQuery<ProgressData>({\n\t\tqueryKey: [\"widget\", \"progress\", config.id],\n\t\tqueryFn: () => config.fetchFn!(client),\n\t\tenabled: !useServerData && !!config.fetchFn,\n\t\trefetchInterval: config.refreshInterval,\n\t});\n\tconst { data, isLoading, error, refetch } = useServerData\n\t\t? serverQuery\n\t\t: clientQuery;\n\n\tconst title = config.title ? resolveText(config.title) : undefined;\n\n\t// Calculate percentage\n\tconst percentage = data\n\t\t? Math.min((data.current / data.target) * 100, 100)\n\t\t: 0;\n\tconst percentageFormatted = percentage.toFixed(0);\n\n\t// Determine color based on progress\n\tconst getProgressColor = () => {\n\t\tif (color) return color;\n\t\tif (percentage >= 100) return \"bg-success\";\n\t\tif (percentage >= 75) return \"bg-primary\";\n\t\tif (percentage >= 50) return \"bg-warning\";\n\t\treturn \"bg-muted-foreground\";\n\t};\n\n\t// Progress content\n\tconst progressContent = data ? (\n\t\t<div className=\"space-y-3\">\n\t\t\t{/* Progress bar */}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-full rounded-full transition-all duration-500\",\n\t\t\t\t\t\t\tgetProgressColor(),\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ width: `${percentage}%` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Labels */}\n\t\t\t<div className=\"flex items-center justify-between text-sm\">\n\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t{data.label ||\n\t\t\t\t\t\t`${data.current.toLocaleString()} / ${data.target.toLocaleString()}`}\n\t\t\t\t</span>\n\t\t\t\t{showPercentage && (\n\t\t\t\t\t<span className=\"font-medium\">{percentageFormatted}%</span>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Subtitle */}\n\t\t\t{data.subtitle && (\n\t\t\t\t<p className=\"text-xs text-muted-foreground\">{data.subtitle}</p>\n\t\t\t)}\n\t\t</div>\n\t) : null;\n\n\treturn (\n\t\t<WidgetCard\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tloadingSkeleton={<ProgressWidgetSkeleton />}\n\t\t\terror={\n\t\t\t\terror instanceof Error ? error : error ? new Error(String(error)) : null\n\t\t\t}\n\t\t\tonRefresh={() => refetch()}\n\t\t>\n\t\t\t{progressContent}\n\t\t</WidgetCard>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAwB,eAAe,EAAE,UAA+B;CACvE,MAAM,SAAS,cAAc,aAAa;CAC1C,MAAM,cAAc,gBAAgB;CACpC,MAAM,EAAE,OAAO,iBAAiB,SAAS;CAQzC,MAAM,gBAAgB,CAAC,CAAC,OAAO;CAC/B,MAAM,cAAc,oBAAkC,OAAO,IAAI;EAChE,SAAS;EACT,iBAAiB,OAAO;EACxB,CAAC;CACF,MAAM,cAAc,SAAuB;EAC1C,UAAU;GAAC;GAAU;GAAY,OAAO;GAAG;EAC3C,eAAe,OAAO,QAAS,OAAO;EACtC,SAAS,CAAC,iBAAiB,CAAC,CAAC,OAAO;EACpC,iBAAiB,OAAO;EACxB,CAAC;CACF,MAAM,EAAE,MAAM,WAAW,OAAO,YAAY,gBACzC,cACA;CAEH,MAAM,QAAQ,OAAO,QAAQ,YAAY,OAAO,MAAM,GAAG;CAGzD,MAAM,aAAa,OAChB,KAAK,IAAK,KAAK,UAAU,KAAK,SAAU,KAAK,IAAI,GACjD;CACH,MAAM,sBAAsB,WAAW,QAAQ,EAAE;CAGjD,MAAM,yBAAyB;AAC9B,MAAI,MAAO,QAAO;AAClB,MAAI,cAAc,IAAK,QAAO;AAC9B,MAAI,cAAc,GAAI,QAAO;AAC7B,MAAI,cAAc,GAAI,QAAO;AAC7B,SAAO;;CAIR,MAAM,kBAAkB,OACvB,qBAAC;EAAI,WAAU;;GAEd,oBAAC;IAAI,WAAU;cACd,oBAAC;KAAI,WAAU;eACd,oBAAC;MACA,WAAW,GACV,mDACA,kBAAkB,CAClB;MACD,OAAO,EAAE,OAAO,GAAG,WAAW,IAAI;OACjC;MACG;KACD;GAGN,qBAAC;IAAI,WAAU;eACd,oBAAC;KAAK,WAAU;eACd,KAAK,SACL,GAAG,KAAK,QAAQ,gBAAgB,CAAC,KAAK,KAAK,OAAO,gBAAgB;MAC7D,EACN,kBACA,qBAAC;KAAK,WAAU;gBAAe,qBAAoB;MAAQ;KAEvD;GAGL,KAAK,YACL,oBAAC;IAAE,WAAU;cAAiC,KAAK;KAAa;;GAE5D,GACH;AAEJ,QACC,oBAAC;EACO;EACI;EACX,iBAAiB,oBAAC,2BAAyB;EAC3C,OACC,iBAAiB,QAAQ,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,GAAG;EAErE,iBAAiB,SAAS;YAEzB;GACW"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { QuickActionsWidgetConfig } from "../../builder/types/widget-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime35 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/widgets/quick-actions-widget.d.ts
|
|
5
|
-
declare namespace quick_actions_widget_d_exports {
|
|
6
|
-
export { QuickActionsWidgetProps, QuickActionsWidget as default };
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Quick actions widget props
|
|
10
|
-
*/
|
|
11
|
-
interface QuickActionsWidgetProps {
|
|
12
|
-
config: QuickActionsWidgetConfig;
|
|
13
|
-
basePath?: string;
|
|
14
|
-
navigate?: (path: string) => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Quick actions widget component
|
|
18
|
-
*
|
|
19
|
-
* Displays a list of action items with icons, matching the style
|
|
20
|
-
* of other dashboard widgets like recent-items.
|
|
21
|
-
*/
|
|
22
|
-
declare function QuickActionsWidget({
|
|
23
|
-
config,
|
|
24
|
-
basePath,
|
|
25
|
-
navigate
|
|
26
|
-
}: QuickActionsWidgetProps): react_jsx_runtime35.JSX.Element;
|
|
27
|
-
//#endregion
|
|
28
|
-
export { quick_actions_widget_d_exports };
|
|
29
|
-
//# sourceMappingURL=quick-actions-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quick-actions-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/quick-actions-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAkBA;AAYwB,UAZP,uBAAA,CAYyB;EACxC,MAAA,EAZQ,wBAYR;EACA,QAAA,CAAA,EAAA,MAAA;EACA,QAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;;;;;;;iBAHsB,kBAAA;;;;GAIrB,0BAAuB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quick-actions-widget.mjs","names":[],"sources":["../../../../src/client/components/widgets/quick-actions-widget.tsx"],"sourcesContent":["/**\n * Quick Actions Widget\n *\n * Displays shortcuts to common actions with icons and proper styling.\n * Uses WidgetCard for consistent styling.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport type * as React from \"react\";\nimport type { QuickActionsWidgetConfig } from \"../../builder/types/widget-types\";\nimport { resolveIconElement } from \"../../components/component-renderer\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn, formatCollectionName } from \"../../lib/utils\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\n\n/**\n * Quick actions widget props\n */\nexport interface QuickActionsWidgetProps {\n config: QuickActionsWidgetConfig;\n basePath?: string;\n navigate?: (path: string) => void;\n}\n\n/**\n * Quick actions widget component\n *\n * Displays a list of action items with icons, matching the style\n * of other dashboard widgets like recent-items.\n */\nexport default function QuickActionsWidget({\n config,\n basePath = \"/admin\",\n navigate,\n}: QuickActionsWidgetProps) {\n const resolveText = useResolveText();\n const { quickActions, layout = \"list\" } = config;\n const title = config.title ? resolveText(config.title) : \"Quick Actions\";\n\n // Parse actions - handle both string shortcuts and full config objects\n const parsedActions = quickActions.map((action, index) => {\n if (typeof action === \"string\") {\n // Format: \"collection.action\" e.g., \"posts.create\"\n const [collection, actionType] = action.split(\".\");\n return {\n id: `${action}-${index}`,\n label: `${actionType === \"create\" ? \"New\" : actionType} ${formatCollectionName(collection)}`,\n href: `${basePath}/collections/${collection}/${actionType === \"create\" ? \"create\" : \"\"}`,\n icon: undefined,\n variant: \"default\" as const,\n };\n }\n return {\n id: `action-${index}`,\n label: resolveText(action.label),\n href: action.href,\n onClick: action.onClick,\n icon: action.icon,\n variant: action.variant || (\"default\" as const),\n };\n });\n\n // Handle action click\n const handleClick = (action: (typeof parsedActions)[0]) => {\n if (action.onClick) {\n action.onClick();\n } else if (action.href && navigate) {\n navigate(action.href);\n }\n };\n\n // Variant styles for the action items\n const variantStyles = {\n default: \"hover:bg-muted/50 cursor-pointer\",\n primary:\n \"bg-primary/5 hover:bg-primary/10 border-primary/20 text-primary [&_svg]:text-primary cursor-pointer\",\n secondary: \"hover:bg-secondary cursor-pointer\",\n outline: \"border border-border hover:bg-muted/50 cursor-pointer\",\n };\n\n const iconVariantStyles = {\n default: \"bg-muted text-muted-foreground\",\n primary: \"bg-primary/10 text-primary\",\n secondary: \"bg-secondary text-secondary-foreground\",\n outline: \"bg-background text-muted-foreground\",\n };\n\n // Empty state\n if (parsedActions.length === 0) {\n return (\n <WidgetCard title={title}>\n <p className=\"text-sm text-muted-foreground\">No actions configured</p>\n </WidgetCard>\n );\n }\n\n // Grid layout\n if (layout === \"grid\") {\n return (\n <WidgetCard title={title}>\n <div className=\"grid grid-cols-2 gap-2\">\n {parsedActions.map((action) => {\n const iconElement = resolveIconElement(action.icon, {\n className: \"h-4 w-4\",\n });\n\n return (\n <button\n key={action.id}\n type=\"button\"\n onClick={() => handleClick(action)}\n className={cn(\n \"flex flex-col items-center justify-center gap-2 rounded-md p-3 text-center transition-colors\",\n variantStyles[action.variant],\n )}\n >\n {iconElement && (\n <div\n className={cn(\n \"flex h-9 w-9 items-center justify-center rounded-md\",\n iconVariantStyles[action.variant],\n )}\n >\n {iconElement}\n </div>\n )}\n <span className=\"text-xs font-medium\">{action.label}</span>\n </button>\n );\n })}\n </div>\n </WidgetCard>\n );\n }\n\n // List layout (default) - matches recent-items style\n return (\n <WidgetCard title={title}>\n <div className=\"space-y-1 -mx-1\">\n {parsedActions.map((action) => {\n const iconElement = resolveIconElement(action.icon, {\n className: \"h-4 w-4\",\n });\n\n return (\n <button\n key={action.id}\n type=\"button\"\n onClick={() => handleClick(action)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md px-2 py-2 text-left transition-colors\",\n variantStyles[action.variant],\n )}\n >\n {iconElement && (\n <div\n className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-md\",\n iconVariantStyles[action.variant],\n )}\n >\n {iconElement}\n </div>\n )}\n <span className=\"flex-1 text-sm font-medium truncate\">\n {action.label}\n </span>\n <Icon\n icon=\"ph:arrow-right\"\n className=\"h-4 w-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\"\n />\n </button>\n );\n })}\n </div>\n </WidgetCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA8BA,SAAwB,mBAAmB,EACzC,QACA,WAAW,UACX,YAC0B;CAC1B,MAAM,cAAc,gBAAgB;CACpC,MAAM,EAAE,cAAc,SAAS,WAAW;CAC1C,MAAM,QAAQ,OAAO,QAAQ,YAAY,OAAO,MAAM,GAAG;CAGzD,MAAM,gBAAgB,aAAa,KAAK,QAAQ,UAAU;AACxD,MAAI,OAAO,WAAW,UAAU;GAE9B,MAAM,CAAC,YAAY,cAAc,OAAO,MAAM,IAAI;AAClD,UAAO;IACL,IAAI,GAAG,OAAO,GAAG;IACjB,OAAO,GAAG,eAAe,WAAW,QAAQ,WAAW,GAAG,qBAAqB,WAAW;IAC1F,MAAM,GAAG,SAAS,eAAe,WAAW,GAAG,eAAe,WAAW,WAAW;IACpF,MAAM;IACN,SAAS;IACV;;AAEH,SAAO;GACL,IAAI,UAAU;GACd,OAAO,YAAY,OAAO,MAAM;GAChC,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,MAAM,OAAO;GACb,SAAS,OAAO,WAAY;GAC7B;GACD;CAGF,MAAM,eAAe,WAAsC;AACzD,MAAI,OAAO,QACT,QAAO,SAAS;WACP,OAAO,QAAQ,SACxB,UAAS,OAAO,KAAK;;CAKzB,MAAM,gBAAgB;EACpB,SAAS;EACT,SACE;EACF,WAAW;EACX,SAAS;EACV;CAED,MAAM,oBAAoB;EACxB,SAAS;EACT,SAAS;EACT,WAAW;EACX,SAAS;EACV;AAGD,KAAI,cAAc,WAAW,EAC3B,QACE,oBAAC;EAAkB;YACjB,oBAAC;GAAE,WAAU;aAAgC;IAAyB;GAC3D;AAKjB,KAAI,WAAW,OACb,QACE,oBAAC;EAAkB;YACjB,oBAAC;GAAI,WAAU;aACZ,cAAc,KAAK,WAAW;IAC7B,MAAM,cAAc,mBAAmB,OAAO,MAAM,EAClD,WAAW,WACZ,CAAC;AAEF,WACE,qBAAC;KAEC,MAAK;KACL,eAAe,YAAY,OAAO;KAClC,WAAW,GACT,gGACA,cAAc,OAAO,SACtB;gBAEA,eACC,oBAAC;MACC,WAAW,GACT,uDACA,kBAAkB,OAAO,SAC1B;gBAEA;OACG,EAER,oBAAC;MAAK,WAAU;gBAAuB,OAAO;OAAa;OAlBtD,OAAO,GAmBL;KAEX;IACE;GACK;AAKjB,QACE,oBAAC;EAAkB;YACjB,oBAAC;GAAI,WAAU;aACZ,cAAc,KAAK,WAAW;IAC7B,MAAM,cAAc,mBAAmB,OAAO,MAAM,EAClD,WAAW,WACZ,CAAC;AAEF,WACE,qBAAC;KAEC,MAAK;KACL,eAAe,YAAY,OAAO;KAClC,WAAW,GACT,mFACA,cAAc,OAAO,SACtB;;MAEA,eACC,oBAAC;OACC,WAAW,GACT,gEACA,kBAAkB,OAAO,SAC1B;iBAEA;QACG;MAER,oBAAC;OAAK,WAAU;iBACb,OAAO;QACH;MACP,oBAAC;OACC,MAAK;OACL,WAAU;QACV;;OAxBG,OAAO,GAyBL;KAEX;IACE;GACK"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime40 from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
//#region src/client/components/widgets/recent-items-widget.d.ts
|
|
4
|
-
declare namespace recent_items_widget_d_exports {
|
|
5
|
-
export { RecentItemsWidgetConfig, RecentItemsWidgetProps, RecentItemsWidget as default };
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Recent Items Widget
|
|
9
|
-
*
|
|
10
|
-
* Displays latest items from a collection.
|
|
11
|
-
* Uses WidgetCard for consistent styling.
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Recent items widget config (local type for component props)
|
|
15
|
-
*/
|
|
16
|
-
type RecentItemsWidgetConfig = {
|
|
17
|
-
collection: string;
|
|
18
|
-
limit?: number;
|
|
19
|
-
/** Field to use as title (default: "_title") */
|
|
20
|
-
titleField?: string;
|
|
21
|
-
/** Field to use for date (default: "createdAt") */
|
|
22
|
-
dateField?: string;
|
|
23
|
-
/** Fields to display as subtitle */
|
|
24
|
-
subtitleFields?: string[];
|
|
25
|
-
label?: string;
|
|
26
|
-
realtime?: boolean;
|
|
27
|
-
/** Base path for item links */
|
|
28
|
-
basePath?: string;
|
|
29
|
-
/** Click handler for items */
|
|
30
|
-
onItemClick?: (item: any) => void;
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* Recent items widget props
|
|
34
|
-
*/
|
|
35
|
-
type RecentItemsWidgetProps = {
|
|
36
|
-
config: RecentItemsWidgetConfig;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Recent items widget component
|
|
40
|
-
*
|
|
41
|
-
* Displays:
|
|
42
|
-
* - List of most recently created/updated items
|
|
43
|
-
* - Configurable number of items
|
|
44
|
-
* - Links to edit each item
|
|
45
|
-
*/
|
|
46
|
-
declare function RecentItemsWidget({
|
|
47
|
-
config
|
|
48
|
-
}: RecentItemsWidgetProps): react_jsx_runtime40.JSX.Element;
|
|
49
|
-
//#endregion
|
|
50
|
-
export { recent_items_widget_d_exports };
|
|
51
|
-
//# sourceMappingURL=recent-items-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recent-items-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/recent-items-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;AAgBY,KAAA,uBAAA,GAAuB;EAoBvB,UAAA,EAAA,MAAA;EAYY,KAAA,CAAA,EAAA,MAAA;EAAoB;EAAU,UAAA,CAAA,EAAA,MAAA;EAAsB;EAAA,SAAA,CAAA,EAAA,MAAA;;;;;;;;;;;;;KAZhE,sBAAA;UACF;;;;;;;;;;iBAWc,iBAAA;;GAA8B,yBAAsB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recent-items-widget.mjs","names":[],"sources":["../../../../src/client/components/widgets/recent-items-widget.tsx"],"sourcesContent":["/**\n * Recent Items Widget\n *\n * Displays latest items from a collection.\n * Uses WidgetCard for consistent styling.\n */\n\nimport { useCollectionList } from \"../../hooks/use-collection\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { formatCollectionName } from \"../../lib/utils\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { RecentItemsWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Recent items widget config (local type for component props)\n */\nexport type RecentItemsWidgetConfig = {\n collection: string;\n limit?: number;\n /** Field to use as title (default: \"_title\") */\n titleField?: string;\n /** Field to use for date (default: \"createdAt\") */\n dateField?: string;\n /** Fields to display as subtitle */\n subtitleFields?: string[];\n label?: string;\n realtime?: boolean;\n /** Base path for item links */\n basePath?: string;\n /** Click handler for items */\n onItemClick?: (item: any) => void;\n};\n\n/**\n * Recent items widget props\n */\nexport type RecentItemsWidgetProps = {\n config: RecentItemsWidgetConfig;\n};\n\n/**\n * Recent items widget component\n *\n * Displays:\n * - List of most recently created/updated items\n * - Configurable number of items\n * - Links to edit each item\n */\nexport default function RecentItemsWidget({ config }: RecentItemsWidgetProps) {\n const resolveText = useResolveText();\n const {\n collection,\n limit = 5,\n label,\n titleField = \"_title\",\n dateField = \"createdAt\",\n subtitleFields,\n onItemClick,\n realtime,\n } = config;\n\n // Fetch recent items sorted by date\n const { data, isLoading, error, refetch } = useCollectionList(\n collection as any,\n {\n orderBy: { [dateField]: \"desc\" },\n limit,\n } as any,\n undefined,\n { realtime },\n );\n\n // API returns PaginatedResult with { docs, totalDocs, ... }\n const items = Array.isArray(data?.docs) ? data.docs : [];\n const displayLabel = label\n ? resolveText(label)\n : `Recent ${formatCollectionName(collection)}`;\n\n // Determine title field - prefer _title computed field from backend\n const getTitleValue = (item: any): string => {\n if (titleField && item[titleField]) return String(item[titleField]);\n if (item._title) return String(item._title);\n if (item.name) return String(item.name);\n if (item.title) return String(item.title);\n if (item.label) return String(item.label);\n return `Item #${item.id}`;\n };\n\n // Get subtitle from fields\n const getSubtitle = (item: any): string | null => {\n if (!subtitleFields?.length) return null;\n return subtitleFields\n .map((field) => item[field])\n .filter(Boolean)\n .join(\" - \");\n };\n\n // Handle item click\n const handleItemClick = (item: any) => {\n if (onItemClick) {\n onItemClick(item);\n }\n };\n\n // List content\n const listContent =\n items.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No items yet</p>\n ) : (\n <div className=\"space-y-1\">\n {items.map((item: any) => {\n const dateValue = item[dateField];\n const subtitle = getSubtitle(item);\n\n return (\n <button\n type=\"button\"\n key={item.id}\n onClick={() => handleItemClick(item)}\n className=\"flex w-full items-center gap-3 rounded-md p-2 hover:bg-muted/50 cursor-pointer transition-colors text-left\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">\n {getTitleValue(item)}\n </p>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {dateValue && (\n <span>{formatRelativeTime(new Date(dateValue))}</span>\n )}\n {subtitle && (\n <>\n <span>-</span>\n <span className=\"truncate\">{subtitle}</span>\n </>\n )}\n </div>\n </div>\n </button>\n );\n })}\n </div>\n );\n\n return (\n <WidgetCard\n title={displayLabel}\n isLoading={isLoading}\n loadingSkeleton={<RecentItemsWidgetSkeleton count={limit} />}\n error={\n error instanceof Error ? error : error ? new Error(String(error)) : null\n }\n onRefresh={() => refetch()}\n >\n {listContent}\n </WidgetCard>\n );\n}\n\n/**\n * Format relative time\n */\nfunction formatRelativeTime(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 0) return `${days}d ago`;\n if (hours > 0) return `${hours}h ago`;\n if (minutes > 0) return `${minutes}m ago`;\n return \"just now\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgDA,SAAwB,kBAAkB,EAAE,UAAkC;CAC5E,MAAM,cAAc,gBAAgB;CACpC,MAAM,EACJ,YACA,QAAQ,GACR,OACA,aAAa,UACb,YAAY,aACZ,gBACA,aACA,aACE;CAGJ,MAAM,EAAE,MAAM,WAAW,OAAO,YAAY,kBAC1C,YACA;EACE,SAAS,GAAG,YAAY,QAAQ;EAChC;EACD,EACD,QACA,EAAE,UAAU,CACb;CAGD,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,GAAG,KAAK,OAAO,EAAE;CACxD,MAAM,eAAe,QACjB,YAAY,MAAM,GAClB,UAAU,qBAAqB,WAAW;CAG9C,MAAM,iBAAiB,SAAsB;AAC3C,MAAI,cAAc,KAAK,YAAa,QAAO,OAAO,KAAK,YAAY;AACnE,MAAI,KAAK,OAAQ,QAAO,OAAO,KAAK,OAAO;AAC3C,MAAI,KAAK,KAAM,QAAO,OAAO,KAAK,KAAK;AACvC,MAAI,KAAK,MAAO,QAAO,OAAO,KAAK,MAAM;AACzC,MAAI,KAAK,MAAO,QAAO,OAAO,KAAK,MAAM;AACzC,SAAO,SAAS,KAAK;;CAIvB,MAAM,eAAe,SAA6B;AAChD,MAAI,CAAC,gBAAgB,OAAQ,QAAO;AACpC,SAAO,eACJ,KAAK,UAAU,KAAK,OAAO,CAC3B,OAAO,QAAQ,CACf,KAAK,MAAM;;CAIhB,MAAM,mBAAmB,SAAc;AACrC,MAAI,YACF,aAAY,KAAK;;CAKrB,MAAM,cACJ,MAAM,WAAW,IACf,oBAAC;EAAE,WAAU;YAAgC;GAAgB,GAE7D,oBAAC;EAAI,WAAU;YACZ,MAAM,KAAK,SAAc;GACxB,MAAM,YAAY,KAAK;GACvB,MAAM,WAAW,YAAY,KAAK;AAElC,UACE,oBAAC;IACC,MAAK;IAEL,eAAe,gBAAgB,KAAK;IACpC,WAAU;cAEV,qBAAC;KAAI,WAAU;gBACb,oBAAC;MAAE,WAAU;gBACV,cAAc,KAAK;OAClB,EACJ,qBAAC;MAAI,WAAU;iBACZ,aACC,oBAAC,oBAAM,mBAAmB,IAAI,KAAK,UAAU,CAAC,GAAQ,EAEvD,YACC,4CACE,oBAAC,oBAAK,MAAQ,EACd,oBAAC;OAAK,WAAU;iBAAY;QAAgB,IAC3C;OAED;MACF;MAnBD,KAAK,GAoBH;IAEX;GACE;AAGV,QACE,oBAAC;EACC,OAAO;EACI;EACX,iBAAiB,oBAAC,6BAA0B,OAAO,QAAS;EAC5D,OACE,iBAAiB,QAAQ,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,GAAG;EAEtE,iBAAiB,SAAS;YAEzB;GACU;;;;;AAOjB,SAAS,mBAAmB,MAAoB;CAE9C,MAAM,wBADM,IAAI,MAAM,EACL,SAAS,GAAG,KAAK,SAAS;CAC3C,MAAM,UAAU,KAAK,MAAM,OAAO,IAAK;CACvC,MAAM,UAAU,KAAK,MAAM,UAAU,GAAG;CACxC,MAAM,QAAQ,KAAK,MAAM,UAAU,GAAG;CACtC,MAAM,OAAO,KAAK,MAAM,QAAQ,GAAG;AAEnC,KAAI,OAAO,EAAG,QAAO,GAAG,KAAK;AAC7B,KAAI,QAAQ,EAAG,QAAO,GAAG,MAAM;AAC/B,KAAI,UAAU,EAAG,QAAO,GAAG,QAAQ;AACnC,QAAO"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { ComponentReference } from "../../../server/augmentation.mjs";
|
|
2
|
-
import "../../../server/index.mjs";
|
|
3
|
-
import { DateFilterConfig } from "../../builder/types/widget-types.mjs";
|
|
4
|
-
import * as React$1 from "react";
|
|
5
|
-
import * as react_jsx_runtime36 from "react/jsx-runtime";
|
|
6
|
-
|
|
7
|
-
//#region src/client/components/widgets/stats-widget.d.ts
|
|
8
|
-
declare namespace stats_widget_d_exports {
|
|
9
|
-
export { StatsWidgetConfig, StatsWidgetProps, StatsWidget as default };
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Stats widget config (local type for component props)
|
|
13
|
-
*/
|
|
14
|
-
type StatsWidgetConfig = {
|
|
15
|
-
id: string;
|
|
16
|
-
collection: string;
|
|
17
|
-
label?: string;
|
|
18
|
-
realtime?: boolean;
|
|
19
|
-
/** Static filter (evaluated at build time) */
|
|
20
|
-
filter?: Record<string, any>;
|
|
21
|
-
/** Dynamic filter function (evaluated at render time) */
|
|
22
|
-
filterFn?: () => Record<string, any>;
|
|
23
|
-
/** Date filter preset (evaluated at render time) */
|
|
24
|
-
dateFilter?: DateFilterConfig;
|
|
25
|
-
/** Icon component or server-defined reference */
|
|
26
|
-
icon?: React$1.ComponentType<{
|
|
27
|
-
className?: string;
|
|
28
|
-
}> | ComponentReference | string;
|
|
29
|
-
/** Color variant for the stat card */
|
|
30
|
-
variant?: "default" | "primary" | "success" | "warning" | "danger";
|
|
31
|
-
/** Server has a fetchFn for this widget */
|
|
32
|
-
hasFetchFn?: boolean;
|
|
33
|
-
/** Refresh interval in ms */
|
|
34
|
-
refreshInterval?: number;
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Stats widget props
|
|
38
|
-
*/
|
|
39
|
-
type StatsWidgetProps = {
|
|
40
|
-
config: StatsWidgetConfig;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Stats widget component
|
|
44
|
-
*
|
|
45
|
-
* Shows:
|
|
46
|
-
* - Total count for a collection
|
|
47
|
-
* - Optional icon
|
|
48
|
-
* - Color variant for visual distinction
|
|
49
|
-
*/
|
|
50
|
-
declare function StatsWidget({
|
|
51
|
-
config
|
|
52
|
-
}: StatsWidgetProps): react_jsx_runtime36.JSX.Element;
|
|
53
|
-
//#endregion
|
|
54
|
-
export { stats_widget_d_exports };
|
|
55
|
-
//# sourceMappingURL=stats-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/stats-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;KAwBY,iBAAA;EAAA,EAAA,EAAA,MAAA;EAMF,UAAA,EAAA,MAAA;EAEQ,KAAA,CAAA,EAAA,MAAA;EAEJ,QAAA,CAAA,EAAA,OAAA;EAGV;EACA,MAAA,CAAA,EARM,MAQN,CAAA,MAAA,EAAA,GAAA,CAAA;EAAkB;EAaV,QAAA,CAAA,EAAA,GAAA,GAnBM,MAmBU,CAAA,MAAA,EACnB,GAAA,CAAA;EAoHe;EAAc,UAAA,CAAA,EAtIxB,gBAsIwB;EAAU;EAAgB,IAAA,CAAA,EAnI5D,OAAA,CAAM,aAmIsD,CAAA;IAAA,SAAA,CAAA,EAAA,MAAA;OAlI5D;;;;;;;;;;;KAaQ,gBAAA;UACH;;;;;;;;;;iBAoHe,WAAA;;GAAwB,mBAAgB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats-widget.mjs","names":["result: Record<string, any>"],"sources":["../../../../src/client/components/widgets/stats-widget.tsx"],"sourcesContent":["/**\n * Stats Widget\n *\n * Displays count and change percentage for a collection.\n * Uses WidgetCard for consistent styling.\n */\n\nimport type * as React from \"react\";\nimport { useMemo } from \"react\";\nimport type { ComponentReference } from \"#questpie/admin/server\";\nimport type {\n\tDateFilterConfig,\n\tDateFilterPreset,\n} from \"../../builder/types/widget-types\";\nimport { useCollectionCount } from \"../../hooks/use-collection\";\nimport { useServerWidgetData } from \"../../hooks/use-server-widget-data\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn, formatCollectionName } from \"../../lib/utils\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { StatsWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Stats widget config (local type for component props)\n */\nexport type StatsWidgetConfig = {\n\tid: string;\n\tcollection: string;\n\tlabel?: string;\n\trealtime?: boolean;\n\t/** Static filter (evaluated at build time) */\n\tfilter?: Record<string, any>;\n\t/** Dynamic filter function (evaluated at render time) */\n\tfilterFn?: () => Record<string, any>;\n\t/** Date filter preset (evaluated at render time) */\n\tdateFilter?: DateFilterConfig;\n\t/** Icon component or server-defined reference */\n\ticon?:\n\t\t| React.ComponentType<{ className?: string }>\n\t\t| ComponentReference\n\t\t| string;\n\t/** Color variant for the stat card */\n\tvariant?: \"default\" | \"primary\" | \"success\" | \"warning\" | \"danger\";\n\t/** Server has a fetchFn for this widget */\n\thasFetchFn?: boolean;\n\t/** Refresh interval in ms */\n\trefreshInterval?: number;\n};\n\n/**\n * Stats widget props\n */\nexport type StatsWidgetProps = {\n\tconfig: StatsWidgetConfig;\n};\n\n/**\n * Get date range for a preset\n */\nfunction getDateRange(preset: DateFilterPreset): { gte: Date; lte: Date } {\n\tconst now = new Date();\n\tconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n\tswitch (preset) {\n\t\tcase \"today\":\n\t\t\treturn {\n\t\t\t\tgte: today,\n\t\t\t\tlte: new Date(today.getTime() + 24 * 60 * 60 * 1000 - 1),\n\t\t\t};\n\t\tcase \"yesterday\": {\n\t\t\tconst yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);\n\t\t\treturn {\n\t\t\t\tgte: yesterday,\n\t\t\t\tlte: new Date(today.getTime() - 1),\n\t\t\t};\n\t\t}\n\t\tcase \"thisWeek\": {\n\t\t\tconst dayOfWeek = today.getDay();\n\t\t\tconst monday = new Date(\n\t\t\t\ttoday.getTime() -\n\t\t\t\t\t(dayOfWeek === 0 ? 6 : dayOfWeek - 1) * 24 * 60 * 60 * 1000,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tgte: monday,\n\t\t\t\tlte: now,\n\t\t\t};\n\t\t}\n\t\tcase \"lastWeek\": {\n\t\t\tconst dayOfWeek = today.getDay();\n\t\t\tconst thisMonday = new Date(\n\t\t\t\ttoday.getTime() -\n\t\t\t\t\t(dayOfWeek === 0 ? 6 : dayOfWeek - 1) * 24 * 60 * 60 * 1000,\n\t\t\t);\n\t\t\tconst lastMonday = new Date(\n\t\t\t\tthisMonday.getTime() - 7 * 24 * 60 * 60 * 1000,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tgte: lastMonday,\n\t\t\t\tlte: new Date(thisMonday.getTime() - 1),\n\t\t\t};\n\t\t}\n\t\tcase \"thisMonth\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getFullYear(), now.getMonth(), 1),\n\t\t\t\tlte: now,\n\t\t\t};\n\t\tcase \"lastMonth\": {\n\t\t\tconst firstOfThisMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getFullYear(), now.getMonth() - 1, 1),\n\t\t\t\tlte: new Date(firstOfThisMonth.getTime() - 1),\n\t\t\t};\n\t\t}\n\t\tcase \"last7days\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000),\n\t\t\t\tlte: now,\n\t\t\t};\n\t\tcase \"last30days\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000),\n\t\t\t\tlte: now,\n\t\t\t};\n\t\tcase \"last90days\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000),\n\t\t\t\tlte: now,\n\t\t\t};\n\t\tcase \"thisYear\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getFullYear(), 0, 1),\n\t\t\t\tlte: now,\n\t\t\t};\n\t\tcase \"lastYear\":\n\t\t\treturn {\n\t\t\t\tgte: new Date(now.getFullYear() - 1, 0, 1),\n\t\t\t\tlte: new Date(now.getFullYear() - 1, 11, 31, 23, 59, 59),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn { gte: today, lte: now };\n\t}\n}\n\n// Variant styles for the card border/background\nconst variantStyles = {\n\tdefault: \"\",\n\tprimary: \"border-primary/30 bg-primary/5\",\n\tsuccess: \"border-success/30 bg-success/5\",\n\twarning: \"border-warning/30 bg-warning/5\",\n\tdanger: \"border-destructive/30 bg-destructive/5\",\n};\n\n// Variant styles for the value text\nconst variantValueStyles = {\n\tdefault: \"\",\n\tprimary: \"text-primary\",\n\tsuccess: \"text-success\",\n\twarning: \"text-warning\",\n\tdanger: \"text-destructive\",\n};\n\n/**\n * Stats widget component\n *\n * Shows:\n * - Total count for a collection\n * - Optional icon\n * - Color variant for visual distinction\n */\nexport default function StatsWidget({ config }: StatsWidgetProps) {\n\tconst resolveText = useResolveText();\n\tconst {\n\t\tcollection,\n\t\tlabel,\n\t\tfilter,\n\t\tfilterFn,\n\t\tdateFilter,\n\t\ticon: Icon,\n\t\tvariant = \"default\",\n\t\trealtime,\n\t\thasFetchFn,\n\t\trefreshInterval,\n\t} = config;\n\n\t// Server-side data fetching (when hasFetchFn is true)\n\tconst serverQuery = useServerWidgetData<{ count: number }>(config.id, {\n\t\tenabled: !!hasFetchFn,\n\t\trefreshInterval,\n\t});\n\n\t// Build the final filter - evaluated at render time\n\tconst computedFilter = useMemo(() => {\n\t\tlet result: Record<string, any> = {};\n\n\t\t// 1. Static filter\n\t\tif (filter) {\n\t\t\tresult = { ...result, ...filter };\n\t\t}\n\n\t\t// 2. Dynamic filter function\n\t\tif (filterFn) {\n\t\t\tresult = { ...result, ...filterFn() };\n\t\t}\n\n\t\t// 3. Date filter preset\n\t\tif (dateFilter) {\n\t\t\tconst { gte, lte } = getDateRange(dateFilter.range);\n\t\t\tresult[dateFilter.field] = {\n\t\t\t\tgte: gte.toISOString(),\n\t\t\t\tlte: lte.toISOString(),\n\t\t\t};\n\t\t}\n\n\t\treturn Object.keys(result).length > 0 ? result : undefined;\n\t}, [filter, filterFn, dateFilter]);\n\n\t// Fetch count using dedicated count endpoint (more efficient than fetching all docs)\n\tconst collectionQuery = useCollectionCount(\n\t\tcollection as any,\n\t\tcomputedFilter ? { where: computedFilter } : undefined,\n\t\tundefined,\n\t\t{ realtime },\n\t);\n\n\t// Use server data or client data\n\tconst {\n\t\tdata: rawData,\n\t\tisLoading,\n\t\terror,\n\t\trefetch,\n\t} = hasFetchFn ? serverQuery : collectionQuery;\n\n\tconst count = hasFetchFn\n\t\t? ((rawData as { count: number } | undefined)?.count ?? 0)\n\t\t: ((rawData as number | undefined) ?? 0);\n\n\tconst displayLabel = label\n\t\t? resolveText(label)\n\t\t: formatCollectionName(collection);\n\n\treturn (\n\t\t<WidgetCard\n\t\t\ttitle={displayLabel}\n\t\t\ticon={Icon}\n\t\t\tisLoading={isLoading}\n\t\t\tloadingSkeleton={<StatsWidgetSkeleton />}\n\t\t\terror={\n\t\t\t\terror instanceof Error ? error : error ? new Error(String(error)) : null\n\t\t\t}\n\t\t\tonRefresh={() => refetch()}\n\t\t\tclassName={variantStyles[variant]}\n\t\t>\n\t\t\t<div className={cn(\"text-2xl font-bold\", variantValueStyles[variant])}>\n\t\t\t\t{count.toLocaleString()}\n\t\t\t</div>\n\t\t</WidgetCard>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { TableWidgetConfig } from "../../builder/types/widget-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime32 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/widgets/table-widget.d.ts
|
|
5
|
-
declare namespace table_widget_d_exports {
|
|
6
|
-
export { TableWidgetProps, TableWidget as default };
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Table widget props
|
|
10
|
-
*/
|
|
11
|
-
interface TableWidgetProps {
|
|
12
|
-
config: TableWidgetConfig;
|
|
13
|
-
/** Base path for navigation */
|
|
14
|
-
basePath?: string;
|
|
15
|
-
/** Navigate function for row clicks */
|
|
16
|
-
navigate?: (path: string) => void;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Table Widget Component
|
|
20
|
-
*
|
|
21
|
-
* Displays a mini table of collection items.
|
|
22
|
-
* Uses field definitions from admin config for labels and cell rendering.
|
|
23
|
-
*/
|
|
24
|
-
declare function TableWidget({
|
|
25
|
-
config,
|
|
26
|
-
basePath,
|
|
27
|
-
navigate
|
|
28
|
-
}: TableWidgetProps): react_jsx_runtime32.JSX.Element;
|
|
29
|
-
//#endregion
|
|
30
|
-
export { table_widget_d_exports };
|
|
31
|
-
//# sourceMappingURL=table-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/table-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;AA6GG,UAhFc,gBAAA,CAgFd;EAAgB,MAAA,EA/ET,iBA+ES;EAAA;;;;;;;;;;;iBAJK,WAAA;;;;GAIrB,mBAAgB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table-widget.mjs","names":["queryOptions: any"],"sources":["../../../../src/client/components/widgets/table-widget.tsx"],"sourcesContent":["/**\n * Table Widget\n *\n * Displays a mini table with collection data.\n * Automatically uses field definitions from collection config for:\n * - Column labels (from field.label)\n * - Cell rendering (from field.cell)\n *\n * Columns can be simple field keys or objects with overrides.\n */\n\nimport type * as React from \"react\";\nimport type { FieldDefinition } from \"../../builder/field/field\";\nimport type {\n TableWidgetColumn,\n TableWidgetColumnConfig,\n TableWidgetConfig,\n} from \"../../builder/types/widget-types\";\nimport { useCollectionList } from \"../../hooks/use-collection\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport type { I18nText } from \"../../i18n/types\";\nimport { cn, formatLabel } from \"../../lib/utils\";\nimport { DefaultCell } from \"../../views/collection/cells/primitive-cells\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { TableWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Table widget props\n */\nexport interface TableWidgetProps {\n config: TableWidgetConfig;\n /** Base path for navigation */\n basePath?: string;\n /** Navigate function for row clicks */\n navigate?: (path: string) => void;\n}\n\n/**\n * Field types that need fieldDef passed to their cell component\n */\nconst FIELD_TYPES_NEEDING_FIELD_DEF = new Set([\n \"object\",\n \"array\",\n \"relation\",\n \"reverseRelation\",\n]);\n\n/**\n * Normalize column config - converts string to object format\n */\nfunction normalizeColumn(column: TableWidgetColumn): TableWidgetColumnConfig {\n if (typeof column === \"string\") {\n return { key: column };\n }\n return column;\n}\n\n/**\n * Get column label from field definition or column config\n */\nfunction getColumnLabel(\n column: TableWidgetColumnConfig,\n fieldDef: FieldDefinition | undefined,\n): I18nText | string {\n // Use override if provided\n if (column.label) {\n return column.label;\n }\n // Use field label if available\n const fieldOptions = fieldDef?.[\"~options\"] as\n | { label?: I18nText }\n | undefined;\n if (fieldOptions?.label) {\n return fieldOptions.label;\n }\n // Fallback to formatted key\n return formatLabel(column.key);\n}\n\n/**\n * Resolve cell component from field definition\n */\nfunction resolveCellComponent(\n fieldDef: FieldDefinition | undefined,\n): React.ComponentType<{\n value: unknown;\n row?: unknown;\n fieldDef?: FieldDefinition;\n}> {\n if (fieldDef?.cell?.component) {\n return fieldDef.cell.component as React.ComponentType<{\n value: unknown;\n row?: unknown;\n fieldDef?: FieldDefinition;\n }>;\n }\n return DefaultCell;\n}\n\n/**\n * Table Widget Component\n *\n * Displays a mini table of collection items.\n * Uses field definitions from admin config for labels and cell rendering.\n */\nexport default function TableWidget({\n config,\n basePath = \"/admin\",\n navigate,\n}: TableWidgetProps) {\n const resolveText = useResolveText();\n\n const {\n collection,\n columns: rawColumns,\n limit = 5,\n sortBy,\n sortOrder = \"desc\",\n filter,\n linkToDetail,\n emptyMessage,\n realtime,\n } = config;\n\n // Normalize columns (convert strings to objects)\n const columns = rawColumns.map(normalizeColumn);\n\n // Field definitions are not available from server config (schema-driven)\n const fields = undefined as Record<string, FieldDefinition> | undefined;\n\n // Build query options\n const queryOptions: any = { limit };\n if (sortBy) {\n queryOptions.orderBy = { [sortBy]: sortOrder };\n }\n if (filter) {\n queryOptions.where = filter;\n }\n\n // Fetch collection data\n const { data, isLoading, error, refetch } = useCollectionList(\n collection as any,\n queryOptions,\n undefined,\n { realtime },\n );\n\n const items = Array.isArray(data?.docs) ? data.docs : [];\n const title = config.title ? resolveText(config.title) : undefined;\n\n // Handle row click\n const handleRowClick = (item: any) => {\n if (linkToDetail && navigate) {\n navigate(`${basePath}/collections/${collection}/${item.id}`);\n }\n };\n\n // Render cell value\n const renderCell = (\n item: any,\n column: TableWidgetColumnConfig,\n ): React.ReactNode => {\n const value = item[column.key];\n\n // Use custom renderer if provided in column config\n if (column.render) {\n return column.render(value, item);\n }\n\n // Get field definition and resolve cell component\n const fieldDef = fields?.[column.key];\n const CellComponent = resolveCellComponent(fieldDef);\n const fieldType = fieldDef?.name ?? \"text\";\n const needsFieldDef = FIELD_TYPES_NEEDING_FIELD_DEF.has(fieldType);\n\n return needsFieldDef ? (\n <CellComponent value={value} row={item} fieldDef={fieldDef} />\n ) : (\n <CellComponent value={value} row={item} />\n );\n };\n\n // Empty state\n const emptyContent = (\n <div className=\"flex h-24 items-center justify-center text-muted-foreground\">\n <p className=\"text-sm\">\n {emptyMessage ? resolveText(emptyMessage) : \"No data available\"}\n </p>\n </div>\n );\n\n // Table content\n const tableContent =\n items.length === 0 ? (\n emptyContent\n ) : (\n <div className=\"-mx-5 -mb-1\">\n {/* Header */}\n <div className=\"flex items-center gap-2 px-5 py-2 border-b border-border/30 text-[10px] font-medium uppercase tracking-wider text-muted-foreground bg-muted/20 backdrop-blur-sm\">\n {columns.map((column) => {\n const fieldDef = fields?.[column.key];\n const label = getColumnLabel(column, fieldDef);\n\n return (\n <div\n key={column.key}\n className={cn(\n \"flex-1 min-w-0\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n )}\n style={\n column.width\n ? { width: column.width, flex: \"none\" }\n : undefined\n }\n >\n {resolveText(label)}\n </div>\n );\n })}\n </div>\n {/* Rows */}\n {items.map((item: any) =>\n linkToDetail ? (\n <button\n key={item.id}\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-5 py-2.5 border-b border-border/20 last:border-0 transition-all cursor-pointer hover:bg-muted/30 hover:backdrop-blur-sm text-left\"\n onClick={() => handleRowClick(item)}\n >\n {columns.map((column) => (\n <div\n key={column.key}\n className={cn(\n \"flex-1 min-w-0 text-sm truncate\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n )}\n style={\n column.width\n ? { width: column.width, flex: \"none\" }\n : undefined\n }\n >\n {renderCell(item, column)}\n </div>\n ))}\n </button>\n ) : (\n <div\n key={item.id}\n className=\"flex items-center gap-2 px-5 py-2.5 border-b border-border/20 last:border-0\"\n >\n {columns.map((column) => (\n <div\n key={column.key}\n className={cn(\n \"flex-1 min-w-0 text-sm truncate\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n )}\n style={\n column.width\n ? { width: column.width, flex: \"none\" }\n : undefined\n }\n >\n {renderCell(item, column)}\n </div>\n ))}\n </div>\n ),\n )}\n </div>\n );\n\n return (\n <WidgetCard\n title={title}\n isLoading={isLoading}\n loadingSkeleton={\n <TableWidgetSkeleton rows={limit} columns={columns.length} />\n }\n error={\n error instanceof Error ? error : error ? new Error(String(error)) : null\n }\n onRefresh={() => refetch()}\n >\n {tableContent}\n </WidgetCard>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { TimelineWidgetConfig } from "../../builder/types/widget-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime39 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/widgets/timeline-widget.d.ts
|
|
5
|
-
declare namespace timeline_widget_d_exports {
|
|
6
|
-
export { TimelineWidgetProps, TimelineWidget as default };
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Timeline widget props
|
|
10
|
-
*/
|
|
11
|
-
interface TimelineWidgetProps {
|
|
12
|
-
config: TimelineWidgetConfig;
|
|
13
|
-
/** Navigate function for item clicks */
|
|
14
|
-
navigate?: (path: string) => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Timeline Widget Component
|
|
18
|
-
*
|
|
19
|
-
* Displays a vertical timeline of events/activities.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```tsx
|
|
23
|
-
* <TimelineWidget
|
|
24
|
-
* config={{
|
|
25
|
-
* type: "timeline",
|
|
26
|
-
* id: "recent-activity",
|
|
27
|
-
* title: "Recent Activity",
|
|
28
|
-
* fetchFn: async (client) => {
|
|
29
|
-
* const activities = await client.collections.activities.findMany({
|
|
30
|
-
* limit: 10,
|
|
31
|
-
* orderBy: { createdAt: "desc" }
|
|
32
|
-
* });
|
|
33
|
-
* return activities.map(a => ({
|
|
34
|
-
* id: a.id,
|
|
35
|
-
* title: a.action,
|
|
36
|
-
* description: a.description,
|
|
37
|
-
* timestamp: a.createdAt,
|
|
38
|
-
* variant: a.type === "error" ? "error" : "default"
|
|
39
|
-
* }));
|
|
40
|
-
* }
|
|
41
|
-
* }}
|
|
42
|
-
* />
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
declare function TimelineWidget({
|
|
46
|
-
config,
|
|
47
|
-
navigate
|
|
48
|
-
}: TimelineWidgetProps): react_jsx_runtime39.JSX.Element;
|
|
49
|
-
//#endregion
|
|
50
|
-
export { timeline_widget_d_exports };
|
|
51
|
-
//# sourceMappingURL=timeline-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/timeline-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAyBA;AA8EwB,UA9EP,mBAAA,CA8EqB;EACrC,MAAA,EA9EQ,oBA8ER;EACA;EACE,QAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAHqB,cAAA;;;GAGrB,sBAAmB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-widget.mjs","names":["IconifyIcon"],"sources":["../../../../src/client/components/widgets/timeline-widget.tsx"],"sourcesContent":["/**\n * Timeline Widget\n *\n * Displays an activity/event timeline.\n * Uses WidgetCard for consistent styling.\n */\n\nimport { Icon as IconifyIcon } from \"@iconify/react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type * as React from \"react\";\nimport type {\n\tTimelineItem,\n\tTimelineWidgetConfig,\n} from \"../../builder/types/widget-types\";\nimport { resolveIconElement } from \"../../components/component-renderer\";\nimport { useServerWidgetData } from \"../../hooks/use-server-widget-data\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectClient, useAdminStore } from \"../../runtime\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { TimelineWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Timeline widget props\n */\nexport interface TimelineWidgetProps {\n\tconfig: TimelineWidgetConfig;\n\t/** Navigate function for item clicks */\n\tnavigate?: (path: string) => void;\n}\n\n// Variant styles for timeline items\nconst variantStyles = {\n\tdefault: \"bg-muted-foreground\",\n\tsuccess: \"bg-success\",\n\twarning: \"bg-warning\",\n\terror: \"bg-destructive\",\n\tinfo: \"bg-info\",\n};\n\n/**\n * Format timestamp based on format option\n */\nfunction formatTimestamp(\n\tdate: Date | string,\n\tformat: TimelineWidgetConfig[\"timestampFormat\"] = \"relative\",\n): string {\n\tconst d = typeof date === \"string\" ? new Date(date) : date;\n\n\tswitch (format) {\n\t\tcase \"absolute\":\n\t\t\treturn d.toLocaleDateString();\n\n\t\tcase \"datetime\":\n\t\t\treturn d.toLocaleString();\n\n\t\tcase \"relative\":\n\t\tdefault: {\n\t\t\tconst now = new Date();\n\t\t\tconst diff = now.getTime() - d.getTime();\n\t\t\tconst seconds = Math.floor(diff / 1000);\n\t\t\tconst minutes = Math.floor(seconds / 60);\n\t\t\tconst hours = Math.floor(minutes / 60);\n\t\t\tconst days = Math.floor(hours / 24);\n\n\t\t\tif (days > 7) return d.toLocaleDateString();\n\t\t\tif (days > 0) return `${days}d ago`;\n\t\t\tif (hours > 0) return `${hours}h ago`;\n\t\t\tif (minutes > 0) return `${minutes}m ago`;\n\t\t\treturn \"just now\";\n\t\t}\n\t}\n}\n\n/**\n * Timeline Widget Component\n *\n * Displays a vertical timeline of events/activities.\n *\n * @example\n * ```tsx\n * <TimelineWidget\n * config={{\n * type: \"timeline\",\n * id: \"recent-activity\",\n * title: \"Recent Activity\",\n * fetchFn: async (client) => {\n * const activities = await client.collections.activities.findMany({\n * limit: 10,\n * orderBy: { createdAt: \"desc\" }\n * });\n * return activities.map(a => ({\n * id: a.id,\n * title: a.action,\n * description: a.description,\n * timestamp: a.createdAt,\n * variant: a.type === \"error\" ? \"error\" : \"default\"\n * }));\n * }\n * }}\n * />\n * ```\n */\nexport default function TimelineWidget({\n\tconfig,\n\tnavigate,\n}: TimelineWidgetProps) {\n\tconst client = useAdminStore(selectClient);\n\tconst resolveText = useResolveText();\n\tconst {\n\t\tmaxItems = 10,\n\t\tshowTimestamps = true,\n\t\ttimestampFormat = \"relative\",\n\t\temptyMessage,\n\t} = config;\n\n\tconst useServerData = !!config.hasFetchFn;\n\tconst serverQuery = useServerWidgetData<TimelineItem[]>(config.id, {\n\t\tenabled: useServerData,\n\t\trefreshInterval: config.refreshInterval,\n\t});\n\tconst clientQuery = useQuery<TimelineItem[]>({\n\t\tqueryKey: [\"widget\", \"timeline\", config.id],\n\t\tqueryFn: () => config.fetchFn!(client),\n\t\tenabled: !useServerData && !!config.fetchFn,\n\t\trefetchInterval: config.refreshInterval,\n\t});\n\tconst { data, isLoading, error, refetch } = useServerData\n\t\t? serverQuery\n\t\t: clientQuery;\n\n\tconst items = data?.slice(0, maxItems) ?? [];\n\tconst title = config.title ? resolveText(config.title) : undefined;\n\n\t// Handle item click\n\tconst handleItemClick = (item: TimelineItem) => {\n\t\tif (item.href && navigate) {\n\t\t\tnavigate(item.href);\n\t\t}\n\t};\n\n\t// Empty state\n\tconst emptyContent = (\n\t\t<div className=\"flex h-24 items-center justify-center text-muted-foreground\">\n\t\t\t<p className=\"text-sm\">\n\t\t\t\t{emptyMessage ? resolveText(emptyMessage) : \"No activity yet\"}\n\t\t\t</p>\n\t\t</div>\n\t);\n\n\t// Timeline content\n\tconst timelineContent =\n\t\titems.length === 0 ? (\n\t\t\temptyContent\n\t\t) : (\n\t\t\t<div className=\"space-y-0\">\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst iconElement = resolveIconElement(item.icon, {\n\t\t\t\t\t\tclassName: \"h-3 w-3 text-white\",\n\t\t\t\t\t});\n\t\t\t\t\tconst variant = item.variant || \"default\";\n\t\t\t\t\tconst isLast = index === items.length - 1;\n\t\t\t\t\tconst isClickable = !!(item.href && navigate);\n\n\t\t\t\t\tconst itemContent = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{/* Timeline line */}\n\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t<div className=\"absolute left-[11px] top-6 bottom-0 w-px bg-border\" />\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Icon dot */}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative z-10 flex h-6 w-6 shrink-0 items-center justify-center rounded-full\",\n\t\t\t\t\t\t\t\t\tvariantStyles[variant],\n\t\t\t\t\t\t\t\t)}\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\t<IconifyIcon\n\t\t\t\t\t\t\t\t\t\ticon=\"ph:circle-bold\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-3 w-3 text-white\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{/* Content */}\n\t\t\t\t\t\t\t<div className=\"flex-1 min-w-0 pt-0.5 text-left\">\n\t\t\t\t\t\t\t\t<p className=\"text-sm font-medium truncate\">{item.title}</p>\n\t\t\t\t\t\t\t\t{item.description && (\n\t\t\t\t\t\t\t\t\t<p className=\"text-xs text-muted-foreground mt-0.5 line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{showTimestamps && item.timestamp && (\n\t\t\t\t\t\t\t\t\t<p className=\"text-xs text-muted-foreground mt-1\">\n\t\t\t\t\t\t\t\t\t\t{formatTimestamp(item.timestamp, timestampFormat)}\n\t\t\t\t\t\t\t\t\t</p>\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);\n\n\t\t\t\t\tif (isClickable) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative flex gap-3 pb-4 w-full\",\n\t\t\t\t\t\t\t\t\t\"cursor-pointer hover:bg-muted/30 -mx-2 px-2 rounded-md transition-colors\",\n\t\t\t\t\t\t\t\t\tisLast && \"pb-0\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => handleItemClick(item)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{itemContent}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\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={cn(\"relative flex gap-3 pb-4\", isLast && \"pb-0\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{itemContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\n\treturn (\n\t\t<WidgetCard\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tloadingSkeleton={<TimelineWidgetSkeleton count={maxItems} />}\n\t\t\terror={\n\t\t\t\terror instanceof Error ? error : error ? new Error(String(error)) : null\n\t\t\t}\n\t\t\tonRefresh={() => refetch()}\n\t\t>\n\t\t\t{timelineContent}\n\t\t</WidgetCard>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ValueWidgetConfig } from "../../builder/types/widget-types.mjs";
|
|
2
|
-
import * as react_jsx_runtime33 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/client/components/widgets/value-widget.d.ts
|
|
5
|
-
declare namespace value_widget_d_exports {
|
|
6
|
-
export { ValueWidgetProps, ValueWidget as default };
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Value widget props
|
|
10
|
-
*/
|
|
11
|
-
interface ValueWidgetProps {
|
|
12
|
-
config: ValueWidgetConfig;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Value Widget Component
|
|
16
|
-
*
|
|
17
|
-
* Fetches data via async function and renders with full customization.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <ValueWidget
|
|
22
|
-
* config={{
|
|
23
|
-
* type: "value",
|
|
24
|
-
* id: "total-revenue",
|
|
25
|
-
* fetchFn: async (client) => ({
|
|
26
|
-
* value: 42,
|
|
27
|
-
* label: "Total",
|
|
28
|
-
* classNames: { root: "bg-blue-50" },
|
|
29
|
-
* }),
|
|
30
|
-
* }}
|
|
31
|
-
* />
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
declare function ValueWidget({
|
|
35
|
-
config
|
|
36
|
-
}: ValueWidgetProps): react_jsx_runtime33.JSX.Element;
|
|
37
|
-
//#endregion
|
|
38
|
-
export { value_widget_d_exports };
|
|
39
|
-
//# sourceMappingURL=value-widget.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value-widget.d.mts","names":[],"sources":["../../../../src/client/components/widgets/value-widget.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAuBA;AAkCwB,UAlCP,gBAAA,CAkCkB;EAAG,MAAA,EAjC5B,iBAiC4B;;;;;;;;;;;;;;;;;;;;;;iBAAd,WAAA;;GAAwB,mBAAgB,mBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value-widget.mjs","names":[],"sources":["../../../../src/client/components/widgets/value-widget.tsx"],"sourcesContent":["/**\n * Value Widget\n *\n * Flexible widget with async data fetching and full Tailwind customization.\n * Uses WidgetCard for consistent styling while allowing custom classNames.\n */\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport type {\n ValueWidgetConfig,\n ValueWidgetResult,\n} from \"../../builder/types/widget-types\";\nimport { resolveIconElement } from \"../../components/component-renderer\";\nimport { useServerWidgetData } from \"../../hooks/use-server-widget-data\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectClient, useAdminStore } from \"../../runtime\";\nimport { WidgetCard } from \"../../views/dashboard/widget-card\";\nimport { ValueWidgetSkeleton } from \"./widget-skeletons\";\n\n/**\n * Value widget props\n */\nexport interface ValueWidgetProps {\n config: ValueWidgetConfig;\n}\n\n/**\n * Format value for display\n */\nfunction formatValue(value: number | string): string {\n if (typeof value === \"number\") {\n return value.toLocaleString();\n }\n return value;\n}\n\n/**\n * Value Widget Component\n *\n * Fetches data via async function and renders with full customization.\n *\n * @example\n * ```tsx\n * <ValueWidget\n * config={{\n * type: \"value\",\n * id: \"total-revenue\",\n * fetchFn: async (client) => ({\n * value: 42,\n * label: \"Total\",\n * classNames: { root: \"bg-blue-50\" },\n * }),\n * }}\n * />\n * ```\n */\nexport default function ValueWidget({ config }: ValueWidgetProps) {\n const client = useAdminStore(selectClient);\n const resolveText = useResolveText();\n\n const useServerData = !!config.hasFetchFn;\n const serverQuery = useServerWidgetData<ValueWidgetResult>(config.id, {\n enabled: useServerData,\n refreshInterval: config.refreshInterval,\n });\n const clientQuery = useQuery<ValueWidgetResult>({\n queryKey: [\"widget\", \"value\", config.id],\n queryFn: () => config.fetchFn!(client),\n enabled: !useServerData && !!config.fetchFn,\n refetchInterval: config.refreshInterval,\n });\n const { data, isLoading, error, refetch, isFetching } = useServerData\n ? serverQuery\n : clientQuery;\n\n // Determine if this is a featured variant based on config\n const isFeatured = config.cardVariant === \"featured\";\n\n // Handle loading/error via WidgetCard\n if (isLoading || error || !data) {\n return (\n <WidgetCard\n title={config.title ? resolveText(config.title) : undefined}\n isLoading={isLoading}\n loadingSkeleton={<ValueWidgetSkeleton featured={isFeatured} />}\n error={\n error instanceof Error\n ? error\n : !data && !isLoading\n ? new Error(\"No data returned\")\n : null\n }\n onRefresh={() => refetch()}\n className={data?.classNames?.root}\n />\n );\n }\n\n const cls = data.classNames ?? {};\n const Icon = data.icon;\n const TrendIcon = data.trend?.icon;\n\n // Resolve all text fields (supports both string and i18n objects)\n const label = data.label ? resolveText(data.label) : undefined;\n const subtitle = data.subtitle ? resolveText(data.subtitle) : undefined;\n const footer = data.footer ? resolveText(data.footer) : undefined;\n\n return (\n <WidgetCard\n title={label}\n icon={Icon}\n onRefresh={() => refetch()}\n isRefreshing={isFetching && !isLoading}\n className={cls.root}\n >\n <div className={cn(\"space-y-1\", cls.content)}>\n {/* Main value */}\n <div className={cn(\"text-2xl font-bold\", cls.value)}>\n {data.formatted ?? formatValue(data.value)}\n </div>\n\n {/* Trend indicator */}\n {data.trend && (\n <div className={cn(\"flex items-center gap-1 text-sm\", cls.trend)}>\n {resolveIconElement(TrendIcon, {\n className: cn(\"h-3 w-3\", cls.trendIcon),\n })}\n <span>{data.trend.value}</span>\n </div>\n )}\n\n {/* Subtitle */}\n {subtitle && (\n <p className={cn(\"text-xs text-muted-foreground\", cls.subtitle)}>\n {subtitle}\n </p>\n )}\n\n {/* Footer */}\n {footer && (\n <p className={cn(\"text-xs text-muted-foreground pt-2\", cls.footer)}>\n {footer}\n </p>\n )}\n </div>\n </WidgetCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA8BA,SAAS,YAAY,OAAgC;AACnD,KAAI,OAAO,UAAU,SACnB,QAAO,MAAM,gBAAgB;AAE/B,QAAO;;;;;;;;;;;;;;;;;;;;;;AAuBT,SAAwB,YAAY,EAAE,UAA4B;CAChE,MAAM,SAAS,cAAc,aAAa;CAC1C,MAAM,cAAc,gBAAgB;CAEpC,MAAM,gBAAgB,CAAC,CAAC,OAAO;CAC/B,MAAM,cAAc,oBAAuC,OAAO,IAAI;EACpE,SAAS;EACT,iBAAiB,OAAO;EACzB,CAAC;CACF,MAAM,cAAc,SAA4B;EAC9C,UAAU;GAAC;GAAU;GAAS,OAAO;GAAG;EACxC,eAAe,OAAO,QAAS,OAAO;EACtC,SAAS,CAAC,iBAAiB,CAAC,CAAC,OAAO;EACpC,iBAAiB,OAAO;EACzB,CAAC;CACF,MAAM,EAAE,MAAM,WAAW,OAAO,SAAS,eAAe,gBACpD,cACA;CAGJ,MAAM,aAAa,OAAO,gBAAgB;AAG1C,KAAI,aAAa,SAAS,CAAC,KACzB,QACE,oBAAC;EACC,OAAO,OAAO,QAAQ,YAAY,OAAO,MAAM,GAAG;EACvC;EACX,iBAAiB,oBAAC,uBAAoB,UAAU,aAAc;EAC9D,OACE,iBAAiB,QACb,QACA,CAAC,QAAQ,CAAC,4BACR,IAAI,MAAM,mBAAmB,GAC7B;EAER,iBAAiB,SAAS;EAC1B,WAAW,MAAM,YAAY;GAC7B;CAIN,MAAM,MAAM,KAAK,cAAc,EAAE;CACjC,MAAM,OAAO,KAAK;CAClB,MAAM,YAAY,KAAK,OAAO;CAG9B,MAAM,QAAQ,KAAK,QAAQ,YAAY,KAAK,MAAM,GAAG;CACrD,MAAM,WAAW,KAAK,WAAW,YAAY,KAAK,SAAS,GAAG;CAC9D,MAAM,SAAS,KAAK,SAAS,YAAY,KAAK,OAAO,GAAG;AAExD,QACE,oBAAC;EACC,OAAO;EACP,MAAM;EACN,iBAAiB,SAAS;EAC1B,cAAc,cAAc,CAAC;EAC7B,WAAW,IAAI;YAEf,qBAAC;GAAI,WAAW,GAAG,aAAa,IAAI,QAAQ;;IAE1C,oBAAC;KAAI,WAAW,GAAG,sBAAsB,IAAI,MAAM;eAChD,KAAK,aAAa,YAAY,KAAK,MAAM;MACtC;IAGL,KAAK,SACJ,qBAAC;KAAI,WAAW,GAAG,mCAAmC,IAAI,MAAM;gBAC7D,mBAAmB,WAAW,EAC7B,WAAW,GAAG,WAAW,IAAI,UAAU,EACxC,CAAC,EACF,oBAAC,oBAAM,KAAK,MAAM,QAAa;MAC3B;IAIP,YACC,oBAAC;KAAE,WAAW,GAAG,iCAAiC,IAAI,SAAS;eAC5D;MACC;IAIL,UACC,oBAAC;KAAE,WAAW,GAAG,sCAAsC,IAAI,OAAO;eAC/D;MACC;;IAEF;GACK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget-skeletons.mjs","names":[],"sources":["../../../../src/client/components/widgets/widget-skeletons.tsx"],"sourcesContent":["/**\n * Widget Skeletons\n *\n * Loading skeleton components for different widget types.\n * Provides visual feedback while data is being fetched.\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { Skeleton } from \"../ui/skeleton\";\n\n// ============================================================================\n// Stats Widget Skeleton\n// ============================================================================\n\nexport function StatsWidgetSkeleton() {\n return (\n <div className=\"space-y-3\">\n <Skeleton className=\"h-8 w-20\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n );\n}\n\n// ============================================================================\n// Chart Widget Skeleton\n// ============================================================================\n\nexport function ChartWidgetSkeleton() {\n return (\n <div className=\"h-48 w-full flex items-end gap-2 pt-4\">\n {/* Bar chart style skeleton */}\n <Skeleton className=\"flex-1 rounded-t h-[40%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[65%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[45%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[80%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[55%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[70%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[50%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[75%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[60%]\" />\n <Skeleton className=\"flex-1 rounded-t h-[85%]\" />\n </div>\n );\n}\n\n// ============================================================================\n// Recent Items Widget Skeleton\n// ============================================================================\n\nexport function RecentItemsWidgetSkeleton({ count = 5 }: { count?: number }) {\n return (\n <div className=\"space-y-1\">\n <SkeletonRow />\n {count > 1 && <SkeletonRow />}\n {count > 2 && <SkeletonRow />}\n {count > 3 && <SkeletonRow />}\n {count > 4 && <SkeletonRow />}\n </div>\n );\n}\n\nfunction SkeletonRow() {\n return (\n <div className=\"flex items-center gap-3 p-2\">\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Quick Actions Widget Skeleton\n// ============================================================================\n\nexport function QuickActionsWidgetSkeleton({\n count = 3,\n layout = \"list\",\n}: {\n count?: number;\n layout?: \"list\" | \"grid\";\n}) {\n if (layout === \"grid\") {\n return (\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionGridItem />\n {count > 1 && <ActionGridItem />}\n {count > 2 && <ActionGridItem />}\n {count > 3 && <ActionGridItem />}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1 -mx-1\">\n <ActionListItem />\n {count > 1 && <ActionListItem />}\n {count > 2 && <ActionListItem />}\n </div>\n );\n}\n\nfunction ActionGridItem() {\n return (\n <div className=\"flex flex-col items-center justify-center gap-2 p-3\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-3 w-16\" />\n </div>\n );\n}\n\nfunction ActionListItem() {\n return (\n <div className=\"flex items-center gap-3 px-2 py-2\">\n <Skeleton className=\"h-8 w-8 rounded-md shrink-0\" />\n <Skeleton className=\"h-4 flex-1\" />\n </div>\n );\n}\n\n// ============================================================================\n// Table Widget Skeleton\n// ============================================================================\n\nexport function TableWidgetSkeleton({\n rows = 5,\n columns = 3,\n}: {\n rows?: number;\n columns?: number;\n}) {\n return (\n <div className=\"-mx-5\">\n {/* Header */}\n <div className=\"flex gap-4 px-5 py-2 border-b border-border/50\">\n <Skeleton className=\"h-4 w-24\" />\n {columns > 1 && <Skeleton className=\"h-4 flex-1\" />}\n {columns > 2 && <Skeleton className=\"h-4 flex-1\" />}\n </div>\n {/* Rows */}\n <TableSkeletonRow columns={columns} />\n {rows > 1 && <TableSkeletonRow columns={columns} />}\n {rows > 2 && <TableSkeletonRow columns={columns} />}\n {rows > 3 && <TableSkeletonRow columns={columns} />}\n {rows > 4 && <TableSkeletonRow columns={columns} last />}\n </div>\n );\n}\n\nfunction TableSkeletonRow({\n columns = 3,\n last = false,\n}: {\n columns?: number;\n last?: boolean;\n}) {\n return (\n <div\n className={cn(\n \"flex gap-4 px-5 py-3 border-b border-border/30\",\n last && \"border-0\",\n )}\n >\n <Skeleton className=\"h-4 w-20\" />\n {columns > 1 && <Skeleton className=\"h-4 flex-1\" />}\n {columns > 2 && <Skeleton className=\"h-4 flex-1\" />}\n </div>\n );\n}\n\n// ============================================================================\n// Timeline Widget Skeleton\n// ============================================================================\n\nexport function TimelineWidgetSkeleton({ count = 5 }: { count?: number }) {\n return (\n <div className=\"space-y-4\">\n <TimelineSkeletonItem />\n {count > 1 && <TimelineSkeletonItem />}\n {count > 2 && <TimelineSkeletonItem />}\n {count > 3 && <TimelineSkeletonItem />}\n {count > 4 && <TimelineSkeletonItem last />}\n </div>\n );\n}\n\nfunction TimelineSkeletonItem({ last = false }: { last?: boolean }) {\n return (\n <div className=\"flex gap-3\">\n {/* Timeline dot */}\n <div className=\"flex flex-col items-center\">\n <Skeleton className=\"h-3 w-3 rounded-full\" />\n {!last && <Skeleton className=\"w-0.5 flex-1 mt-1\" />}\n </div>\n {/* Content */}\n <div className=\"flex-1 space-y-1 pb-4\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Progress Widget Skeleton\n// ============================================================================\n\nexport function ProgressWidgetSkeleton() {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex justify-between items-center\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-4 w-12\" />\n </div>\n <Skeleton className=\"h-2 w-full rounded-full\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n );\n}\n\n// ============================================================================\n// Value Widget Skeleton\n// ============================================================================\n\nexport function ValueWidgetSkeleton({\n featured = false,\n}: {\n featured?: boolean;\n}) {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-start gap-3\">\n <Skeleton className=\"h-10 w-10 rounded-md shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className={cn(\"h-8\", featured ? \"w-40\" : \"w-24\")} />\n </div>\n </div>\n <Skeleton className=\"h-3 w-32\" />\n </div>\n );\n}\n\n// ============================================================================\n// Generic Widget Skeleton\n// ============================================================================\n\nexport function GenericWidgetSkeleton() {\n return (\n <div className=\"space-y-4\">\n <Skeleton className=\"h-20 w-full\" />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAcA,SAAgB,sBAAsB;AACpC,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC,YAAS,WAAU,aAAa,EACjC,oBAAC,YAAS,WAAU,aAAa;GAC7B;;AAQV,SAAgB,sBAAsB;AACpC,QACE,qBAAC;EAAI,WAAU;;GAEb,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;GACjD,oBAAC,YAAS,WAAU,6BAA6B;;GAC7C;;AAQV,SAAgB,0BAA0B,EAAE,QAAQ,KAAyB;AAC3E,QACE,qBAAC;EAAI,WAAU;;GACb,oBAAC,gBAAc;GACd,QAAQ,KAAK,oBAAC,gBAAc;GAC5B,QAAQ,KAAK,oBAAC,gBAAc;GAC5B,QAAQ,KAAK,oBAAC,gBAAc;GAC5B,QAAQ,KAAK,oBAAC,gBAAc;;GACzB;;AAIV,SAAS,cAAc;AACrB,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;cACb,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,cAAc;IAC9B;GACF;;AAyDV,SAAgB,oBAAoB,EAClC,OAAO,GACP,UAAU,KAIT;AACD,QACE,qBAAC;EAAI,WAAU;;GAEb,qBAAC;IAAI,WAAU;;KACb,oBAAC,YAAS,WAAU,aAAa;KAChC,UAAU,KAAK,oBAAC,YAAS,WAAU,eAAe;KAClD,UAAU,KAAK,oBAAC,YAAS,WAAU,eAAe;;KAC/C;GAEN,oBAAC,oBAA0B,UAAW;GACrC,OAAO,KAAK,oBAAC,oBAA0B,UAAW;GAClD,OAAO,KAAK,oBAAC,oBAA0B,UAAW;GAClD,OAAO,KAAK,oBAAC,oBAA0B,UAAW;GAClD,OAAO,KAAK,oBAAC;IAA0B;IAAS;KAAO;;GACpD;;AAIV,SAAS,iBAAiB,EACxB,UAAU,GACV,OAAO,SAIN;AACD,QACE,qBAAC;EACC,WAAW,GACT,kDACA,QAAQ,WACT;;GAED,oBAAC,YAAS,WAAU,aAAa;GAChC,UAAU,KAAK,oBAAC,YAAS,WAAU,eAAe;GAClD,UAAU,KAAK,oBAAC,YAAS,WAAU,eAAe;;GAC/C;;AAQV,SAAgB,uBAAuB,EAAE,QAAQ,KAAyB;AACxE,QACE,qBAAC;EAAI,WAAU;;GACb,oBAAC,yBAAuB;GACvB,QAAQ,KAAK,oBAAC,yBAAuB;GACrC,QAAQ,KAAK,oBAAC,yBAAuB;GACrC,QAAQ,KAAK,oBAAC,yBAAuB;GACrC,QAAQ,KAAK,oBAAC,wBAAqB,aAAO;;GACvC;;AAIV,SAAS,qBAAqB,EAAE,OAAO,SAA6B;AAClE,QACE,qBAAC;EAAI,WAAU;aAEb,qBAAC;GAAI,WAAU;cACb,oBAAC,YAAS,WAAU,yBAAyB,EAC5C,CAAC,QAAQ,oBAAC,YAAS,WAAU,sBAAsB;IAChD,EAEN,qBAAC;GAAI,WAAU;;IACb,oBAAC,YAAS,WAAU,cAAc;IAClC,oBAAC,YAAS,WAAU,cAAc;IAClC,oBAAC,YAAS,WAAU,aAAa;;IAC7B;GACF;;AAQV,SAAgB,yBAAyB;AACvC,QACE,qBAAC;EAAI,WAAU;;GACb,qBAAC;IAAI,WAAU;eACb,oBAAC,YAAS,WAAU,aAAa,EACjC,oBAAC,YAAS,WAAU,aAAa;KAC7B;GACN,oBAAC,YAAS,WAAU,4BAA4B;GAChD,oBAAC,YAAS,WAAU,aAAa;;GAC7B;;AAQV,SAAgB,oBAAoB,EAClC,WAAW,SAGV;AACD,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAI,WAAU;cACb,oBAAC,YAAS,WAAU,kCAAkC,EACtD,qBAAC;IAAI,WAAU;eACb,oBAAC,YAAS,WAAU,aAAa,EACjC,oBAAC,YAAS,WAAW,GAAG,OAAO,WAAW,SAAS,OAAO,GAAI;KAC1D;IACF,EACN,oBAAC,YAAS,WAAU,aAAa;GAC7B"}
|