@questpie/admin 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -474
- package/dist/_virtual/rolldown_runtime.mjs +18 -0
- package/dist/augmentation.d.mts +315 -0
- package/dist/augmentation.d.mts.map +1 -0
- package/dist/client/blocks/block-registry.d.mts +199 -0
- package/dist/client/blocks/block-registry.d.mts.map +1 -0
- package/dist/client/blocks/block-registry.mjs +88 -0
- package/dist/client/blocks/block-registry.mjs.map +1 -0
- package/dist/client/blocks/block-renderer.d.mts +52 -0
- package/dist/client/blocks/block-renderer.d.mts.map +1 -0
- package/dist/client/blocks/block-renderer.mjs +71 -0
- package/dist/client/blocks/block-renderer.mjs.map +1 -0
- package/dist/client/blocks/index.d.mts +4 -0
- package/dist/client/blocks/prefetch.d.mts +45 -0
- package/dist/client/blocks/prefetch.d.mts.map +1 -0
- package/dist/client/blocks/prefetch.mjs +26 -0
- package/dist/client/blocks/prefetch.mjs.map +1 -0
- package/dist/client/blocks/types.d.mts +69 -0
- package/dist/client/blocks/types.d.mts.map +1 -0
- package/dist/client/blocks/types.mjs +20 -0
- package/dist/client/blocks/types.mjs.map +1 -0
- package/dist/client/builder/admin-builder.d.mts +112 -0
- package/dist/client/builder/admin-builder.d.mts.map +1 -0
- package/dist/client/builder/admin-builder.mjs +185 -0
- package/dist/client/builder/admin-builder.mjs.map +1 -0
- package/dist/client/builder/admin-types.d.mts +73 -0
- package/dist/client/builder/admin-types.d.mts.map +1 -0
- package/dist/client/builder/admin.d.mts +121 -0
- package/dist/client/builder/admin.d.mts.map +1 -0
- package/dist/client/builder/admin.mjs +160 -0
- package/dist/client/builder/admin.mjs.map +1 -0
- package/dist/client/builder/defaults/components.mjs +20 -0
- package/dist/client/builder/defaults/components.mjs.map +1 -0
- package/dist/client/builder/defaults/core.d.mts +354 -0
- package/dist/client/builder/defaults/core.d.mts.map +1 -0
- package/dist/client/builder/defaults/core.mjs +49 -0
- package/dist/client/builder/defaults/core.mjs.map +1 -0
- package/dist/client/builder/defaults/fields.mjs +328 -0
- package/dist/client/builder/defaults/fields.mjs.map +1 -0
- package/dist/client/builder/defaults/pages.mjs +58 -0
- package/dist/client/builder/defaults/pages.mjs.map +1 -0
- package/dist/client/builder/defaults/starter.d.mts +351 -0
- package/dist/client/builder/defaults/starter.d.mts.map +1 -0
- package/dist/client/builder/defaults/starter.mjs +28 -0
- package/dist/client/builder/defaults/starter.mjs.map +1 -0
- package/dist/client/builder/defaults/views.mjs +27 -0
- package/dist/client/builder/defaults/views.mjs.map +1 -0
- package/dist/client/builder/defaults/widgets.mjs +31 -0
- package/dist/client/builder/defaults/widgets.mjs.map +1 -0
- package/dist/client/builder/field/field.d.mts +229 -0
- package/dist/client/builder/field/field.d.mts.map +1 -0
- package/dist/client/builder/field/field.mjs +83 -0
- package/dist/client/builder/field/field.mjs.map +1 -0
- package/dist/client/builder/index.d.mts +36 -0
- package/dist/client/builder/index.d.mts.map +1 -0
- package/dist/client/builder/page/page.d.mts +36 -0
- package/dist/client/builder/page/page.d.mts.map +1 -0
- package/dist/client/builder/page/page.mjs +27 -0
- package/dist/client/builder/page/page.mjs.map +1 -0
- package/dist/client/builder/proxies.d.mts +2 -0
- package/dist/client/builder/proxies.mjs +24 -0
- package/dist/client/builder/proxies.mjs.map +1 -0
- package/dist/client/builder/qa.d.mts +50 -0
- package/dist/client/builder/qa.d.mts.map +1 -0
- package/dist/client/builder/qa.mjs +42 -0
- package/dist/client/builder/qa.mjs.map +1 -0
- package/dist/client/builder/registry.d.mts +70 -0
- package/dist/client/builder/registry.d.mts.map +1 -0
- package/dist/client/builder/types/action-registry.d.mts +2 -0
- package/dist/client/builder/types/action-registry.mjs +142 -0
- package/dist/client/builder/types/action-registry.mjs.map +1 -0
- package/dist/client/builder/types/action-types.d.mts +253 -0
- package/dist/client/builder/types/action-types.d.mts.map +1 -0
- package/dist/client/builder/types/collection-types.d.mts +199 -0
- package/dist/client/builder/types/collection-types.d.mts.map +1 -0
- package/dist/client/builder/types/collection-types.mjs +11 -0
- package/dist/client/builder/types/collection-types.mjs.map +1 -0
- package/dist/client/builder/types/common.d.mts +60 -0
- package/dist/client/builder/types/common.d.mts.map +1 -0
- package/dist/client/builder/types/field-types.d.mts +593 -0
- package/dist/client/builder/types/field-types.d.mts.map +1 -0
- package/dist/client/builder/types/field-types.mjs +19 -0
- package/dist/client/builder/types/field-types.mjs.map +1 -0
- package/dist/client/builder/types/global-types.d.mts +22 -0
- package/dist/client/builder/types/global-types.d.mts.map +1 -0
- package/dist/client/builder/types/ui-config.d.mts +160 -0
- package/dist/client/builder/types/ui-config.d.mts.map +1 -0
- package/dist/client/builder/types/views.d.mts +89 -0
- package/dist/client/builder/types/views.d.mts.map +1 -0
- package/dist/client/builder/types/widget-types.d.mts +563 -0
- package/dist/client/builder/types/widget-types.d.mts.map +1 -0
- package/dist/client/builder/validation.d.mts +3 -0
- package/dist/client/builder/validation.mjs +208 -0
- package/dist/client/builder/validation.mjs.map +1 -0
- package/dist/client/builder/view/view.d.mts +129 -0
- package/dist/client/builder/view/view.d.mts.map +1 -0
- package/dist/client/builder/view/view.mjs +109 -0
- package/dist/client/builder/view/view.mjs.map +1 -0
- package/dist/client/builder/widget/widget.d.mts +33 -0
- package/dist/client/builder/widget/widget.d.mts.map +1 -0
- package/dist/client/builder/widget/widget.mjs +26 -0
- package/dist/client/builder/widget/widget.mjs.map +1 -0
- package/dist/client/components/actions/action-button.d.mts +2 -0
- package/dist/client/components/actions/action-button.mjs +135 -0
- package/dist/client/components/actions/action-button.mjs.map +1 -0
- package/dist/client/components/actions/action-dialog.d.mts +2 -0
- package/dist/client/components/actions/action-dialog.mjs +264 -0
- package/dist/client/components/actions/action-dialog.mjs.map +1 -0
- package/dist/client/components/actions/confirmation-dialog.d.mts +2 -0
- package/dist/client/components/actions/confirmation-dialog.mjs +82 -0
- package/dist/client/components/actions/confirmation-dialog.mjs.map +1 -0
- package/dist/client/components/actions/header-actions.d.mts +2 -0
- package/dist/client/components/actions/header-actions.mjs +117 -0
- package/dist/client/components/actions/header-actions.mjs.map +1 -0
- package/dist/client/components/actions/index.d.mts +4 -0
- package/dist/client/components/admin-link.d.mts +67 -0
- package/dist/client/components/admin-link.d.mts.map +1 -0
- package/dist/client/components/admin-link.mjs +92 -0
- package/dist/client/components/admin-link.mjs.map +1 -0
- package/dist/client/components/auth/auth-guard.d.mts +51 -0
- package/dist/client/components/auth/auth-guard.d.mts.map +1 -0
- package/dist/client/components/auth/auth-guard.mjs +60 -0
- package/dist/client/components/auth/auth-guard.mjs.map +1 -0
- package/dist/client/components/auth/auth-loading.d.mts +36 -0
- package/dist/client/components/auth/auth-loading.d.mts.map +1 -0
- package/dist/client/components/auth/auth-loading.mjs +27 -0
- package/dist/client/components/auth/auth-loading.mjs.map +1 -0
- package/dist/client/components/auth/index.d.mts +2 -0
- package/dist/client/components/blocks/block-canvas.mjs +90 -0
- package/dist/client/components/blocks/block-canvas.mjs.map +1 -0
- package/dist/client/components/blocks/block-editor-context.mjs +58 -0
- package/dist/client/components/blocks/block-editor-context.mjs.map +1 -0
- package/dist/client/components/blocks/block-editor-layout.mjs +82 -0
- package/dist/client/components/blocks/block-editor-layout.mjs.map +1 -0
- package/dist/client/components/blocks/block-editor-provider.mjs +155 -0
- package/dist/client/components/blocks/block-editor-provider.mjs.map +1 -0
- package/dist/client/components/blocks/block-fields-renderer.mjs +70 -0
- package/dist/client/components/blocks/block-fields-renderer.mjs.map +1 -0
- package/dist/client/components/blocks/block-insert-button.mjs +72 -0
- package/dist/client/components/blocks/block-insert-button.mjs.map +1 -0
- package/dist/client/components/blocks/block-item-menu.mjs +161 -0
- package/dist/client/components/blocks/block-item-menu.mjs.map +1 -0
- package/dist/client/components/blocks/block-item.mjs +187 -0
- package/dist/client/components/blocks/block-item.mjs.map +1 -0
- package/dist/client/components/blocks/block-library-sidebar.mjs +190 -0
- package/dist/client/components/blocks/block-library-sidebar.mjs.map +1 -0
- package/dist/client/components/blocks/block-tree.mjs +45 -0
- package/dist/client/components/blocks/block-tree.mjs.map +1 -0
- package/dist/client/components/blocks/block-type-icon.mjs +50 -0
- package/dist/client/components/blocks/block-type-icon.mjs.map +1 -0
- package/dist/client/components/blocks/utils/tree-utils.mjs +186 -0
- package/dist/client/components/blocks/utils/tree-utils.mjs.map +1 -0
- package/dist/client/components/component-renderer.d.mts +125 -0
- package/dist/client/components/component-renderer.d.mts.map +1 -0
- package/dist/client/components/component-renderer.mjs +145 -0
- package/dist/client/components/component-renderer.mjs.map +1 -0
- package/dist/client/components/error-boundary.mjs +92 -0
- package/dist/client/components/error-boundary.mjs.map +1 -0
- package/dist/client/components/fields/array-field.d.mts +44 -0
- package/dist/client/components/fields/array-field.d.mts.map +1 -0
- package/dist/client/components/fields/array-field.mjs +231 -0
- package/dist/client/components/fields/array-field.mjs.map +1 -0
- package/dist/client/components/fields/asset-preview-field.d.mts +52 -0
- package/dist/client/components/fields/asset-preview-field.d.mts.map +1 -0
- package/dist/client/components/fields/asset-preview-field.mjs +60 -0
- package/dist/client/components/fields/asset-preview-field.mjs.map +1 -0
- package/dist/client/components/fields/blocks-field/blocks-field.d.mts +41 -0
- package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +1 -0
- package/dist/client/components/fields/blocks-field/blocks-field.mjs +101 -0
- package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +1 -0
- package/dist/client/components/fields/blocks-field/index.d.mts +1 -0
- package/dist/client/components/fields/boolean-field.d.mts +30 -0
- package/dist/client/components/fields/boolean-field.d.mts.map +1 -0
- package/dist/client/components/fields/boolean-field.mjs +47 -0
- package/dist/client/components/fields/boolean-field.mjs.map +1 -0
- package/dist/client/components/fields/custom-field.d.mts +3 -0
- package/dist/client/components/fields/date-field.d.mts +22 -0
- package/dist/client/components/fields/date-field.d.mts.map +1 -0
- package/dist/client/components/fields/date-field.mjs +42 -0
- package/dist/client/components/fields/date-field.mjs.map +1 -0
- package/dist/client/components/fields/datetime-field.d.mts +23 -0
- package/dist/client/components/fields/datetime-field.d.mts.map +1 -0
- package/dist/client/components/fields/datetime-field.mjs +43 -0
- package/dist/client/components/fields/datetime-field.mjs.map +1 -0
- package/dist/client/components/fields/email-field.d.mts +19 -0
- package/dist/client/components/fields/email-field.d.mts.map +1 -0
- package/dist/client/components/fields/email-field.mjs +38 -0
- package/dist/client/components/fields/email-field.mjs.map +1 -0
- package/dist/client/components/fields/embedded-collection.d.mts +3 -0
- package/dist/client/components/fields/field-types.d.mts +571 -0
- package/dist/client/components/fields/field-types.d.mts.map +1 -0
- package/dist/client/components/fields/field-utils.d.mts +1 -0
- package/dist/client/components/fields/field-utils.mjs +65 -0
- package/dist/client/components/fields/field-utils.mjs.map +1 -0
- package/dist/client/components/fields/field-wrapper.d.mts +3 -0
- package/dist/client/components/fields/field-wrapper.mjs +49 -0
- package/dist/client/components/fields/field-wrapper.mjs.map +1 -0
- package/dist/client/components/fields/index.d.mts +33 -0
- package/dist/client/components/fields/json-field.d.mts +84 -0
- package/dist/client/components/fields/json-field.d.mts.map +1 -0
- package/dist/client/components/fields/json-field.mjs +248 -0
- package/dist/client/components/fields/json-field.mjs.map +1 -0
- package/dist/client/components/fields/locale-badge.d.mts +1 -0
- package/dist/client/components/fields/locale-badge.mjs +17 -0
- package/dist/client/components/fields/locale-badge.mjs.map +1 -0
- package/dist/client/components/fields/number-field.d.mts +23 -0
- package/dist/client/components/fields/number-field.d.mts.map +1 -0
- package/dist/client/components/fields/number-field.mjs +40 -0
- package/dist/client/components/fields/number-field.mjs.map +1 -0
- package/dist/client/components/fields/object-array-field.d.mts +2 -0
- package/dist/client/components/fields/object-array-field.mjs +313 -0
- package/dist/client/components/fields/object-array-field.mjs.map +1 -0
- package/dist/client/components/fields/object-field.d.mts +32 -0
- package/dist/client/components/fields/object-field.d.mts.map +1 -0
- package/dist/client/components/fields/object-field.mjs +128 -0
- package/dist/client/components/fields/object-field.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/cards-display.d.mts +2 -0
- package/dist/client/components/fields/relation/displays/cards-display.mjs +140 -0
- package/dist/client/components/fields/relation/displays/cards-display.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/chips-display.d.mts +2 -0
- package/dist/client/components/fields/relation/displays/chips-display.mjs +100 -0
- package/dist/client/components/fields/relation/displays/chips-display.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/grid-display.d.mts +2 -0
- package/dist/client/components/fields/relation/displays/grid-display.mjs +114 -0
- package/dist/client/components/fields/relation/displays/grid-display.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/index.d.mts +6 -0
- package/dist/client/components/fields/relation/displays/list-display.d.mts +2 -0
- package/dist/client/components/fields/relation/displays/list-display.mjs +128 -0
- package/dist/client/components/fields/relation/displays/list-display.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/table-display.d.mts +2 -0
- package/dist/client/components/fields/relation/displays/table-display.mjs +134 -0
- package/dist/client/components/fields/relation/displays/table-display.mjs.map +1 -0
- package/dist/client/components/fields/relation/displays/types.d.mts +22 -0
- package/dist/client/components/fields/relation/displays/types.d.mts.map +1 -0
- package/dist/client/components/fields/relation/displays/types.mjs +73 -0
- package/dist/client/components/fields/relation/displays/types.mjs.map +1 -0
- package/dist/client/components/fields/relation/index.d.mts +3 -0
- package/dist/client/components/fields/relation/relation-items-display.d.mts +5 -0
- package/dist/client/components/fields/relation/relation-items-display.mjs +47 -0
- package/dist/client/components/fields/relation/relation-items-display.mjs.map +1 -0
- package/dist/client/components/fields/relation-field.d.mts +134 -0
- package/dist/client/components/fields/relation-field.d.mts.map +1 -0
- package/dist/client/components/fields/relation-field.mjs +106 -0
- package/dist/client/components/fields/relation-field.mjs.map +1 -0
- package/dist/client/components/fields/relation-picker.d.mts +4 -0
- package/dist/client/components/fields/relation-picker.mjs +301 -0
- package/dist/client/components/fields/relation-picker.mjs.map +1 -0
- package/dist/client/components/fields/relation-select.d.mts +3 -0
- package/dist/client/components/fields/relation-select.mjs +219 -0
- package/dist/client/components/fields/relation-select.mjs.map +1 -0
- package/dist/client/components/fields/reverse-relation-field.d.mts +2 -0
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +56 -0
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/extensions.mjs +118 -0
- package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs +196 -0
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/index.d.mts +4 -0
- package/dist/client/components/fields/rich-text-editor/index.mjs +187 -0
- package/dist/client/components/fields/rich-text-editor/index.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs +86 -0
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/presets.d.mts +11 -0
- package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +1 -0
- package/dist/client/components/fields/rich-text-editor/presets.mjs +124 -0
- package/dist/client/components/fields/rich-text-editor/presets.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +145 -0
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/table-controls.mjs +124 -0
- package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs +280 -0
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/types.d.mts +78 -0
- package/dist/client/components/fields/rich-text-editor/types.d.mts.map +1 -0
- package/dist/client/components/fields/rich-text-editor/types.mjs +31 -0
- package/dist/client/components/fields/rich-text-editor/types.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/utils.mjs +51 -0
- package/dist/client/components/fields/rich-text-editor/utils.mjs.map +1 -0
- package/dist/client/components/fields/rich-text-editor/variants.d.mts +2 -0
- package/dist/client/components/fields/rich-text-field.d.mts +14 -0
- package/dist/client/components/fields/rich-text-field.d.mts.map +1 -0
- package/dist/client/components/fields/rich-text-field.mjs +26 -0
- package/dist/client/components/fields/rich-text-field.mjs.map +1 -0
- package/dist/client/components/fields/select-field.d.mts +25 -0
- package/dist/client/components/fields/select-field.d.mts.map +1 -0
- package/dist/client/components/fields/select-field.mjs +53 -0
- package/dist/client/components/fields/select-field.mjs.map +1 -0
- package/dist/client/components/fields/status-field.d.mts +2 -0
- package/dist/client/components/fields/text-field.d.mts +22 -0
- package/dist/client/components/fields/text-field.d.mts.map +1 -0
- package/dist/client/components/fields/text-field.mjs +39 -0
- package/dist/client/components/fields/text-field.mjs.map +1 -0
- package/dist/client/components/fields/textarea-field.d.mts +22 -0
- package/dist/client/components/fields/textarea-field.d.mts.map +1 -0
- package/dist/client/components/fields/textarea-field.mjs +39 -0
- package/dist/client/components/fields/textarea-field.mjs.map +1 -0
- package/dist/client/components/fields/time-field.d.mts +20 -0
- package/dist/client/components/fields/time-field.d.mts.map +1 -0
- package/dist/client/components/fields/time-field.mjs +39 -0
- package/dist/client/components/fields/time-field.mjs.map +1 -0
- package/dist/client/components/fields/upload-field.d.mts +97 -0
- package/dist/client/components/fields/upload-field.d.mts.map +1 -0
- package/dist/client/components/fields/upload-field.mjs +497 -0
- package/dist/client/components/fields/upload-field.mjs.map +1 -0
- package/dist/client/components/filter-builder/columns-tab.d.mts +1 -0
- package/dist/client/components/filter-builder/columns-tab.mjs +131 -0
- package/dist/client/components/filter-builder/columns-tab.mjs.map +1 -0
- package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +1 -0
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs +157 -0
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +1 -0
- package/dist/client/components/filter-builder/filters-tab.d.mts +1 -0
- package/dist/client/components/filter-builder/filters-tab.mjs +380 -0
- package/dist/client/components/filter-builder/filters-tab.mjs.map +1 -0
- package/dist/client/components/filter-builder/index.d.mts +5 -0
- package/dist/client/components/filter-builder/saved-views-tab.d.mts +1 -0
- package/dist/client/components/filter-builder/saved-views-tab.mjs +125 -0
- package/dist/client/components/filter-builder/saved-views-tab.mjs.map +1 -0
- package/dist/client/components/index.d.mts +80 -0
- package/dist/client/components/locale-switcher.d.mts +2 -0
- package/dist/client/components/locale-switcher.mjs +128 -0
- package/dist/client/components/locale-switcher.mjs.map +1 -0
- package/dist/client/components/media/media-grid.mjs +139 -0
- package/dist/client/components/media/media-grid.mjs.map +1 -0
- package/dist/client/components/media/media-picker-dialog.mjs +255 -0
- package/dist/client/components/media/media-picker-dialog.mjs.map +1 -0
- package/dist/client/components/preview/live-preview-mode.mjs +211 -0
- package/dist/client/components/preview/live-preview-mode.mjs.map +1 -0
- package/dist/client/components/preview/preview-pane.mjs +179 -0
- package/dist/client/components/preview/preview-pane.mjs.map +1 -0
- package/dist/client/components/primitives/asset-preview.mjs +363 -0
- package/dist/client/components/primitives/asset-preview.mjs.map +1 -0
- package/dist/client/components/primitives/checkbox-input.mjs +33 -0
- package/dist/client/components/primitives/checkbox-input.mjs.map +1 -0
- package/dist/client/components/primitives/date-input.mjs +218 -0
- package/dist/client/components/primitives/date-input.mjs.map +1 -0
- package/dist/client/components/primitives/dropzone.mjs +239 -0
- package/dist/client/components/primitives/dropzone.mjs.map +1 -0
- package/dist/client/components/primitives/number-input.mjs +113 -0
- package/dist/client/components/primitives/number-input.mjs.map +1 -0
- package/dist/client/components/primitives/select-multi.mjs +256 -0
- package/dist/client/components/primitives/select-multi.mjs.map +1 -0
- package/dist/client/components/primitives/select-single.mjs +183 -0
- package/dist/client/components/primitives/select-single.mjs.map +1 -0
- package/dist/client/components/primitives/text-input.mjs +40 -0
- package/dist/client/components/primitives/text-input.mjs.map +1 -0
- package/dist/client/components/primitives/textarea-input.mjs +38 -0
- package/dist/client/components/primitives/textarea-input.mjs.map +1 -0
- package/dist/client/components/primitives/time-input.mjs +72 -0
- package/dist/client/components/primitives/time-input.mjs.map +1 -0
- package/dist/client/components/primitives/toggle-input.mjs +31 -0
- package/dist/client/components/primitives/toggle-input.mjs.map +1 -0
- package/dist/client/components/primitives/types.d.mts +14 -0
- package/dist/client/components/primitives/types.d.mts.map +1 -0
- package/dist/client/components/primitives/types.mjs +13 -0
- package/dist/client/components/primitives/types.mjs.map +1 -0
- package/dist/client/components/sheets/index.d.mts +1 -0
- package/dist/client/components/sheets/resource-sheet.d.mts +1 -0
- package/dist/client/components/sheets/resource-sheet.mjs +78 -0
- package/dist/client/components/sheets/resource-sheet.mjs.map +1 -0
- package/dist/client/components/ui/accordion.d.mts +2 -0
- package/dist/client/components/ui/accordion.mjs +50 -0
- package/dist/client/components/ui/accordion.mjs.map +1 -0
- package/dist/client/components/ui/alert.mjs +32 -0
- package/dist/client/components/ui/alert.mjs.map +1 -0
- package/dist/client/components/ui/avatar.d.mts +3 -0
- package/dist/client/components/ui/badge.d.mts +3 -0
- package/dist/client/components/ui/badge.mjs +35 -0
- package/dist/client/components/ui/badge.mjs.map +1 -0
- package/dist/client/components/ui/button.d.mts +3 -0
- package/dist/client/components/ui/button.mjs +49 -0
- package/dist/client/components/ui/button.mjs.map +1 -0
- package/dist/client/components/ui/card.d.mts +2 -0
- package/dist/{card-BKHjBQfw.mjs → client/components/ui/card.mjs} +3 -10
- package/dist/{card-BKHjBQfw.mjs.map → client/components/ui/card.mjs.map} +1 -1
- package/dist/client/components/ui/checkbox.d.mts +2 -0
- package/dist/client/components/ui/checkbox.mjs +27 -0
- package/dist/client/components/ui/checkbox.mjs.map +1 -0
- package/dist/client/components/ui/combobox.d.mts +3 -0
- package/dist/client/components/ui/command.mjs +69 -0
- package/dist/client/components/ui/command.mjs.map +1 -0
- package/dist/client/components/ui/dialog.d.mts +3 -0
- package/dist/client/components/ui/dialog.mjs +83 -0
- package/dist/client/components/ui/dialog.mjs.map +1 -0
- package/dist/client/components/ui/drawer.mjs +75 -0
- package/dist/client/components/ui/drawer.mjs.map +1 -0
- package/dist/client/components/ui/dropdown-menu.d.mts +3 -0
- package/dist/client/components/ui/dropdown-menu.mjs +89 -0
- package/dist/client/components/ui/dropdown-menu.mjs.map +1 -0
- package/dist/client/components/ui/empty-state.mjs +53 -0
- package/dist/client/components/ui/empty-state.mjs.map +1 -0
- package/dist/client/components/ui/field.d.mts +3 -0
- package/dist/client/components/ui/field.mjs +78 -0
- package/dist/client/components/ui/field.mjs.map +1 -0
- package/dist/client/components/ui/input-group.d.mts +4 -0
- package/dist/client/components/ui/input-group.mjs +68 -0
- package/dist/client/components/ui/input-group.mjs.map +1 -0
- package/dist/client/components/ui/input.d.mts +2 -0
- package/dist/client/components/ui/input.mjs +17 -0
- package/dist/client/components/ui/input.mjs.map +1 -0
- package/dist/client/components/ui/kbd.mjs +24 -0
- package/dist/client/components/ui/kbd.mjs.map +1 -0
- package/dist/client/components/ui/label.d.mts +2 -0
- package/dist/client/components/ui/label.mjs +15 -0
- package/dist/client/components/ui/label.mjs.map +1 -0
- package/dist/client/components/ui/popover.d.mts +3 -0
- package/dist/client/components/ui/popover.mjs +49 -0
- package/dist/client/components/ui/popover.mjs.map +1 -0
- package/dist/client/components/ui/responsive-dialog.mjs +102 -0
- package/dist/client/components/ui/responsive-dialog.mjs.map +1 -0
- package/dist/client/components/ui/scroll-area.d.mts +2 -0
- package/dist/client/components/ui/search-input.mjs +74 -0
- package/dist/client/components/ui/search-input.mjs.map +1 -0
- package/dist/client/components/ui/select.d.mts +3 -0
- package/dist/client/components/ui/select.mjs +85 -0
- package/dist/client/components/ui/select.mjs.map +1 -0
- package/dist/client/components/ui/separator.d.mts +2 -0
- package/dist/client/components/ui/separator.mjs +17 -0
- package/dist/client/components/ui/separator.mjs.map +1 -0
- package/dist/client/components/ui/sheet.d.mts +3 -0
- package/dist/client/components/ui/sheet.mjs +78 -0
- package/dist/client/components/ui/sheet.mjs.map +1 -0
- package/dist/client/components/ui/sidebar.d.mts +8 -0
- package/dist/client/components/ui/sidebar.mjs +256 -0
- package/dist/client/components/ui/sidebar.mjs.map +1 -0
- package/dist/client/components/ui/skeleton.d.mts +1 -0
- package/dist/client/components/ui/skeleton.mjs +15 -0
- package/dist/client/components/ui/skeleton.mjs.map +1 -0
- package/dist/client/components/ui/sonner.d.mts +14 -0
- package/dist/client/components/ui/sonner.d.mts.map +1 -0
- package/dist/client/components/ui/sonner.mjs +55 -0
- package/dist/client/components/ui/sonner.mjs.map +1 -0
- package/dist/client/components/ui/spinner.d.mts +1 -0
- package/dist/client/components/ui/spinner.mjs +18 -0
- package/dist/client/components/ui/spinner.mjs.map +1 -0
- package/dist/client/components/ui/switch.d.mts +2 -0
- package/dist/client/components/ui/switch.mjs +23 -0
- package/dist/client/components/ui/switch.mjs.map +1 -0
- package/dist/client/components/ui/table.d.mts +2 -0
- package/dist/client/components/ui/table.mjs +66 -0
- package/dist/client/components/ui/table.mjs.map +1 -0
- package/dist/client/components/ui/tabs.d.mts +3 -0
- package/dist/client/components/ui/tabs.mjs +49 -0
- package/dist/client/components/ui/tabs.mjs.map +1 -0
- package/dist/client/components/ui/textarea.d.mts +2 -0
- package/dist/client/components/ui/textarea.mjs +15 -0
- package/dist/client/components/ui/textarea.mjs.map +1 -0
- package/dist/client/components/ui/toolbar.mjs +54 -0
- package/dist/client/components/ui/toolbar.mjs.map +1 -0
- package/dist/client/components/ui/tooltip.d.mts +2 -0
- package/dist/client/components/ui/tooltip.mjs +45 -0
- package/dist/client/components/ui/tooltip.mjs.map +1 -0
- package/dist/client/components/widgets/chart-widget.d.mts +57 -0
- package/dist/client/components/widgets/chart-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/chart-widget.mjs +282 -0
- package/dist/client/components/widgets/chart-widget.mjs.map +1 -0
- package/dist/client/components/widgets/progress-widget.d.mts +41 -0
- package/dist/client/components/widgets/progress-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/progress-widget.mjs +110 -0
- package/dist/client/components/widgets/progress-widget.mjs.map +1 -0
- package/dist/client/components/widgets/quick-actions-widget.d.mts +29 -0
- package/dist/client/components/widgets/quick-actions-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/quick-actions-widget.mjs +121 -0
- package/dist/client/components/widgets/quick-actions-widget.mjs.map +1 -0
- package/dist/client/components/widgets/recent-items-widget.d.mts +51 -0
- package/dist/client/components/widgets/recent-items-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/recent-items-widget.mjs +101 -0
- package/dist/client/components/widgets/recent-items-widget.mjs.map +1 -0
- package/dist/client/components/widgets/stats-widget.d.mts +55 -0
- package/dist/client/components/widgets/stats-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/stats-widget.mjs +150 -0
- package/dist/client/components/widgets/stats-widget.mjs.map +1 -0
- package/dist/client/components/widgets/table-widget.d.mts +31 -0
- package/dist/client/components/widgets/table-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/table-widget.mjs +139 -0
- package/dist/client/components/widgets/table-widget.mjs.map +1 -0
- package/dist/client/components/widgets/timeline-widget.d.mts +51 -0
- package/dist/client/components/widgets/timeline-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/timeline-widget.mjs +168 -0
- package/dist/client/components/widgets/timeline-widget.mjs.map +1 -0
- package/dist/client/components/widgets/value-widget.d.mts +39 -0
- package/dist/client/components/widgets/value-widget.d.mts.map +1 -0
- package/dist/client/components/widgets/value-widget.mjs +111 -0
- package/dist/client/components/widgets/value-widget.mjs.map +1 -0
- package/dist/client/components/widgets/widget-skeletons.mjs +145 -0
- package/dist/client/components/widgets/widget-skeletons.mjs.map +1 -0
- package/dist/client/context/focus-context.d.mts +88 -0
- package/dist/client/context/focus-context.d.mts.map +1 -0
- package/dist/client/context/focus-context.mjs +178 -0
- package/dist/client/context/focus-context.mjs.map +1 -0
- package/dist/client/contexts/breadcrumb-context.mjs +32 -0
- package/dist/client/contexts/breadcrumb-context.mjs.map +1 -0
- package/dist/client/hooks/typed-hooks.d.mts +84 -0
- package/dist/client/hooks/typed-hooks.d.mts.map +1 -0
- package/dist/client/hooks/typed-hooks.mjs +272 -0
- package/dist/client/hooks/typed-hooks.mjs.map +1 -0
- package/dist/client/hooks/use-action.mjs +201 -0
- package/dist/client/hooks/use-action.mjs.map +1 -0
- package/dist/client/hooks/use-admin-config.mjs +40 -0
- package/dist/client/hooks/use-admin-config.mjs.map +1 -0
- package/dist/client/hooks/use-admin-preferences.mjs +68 -0
- package/dist/client/hooks/use-admin-preferences.mjs.map +1 -0
- package/dist/client/hooks/use-admin-routes.mjs +97 -0
- package/dist/client/hooks/use-admin-routes.mjs.map +1 -0
- package/dist/client/hooks/use-auth.d.mts +98 -0
- package/dist/client/hooks/use-auth.d.mts.map +1 -0
- package/dist/{use-auth-BoLmWtmU.mjs → client/hooks/use-auth.mjs} +3 -3
- package/dist/client/hooks/use-auth.mjs.map +1 -0
- package/dist/client/hooks/use-collection-fields.mjs +32 -0
- package/dist/client/hooks/use-collection-fields.mjs.map +1 -0
- package/dist/client/hooks/use-collection-meta.mjs +121 -0
- package/dist/client/hooks/use-collection-meta.mjs.map +1 -0
- package/dist/client/hooks/use-collection-schema.mjs +67 -0
- package/dist/client/hooks/use-collection-schema.mjs.map +1 -0
- package/dist/client/hooks/use-collection-validation.mjs +74 -0
- package/dist/client/hooks/use-collection-validation.mjs.map +1 -0
- package/dist/client/hooks/use-collection.d.mts +86 -0
- package/dist/client/hooks/use-collection.d.mts.map +1 -0
- package/dist/client/hooks/use-collection.mjs +214 -0
- package/dist/client/hooks/use-collection.mjs.map +1 -0
- package/dist/client/hooks/use-current-user.d.mts +57 -0
- package/dist/client/hooks/use-current-user.d.mts.map +1 -0
- package/dist/client/hooks/use-current-user.mjs +79 -0
- package/dist/client/hooks/use-current-user.mjs.map +1 -0
- package/dist/client/hooks/use-field-hooks.mjs +191 -0
- package/dist/client/hooks/use-field-hooks.mjs.map +1 -0
- package/dist/client/hooks/use-field-options.d.mts +90 -0
- package/dist/client/hooks/use-field-options.d.mts.map +1 -0
- package/dist/client/hooks/use-field-options.mjs +184 -0
- package/dist/client/hooks/use-field-options.mjs.map +1 -0
- package/dist/client/hooks/use-global-fields.mjs +27 -0
- package/dist/client/hooks/use-global-fields.mjs.map +1 -0
- package/dist/client/hooks/use-global-meta.mjs +59 -0
- package/dist/client/hooks/use-global-meta.mjs.map +1 -0
- package/dist/client/hooks/use-global-schema.mjs +33 -0
- package/dist/client/hooks/use-global-schema.mjs.map +1 -0
- package/dist/client/hooks/use-global.d.mts +40 -0
- package/dist/client/hooks/use-global.d.mts.map +1 -0
- package/dist/client/hooks/use-global.mjs +74 -0
- package/dist/client/hooks/use-global.mjs.map +1 -0
- package/dist/client/hooks/use-locks.mjs +245 -0
- package/dist/client/hooks/use-locks.mjs.map +1 -0
- package/dist/client/hooks/use-media-query.d.mts +23 -0
- package/dist/client/hooks/use-media-query.d.mts.map +1 -0
- package/dist/client/hooks/use-media-query.mjs +62 -0
- package/dist/client/hooks/use-media-query.mjs.map +1 -0
- package/dist/client/hooks/use-prefill-params.mjs +47 -0
- package/dist/client/hooks/use-prefill-params.mjs.map +1 -0
- package/dist/client/hooks/use-questpie-query-options.mjs +28 -0
- package/dist/client/hooks/use-questpie-query-options.mjs.map +1 -0
- package/dist/client/hooks/use-reactive-fields.d.mts +75 -0
- package/dist/client/hooks/use-reactive-fields.d.mts.map +1 -0
- package/dist/client/hooks/use-reactive-fields.mjs +164 -0
- package/dist/client/hooks/use-reactive-fields.mjs.map +1 -0
- package/dist/client/hooks/use-realtime-highlight.mjs +96 -0
- package/dist/client/hooks/use-realtime-highlight.mjs.map +1 -0
- package/dist/client/hooks/use-saved-views.mjs +65 -0
- package/dist/client/hooks/use-saved-views.mjs.map +1 -0
- package/dist/client/hooks/use-search.mjs +147 -0
- package/dist/client/hooks/use-search.mjs.map +1 -0
- package/dist/client/hooks/use-server-validation.mjs +199 -0
- package/dist/client/hooks/use-server-validation.mjs.map +1 -0
- package/dist/client/hooks/use-server-widget-data.d.mts +26 -0
- package/dist/client/hooks/use-server-widget-data.d.mts.map +1 -0
- package/dist/client/hooks/use-server-widget-data.mjs +40 -0
- package/dist/client/hooks/use-server-widget-data.mjs.map +1 -0
- package/dist/client/hooks/use-setup-status.d.mts +39 -0
- package/dist/client/hooks/use-setup-status.d.mts.map +1 -0
- package/dist/client/hooks/use-setup-status.mjs +50 -0
- package/dist/client/hooks/use-setup-status.mjs.map +1 -0
- package/dist/client/hooks/use-upload-collection.mjs +32 -0
- package/dist/client/hooks/use-upload-collection.mjs.map +1 -0
- package/dist/client/hooks/use-upload.d.mts +23 -0
- package/dist/client/hooks/use-upload.d.mts.map +1 -0
- package/dist/client/hooks/use-upload.mjs +145 -0
- package/dist/client/hooks/use-upload.mjs.map +1 -0
- package/dist/client/hooks/use-validation-error-map.mjs +53 -0
- package/dist/client/hooks/use-validation-error-map.mjs.map +1 -0
- package/dist/client/hooks/use-view-state.mjs +261 -0
- package/dist/client/hooks/use-view-state.mjs.map +1 -0
- package/dist/client/i18n/hooks.mjs +160 -0
- package/dist/client/i18n/hooks.mjs.map +1 -0
- package/dist/client/i18n/intl-cache.mjs +65 -0
- package/dist/client/i18n/intl-cache.mjs.map +1 -0
- package/dist/client/i18n/messages.mjs +7 -0
- package/dist/client/i18n/messages.mjs.map +1 -0
- package/dist/client/i18n/simple.d.mts +22 -0
- package/dist/client/i18n/simple.d.mts.map +1 -0
- package/dist/client/i18n/simple.mjs +157 -0
- package/dist/client/i18n/simple.mjs.map +1 -0
- package/dist/client/i18n/types.d.mts +110 -0
- package/dist/client/i18n/types.d.mts.map +1 -0
- package/dist/client/lib/utils.d.mts +1 -0
- package/dist/client/lib/utils.mjs +28 -0
- package/dist/client/lib/utils.mjs.map +1 -0
- package/dist/client/preview/block-scope-context.d.mts +74 -0
- package/dist/client/preview/block-scope-context.d.mts.map +1 -0
- package/dist/client/preview/block-scope-context.mjs +93 -0
- package/dist/client/preview/block-scope-context.mjs.map +1 -0
- package/dist/client/preview/index.d.mts +5 -0
- package/dist/client/preview/preview-banner.d.mts +46 -0
- package/dist/client/preview/preview-banner.d.mts.map +1 -0
- package/dist/client/preview/preview-banner.mjs +95 -0
- package/dist/client/preview/preview-banner.mjs.map +1 -0
- package/dist/client/preview/preview-field.d.mts +108 -0
- package/dist/client/preview/preview-field.d.mts.map +1 -0
- package/dist/client/preview/preview-field.mjs +125 -0
- package/dist/client/preview/preview-field.mjs.map +1 -0
- package/dist/client/preview/types.d.mts +115 -0
- package/dist/client/preview/types.d.mts.map +1 -0
- package/dist/client/preview/types.mjs +21 -0
- package/dist/client/preview/types.mjs.map +1 -0
- package/dist/client/preview/use-collection-preview.d.mts +71 -0
- package/dist/client/preview/use-collection-preview.d.mts.map +1 -0
- package/dist/client/preview/use-collection-preview.mjs +114 -0
- package/dist/client/preview/use-collection-preview.mjs.map +1 -0
- package/dist/client/runtime/content-locales-provider.d.mts +1 -0
- package/dist/client/runtime/content-locales-provider.mjs +85 -0
- package/dist/client/runtime/content-locales-provider.mjs.map +1 -0
- package/dist/client/runtime/index.d.mts +7 -0
- package/dist/client/runtime/index.mjs +8 -0
- package/dist/client/runtime/locale-scope.d.mts +2 -0
- package/dist/{runtime-6VZM878K.mjs → client/runtime/locale-scope.mjs} +3 -4
- package/dist/client/runtime/locale-scope.mjs.map +1 -0
- package/dist/client/runtime/provider.d.mts +10107 -0
- package/dist/client/runtime/provider.d.mts.map +1 -0
- package/dist/client/runtime/provider.mjs +229 -0
- package/dist/client/runtime/provider.mjs.map +1 -0
- package/dist/client/runtime/routes.d.mts +49 -0
- package/dist/client/runtime/routes.d.mts.map +1 -0
- package/dist/client/runtime/routes.mjs +107 -0
- package/dist/client/runtime/routes.mjs.map +1 -0
- package/dist/client/runtime/translations-provider.d.mts +2 -0
- package/dist/client/runtime/translations-provider.mjs +181 -0
- package/dist/client/runtime/translations-provider.mjs.map +1 -0
- package/dist/client/scope/index.d.mts +3 -0
- package/dist/client/scope/picker.d.mts +54 -0
- package/dist/client/scope/picker.d.mts.map +1 -0
- package/dist/client/scope/picker.mjs +161 -0
- package/dist/client/scope/picker.mjs.map +1 -0
- package/dist/client/scope/provider.d.mts +104 -0
- package/dist/client/scope/provider.d.mts.map +1 -0
- package/dist/client/scope/provider.mjs +159 -0
- package/dist/client/scope/provider.mjs.map +1 -0
- package/dist/client/scope/types.d.mts +112 -0
- package/dist/client/scope/types.d.mts.map +1 -0
- package/dist/client/styles/index.css +80 -0
- package/dist/client/utils/auto-expand-fields.mjs +65 -0
- package/dist/client/utils/auto-expand-fields.mjs.map +1 -0
- package/dist/client/utils/build-field-definitions-from-schema.mjs +256 -0
- package/dist/client/utils/build-field-definitions-from-schema.mjs.map +1 -0
- package/dist/client/utils/detect-relations.mjs +46 -0
- package/dist/client/utils/detect-relations.mjs.map +1 -0
- package/dist/client/utils/locale-to-flag.d.mts +118 -0
- package/dist/client/utils/locale-to-flag.d.mts.map +1 -0
- package/dist/client/utils/locale-to-flag.mjs +130 -0
- package/dist/client/utils/locale-to-flag.mjs.map +1 -0
- package/dist/client/utils/routes.mjs +196 -0
- package/dist/client/utils/routes.mjs.map +1 -0
- package/dist/client/views/auth/accept-invite-form.d.mts +73 -0
- package/dist/client/views/auth/accept-invite-form.d.mts.map +1 -0
- package/dist/client/views/auth/accept-invite-form.mjs +180 -0
- package/dist/client/views/auth/accept-invite-form.mjs.map +1 -0
- package/dist/client/views/auth/auth-layout.d.mts +44 -0
- package/dist/client/views/auth/auth-layout.d.mts.map +1 -0
- package/dist/client/views/auth/auth-layout.mjs +53 -0
- package/dist/client/views/auth/auth-layout.mjs.map +1 -0
- package/dist/client/views/auth/forgot-password-form.d.mts +59 -0
- package/dist/client/views/auth/forgot-password-form.d.mts.map +1 -0
- package/dist/{forgot-password-page-Bcp-An4Y.mjs → client/views/auth/forgot-password-form.mjs} +22 -89
- package/dist/client/views/auth/forgot-password-form.mjs.map +1 -0
- package/dist/client/views/auth/index.d.mts +7 -0
- package/dist/client/views/auth/invite-form.d.mts +1 -0
- package/dist/client/views/auth/invite-form.mjs +155 -0
- package/dist/client/views/auth/invite-form.mjs.map +1 -0
- package/dist/client/views/auth/login-form.d.mts +76 -0
- package/dist/client/views/auth/login-form.d.mts.map +1 -0
- package/dist/client/views/auth/login-form.mjs +167 -0
- package/dist/client/views/auth/login-form.mjs.map +1 -0
- package/dist/client/views/auth/reset-password-form.d.mts +66 -0
- package/dist/client/views/auth/reset-password-form.d.mts.map +1 -0
- package/dist/client/views/auth/reset-password-form.mjs +188 -0
- package/dist/client/views/auth/reset-password-form.mjs.map +1 -0
- package/dist/client/views/auth/setup-form.d.mts +61 -0
- package/dist/client/views/auth/setup-form.d.mts.map +1 -0
- package/dist/{setup-page-YAP_fzqh.mjs → client/views/auth/setup-form.mjs} +46 -124
- package/dist/client/views/auth/setup-form.mjs.map +1 -0
- package/dist/client/views/collection/auto-form-fields.d.mts +4 -0
- package/dist/client/views/collection/auto-form-fields.mjs +453 -0
- package/dist/client/views/collection/auto-form-fields.mjs.map +1 -0
- package/dist/client/views/collection/bulk-action-toolbar.mjs +291 -0
- package/dist/client/views/collection/bulk-action-toolbar.mjs.map +1 -0
- package/dist/client/views/collection/cells/complex-cells.d.mts +46 -0
- package/dist/client/views/collection/cells/complex-cells.d.mts.map +1 -0
- package/dist/client/views/collection/cells/complex-cells.mjs +327 -0
- package/dist/client/views/collection/cells/complex-cells.mjs.map +1 -0
- package/dist/client/views/collection/cells/index.d.mts +7 -0
- package/dist/client/views/collection/cells/primitive-cells.d.mts +76 -0
- package/dist/client/views/collection/cells/primitive-cells.d.mts.map +1 -0
- package/dist/client/views/collection/cells/primitive-cells.mjs +165 -0
- package/dist/client/views/collection/cells/primitive-cells.mjs.map +1 -0
- package/dist/client/views/collection/cells/relation-cells.d.mts +21 -0
- package/dist/client/views/collection/cells/relation-cells.d.mts.map +1 -0
- package/dist/client/views/collection/cells/relation-cells.mjs +105 -0
- package/dist/client/views/collection/cells/relation-cells.mjs.map +1 -0
- package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +1 -0
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +189 -0
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +1 -0
- package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +2 -0
- package/dist/client/views/collection/cells/shared/cell-helpers.mjs +78 -0
- package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +1 -0
- package/dist/client/views/collection/cells/shared/relation-chip.d.mts +1 -0
- package/dist/client/views/collection/cells/shared/relation-chip.mjs +37 -0
- package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +1 -0
- package/dist/client/views/collection/cells/upload-cells.d.mts +25 -0
- package/dist/client/views/collection/cells/upload-cells.d.mts.map +1 -0
- package/dist/client/views/collection/cells/upload-cells.mjs +20 -0
- package/dist/client/views/collection/cells/upload-cells.mjs.map +1 -0
- package/dist/client/views/collection/columns/build-columns.d.mts +2 -0
- package/dist/client/views/collection/columns/build-columns.mjs +156 -0
- package/dist/client/views/collection/columns/build-columns.mjs.map +1 -0
- package/dist/client/views/collection/columns/column-defaults.d.mts +2 -0
- package/dist/client/views/collection/columns/column-defaults.mjs +108 -0
- package/dist/client/views/collection/columns/column-defaults.mjs.map +1 -0
- package/dist/client/views/collection/columns/index.d.mts +3 -0
- package/dist/client/views/collection/columns/types.d.mts +2 -0
- package/dist/client/views/collection/field-context.mjs +127 -0
- package/dist/client/views/collection/field-context.mjs.map +1 -0
- package/dist/client/views/collection/field-renderer.mjs +171 -0
- package/dist/client/views/collection/field-renderer.mjs.map +1 -0
- package/dist/client/views/collection/form-view.d.mts +112 -0
- package/dist/client/views/collection/form-view.d.mts.map +1 -0
- package/dist/client/views/collection/form-view.mjs +903 -0
- package/dist/client/views/collection/form-view.mjs.map +1 -0
- package/dist/client/views/collection/index.d.mts +9 -0
- package/dist/client/views/collection/table-view.d.mts +102 -0
- package/dist/client/views/collection/table-view.d.mts.map +1 -0
- package/dist/client/views/collection/table-view.mjs +695 -0
- package/dist/client/views/collection/table-view.mjs.map +1 -0
- package/dist/client/views/collection/view-skeletons.mjs +121 -0
- package/dist/client/views/collection/view-skeletons.mjs.map +1 -0
- package/dist/client/views/common/global-search.d.mts +1 -0
- package/dist/client/views/common/global-search.mjs +376 -0
- package/dist/client/views/common/global-search.mjs.map +1 -0
- package/dist/client/views/common/index.d.mts +1 -0
- package/dist/client/views/dashboard/dashboard-grid.mjs +385 -0
- package/dist/client/views/dashboard/dashboard-grid.mjs.map +1 -0
- package/dist/client/views/dashboard/dashboard-widget.mjs +178 -0
- package/dist/client/views/dashboard/dashboard-widget.mjs.map +1 -0
- package/dist/client/views/dashboard/widget-card.mjs +159 -0
- package/dist/client/views/dashboard/widget-card.mjs.map +1 -0
- package/dist/client/views/globals/global-form-view.d.mts +74 -0
- package/dist/client/views/globals/global-form-view.d.mts.map +1 -0
- package/dist/client/views/globals/global-form-view.mjs +181 -0
- package/dist/client/views/globals/global-form-view.mjs.map +1 -0
- package/dist/client/views/index.d.mts +28 -0
- package/dist/client/views/layout/admin-layout-provider.d.mts +140 -0
- package/dist/client/views/layout/admin-layout-provider.d.mts.map +1 -0
- package/dist/client/views/layout/admin-layout-provider.mjs +90 -0
- package/dist/client/views/layout/admin-layout-provider.mjs.map +1 -0
- package/dist/client/views/layout/admin-layout.d.mts +151 -0
- package/dist/client/views/layout/admin-layout.d.mts.map +1 -0
- package/dist/client/views/layout/admin-layout.mjs +144 -0
- package/dist/client/views/layout/admin-layout.mjs.map +1 -0
- package/dist/client/views/layout/admin-root.d.mts +7 -0
- package/dist/client/views/layout/admin-router.d.mts +125 -0
- package/dist/client/views/layout/admin-router.d.mts.map +1 -0
- package/dist/client/views/layout/admin-router.mjs +594 -0
- package/dist/client/views/layout/admin-router.mjs.map +1 -0
- package/dist/client/views/layout/admin-sidebar.d.mts +105 -0
- package/dist/client/views/layout/admin-sidebar.d.mts.map +1 -0
- package/dist/client/views/layout/admin-sidebar.mjs +550 -0
- package/dist/client/views/layout/admin-sidebar.mjs.map +1 -0
- package/dist/client/views/layout/admin-topbar.mjs +128 -0
- package/dist/client/views/layout/admin-topbar.mjs.map +1 -0
- package/dist/client/views/layout/index.d.mts +5 -0
- package/dist/client/views/pages/accept-invite-page.d.mts +67 -0
- package/dist/client/views/pages/accept-invite-page.d.mts.map +1 -0
- package/dist/client/views/pages/accept-invite-page.mjs +143 -0
- package/dist/client/views/pages/accept-invite-page.mjs.map +1 -0
- package/dist/client/views/pages/dashboard-page.d.mts +52 -0
- package/dist/client/views/pages/dashboard-page.d.mts.map +1 -0
- package/dist/client/views/pages/dashboard-page.mjs +45 -0
- package/dist/client/views/pages/dashboard-page.mjs.map +1 -0
- package/dist/client/views/pages/forgot-password-page.d.mts +59 -0
- package/dist/client/views/pages/forgot-password-page.d.mts.map +1 -0
- package/dist/client/views/pages/forgot-password-page.mjs +80 -0
- package/dist/client/views/pages/forgot-password-page.mjs.map +1 -0
- package/dist/client/views/pages/index.d.mts +7 -0
- package/dist/client/views/pages/invite-page.d.mts +71 -0
- package/dist/client/views/pages/invite-page.d.mts.map +1 -0
- package/dist/client/views/pages/invite-page.mjs +86 -0
- package/dist/client/views/pages/invite-page.mjs.map +1 -0
- package/dist/client/views/pages/login-page.d.mts +76 -0
- package/dist/client/views/pages/login-page.d.mts.map +1 -0
- package/dist/client/views/pages/login-page.mjs +98 -0
- package/dist/client/views/pages/login-page.mjs.map +1 -0
- package/dist/client/views/pages/reset-password-page.d.mts +66 -0
- package/dist/client/views/pages/reset-password-page.d.mts.map +1 -0
- package/dist/client/views/pages/reset-password-page.mjs +105 -0
- package/dist/client/views/pages/reset-password-page.mjs.map +1 -0
- package/dist/client/views/pages/setup-page.d.mts +64 -0
- package/dist/client/views/pages/setup-page.d.mts.map +1 -0
- package/dist/client/views/pages/setup-page.mjs +91 -0
- package/dist/client/views/pages/setup-page.mjs.map +1 -0
- package/dist/client.d.mts +92 -3
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +54 -12
- package/dist/components/rich-text/index.d.mts +1 -0
- package/dist/components/rich-text/rich-text-renderer.d.mts +104 -0
- package/dist/components/rich-text/rich-text-renderer.d.mts.map +1 -0
- package/dist/components/rich-text/rich-text-renderer.mjs +210 -0
- package/dist/components/rich-text/rich-text-renderer.mjs.map +1 -0
- package/dist/index.d.mts +62 -3
- package/dist/index.mjs +54 -12
- package/dist/server/adapters/nextjs.d.mts +121 -0
- package/dist/server/adapters/nextjs.d.mts.map +1 -0
- package/dist/server/adapters/nextjs.mjs +111 -0
- package/dist/server/adapters/nextjs.mjs.map +1 -0
- package/dist/server/adapters/tanstack.d.mts +133 -0
- package/dist/server/adapters/tanstack.d.mts.map +1 -0
- package/dist/server/adapters/tanstack.mjs +90 -0
- package/dist/server/adapters/tanstack.mjs.map +1 -0
- package/dist/server/augmentation.d.mts +1523 -0
- package/dist/server/augmentation.d.mts.map +1 -0
- package/dist/server/auth-helpers.d.mts +143 -0
- package/dist/server/auth-helpers.d.mts.map +1 -0
- package/dist/server/auth-helpers.mjs +108 -0
- package/dist/server/auth-helpers.mjs.map +1 -0
- package/dist/server/block/block-builder.d.mts +319 -0
- package/dist/server/block/block-builder.d.mts.map +1 -0
- package/dist/server/block/block-builder.mjs +217 -0
- package/dist/server/block/block-builder.mjs.map +1 -0
- package/dist/server/block/index.d.mts +3 -0
- package/dist/server/block/introspection.d.mts +84 -0
- package/dist/server/block/introspection.d.mts.map +1 -0
- package/dist/server/block/introspection.mjs +89 -0
- package/dist/server/block/introspection.mjs.map +1 -0
- package/dist/server/block/prefetch.d.mts +78 -0
- package/dist/server/block/prefetch.d.mts.map +1 -0
- package/dist/server/block/prefetch.mjs +240 -0
- package/dist/server/block/prefetch.mjs.map +1 -0
- package/dist/server/fields/blocks.d.mts +139 -0
- package/dist/server/fields/blocks.d.mts.map +1 -0
- package/dist/server/fields/blocks.mjs +192 -0
- package/dist/server/fields/blocks.mjs.map +1 -0
- package/dist/server/fields/index.d.mts +48 -0
- package/dist/server/fields/index.d.mts.map +1 -0
- package/dist/server/fields/index.mjs +16 -0
- package/dist/server/fields/index.mjs.map +1 -0
- package/dist/server/fields/rich-text.d.mts +135 -0
- package/dist/server/fields/rich-text.d.mts.map +1 -0
- package/dist/server/fields/rich-text.mjs +188 -0
- package/dist/server/fields/rich-text.mjs.map +1 -0
- package/dist/server/i18n/index.d.mts +16 -0
- package/dist/server/i18n/index.d.mts.map +1 -0
- package/dist/server/i18n/index.mjs +44 -0
- package/dist/server/i18n/index.mjs.map +1 -0
- package/dist/server/i18n/messages/cs.mjs +461 -0
- package/dist/server/i18n/messages/cs.mjs.map +1 -0
- package/dist/server/i18n/messages/de.mjs +461 -0
- package/dist/server/i18n/messages/de.mjs.map +1 -0
- package/dist/server/i18n/messages/en.mjs +493 -0
- package/dist/server/i18n/messages/en.mjs.map +1 -0
- package/dist/server/i18n/messages/es.mjs +461 -0
- package/dist/server/i18n/messages/es.mjs.map +1 -0
- package/dist/server/i18n/messages/fr.mjs +461 -0
- package/dist/server/i18n/messages/fr.mjs.map +1 -0
- package/dist/server/i18n/messages/index.mjs +24 -0
- package/dist/server/i18n/messages/index.mjs.map +1 -0
- package/dist/server/i18n/messages/pl.mjs +461 -0
- package/dist/server/i18n/messages/pl.mjs.map +1 -0
- package/dist/server/i18n/messages/pt.mjs +464 -0
- package/dist/server/i18n/messages/pt.mjs.map +1 -0
- package/dist/server/i18n/messages/sk.mjs +490 -0
- package/dist/server/i18n/messages/sk.mjs.map +1 -0
- package/dist/server/index.d.mts +20 -0
- package/dist/server/modules/admin/functions/admin-config.mjs +348 -0
- package/dist/server/modules/admin/functions/admin-config.mjs.map +1 -0
- package/dist/server/modules/admin/functions/execute-action.d.mts +107 -0
- package/dist/server/modules/admin/functions/execute-action.d.mts.map +1 -0
- package/dist/server/modules/admin/functions/execute-action.mjs +331 -0
- package/dist/server/modules/admin/functions/execute-action.mjs.map +1 -0
- package/dist/server/modules/admin/functions/locales.mjs +80 -0
- package/dist/server/modules/admin/functions/locales.mjs.map +1 -0
- package/dist/server/modules/admin/functions/preview.d.mts +70 -0
- package/dist/server/modules/admin/functions/preview.d.mts.map +1 -0
- package/dist/server/modules/admin/functions/preview.mjs +243 -0
- package/dist/server/modules/admin/functions/preview.mjs.map +1 -0
- package/dist/server/modules/admin/functions/reactive.d.mts +99 -0
- package/dist/server/modules/admin/functions/reactive.d.mts.map +1 -0
- package/dist/server/modules/admin/functions/reactive.mjs +378 -0
- package/dist/server/modules/admin/functions/reactive.mjs.map +1 -0
- package/dist/server/modules/admin/functions/setup.d.mts +84 -0
- package/dist/server/modules/admin/functions/setup.d.mts.map +1 -0
- package/dist/server/modules/admin/functions/setup.mjs +131 -0
- package/dist/server/modules/admin/functions/setup.mjs.map +1 -0
- package/dist/server/modules/admin/functions/translations.mjs +125 -0
- package/dist/server/modules/admin/functions/translations.mjs.map +1 -0
- package/dist/server/modules/admin/functions/widget-data.d.mts +33 -0
- package/dist/server/modules/admin/functions/widget-data.d.mts.map +1 -0
- package/dist/server/modules/admin/functions/widget-data.mjs +70 -0
- package/dist/server/modules/admin/functions/widget-data.mjs.map +1 -0
- package/dist/server/modules/admin/index.d.mts +16879 -0
- package/dist/server/modules/admin/index.d.mts.map +1 -0
- package/dist/server/modules/admin/index.mjs +249 -0
- package/dist/server/modules/admin/index.mjs.map +1 -0
- package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +3 -0
- package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs +48 -0
- package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +1 -0
- package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +3 -0
- package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +79 -0
- package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +1 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +1490 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +1 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +57 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +1 -0
- package/dist/server/patch.d.mts +100 -0
- package/dist/server/patch.d.mts.map +1 -0
- package/dist/server/patch.mjs +1062 -0
- package/dist/server/patch.mjs.map +1 -0
- package/dist/server.d.mts +21 -250
- package/dist/server.mjs +19 -832
- package/dist/shared/preview-utils.d.mts +54 -0
- package/dist/shared/preview-utils.d.mts.map +1 -0
- package/dist/{preview-utils-BKQ9-TMa.mjs → shared/preview-utils.mjs} +2 -2
- package/dist/shared/preview-utils.mjs.map +1 -0
- package/dist/{saved-views.types-BMsz5mCy.d.mts → shared/types/saved-views.types.d.mts} +7 -2
- package/dist/shared/types/saved-views.types.d.mts.map +1 -0
- package/dist/shared.d.mts +3 -57
- package/dist/shared.mjs +1 -1
- package/package.json +12 -17
- package/dist/auth-layout-M8K8_q5R.mjs +0 -181
- package/dist/auth-layout-M8K8_q5R.mjs.map +0 -1
- package/dist/bulk-upload-dialog-D7w7W1Hl.mjs +0 -273
- package/dist/bulk-upload-dialog-D7w7W1Hl.mjs.map +0 -1
- package/dist/client-B7r47hEd.d.mts +0 -13403
- package/dist/client-B7r47hEd.d.mts.map +0 -1
- package/dist/client-njX1rZmi.mjs +0 -22612
- package/dist/client-njX1rZmi.mjs.map +0 -1
- package/dist/content-locales-provider-BXvuIgfg.mjs +0 -1650
- package/dist/content-locales-provider-BXvuIgfg.mjs.map +0 -1
- package/dist/dashboard-page-B4PGEdc2.mjs +0 -2500
- package/dist/dashboard-page-B4PGEdc2.mjs.map +0 -1
- package/dist/dashboard-page-mCY0pgZv.mjs +0 -3
- package/dist/dropzone-Do3awXKd.mjs +0 -634
- package/dist/dropzone-Do3awXKd.mjs.map +0 -1
- package/dist/forgot-password-page-Bcp-An4Y.mjs.map +0 -1
- package/dist/forgot-password-page-CEwsdLwn.mjs +0 -3
- package/dist/index-BYyqkWtn.d.mts +0 -2753
- package/dist/index-BYyqkWtn.d.mts.map +0 -1
- package/dist/login-page-BUnpCbCa.mjs +0 -3
- package/dist/login-page-CP4gA-dl.mjs +0 -298
- package/dist/login-page-CP4gA-dl.mjs.map +0 -1
- package/dist/preview-utils-BKQ9-TMa.mjs.map +0 -1
- package/dist/reset-password-page-BqfDmLxA.mjs +0 -281
- package/dist/reset-password-page-BqfDmLxA.mjs.map +0 -1
- package/dist/reset-password-page-CufHz3h3.mjs +0 -3
- package/dist/runtime-6VZM878K.mjs.map +0 -1
- package/dist/saved-views.types-BMsz5mCy.d.mts.map +0 -1
- package/dist/server.d.mts.map +0 -1
- package/dist/server.mjs.map +0 -1
- package/dist/setup-page-BNNzt_Z6.mjs +0 -3
- package/dist/setup-page-YAP_fzqh.mjs.map +0 -1
- package/dist/shared.d.mts.map +0 -1
- package/dist/use-auth-BoLmWtmU.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-form-view.mjs","names":["configs: Record<string, any>","React"],"sources":["../../../../src/client/views/globals/global-form-view.tsx"],"sourcesContent":["/**\n * Global Form View - Default edit view component for globals\n *\n * Mirrors FormView for collections but adapted for singleton globals.\n * Renders global settings form with sections, tabs, sidebar, validation.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport { QuestpieClientError } from \"questpie/client\";\nimport * as React from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport type {\n\tComponentRegistry,\n\tFormViewConfig,\n} from \"../../builder/types/field-types\";\nimport type { GlobalBuilderState } from \"../../builder/types/global-types\";\nimport { LocaleSwitcher } from \"../../components/locale-switcher\";\nimport { Button } from \"../../components/ui/button\";\nimport { useGlobal, useGlobalUpdate } from \"../../hooks\";\nimport { useGlobalFields } from \"../../hooks/use-global-fields\";\nimport { useReactiveFields } from \"../../hooks/use-reactive-fields\";\nimport { useGlobalServerValidation } from \"../../hooks/use-server-validation\";\nimport { useResolveText, useTranslation } from \"../../i18n/hooks\";\nimport { useSafeContentLocales, useScopedLocale } from \"../../runtime\";\nimport { AutoFormFields } from \"../collection/auto-form-fields\";\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Extract reactive configs from global schema fields.\n * Used to determine which fields have server-side reactive behaviors.\n */\nfunction extractReactiveConfigs(schema: any): Record<string, any> {\n\tif (!schema?.fields) return {};\n\n\tconst configs: Record<string, any> = {};\n\n\tfor (const [fieldName, fieldDef] of Object.entries(schema.fields)) {\n\t\tif ((fieldDef as any).reactive) {\n\t\t\tconfigs[fieldName] = (fieldDef as any).reactive;\n\t\t}\n\t}\n\n\treturn configs;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Props for GlobalFormView component\n */\nexport interface GlobalFormViewProps {\n\t/**\n\t * Global name\n\t */\n\tglobal: string;\n\n\t/**\n\t * Global configuration from admin builder\n\t * Accepts GlobalBuilderState or any compatible config object\n\t */\n\tconfig?: Partial<GlobalBuilderState> | Record<string, any>;\n\n\t/**\n\t * View-specific configuration from registry/schema\n\t */\n\tviewConfig?: FormViewConfig;\n\n\t/**\n\t * Navigate function for routing\n\t */\n\tnavigate: (path: string) => void;\n\n\t/**\n\t * Base path for admin routes (e.g., \"/admin\")\n\t */\n\tbasePath?: string;\n\n\t/**\n\t * Component registry for custom field types\n\t */\n\tregistry?: ComponentRegistry;\n\n\t/**\n\t * All globals config (for potential cross-references)\n\t */\n\tallGlobalsConfig?: Record<\n\t\tstring,\n\t\tPartial<GlobalBuilderState> | Record<string, any>\n\t>;\n\n\t/**\n\t * Show metadata (updated dates)\n\t * @default true\n\t */\n\tshowMeta?: boolean;\n\n\t/**\n\t * Custom header actions (in addition to default Save button)\n\t */\n\theaderActions?: React.ReactNode;\n\n\t/**\n\t * Callback on successful save\n\t */\n\tonSuccess?: (data: any) => void;\n\n\t/**\n\t * Callback on error\n\t */\n\tonError?: (error: Error) => void;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * GlobalFormView - Default form-based edit view for globals\n */\nexport default function GlobalFormView({\n\tglobal: globalName,\n\tconfig,\n\tviewConfig,\n\tregistry,\n\tshowMeta = true,\n\theaderActions,\n\tonSuccess,\n\tonError,\n}: GlobalFormViewProps) {\n\tconst { t } = useTranslation();\n\tconst resolveText = useResolveText();\n\n\tconst { data: globalData, isLoading: dataLoading } = useGlobal(globalName);\n\tconst { fields: schemaFields } = useGlobalFields(globalName);\n\n\tconst { locale: contentLocale, setLocale: setContentLocale } =\n\t\tuseScopedLocale();\n\tconst contentLocales = useSafeContentLocales();\n\tconst localeOptions = contentLocales?.locales ?? [];\n\n\tconst updateMutation = useGlobalUpdate(globalName, {\n\t\tonSuccess: (data) => {\n\t\t\ttoast.success(t(\"toast.saveSuccess\"));\n\t\t\tonSuccess?.(data);\n\t\t},\n\t\tonError: (error) => {\n\t\t\tonError?.(error);\n\t\t},\n\t});\n\n\t// Get validation resolver - uses server JSON Schema for validation\n\tconst { resolver } = useGlobalServerValidation(globalName);\n\n\tconst form = useForm({\n\t\tdefaultValues: (globalData ?? {}) as any,\n\t\tresolver,\n\t});\n\n\t// Reset form when data loads\n\tReact.useEffect(() => {\n\t\tif (globalData) {\n\t\t\tform.reset(globalData as any);\n\t\t}\n\t}, [form, globalData]);\n\n\t// Extract reactive configs from schema for server-side reactive handlers\n\tconst reactiveConfigs = React.useMemo(\n\t\t() => extractReactiveConfigs(schemaFields),\n\t\t[schemaFields],\n\t);\n\n\t// Use reactive fields hook for server-side compute/hidden/readOnly/disabled\n\tuseReactiveFields({\n\t\tcollection: globalName,\n\t\tmode: \"global\",\n\t\treactiveConfigs,\n\t\tenabled: !dataLoading && Object.keys(reactiveConfigs).length > 0,\n\t\tdebounce: 300,\n\t});\n\n\tconst resolvedConfig = React.useMemo(() => {\n\t\tif (!viewConfig) return config;\n\n\t\treturn {\n\t\t\t...(config ?? {}),\n\t\t\tform: viewConfig,\n\t\t};\n\t}, [config, viewConfig]);\n\n\tconst onSubmit = React.useCallback(\n\t\tasync (data: any) => {\n\t\t\ttry {\n\t\t\t\tconst result = await updateMutation.mutateAsync({\n\t\t\t\t\tdata,\n\t\t\t\t});\n\t\t\t\tif (result) {\n\t\t\t\t\tform.reset(result as any);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Handle field-level validation errors from the API\n\t\t\t\tif (\n\t\t\t\t\terror instanceof QuestpieClientError &&\n\t\t\t\t\terror.fieldErrors &&\n\t\t\t\t\terror.fieldErrors.length > 0\n\t\t\t\t) {\n\t\t\t\t\tfor (const fieldError of error.fieldErrors) {\n\t\t\t\t\t\tform.setError(fieldError.path as any, {\n\t\t\t\t\t\t\ttype: \"server\",\n\t\t\t\t\t\t\tmessage: fieldError.message,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\ttoast.error(t(\"toast.validationFailed\"), {\n\t\t\t\t\t\tdescription: t(\"toast.validationDescription\"),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Handle generic errors\n\t\t\t\tconst message =\n\t\t\t\t\terror instanceof Error ? error.message : t(\"error.unknown\");\n\t\t\t\ttoast.error(\n\t\t\t\t\tt(\"toast.settingsSaveFailed\") || \"Failed to save settings\",\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: message,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[updateMutation, form, t],\n\t);\n\n\t// Keyboard shortcut: Cmd+S to save\n\tReact.useEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif ((e.metaKey || e.ctrlKey) && e.key === \"s\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tform.handleSubmit(onSubmit)();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [form, onSubmit]);\n\n\tconst isSubmitting = updateMutation.isPending || form.formState.isSubmitting;\n\n\t// Format date helper\n\tconst formatDate = (date: string | Date) => {\n\t\treturn new Date(date).toLocaleDateString(undefined, {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"short\",\n\t\t\tday: \"numeric\",\n\t\t\thour: \"2-digit\",\n\t\t\tminute: \"2-digit\",\n\t\t});\n\t};\n\n\tif (dataLoading) {\n\t\treturn (\n\t\t\t<div className=\"flex h-64 items-center justify-center text-muted-foreground\">\n\t\t\t\t<Icon icon=\"ph:spinner-gap\" className=\"size-6 animate-spin\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst globalLabel = resolveText(\n\t\t(resolvedConfig as any)?.label ?? schemaFields?._globalLabel,\n\t\tglobalName,\n\t);\n\n\treturn (\n\t\t<FormProvider {...form}>\n\t\t\t<form onSubmit={form.handleSubmit(onSubmit)} className=\"w-full space-y-4\">\n\t\t\t\t{/* Header - Title & Actions */}\n\t\t\t\t<div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t<h1 className=\"text-2xl md:text-3xl font-extrabold tracking-tight\">\n\t\t\t\t\t\t\t\t{globalLabel}\n\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t{localeOptions.length > 0 && (\n\t\t\t\t\t\t\t\t<LocaleSwitcher\n\t\t\t\t\t\t\t\t\tlocales={localeOptions}\n\t\t\t\t\t\t\t\t\tvalue={contentLocale}\n\t\t\t\t\t\t\t\t\tonChange={setContentLocale}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{showMeta && globalData?.updatedAt && (\n\t\t\t\t\t\t\t<p className=\"mt-1 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t{t(\"form.lastUpdated\")}: {formatDate(globalData.updatedAt)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"flex items-center gap-2 shrink-0\">\n\t\t\t\t\t\t{headerActions}\n\t\t\t\t\t\t<Button type=\"submit\" disabled={isSubmitting} className=\"gap-2\">\n\t\t\t\t\t\t\t{isSubmitting ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:spinner-gap\" className=\"size-4 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{t(\"common.loading\")}\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<>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:check\" width={16} height={16} />\n\t\t\t\t\t\t\t\t\t{t(\"common.save\")}\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Main Content - Form Fields */}\n\t\t\t\t<AutoFormFields\n\t\t\t\t\tcollection={globalName}\n\t\t\t\t\tmode=\"global\"\n\t\t\t\t\tconfig={resolvedConfig}\n\t\t\t\t\tregistry={registry}\n\t\t\t\t/>\n\t\t\t</form>\n\t\t</FormProvider>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAS,uBAAuB,QAAkC;AACjE,KAAI,CAAC,QAAQ,OAAQ,QAAO,EAAE;CAE9B,MAAMA,UAA+B,EAAE;AAEvC,MAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,OAAO,OAAO,CAChE,KAAK,SAAiB,SACrB,SAAQ,aAAc,SAAiB;AAIzC,QAAO;;;;;AA+ER,SAAwB,eAAe,EACtC,QAAQ,YACR,QACA,YACA,UACA,WAAW,MACX,eACA,WACA,WACuB;CACvB,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,cAAc,gBAAgB;CAEpC,MAAM,EAAE,MAAM,YAAY,WAAW,gBAAgB,UAAU,WAAW;CAC1E,MAAM,EAAE,QAAQ,iBAAiB,gBAAgB,WAAW;CAE5D,MAAM,EAAE,QAAQ,eAAe,WAAW,qBACzC,iBAAiB;CAElB,MAAM,gBADiB,uBAAuB,EACR,WAAW,EAAE;CAEnD,MAAM,iBAAiB,gBAAgB,YAAY;EAClD,YAAY,SAAS;AACpB,SAAM,QAAQ,EAAE,oBAAoB,CAAC;AACrC,eAAY,KAAK;;EAElB,UAAU,UAAU;AACnB,aAAU,MAAM;;EAEjB,CAAC;CAGF,MAAM,EAAE,aAAa,0BAA0B,WAAW;CAE1D,MAAM,OAAO,QAAQ;EACpB,eAAgB,cAAc,EAAE;EAChC;EACA,CAAC;AAGF,SAAM,gBAAgB;AACrB,MAAI,WACH,MAAK,MAAM,WAAkB;IAE5B,CAAC,MAAM,WAAW,CAAC;CAGtB,MAAM,kBAAkBC,QAAM,cACvB,uBAAuB,aAAa,EAC1C,CAAC,aAAa,CACd;AAGD,mBAAkB;EACjB,YAAY;EACZ,MAAM;EACN;EACA,SAAS,CAAC,eAAe,OAAO,KAAK,gBAAgB,CAAC,SAAS;EAC/D,UAAU;EACV,CAAC;CAEF,MAAM,iBAAiBA,QAAM,cAAc;AAC1C,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO;GACN,GAAI,UAAU,EAAE;GAChB,MAAM;GACN;IACC,CAAC,QAAQ,WAAW,CAAC;CAExB,MAAM,WAAWA,QAAM,YACtB,OAAO,SAAc;AACpB,MAAI;GACH,MAAM,SAAS,MAAM,eAAe,YAAY,EAC/C,MACA,CAAC;AACF,OAAI,OACH,MAAK,MAAM,OAAc;WAElB,OAAO;AAEf,OACC,iBAAiB,uBACjB,MAAM,eACN,MAAM,YAAY,SAAS,GAC1B;AACD,SAAK,MAAM,cAAc,MAAM,YAC9B,MAAK,SAAS,WAAW,MAAa;KACrC,MAAM;KACN,SAAS,WAAW;KACpB,CAAC;AAEH,UAAM,MAAM,EAAE,yBAAyB,EAAE,EACxC,aAAa,EAAE,8BAA8B,EAC7C,CAAC;AACF;;GAID,MAAM,UACL,iBAAiB,QAAQ,MAAM,UAAU,EAAE,gBAAgB;AAC5D,SAAM,MACL,EAAE,2BAA2B,IAAI,2BACjC,EACC,aAAa,SACb,CACD;;IAGH;EAAC;EAAgB;EAAM;EAAE,CACzB;AAGD,SAAM,gBAAgB;EACrB,MAAM,iBAAiB,MAAqB;AAC3C,QAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC9C,MAAE,gBAAgB;AAClB,SAAK,aAAa,SAAS,EAAE;;;AAG/B,WAAS,iBAAiB,WAAW,cAAc;AACnD,eAAa,SAAS,oBAAoB,WAAW,cAAc;IACjE,CAAC,MAAM,SAAS,CAAC;CAEpB,MAAM,eAAe,eAAe,aAAa,KAAK,UAAU;CAGhE,MAAM,cAAc,SAAwB;AAC3C,SAAO,IAAI,KAAK,KAAK,CAAC,mBAAmB,QAAW;GACnD,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,CAAC;;AAGH,KAAI,YACH,QACC,oBAAC;EAAI,WAAU;YACd,oBAAC;GAAK,MAAK;GAAiB,WAAU;IAAwB;GACzD;CAIR,MAAM,cAAc,YAClB,gBAAwB,SAAS,cAAc,cAChD,WACA;AAED,QACC,oBAAC;EAAa,GAAI;YACjB,qBAAC;GAAK,UAAU,KAAK,aAAa,SAAS;GAAE,WAAU;cAEtD,qBAAC;IAAI,WAAU;eACd,qBAAC;KAAI,WAAU;gBACd,qBAAC;MAAI,WAAU;iBACd,oBAAC;OAAG,WAAU;iBACZ;QACG,EACJ,cAAc,SAAS,KACvB,oBAAC;OACA,SAAS;OACT,OAAO;OACP,UAAU;QACT;OAEE,EACL,YAAY,YAAY,aACxB,qBAAC;MAAE,WAAU;;OACX,EAAE,mBAAmB;OAAC;OAAG,WAAW,WAAW,UAAU;;OACvD;MAEA,EAEN,qBAAC;KAAI,WAAU;gBACb,eACD,oBAAC;MAAO,MAAK;MAAS,UAAU;MAAc,WAAU;gBACtD,eACA,4CACC,oBAAC;OAAK,MAAK;OAAiB,WAAU;QAAwB,EAC7D,EAAE,iBAAiB,IAClB,GAEH,4CACC,oBAAC;OAAK,MAAK;OAAW,OAAO;OAAI,QAAQ;QAAM,EAC9C,EAAE,cAAc,IACf;OAEI;MACJ;KACD,EAGN,oBAAC;IACA,YAAY;IACZ,MAAK;IACL,QAAQ;IACE;KACT;IACI;GACO"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AuthLayout, AuthLayoutProps } from "./auth/auth-layout.mjs";
|
|
2
|
+
import { LoginForm, LoginFormProps, LoginFormValues } from "./auth/login-form.mjs";
|
|
3
|
+
import { ForgotPasswordForm, ForgotPasswordFormProps, ForgotPasswordFormValues } from "./auth/forgot-password-form.mjs";
|
|
4
|
+
import { ResetPasswordForm, ResetPasswordFormProps, ResetPasswordFormValues } from "./auth/reset-password-form.mjs";
|
|
5
|
+
import { AcceptInviteForm, AcceptInviteFormProps, AcceptInviteFormValues } from "./auth/accept-invite-form.mjs";
|
|
6
|
+
import { SetupForm, SetupFormProps, SetupFormValues } from "./auth/setup-form.mjs";
|
|
7
|
+
import "./auth/index.mjs";
|
|
8
|
+
import { ArrayCell, JsonCell, ObjectCell } from "./collection/cells/complex-cells.mjs";
|
|
9
|
+
import { BooleanCell, DateCell, DateTimeCell, EmailCell, NumberCell, RichTextCell, SelectCell, TextCell, TimeCell } from "./collection/cells/primitive-cells.mjs";
|
|
10
|
+
import { RelationCell } from "./collection/cells/relation-cells.mjs";
|
|
11
|
+
import { UploadCell } from "./collection/cells/upload-cells.mjs";
|
|
12
|
+
import { FormView, FormViewProps, FormViewRegistryConfig } from "./collection/form-view.mjs";
|
|
13
|
+
import { TableView, TableViewConfig, TableViewProps } from "./collection/table-view.mjs";
|
|
14
|
+
import "./collection/index.mjs";
|
|
15
|
+
import "./common/index.mjs";
|
|
16
|
+
import { AdminSidebarProps, LinkComponentProps } from "./layout/admin-sidebar.mjs";
|
|
17
|
+
import { AdminLayout, AdminLayoutProps } from "./layout/admin-layout.mjs";
|
|
18
|
+
import { AdminLayoutProvider, AdminLayoutProviderProps } from "./layout/admin-layout-provider.mjs";
|
|
19
|
+
import { AdminRouter, AdminRouterProps } from "./layout/admin-router.mjs";
|
|
20
|
+
import "./layout/index.mjs";
|
|
21
|
+
import { DashboardPage, DashboardPageProps } from "./pages/dashboard-page.mjs";
|
|
22
|
+
import { LoginPage, LoginPageProps } from "./pages/login-page.mjs";
|
|
23
|
+
import { ForgotPasswordPage, ForgotPasswordPageProps } from "./pages/forgot-password-page.mjs";
|
|
24
|
+
import { ResetPasswordPage, ResetPasswordPageProps } from "./pages/reset-password-page.mjs";
|
|
25
|
+
import { InvitePage, InvitePageProps } from "./pages/invite-page.mjs";
|
|
26
|
+
import { AcceptInvitePage, AcceptInvitePageProps } from "./pages/accept-invite-page.mjs";
|
|
27
|
+
import { SetupPage, SetupPageProps } from "./pages/setup-page.mjs";
|
|
28
|
+
import "./pages/index.mjs";
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { AdminInput } from "../../builder/admin.mjs";
|
|
2
|
+
import { AdminLayoutSharedProps } from "./admin-layout.mjs";
|
|
3
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { QuestpieClient } from "questpie/client";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import { Questpie } from "questpie";
|
|
7
|
+
|
|
8
|
+
//#region src/client/views/layout/admin-layout-provider.d.ts
|
|
9
|
+
|
|
10
|
+
interface AdminLayoutProviderProps<TApp extends Questpie<any> = Questpie<any>> extends AdminLayoutSharedProps {
|
|
11
|
+
/**
|
|
12
|
+
* Admin configuration - pass your AdminBuilder directly.
|
|
13
|
+
* Can also accept an Admin instance for backward compatibility.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* // Recommended: pass builder directly
|
|
18
|
+
* <AdminLayoutProvider admin={admin} ... />
|
|
19
|
+
*
|
|
20
|
+
* // Also works (backward compatible)
|
|
21
|
+
* <AdminLayoutProvider admin={Admin.from(admin)} ... />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
admin: AdminInput<any>;
|
|
25
|
+
/**
|
|
26
|
+
* API client for data fetching
|
|
27
|
+
*/
|
|
28
|
+
client: QuestpieClient<TApp>;
|
|
29
|
+
/**
|
|
30
|
+
* Auth client for authentication (created via createAdminAuthClient)
|
|
31
|
+
*/
|
|
32
|
+
authClient?: any;
|
|
33
|
+
/**
|
|
34
|
+
* Optional QueryClient instance (will create one if not provided)
|
|
35
|
+
*/
|
|
36
|
+
queryClient?: QueryClient;
|
|
37
|
+
/**
|
|
38
|
+
* Enable authentication guard for protected routes.
|
|
39
|
+
* When true, checks if user is authenticated before rendering content.
|
|
40
|
+
* @default true if authClient is provided
|
|
41
|
+
*/
|
|
42
|
+
enableAuthGuard?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Paths that don't require authentication.
|
|
45
|
+
* Use relative paths from basePath (e.g., "/login" for "/admin/login").
|
|
46
|
+
* @default ["/login", "/forgot-password", "/reset-password", "/accept-invite"]
|
|
47
|
+
*/
|
|
48
|
+
publicPaths?: string[];
|
|
49
|
+
/**
|
|
50
|
+
* Required role for accessing protected routes.
|
|
51
|
+
* @default "admin"
|
|
52
|
+
*/
|
|
53
|
+
requiredRole?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Custom loading component while checking authentication.
|
|
56
|
+
*/
|
|
57
|
+
authLoadingFallback?: React$1.ReactNode;
|
|
58
|
+
/**
|
|
59
|
+
* Custom unauthorized component (instead of redirecting to login).
|
|
60
|
+
*/
|
|
61
|
+
authUnauthorizedFallback?: React$1.ReactNode;
|
|
62
|
+
/**
|
|
63
|
+
* Use server-side translations (fetched via getAdminTranslations RPC).
|
|
64
|
+
* When true, translations are fetched from the server configured via
|
|
65
|
+
* .adminLocale() and .messages() on QuestpieBuilder.
|
|
66
|
+
*
|
|
67
|
+
* @default false (for backwards compatibility)
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* // Server configures locales and messages
|
|
72
|
+
* const cms = q()
|
|
73
|
+
* .use(adminModule)
|
|
74
|
+
* .adminLocale({ locales: ["en", "sk"], defaultLocale: "en" })
|
|
75
|
+
* .messages({ sk: { "common.save": "Ulozit" } })
|
|
76
|
+
* .build();
|
|
77
|
+
*
|
|
78
|
+
* // Client fetches from server
|
|
79
|
+
* <AdminLayoutProvider
|
|
80
|
+
* admin={admin}
|
|
81
|
+
* client={client}
|
|
82
|
+
* useServerTranslations
|
|
83
|
+
* >
|
|
84
|
+
* {children}
|
|
85
|
+
* </AdminLayoutProvider>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
useServerTranslations?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Fallback element to show while loading server translations.
|
|
91
|
+
* Only used when useServerTranslations is true.
|
|
92
|
+
*/
|
|
93
|
+
translationsFallback?: React$1.ReactNode;
|
|
94
|
+
/**
|
|
95
|
+
* Initial UI locale (admin interface language)
|
|
96
|
+
* If not provided, reads from cookie or uses default from admin config
|
|
97
|
+
*/
|
|
98
|
+
initialUiLocale?: string;
|
|
99
|
+
/**
|
|
100
|
+
* Children to render inside the layout
|
|
101
|
+
* - Next.js: {children} from layout props
|
|
102
|
+
* - TanStack Router: <Outlet />
|
|
103
|
+
*/
|
|
104
|
+
children: React$1.ReactNode;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* AdminLayoutProvider Component
|
|
108
|
+
*
|
|
109
|
+
* Universal wrapper for admin layout that works with any router.
|
|
110
|
+
* Handles all the provider setup and renders children inside the layout.
|
|
111
|
+
*/
|
|
112
|
+
declare function AdminLayoutProvider<TApp extends Questpie<any>>({
|
|
113
|
+
admin: adminInput,
|
|
114
|
+
client,
|
|
115
|
+
authClient,
|
|
116
|
+
queryClient,
|
|
117
|
+
LinkComponent,
|
|
118
|
+
activeRoute,
|
|
119
|
+
basePath,
|
|
120
|
+
header,
|
|
121
|
+
footer,
|
|
122
|
+
sidebarProps,
|
|
123
|
+
theme,
|
|
124
|
+
setTheme,
|
|
125
|
+
showThemeToggle,
|
|
126
|
+
toasterProps,
|
|
127
|
+
className,
|
|
128
|
+
enableAuthGuard,
|
|
129
|
+
publicPaths,
|
|
130
|
+
requiredRole,
|
|
131
|
+
authLoadingFallback,
|
|
132
|
+
authUnauthorizedFallback,
|
|
133
|
+
useServerTranslations,
|
|
134
|
+
translationsFallback,
|
|
135
|
+
initialUiLocale,
|
|
136
|
+
children
|
|
137
|
+
}: AdminLayoutProviderProps<TApp>): React$1.ReactElement;
|
|
138
|
+
//#endregion
|
|
139
|
+
export { AdminLayoutProvider, AdminLayoutProviderProps };
|
|
140
|
+
//# sourceMappingURL=admin-layout-provider.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-layout-provider.d.mts","names":[],"sources":["../../../../src/client/views/layout/admin-layout-provider.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;UAsEiB,sCACF,gBAAgB,uBACrB;;;;;;;;;;;;;;SAcD;;;;UAKC,eAAe;;;;;;;;gBAUT;;;;;;;;;;;;;;;;;;;;;wBA6BQ,OAAA,CAAM;;;;6BAKD,OAAA,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAsCV,OAAA,CAAM;;;;;;;;;;;YAanB,OAAA,CAAM;;;;;;;;iBAwEF,iCAAiC;SACxC;;;;;;;;;;;;;;;;;;;;;;;;GA4BN,yBAAyB,QAAQ,OAAA,CAAM"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Admin } from "../../builder/admin.mjs";
|
|
2
|
+
import { AdminProvider } from "../../runtime/provider.mjs";
|
|
3
|
+
import { AdminLayout } from "./admin-layout.mjs";
|
|
4
|
+
import { AuthGuard } from "../../components/auth/auth-guard.mjs";
|
|
5
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/client/views/layout/admin-layout-provider.tsx
|
|
9
|
+
let cachedQueryClient;
|
|
10
|
+
function getDefaultQueryClient() {
|
|
11
|
+
if (!cachedQueryClient) cachedQueryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 60 * 1e3 } } });
|
|
12
|
+
return cachedQueryClient;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Default public paths that don't require authentication
|
|
16
|
+
* These paths also render WITHOUT the admin layout (no sidebar/header)
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_PUBLIC_PATHS = [
|
|
19
|
+
"/login",
|
|
20
|
+
"/forgot-password",
|
|
21
|
+
"/reset-password",
|
|
22
|
+
"/accept-invite",
|
|
23
|
+
"/setup"
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Check if current path matches any public path
|
|
27
|
+
*/
|
|
28
|
+
function isPublicPath(currentPath, basePath, publicPaths) {
|
|
29
|
+
if (!currentPath) return false;
|
|
30
|
+
const normalizedCurrent = currentPath.replace(/\/+$/, "");
|
|
31
|
+
const normalizedBase = basePath.replace(/\/+$/, "");
|
|
32
|
+
for (const publicPath of publicPaths) {
|
|
33
|
+
const fullPublicPath = `${normalizedBase}${publicPath}`.replace(/\/+$/, "");
|
|
34
|
+
if (normalizedCurrent === fullPublicPath || normalizedCurrent.startsWith(`${fullPublicPath}/`)) return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* AdminLayoutProvider Component
|
|
40
|
+
*
|
|
41
|
+
* Universal wrapper for admin layout that works with any router.
|
|
42
|
+
* Handles all the provider setup and renders children inside the layout.
|
|
43
|
+
*/
|
|
44
|
+
function AdminLayoutProvider({ admin: adminInput, client, authClient, queryClient, LinkComponent, activeRoute, basePath = "/admin", header, footer, sidebarProps, theme, setTheme, showThemeToggle, toasterProps, className, enableAuthGuard, publicPaths = DEFAULT_PUBLIC_PATHS, requiredRole = "admin", authLoadingFallback, authUnauthorizedFallback, useServerTranslations, translationsFallback, initialUiLocale, children }) {
|
|
45
|
+
const qc = queryClient ?? getDefaultQueryClient();
|
|
46
|
+
const admin = Admin.normalize(adminInput);
|
|
47
|
+
const shouldUseAuthGuard = enableAuthGuard ?? authClient != null;
|
|
48
|
+
const isCurrentPathPublic = isPublicPath(activeRoute ?? (typeof window !== "undefined" ? window.location.pathname : void 0), basePath, publicPaths);
|
|
49
|
+
let innerContent;
|
|
50
|
+
if (isCurrentPathPublic) innerContent = children;
|
|
51
|
+
else {
|
|
52
|
+
const layoutContent = /* @__PURE__ */ jsx(AdminLayout, {
|
|
53
|
+
LinkComponent,
|
|
54
|
+
activeRoute,
|
|
55
|
+
basePath,
|
|
56
|
+
header,
|
|
57
|
+
footer,
|
|
58
|
+
sidebarProps,
|
|
59
|
+
theme,
|
|
60
|
+
setTheme,
|
|
61
|
+
showThemeToggle,
|
|
62
|
+
toasterProps,
|
|
63
|
+
className,
|
|
64
|
+
children
|
|
65
|
+
});
|
|
66
|
+
innerContent = shouldUseAuthGuard ? /* @__PURE__ */ jsx(AuthGuard, {
|
|
67
|
+
loginPath: `${basePath}/login`,
|
|
68
|
+
requiredRole,
|
|
69
|
+
loadingFallback: authLoadingFallback,
|
|
70
|
+
unauthorizedFallback: authUnauthorizedFallback,
|
|
71
|
+
children: layoutContent
|
|
72
|
+
}) : layoutContent;
|
|
73
|
+
}
|
|
74
|
+
return /* @__PURE__ */ jsx(QueryClientProvider, {
|
|
75
|
+
client: qc,
|
|
76
|
+
children: /* @__PURE__ */ jsx(AdminProvider, {
|
|
77
|
+
admin,
|
|
78
|
+
client,
|
|
79
|
+
authClient,
|
|
80
|
+
useServerTranslations,
|
|
81
|
+
translationsFallback,
|
|
82
|
+
initialUiLocale,
|
|
83
|
+
children: innerContent
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
//#endregion
|
|
89
|
+
export { AdminLayoutProvider };
|
|
90
|
+
//# sourceMappingURL=admin-layout-provider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-layout-provider.mjs","names":["cachedQueryClient: QueryClient | undefined","QueryClientClass","innerContent: React.ReactNode"],"sources":["../../../../src/client/views/layout/admin-layout-provider.tsx"],"sourcesContent":["/**\n * AdminLayoutProvider Component\n *\n * Universal layout wrapper that works with any router.\n * Provides AdminProvider + AdminLayout and renders children.\n *\n * @example Next.js (App Router)\n * ```tsx\n * // app/admin/layout.tsx\n * export default function AdminLayout({ children }) {\n * return (\n * <AdminLayoutProvider\n * admin={myAdmin}\n * client={cmsClient}\n * authClient={authClient}\n * LinkComponent={Link}\n * >\n * {children}\n * </AdminLayoutProvider>\n * );\n * }\n * ```\n *\n * @example TanStack Router\n * ```tsx\n * // routes/admin.tsx\n * function AdminLayout() {\n * return (\n * <AdminLayoutProvider\n * admin={myAdmin}\n * client={cmsClient}\n * authClient={authClient}\n * LinkComponent={Link}\n * >\n * <Outlet />\n * </AdminLayoutProvider>\n * );\n * }\n * ```\n *\n * @example With Auth Protection\n * ```tsx\n * <AdminLayoutProvider\n * admin={myAdmin}\n * client={cmsClient}\n * authClient={authClient}\n * enableAuthGuard={true}\n * publicPaths={[\"/admin/login\", \"/admin/forgot-password\"]}\n * requiredRole=\"admin\"\n * >\n * {children}\n * </AdminLayoutProvider>\n * ```\n */\n\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport type { Questpie } from \"questpie\";\nimport type { QuestpieClient } from \"questpie/client\";\nimport type * as React from \"react\";\nimport { Admin, type AdminInput } from \"../../builder/admin\";\nimport type { AdminBuilder } from \"../../builder/admin-builder\";\nimport { AuthGuard } from \"../../components/auth\";\nimport { AdminProvider } from \"../../runtime/provider\";\nimport { AdminLayout, type AdminLayoutSharedProps } from \"./admin-layout\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AdminLayoutProviderProps<\n TApp extends Questpie<any> = Questpie<any>,\n> extends AdminLayoutSharedProps {\n /**\n * Admin configuration - pass your AdminBuilder directly.\n * Can also accept an Admin instance for backward compatibility.\n *\n * @example\n * ```tsx\n * // Recommended: pass builder directly\n * <AdminLayoutProvider admin={admin} ... />\n *\n * // Also works (backward compatible)\n * <AdminLayoutProvider admin={Admin.from(admin)} ... />\n * ```\n */\n admin: AdminInput<any>;\n\n /**\n * API client for data fetching\n */\n client: QuestpieClient<TApp>;\n\n /**\n * Auth client for authentication (created via createAdminAuthClient)\n */\n authClient?: any;\n\n /**\n * Optional QueryClient instance (will create one if not provided)\n */\n queryClient?: QueryClient;\n\n // =========================================================================\n // Auth Guard Options\n // =========================================================================\n\n /**\n * Enable authentication guard for protected routes.\n * When true, checks if user is authenticated before rendering content.\n * @default true if authClient is provided\n */\n enableAuthGuard?: boolean;\n\n /**\n * Paths that don't require authentication.\n * Use relative paths from basePath (e.g., \"/login\" for \"/admin/login\").\n * @default [\"/login\", \"/forgot-password\", \"/reset-password\", \"/accept-invite\"]\n */\n publicPaths?: string[];\n\n /**\n * Required role for accessing protected routes.\n * @default \"admin\"\n */\n requiredRole?: string;\n\n /**\n * Custom loading component while checking authentication.\n */\n authLoadingFallback?: React.ReactNode;\n\n /**\n * Custom unauthorized component (instead of redirecting to login).\n */\n authUnauthorizedFallback?: React.ReactNode;\n\n // =========================================================================\n // i18n Options\n // =========================================================================\n\n /**\n * Use server-side translations (fetched via getAdminTranslations RPC).\n * When true, translations are fetched from the server configured via\n * .adminLocale() and .messages() on QuestpieBuilder.\n *\n * @default false (for backwards compatibility)\n *\n * @example\n * ```tsx\n * // Server configures locales and messages\n * const cms = q()\n * .use(adminModule)\n * .adminLocale({ locales: [\"en\", \"sk\"], defaultLocale: \"en\" })\n * .messages({ sk: { \"common.save\": \"Ulozit\" } })\n * .build();\n *\n * // Client fetches from server\n * <AdminLayoutProvider\n * admin={admin}\n * client={client}\n * useServerTranslations\n * >\n * {children}\n * </AdminLayoutProvider>\n * ```\n */\n useServerTranslations?: boolean;\n\n /**\n * Fallback element to show while loading server translations.\n * Only used when useServerTranslations is true.\n */\n translationsFallback?: React.ReactNode;\n\n /**\n * Initial UI locale (admin interface language)\n * If not provided, reads from cookie or uses default from admin config\n */\n initialUiLocale?: string;\n\n /**\n * Children to render inside the layout\n * - Next.js: {children} from layout props\n * - TanStack Router: <Outlet />\n */\n children: React.ReactNode;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nimport { QueryClient as QueryClientClass } from \"@tanstack/react-query\";\n\nlet cachedQueryClient: QueryClient | undefined;\n\nfunction getDefaultQueryClient(): QueryClient {\n if (!cachedQueryClient) {\n cachedQueryClient = new QueryClientClass({\n defaultOptions: {\n queries: {\n staleTime: 60 * 1000, // 1 minute\n },\n },\n });\n }\n return cachedQueryClient;\n}\n\n/**\n * Default public paths that don't require authentication\n * These paths also render WITHOUT the admin layout (no sidebar/header)\n */\nconst DEFAULT_PUBLIC_PATHS = [\n \"/login\",\n \"/forgot-password\",\n \"/reset-password\",\n \"/accept-invite\",\n \"/setup\",\n];\n\n/**\n * Check if current path matches any public path\n */\nfunction isPublicPath(\n currentPath: string | undefined,\n basePath: string,\n publicPaths: string[],\n): boolean {\n if (!currentPath) return false;\n\n // Normalize paths\n const normalizedCurrent = currentPath.replace(/\\/+$/, \"\");\n const normalizedBase = basePath.replace(/\\/+$/, \"\");\n\n for (const publicPath of publicPaths) {\n // Build full public path\n const fullPublicPath = `${normalizedBase}${publicPath}`.replace(/\\/+$/, \"\");\n\n // Check exact match or starts with (for nested routes)\n if (\n normalizedCurrent === fullPublicPath ||\n normalizedCurrent.startsWith(`${fullPublicPath}/`)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * AdminLayoutProvider Component\n *\n * Universal wrapper for admin layout that works with any router.\n * Handles all the provider setup and renders children inside the layout.\n */\nexport function AdminLayoutProvider<TApp extends Questpie<any>>({\n admin: adminInput,\n client,\n authClient,\n queryClient,\n // Shared layout props\n LinkComponent,\n activeRoute,\n basePath = \"/admin\",\n header,\n footer,\n sidebarProps,\n theme,\n setTheme,\n showThemeToggle,\n toasterProps,\n className,\n // Auth guard props\n enableAuthGuard,\n publicPaths = DEFAULT_PUBLIC_PATHS,\n requiredRole = \"admin\",\n authLoadingFallback,\n authUnauthorizedFallback,\n // i18n props\n useServerTranslations,\n translationsFallback,\n initialUiLocale,\n // Children\n children,\n}: AdminLayoutProviderProps<TApp>): React.ReactElement {\n const qc = queryClient ?? getDefaultQueryClient();\n\n // Normalize admin input - accepts both AdminBuilder and Admin instance\n const admin = Admin.normalize(adminInput);\n\n // Determine if auth guard should be enabled\n // Default: enabled if authClient is provided\n const shouldUseAuthGuard = enableAuthGuard ?? authClient != null;\n\n // Check if current route is public\n const currentPath =\n activeRoute ??\n (typeof window !== \"undefined\" ? window.location.pathname : undefined);\n const isCurrentPathPublic = isPublicPath(currentPath, basePath, publicPaths);\n\n // Determine content based on path type:\n // - Public paths (login, setup, etc.): render children directly (no AdminLayout)\n // - Protected paths: render with AdminLayout + optional AuthGuard\n let innerContent: React.ReactNode;\n\n if (isCurrentPathPublic) {\n // Public paths render children directly without admin layout (sidebar/header)\n // Auth pages (login, setup) use their own AuthLayout component\n innerContent = children;\n } else {\n // Protected paths get the full admin layout\n const layoutContent = (\n <AdminLayout\n LinkComponent={LinkComponent}\n activeRoute={activeRoute}\n basePath={basePath}\n header={header}\n footer={footer}\n sidebarProps={sidebarProps}\n theme={theme}\n setTheme={setTheme}\n showThemeToggle={showThemeToggle}\n toasterProps={toasterProps}\n className={className}\n >\n {children}\n </AdminLayout>\n );\n\n // Optionally wrap with auth guard\n innerContent = shouldUseAuthGuard ? (\n <AuthGuard\n loginPath={`${basePath}/login`}\n requiredRole={requiredRole}\n loadingFallback={authLoadingFallback}\n unauthorizedFallback={authUnauthorizedFallback}\n >\n {layoutContent}\n </AuthGuard>\n ) : (\n layoutContent\n );\n }\n\n const content = (\n <AdminProvider\n admin={admin}\n client={client}\n authClient={authClient}\n useServerTranslations={useServerTranslations}\n translationsFallback={translationsFallback}\n initialUiLocale={initialUiLocale}\n >\n {innerContent}\n </AdminProvider>\n );\n\n // Always wrap with QueryClientProvider\n return <QueryClientProvider client={qc}>{content}</QueryClientProvider>;\n}\n\nexport default AdminLayoutProvider;\n"],"mappings":";;;;;;;;AAmMA,IAAIA;AAEJ,SAAS,wBAAqC;AAC5C,KAAI,CAAC,kBACH,qBAAoB,IAAIC,YAAiB,EACvC,gBAAgB,EACd,SAAS,EACP,WAAW,KAAK,KACjB,EACF,EACF,CAAC;AAEJ,QAAO;;;;;;AAOT,MAAM,uBAAuB;CAC3B;CACA;CACA;CACA;CACA;CACD;;;;AAKD,SAAS,aACP,aACA,UACA,aACS;AACT,KAAI,CAAC,YAAa,QAAO;CAGzB,MAAM,oBAAoB,YAAY,QAAQ,QAAQ,GAAG;CACzD,MAAM,iBAAiB,SAAS,QAAQ,QAAQ,GAAG;AAEnD,MAAK,MAAM,cAAc,aAAa;EAEpC,MAAM,iBAAiB,GAAG,iBAAiB,aAAa,QAAQ,QAAQ,GAAG;AAG3E,MACE,sBAAsB,kBACtB,kBAAkB,WAAW,GAAG,eAAe,GAAG,CAElD,QAAO;;AAIX,QAAO;;;;;;;;AAST,SAAgB,oBAAgD,EAC9D,OAAO,YACP,QACA,YACA,aAEA,eACA,aACA,WAAW,UACX,QACA,QACA,cACA,OACA,UACA,iBACA,cACA,WAEA,iBACA,cAAc,sBACd,eAAe,SACf,qBACA,0BAEA,uBACA,sBACA,iBAEA,YACqD;CACrD,MAAM,KAAK,eAAe,uBAAuB;CAGjD,MAAM,QAAQ,MAAM,UAAU,WAAW;CAIzC,MAAM,qBAAqB,mBAAmB,cAAc;CAM5D,MAAM,sBAAsB,aAF1B,gBACC,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW,SACR,UAAU,YAAY;CAK5E,IAAIC;AAEJ,KAAI,oBAGF,gBAAe;MACV;EAEL,MAAM,gBACJ,oBAAC;GACgB;GACF;GACH;GACF;GACA;GACM;GACP;GACG;GACO;GACH;GACH;GAEV;IACW;AAIhB,iBAAe,qBACb,oBAAC;GACC,WAAW,GAAG,SAAS;GACT;GACd,iBAAiB;GACjB,sBAAsB;aAErB;IACS,GAEZ;;AAkBJ,QAAO,oBAAC;EAAoB,QAAQ;YAblC,oBAAC;GACQ;GACC;GACI;GACW;GACD;GACL;aAEhB;IACa;GAIqD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { AdminToasterProps } from "../../components/ui/sonner.mjs";
|
|
2
|
+
import { NavigationGroup } from "../../runtime/routes.mjs";
|
|
3
|
+
import { AdminSidebarProps } from "./admin-sidebar.mjs";
|
|
4
|
+
import * as React$1 from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/client/views/layout/admin-layout.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Theme mode for the admin interface
|
|
10
|
+
*/
|
|
11
|
+
type AdminTheme = "light" | "dark" | "system";
|
|
12
|
+
/**
|
|
13
|
+
* Layout mode for content area width
|
|
14
|
+
* - default: max-w-6xl (forms, settings)
|
|
15
|
+
* - wide: max-w-7xl (tables, cards)
|
|
16
|
+
* - full: 100% with padding (kanban, calendar)
|
|
17
|
+
* - immersive: 100% no padding (puck editor)
|
|
18
|
+
*/
|
|
19
|
+
type LayoutMode = "default" | "wide" | "full" | "immersive";
|
|
20
|
+
/**
|
|
21
|
+
* Shared layout props that can be passed through AdminLayoutProvider
|
|
22
|
+
* or directly to AdminLayout.
|
|
23
|
+
*/
|
|
24
|
+
interface AdminLayoutSharedProps {
|
|
25
|
+
/**
|
|
26
|
+
* Link component (router-specific)
|
|
27
|
+
*/
|
|
28
|
+
LinkComponent: AdminSidebarProps["LinkComponent"];
|
|
29
|
+
/**
|
|
30
|
+
* Current active route
|
|
31
|
+
*/
|
|
32
|
+
activeRoute?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Base path for admin routes
|
|
35
|
+
* @default "/admin"
|
|
36
|
+
*/
|
|
37
|
+
basePath?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Header content
|
|
40
|
+
*/
|
|
41
|
+
header?: React$1.ReactNode;
|
|
42
|
+
/**
|
|
43
|
+
* Footer content
|
|
44
|
+
*/
|
|
45
|
+
footer?: React$1.ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* Additional sidebar props
|
|
48
|
+
*/
|
|
49
|
+
sidebarProps?: Partial<Omit<AdminSidebarProps, "navigation" | "LinkComponent">>;
|
|
50
|
+
/**
|
|
51
|
+
* Current theme.
|
|
52
|
+
* Pass from your app's theme context.
|
|
53
|
+
* @default "system"
|
|
54
|
+
*/
|
|
55
|
+
theme?: AdminTheme;
|
|
56
|
+
/**
|
|
57
|
+
* Callback to change theme.
|
|
58
|
+
* Connect to your app's theme context setTheme function.
|
|
59
|
+
*/
|
|
60
|
+
setTheme?: (theme: AdminTheme) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Show theme toggle button in the topbar
|
|
63
|
+
* @default true (when setTheme is provided)
|
|
64
|
+
*/
|
|
65
|
+
showThemeToggle?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Additional toaster props
|
|
68
|
+
*/
|
|
69
|
+
toasterProps?: Omit<AdminToasterProps, "theme">;
|
|
70
|
+
/**
|
|
71
|
+
* Custom layout className
|
|
72
|
+
*/
|
|
73
|
+
className?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Layout mode for content area width
|
|
76
|
+
* @default "default"
|
|
77
|
+
*/
|
|
78
|
+
layoutMode?: LayoutMode;
|
|
79
|
+
}
|
|
80
|
+
interface AdminLayoutProps extends AdminLayoutSharedProps {
|
|
81
|
+
/**
|
|
82
|
+
* Navigation groups for sidebar.
|
|
83
|
+
* If not provided, reads from AdminProvider context.
|
|
84
|
+
*/
|
|
85
|
+
navigation?: NavigationGroup[];
|
|
86
|
+
/**
|
|
87
|
+
* Brand name for sidebar.
|
|
88
|
+
* If not provided, reads from AdminProvider context.
|
|
89
|
+
*/
|
|
90
|
+
brandName?: string;
|
|
91
|
+
/**
|
|
92
|
+
* Whether sidebar is collapsed
|
|
93
|
+
*/
|
|
94
|
+
sidebarCollapsed?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Main content to render
|
|
97
|
+
*/
|
|
98
|
+
children: React$1.ReactNode;
|
|
99
|
+
/**
|
|
100
|
+
* Navigation function (for search/quick actions)
|
|
101
|
+
*/
|
|
102
|
+
navigate?: (path: string) => void;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* AdminLayout Component
|
|
106
|
+
*
|
|
107
|
+
* When used inside AdminProvider, navigation and brandName are automatically
|
|
108
|
+
* read from context if not provided as props.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```tsx
|
|
112
|
+
* // With AdminProvider (automatic)
|
|
113
|
+
* <AdminProvider admin={admin} client={client}>
|
|
114
|
+
* <AdminLayout LinkComponent={Link} activeRoute="/admin/posts">
|
|
115
|
+
* <Outlet />
|
|
116
|
+
* </AdminLayout>
|
|
117
|
+
* </AdminProvider>
|
|
118
|
+
*
|
|
119
|
+
* // Without AdminProvider (manual)
|
|
120
|
+
* <AdminLayout
|
|
121
|
+
* navigation={buildNavigation(admin)}
|
|
122
|
+
* LinkComponent={Link}
|
|
123
|
+
* activeRoute="/admin/posts"
|
|
124
|
+
* brandName="My CMS"
|
|
125
|
+
* >
|
|
126
|
+
* <Outlet />
|
|
127
|
+
* </AdminLayout>
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
declare function AdminLayout({
|
|
131
|
+
navigation: navigationProp,
|
|
132
|
+
LinkComponent,
|
|
133
|
+
activeRoute,
|
|
134
|
+
basePath,
|
|
135
|
+
brandName: brandNameProp,
|
|
136
|
+
sidebarCollapsed: sidebarCollapsedProp,
|
|
137
|
+
children,
|
|
138
|
+
className,
|
|
139
|
+
sidebarProps,
|
|
140
|
+
header,
|
|
141
|
+
footer,
|
|
142
|
+
navigate: navigateProp,
|
|
143
|
+
theme,
|
|
144
|
+
setTheme,
|
|
145
|
+
showThemeToggle,
|
|
146
|
+
toasterProps,
|
|
147
|
+
layoutMode
|
|
148
|
+
}: AdminLayoutProps): React$1.ReactElement;
|
|
149
|
+
//#endregion
|
|
150
|
+
export { AdminLayout, AdminLayoutProps, AdminLayoutSharedProps };
|
|
151
|
+
//# sourceMappingURL=admin-layout.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-layout.d.mts","names":[],"sources":["../../../../src/client/views/layout/admin-layout.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;AAuGsB,KAvEV,UAAA,GAuEU,OAAA,GAAA,MAAA,GAAA,QAAA;;;;AActB;;;;AAAgE,KA5EpD,UAAA,GA4EoD,SAAA,GAAA,MAAA,GAAA,MAAA,GAAA,WAAA;AAkGhE;;;;AAIE,UA5Ke,sBAAA,CA4Kf;EACW;;;EAGX,aAAA,EA5Ke,iBA4Kf,CAAA,eAAA,CAAA;EACA;;;EAGU,WAAA,CAAA,EAAA,MAAA;EACV;;;;EAIA,QAAA,CAAA,EAAA,MAAA;EACC;;;WAtKQ,OAAA,CAAM;;;;WAKN,OAAA,CAAM;;;;iBAKA,QACb,KAAK;;;;;;UAQC;;;;;qBAMW;;;;;;;;;iBAWJ,KAAK;;;;;;;;;eAWP;;UAGE,gBAAA,SAAyB;;;;;eAK3B;;;;;;;;;;;;;YAgBH,OAAA,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6EF,WAAA;cACF;;;;aAID;oBACO;;;;;;YAMR;;;;;;GAMT,mBAAmB,OAAA,CAAM"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.mjs";
|
|
2
|
+
import { useAdminStore } from "../../runtime/provider.mjs";
|
|
3
|
+
import { SidebarInset, SidebarProvider } from "../../components/ui/sidebar.mjs";
|
|
4
|
+
import { Toaster } from "../../components/ui/sonner.mjs";
|
|
5
|
+
import { BreadcrumbProvider, useCurrentBreadcrumbs } from "../../contexts/breadcrumb-context.mjs";
|
|
6
|
+
import { GlobalSearch } from "../common/global-search.mjs";
|
|
7
|
+
import { AdminSidebar } from "./admin-sidebar.mjs";
|
|
8
|
+
import { AdminTopbar } from "./admin-topbar.mjs";
|
|
9
|
+
import * as React$1 from "react";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
|
|
12
|
+
//#region src/client/views/layout/admin-layout.tsx
|
|
13
|
+
/**
|
|
14
|
+
* AdminLayout Component
|
|
15
|
+
*
|
|
16
|
+
* Complete admin layout with:
|
|
17
|
+
* - Sidebar navigation (using shadcn sidebar primitives)
|
|
18
|
+
* - Main content area
|
|
19
|
+
* - Optional header/footer
|
|
20
|
+
*
|
|
21
|
+
* Automatically reads from AdminProvider context when props are not provided.
|
|
22
|
+
*/
|
|
23
|
+
function useLayoutProps(props) {
|
|
24
|
+
const storeNavigation = useAdminStore((s) => s.navigation);
|
|
25
|
+
const storeBrandName = useAdminStore((s) => s.brandName);
|
|
26
|
+
const storeNavigate = useAdminStore((s) => s.navigate);
|
|
27
|
+
return {
|
|
28
|
+
navigation: props.navigation ?? storeNavigation,
|
|
29
|
+
brandName: props.brandName ?? storeBrandName,
|
|
30
|
+
navigate: props.navigate ?? storeNavigate
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Topbar wrapper that reads breadcrumbs from context
|
|
35
|
+
*/
|
|
36
|
+
function AdminTopbarWithBreadcrumbs(props) {
|
|
37
|
+
const breadcrumbs = useCurrentBreadcrumbs();
|
|
38
|
+
return /* @__PURE__ */ jsx(AdminTopbar, {
|
|
39
|
+
...props,
|
|
40
|
+
breadcrumbs
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* AdminLayout Component
|
|
45
|
+
*
|
|
46
|
+
* When used inside AdminProvider, navigation and brandName are automatically
|
|
47
|
+
* read from context if not provided as props.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* // With AdminProvider (automatic)
|
|
52
|
+
* <AdminProvider admin={admin} client={client}>
|
|
53
|
+
* <AdminLayout LinkComponent={Link} activeRoute="/admin/posts">
|
|
54
|
+
* <Outlet />
|
|
55
|
+
* </AdminLayout>
|
|
56
|
+
* </AdminProvider>
|
|
57
|
+
*
|
|
58
|
+
* // Without AdminProvider (manual)
|
|
59
|
+
* <AdminLayout
|
|
60
|
+
* navigation={buildNavigation(admin)}
|
|
61
|
+
* LinkComponent={Link}
|
|
62
|
+
* activeRoute="/admin/posts"
|
|
63
|
+
* brandName="My CMS"
|
|
64
|
+
* >
|
|
65
|
+
* <Outlet />
|
|
66
|
+
* </AdminLayout>
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
function AdminLayout({ navigation: navigationProp, LinkComponent, activeRoute, basePath = "/admin", brandName: brandNameProp, sidebarCollapsed: sidebarCollapsedProp = false, children, className, sidebarProps, header, footer, navigate: navigateProp, theme = "system", setTheme, showThemeToggle, toasterProps, layoutMode = "default" }) {
|
|
70
|
+
const shouldShowHeader = !!header;
|
|
71
|
+
const shouldShowFooter = !!footer;
|
|
72
|
+
const { navigation, brandName, navigate } = useLayoutProps({
|
|
73
|
+
navigation: navigationProp,
|
|
74
|
+
brandName: brandNameProp,
|
|
75
|
+
navigate: navigateProp
|
|
76
|
+
});
|
|
77
|
+
const [isSearchOpen, setIsSearchOpen] = React$1.useState(false);
|
|
78
|
+
React$1.useEffect(() => {
|
|
79
|
+
const down = (e) => {
|
|
80
|
+
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
setIsSearchOpen(true);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
document.addEventListener("keydown", down);
|
|
86
|
+
return () => document.removeEventListener("keydown", down);
|
|
87
|
+
}, []);
|
|
88
|
+
return /* @__PURE__ */ jsx(BreadcrumbProvider, { children: /* @__PURE__ */ jsxs("div", {
|
|
89
|
+
className: cn("min-h-screen bg-background bg-grid-quest", className),
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ jsx(GlobalSearch, {
|
|
92
|
+
isOpen: isSearchOpen,
|
|
93
|
+
onClose: () => setIsSearchOpen(false),
|
|
94
|
+
navigate,
|
|
95
|
+
basePath
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ jsxs(SidebarProvider, {
|
|
98
|
+
defaultOpen: !sidebarCollapsedProp,
|
|
99
|
+
className: "mx-auto max-w-[1920px] border-x border-border/40 h-svh overflow-hidden",
|
|
100
|
+
children: [/* @__PURE__ */ jsx(AdminSidebar, {
|
|
101
|
+
navigation: navigationProp,
|
|
102
|
+
LinkComponent,
|
|
103
|
+
activeRoute,
|
|
104
|
+
basePath,
|
|
105
|
+
brandName: brandNameProp,
|
|
106
|
+
...sidebarProps
|
|
107
|
+
}), /* @__PURE__ */ jsxs(SidebarInset, {
|
|
108
|
+
className: "flex h-svh flex-col",
|
|
109
|
+
children: [
|
|
110
|
+
/* @__PURE__ */ jsx(AdminTopbarWithBreadcrumbs, {
|
|
111
|
+
onSearchOpen: () => setIsSearchOpen(true),
|
|
112
|
+
theme,
|
|
113
|
+
setTheme,
|
|
114
|
+
showThemeToggle
|
|
115
|
+
}),
|
|
116
|
+
shouldShowHeader && header && /* @__PURE__ */ jsx("header", {
|
|
117
|
+
className: "border-b",
|
|
118
|
+
children: header
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ jsx("main", {
|
|
121
|
+
className: "flex-1 overflow-y-auto",
|
|
122
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
123
|
+
className: cn("mx-auto", layoutMode === "default" && "max-w-6xl p-5 md:p-8 lg:p-10", layoutMode === "wide" && "max-w-7xl p-5 md:p-8 lg:p-10", layoutMode === "full" && "max-w-full p-4 md:p-6", layoutMode === "immersive" && "max-w-full p-0"),
|
|
124
|
+
children
|
|
125
|
+
})
|
|
126
|
+
}),
|
|
127
|
+
shouldShowFooter && footer && /* @__PURE__ */ jsx("footer", {
|
|
128
|
+
className: "border-t",
|
|
129
|
+
children: footer
|
|
130
|
+
})
|
|
131
|
+
]
|
|
132
|
+
})]
|
|
133
|
+
}),
|
|
134
|
+
/* @__PURE__ */ jsx(Toaster, {
|
|
135
|
+
theme,
|
|
136
|
+
...toasterProps
|
|
137
|
+
})
|
|
138
|
+
]
|
|
139
|
+
}) });
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
//#endregion
|
|
143
|
+
export { AdminLayout };
|
|
144
|
+
//# sourceMappingURL=admin-layout.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-layout.mjs","names":["React"],"sources":["../../../../src/client/views/layout/admin-layout.tsx"],"sourcesContent":["/**\n * AdminLayout Component\n *\n * Complete admin layout with:\n * - Sidebar navigation (using shadcn sidebar primitives)\n * - Main content area\n * - Optional header/footer\n *\n * Automatically reads from AdminProvider context when props are not provided.\n */\n\nimport * as React from \"react\";\nimport { SidebarInset, SidebarProvider } from \"../../components/ui/sidebar\";\nimport { type AdminToasterProps, Toaster } from \"../../components/ui/sonner\";\nimport {\n BreadcrumbProvider,\n useCurrentBreadcrumbs,\n} from \"../../contexts/breadcrumb-context\";\nimport { cn } from \"../../lib/utils\";\nimport { useAdminStore } from \"../../runtime/provider\";\nimport type { NavigationGroup } from \"../../runtime/routes\";\nimport { GlobalSearch } from \"../common\";\nimport { AdminSidebar, type AdminSidebarProps } from \"./admin-sidebar\";\nimport { AdminTopbar } from \"./admin-topbar\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Theme mode for the admin interface\n */\nexport type AdminTheme = \"light\" | \"dark\" | \"system\";\n\n/**\n * Layout mode for content area width\n * - default: max-w-6xl (forms, settings)\n * - wide: max-w-7xl (tables, cards)\n * - full: 100% with padding (kanban, calendar)\n * - immersive: 100% no padding (puck editor)\n */\nexport type LayoutMode = \"default\" | \"wide\" | \"full\" | \"immersive\";\n\n/**\n * Shared layout props that can be passed through AdminLayoutProvider\n * or directly to AdminLayout.\n */\nexport interface AdminLayoutSharedProps {\n /**\n * Link component (router-specific)\n */\n LinkComponent: AdminSidebarProps[\"LinkComponent\"];\n\n /**\n * Current active route\n */\n activeRoute?: string;\n\n /**\n * Base path for admin routes\n * @default \"/admin\"\n */\n basePath?: string;\n\n /**\n * Header content\n */\n header?: React.ReactNode;\n\n /**\n * Footer content\n */\n footer?: React.ReactNode;\n\n /**\n * Additional sidebar props\n */\n sidebarProps?: Partial<\n Omit<AdminSidebarProps, \"navigation\" | \"LinkComponent\">\n >;\n\n /**\n * Current theme.\n * Pass from your app's theme context.\n * @default \"system\"\n */\n theme?: AdminTheme;\n\n /**\n * Callback to change theme.\n * Connect to your app's theme context setTheme function.\n */\n setTheme?: (theme: AdminTheme) => void;\n\n /**\n * Show theme toggle button in the topbar\n * @default true (when setTheme is provided)\n */\n showThemeToggle?: boolean;\n\n /**\n * Additional toaster props\n */\n toasterProps?: Omit<AdminToasterProps, \"theme\">;\n\n /**\n * Custom layout className\n */\n className?: string;\n\n /**\n * Layout mode for content area width\n * @default \"default\"\n */\n layoutMode?: LayoutMode;\n}\n\nexport interface AdminLayoutProps extends AdminLayoutSharedProps {\n /**\n * Navigation groups for sidebar.\n * If not provided, reads from AdminProvider context.\n */\n navigation?: NavigationGroup[];\n\n /**\n * Brand name for sidebar.\n * If not provided, reads from AdminProvider context.\n */\n brandName?: string;\n\n /**\n * Whether sidebar is collapsed\n */\n sidebarCollapsed?: boolean;\n\n /**\n * Main content to render\n */\n children: React.ReactNode;\n\n /**\n * Navigation function (for search/quick actions)\n */\n navigate?: (path: string) => void;\n}\n\n// ============================================================================\n// Internal Hook - Resolve props from store\n// ============================================================================\n\nfunction useLayoutProps(props: {\n navigation?: NavigationGroup[];\n brandName?: string;\n navigate?: (path: string) => void;\n}): {\n navigation: NavigationGroup[];\n brandName: string;\n navigate: (path: string) => void;\n} {\n // Subscribe to store values reactively (for HMR support)\n const storeNavigation = useAdminStore((s) => s.navigation);\n const storeBrandName = useAdminStore((s) => s.brandName);\n const storeNavigate = useAdminStore((s) => s.navigate);\n\n return {\n navigation: props.navigation ?? storeNavigation,\n brandName: props.brandName ?? storeBrandName,\n navigate: props.navigate ?? storeNavigate,\n };\n}\n\n// ============================================================================\n// Internal Components\n// ============================================================================\n\n/**\n * Topbar wrapper that reads breadcrumbs from context\n */\nfunction AdminTopbarWithBreadcrumbs(\n props: Omit<React.ComponentProps<typeof AdminTopbar>, \"breadcrumbs\">,\n) {\n const breadcrumbs = useCurrentBreadcrumbs();\n return <AdminTopbar {...props} breadcrumbs={breadcrumbs} />;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * AdminLayout Component\n *\n * When used inside AdminProvider, navigation and brandName are automatically\n * read from context if not provided as props.\n *\n * @example\n * ```tsx\n * // With AdminProvider (automatic)\n * <AdminProvider admin={admin} client={client}>\n * <AdminLayout LinkComponent={Link} activeRoute=\"/admin/posts\">\n * <Outlet />\n * </AdminLayout>\n * </AdminProvider>\n *\n * // Without AdminProvider (manual)\n * <AdminLayout\n * navigation={buildNavigation(admin)}\n * LinkComponent={Link}\n * activeRoute=\"/admin/posts\"\n * brandName=\"My CMS\"\n * >\n * <Outlet />\n * </AdminLayout>\n * ```\n */\nexport function AdminLayout({\n navigation: navigationProp,\n LinkComponent,\n activeRoute,\n basePath = \"/admin\",\n brandName: brandNameProp,\n sidebarCollapsed: sidebarCollapsedProp = false,\n children,\n className,\n sidebarProps,\n header,\n footer,\n navigate: navigateProp,\n theme = \"system\",\n setTheme,\n showThemeToggle,\n toasterProps,\n layoutMode = \"default\",\n}: AdminLayoutProps): React.ReactElement {\n // Infer show flags from content\n const shouldShowHeader = !!header;\n const shouldShowFooter = !!footer;\n // Resolve navigation and brandName from props or store\n const { navigation, brandName, navigate } = useLayoutProps({\n navigation: navigationProp,\n brandName: brandNameProp,\n navigate: navigateProp,\n });\n\n const [isSearchOpen, setIsSearchOpen] = React.useState(false);\n\n // Keyboard shortcuts for search\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setIsSearchOpen(true);\n }\n };\n document.addEventListener(\"keydown\", down);\n return () => document.removeEventListener(\"keydown\", down);\n }, []);\n\n return (\n <BreadcrumbProvider>\n <div\n className={cn(\"min-h-screen bg-background bg-grid-quest\", className)}\n >\n {/* <div className=\"fixed inset-0 bg-grid-quest pointer-events-none z-10\" /> */}\n <GlobalSearch\n isOpen={isSearchOpen}\n onClose={() => setIsSearchOpen(false)}\n navigate={navigate}\n basePath={basePath}\n />\n\n {/* Max-width container for ultrawide monitors - centered with subtle side borders */}\n <SidebarProvider\n defaultOpen={!sidebarCollapsedProp}\n className=\"mx-auto max-w-[1920px] border-x border-border/40 h-svh overflow-hidden\"\n >\n {/* Sidebar */}\n <AdminSidebar\n navigation={navigationProp}\n LinkComponent={LinkComponent}\n activeRoute={activeRoute}\n basePath={basePath}\n brandName={brandNameProp}\n {...sidebarProps}\n />\n\n {/* Content Area */}\n <SidebarInset className=\"flex h-svh flex-col\">\n <AdminTopbarWithBreadcrumbs\n onSearchOpen={() => setIsSearchOpen(true)}\n theme={theme}\n setTheme={setTheme}\n showThemeToggle={showThemeToggle}\n />\n\n {/* Header (optional) */}\n {shouldShowHeader && header && (\n <header className=\"border-b\">{header}</header>\n )}\n\n <main className=\"flex-1 overflow-y-auto\">\n <div\n className={cn(\n \"mx-auto\",\n layoutMode === \"default\" && \"max-w-6xl p-5 md:p-8 lg:p-10\",\n layoutMode === \"wide\" && \"max-w-7xl p-5 md:p-8 lg:p-10\",\n layoutMode === \"full\" && \"max-w-full p-4 md:p-6\",\n layoutMode === \"immersive\" && \"max-w-full p-0\",\n )}\n >\n {children}\n </div>\n </main>\n\n {/* Footer (optional) */}\n {shouldShowFooter && footer && (\n <footer className=\"border-t\">{footer}</footer>\n )}\n </SidebarInset>\n </SidebarProvider>\n\n {/* Toast notifications */}\n <Toaster theme={theme} {...toasterProps} />\n </div>\n </BreadcrumbProvider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsJA,SAAS,eAAe,OAQtB;CAEA,MAAM,kBAAkB,eAAe,MAAM,EAAE,WAAW;CAC1D,MAAM,iBAAiB,eAAe,MAAM,EAAE,UAAU;CACxD,MAAM,gBAAgB,eAAe,MAAM,EAAE,SAAS;AAEtD,QAAO;EACL,YAAY,MAAM,cAAc;EAChC,WAAW,MAAM,aAAa;EAC9B,UAAU,MAAM,YAAY;EAC7B;;;;;AAUH,SAAS,2BACP,OACA;CACA,MAAM,cAAc,uBAAuB;AAC3C,QAAO,oBAAC;EAAY,GAAI;EAAoB;GAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiC7D,SAAgB,YAAY,EAC1B,YAAY,gBACZ,eACA,aACA,WAAW,UACX,WAAW,eACX,kBAAkB,uBAAuB,OACzC,UACA,WACA,cACA,QACA,QACA,UAAU,cACV,QAAQ,UACR,UACA,iBACA,cACA,aAAa,aAC0B;CAEvC,MAAM,mBAAmB,CAAC,CAAC;CAC3B,MAAM,mBAAmB,CAAC,CAAC;CAE3B,MAAM,EAAE,YAAY,WAAW,aAAa,eAAe;EACzD,YAAY;EACZ,WAAW;EACX,UAAU;EACX,CAAC;CAEF,MAAM,CAAC,cAAc,mBAAmBA,QAAM,SAAS,MAAM;AAG7D,SAAM,gBAAgB;EACpB,MAAM,QAAQ,MAAqB;AACjC,OAAI,EAAE,QAAQ,QAAQ,EAAE,WAAW,EAAE,UAAU;AAC7C,MAAE,gBAAgB;AAClB,oBAAgB,KAAK;;;AAGzB,WAAS,iBAAiB,WAAW,KAAK;AAC1C,eAAa,SAAS,oBAAoB,WAAW,KAAK;IACzD,EAAE,CAAC;AAEN,QACE,oBAAC,gCACC,qBAAC;EACC,WAAW,GAAG,4CAA4C,UAAU;;GAGpE,oBAAC;IACC,QAAQ;IACR,eAAe,gBAAgB,MAAM;IAC3B;IACA;KACV;GAGF,qBAAC;IACC,aAAa,CAAC;IACd,WAAU;eAGV,oBAAC;KACC,YAAY;KACG;KACF;KACH;KACV,WAAW;KACX,GAAI;MACJ,EAGF,qBAAC;KAAa,WAAU;;MACtB,oBAAC;OACC,oBAAoB,gBAAgB,KAAK;OAClC;OACG;OACO;QACjB;MAGD,oBAAoB,UACnB,oBAAC;OAAO,WAAU;iBAAY;QAAgB;MAGhD,oBAAC;OAAK,WAAU;iBACd,oBAAC;QACC,WAAW,GACT,WACA,eAAe,aAAa,gCAC5B,eAAe,UAAU,gCACzB,eAAe,UAAU,yBACzB,eAAe,eAAe,iBAC/B;QAEA;SACG;QACD;MAGN,oBAAoB,UACnB,oBAAC;OAAO,WAAU;iBAAY;QAAgB;;MAEnC;KACC;GAGlB,oBAAC;IAAe;IAAO,GAAI;KAAgB;;GACvC,GACa"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Admin } from "../../builder/admin.mjs";
|
|
2
|
+
import "./admin-sidebar.mjs";
|
|
3
|
+
import { AdminProvider } from "../../runtime/provider.mjs";
|
|
4
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
5
|
+
import { QuestpieClient } from "questpie/client";
|
|
6
|
+
import "react";
|
|
7
|
+
import { Questpie } from "questpie";
|