@questpie/admin 1.1.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/README.md +256 -488
  2. package/dist/augmentation.d.mts +414 -0
  3. package/dist/client/blocks/block-renderer.d.mts +45 -0
  4. package/dist/client/blocks/block-renderer.mjs +105 -0
  5. package/dist/client/blocks/index.d.mts +2 -0
  6. package/dist/client/blocks/types.d.mts +68 -0
  7. package/dist/client/blocks/types.mjs +19 -0
  8. package/dist/client/builder/admin-types.d.mts +40 -0
  9. package/dist/client/builder/admin.d.mts +110 -0
  10. package/dist/client/builder/admin.mjs +151 -0
  11. package/dist/client/builder/field/field.d.mts +51 -0
  12. package/dist/client/builder/field/field.mjs +37 -0
  13. package/dist/client/builder/index.d.mts +31 -0
  14. package/dist/client/builder/page/page.d.mts +24 -0
  15. package/dist/client/builder/page/page.mjs +31 -0
  16. package/dist/client/builder/registry.d.mts +50 -0
  17. package/dist/client/builder/types/action-registry.mjs +276 -0
  18. package/dist/client/builder/types/action-types.d.mts +226 -0
  19. package/dist/client/builder/types/collection-types.mjs +10 -0
  20. package/dist/client/builder/types/common.d.mts +46 -0
  21. package/dist/client/builder/types/field-types.d.mts +592 -0
  22. package/dist/client/builder/types/field-types.mjs +18 -0
  23. package/dist/client/builder/types/ui-config.d.mts +158 -0
  24. package/dist/client/builder/types/widget-types.d.mts +562 -0
  25. package/dist/client/builder/validation.d.mts +33 -0
  26. package/dist/client/builder/validation.mjs +227 -0
  27. package/dist/client/builder/view/view.d.mts +49 -0
  28. package/dist/client/builder/view/view.mjs +27 -0
  29. package/dist/client/builder/widget/widget.d.mts +27 -0
  30. package/dist/client/builder/widget/widget.mjs +21 -0
  31. package/dist/client/components/actions/action-button.mjs +245 -0
  32. package/dist/client/components/actions/action-dialog.mjs +559 -0
  33. package/dist/client/components/actions/confirmation-dialog.mjs +201 -0
  34. package/dist/client/components/actions/header-actions.mjs +210 -0
  35. package/dist/client/components/admin-link.d.mts +66 -0
  36. package/dist/client/components/admin-link.mjs +171 -0
  37. package/dist/client/components/auth/auth-guard.d.mts +50 -0
  38. package/dist/client/components/auth/auth-guard.mjs +60 -0
  39. package/dist/client/components/auth/auth-loading.d.mts +35 -0
  40. package/dist/client/components/auth/auth-loading.mjs +55 -0
  41. package/dist/client/components/blocks/block-canvas.mjs +159 -0
  42. package/dist/client/components/blocks/block-editor-context.mjs +125 -0
  43. package/dist/client/components/blocks/block-editor-layout.mjs +199 -0
  44. package/dist/client/components/blocks/block-editor-provider.mjs +235 -0
  45. package/dist/client/components/blocks/block-fields-renderer.mjs +240 -0
  46. package/dist/client/components/blocks/block-insert-button.mjs +189 -0
  47. package/dist/client/components/blocks/block-item-menu.mjs +363 -0
  48. package/dist/client/components/blocks/block-item.mjs +434 -0
  49. package/dist/client/components/blocks/block-library-sidebar.mjs +285 -0
  50. package/dist/client/components/blocks/block-tree.mjs +103 -0
  51. package/dist/client/components/blocks/block-type-icon.mjs +95 -0
  52. package/dist/client/components/blocks/utils/tree-utils.mjs +185 -0
  53. package/dist/client/components/component-renderer.d.mts +114 -0
  54. package/dist/client/components/component-renderer.mjs +258 -0
  55. package/dist/client/components/error-boundary.mjs +144 -0
  56. package/dist/client/components/fields/array-field.mjs +506 -0
  57. package/dist/client/components/fields/asset-preview-field.mjs +159 -0
  58. package/dist/client/components/fields/blocks-field/blocks-field.mjs +209 -0
  59. package/dist/client/components/fields/boolean-field.mjs +77 -0
  60. package/dist/client/components/fields/date-field.mjs +76 -0
  61. package/dist/client/components/fields/datetime-field.mjs +74 -0
  62. package/dist/client/components/fields/email-field.mjs +67 -0
  63. package/dist/client/components/fields/field-utils.mjs +64 -0
  64. package/dist/client/components/fields/field-wrapper.mjs +124 -0
  65. package/dist/client/components/fields/json-field.mjs +461 -0
  66. package/dist/client/components/fields/locale-badge.mjs +25 -0
  67. package/dist/client/components/fields/number-field.mjs +73 -0
  68. package/dist/client/components/fields/object-array-field.mjs +707 -0
  69. package/dist/client/components/fields/object-field.mjs +686 -0
  70. package/dist/client/components/fields/relation/displays/cards-display.mjs +254 -0
  71. package/dist/client/components/fields/relation/displays/chips-display.mjs +173 -0
  72. package/dist/client/components/fields/relation/displays/grid-display.mjs +209 -0
  73. package/dist/client/components/fields/relation/displays/list-display.mjs +247 -0
  74. package/dist/client/components/fields/relation/displays/table-display.mjs +309 -0
  75. package/dist/client/components/fields/relation/displays/types.mjs +72 -0
  76. package/dist/client/components/fields/relation/relation-items-display.mjs +143 -0
  77. package/dist/client/components/fields/relation-field.mjs +161 -0
  78. package/dist/client/components/fields/relation-picker.mjs +296 -0
  79. package/dist/client/components/fields/relation-select.mjs +232 -0
  80. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +105 -0
  81. package/dist/client/components/fields/rich-text-editor/extensions.mjs +144 -0
  82. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +221 -0
  83. package/dist/client/components/fields/rich-text-editor/index.mjs +520 -0
  84. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +85 -0
  85. package/dist/client/components/fields/rich-text-editor/presets.mjs +123 -0
  86. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +188 -0
  87. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +433 -0
  88. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +541 -0
  89. package/dist/client/components/fields/rich-text-editor/types.mjs +30 -0
  90. package/dist/client/components/fields/rich-text-editor/utils.mjs +50 -0
  91. package/dist/client/components/fields/rich-text-field.mjs +64 -0
  92. package/dist/client/components/fields/select-field.mjs +88 -0
  93. package/dist/client/components/fields/text-field.mjs +72 -0
  94. package/dist/client/components/fields/textarea-field.mjs +71 -0
  95. package/dist/client/components/fields/time-field.mjs +67 -0
  96. package/dist/client/components/fields/upload-field.mjs +621 -0
  97. package/dist/client/components/filter-builder/columns-tab.mjs +325 -0
  98. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +456 -0
  99. package/dist/client/components/filter-builder/filters-tab.mjs +663 -0
  100. package/dist/client/components/filter-builder/saved-views-tab.mjs +278 -0
  101. package/dist/client/components/history-sidebar.mjs +496 -0
  102. package/dist/client/components/layout/field-layout-renderer.mjs +301 -0
  103. package/dist/client/components/locale-switcher.mjs +251 -0
  104. package/dist/client/components/media/media-grid.mjs +314 -0
  105. package/dist/client/components/media/media-picker-dialog.mjs +563 -0
  106. package/dist/client/components/preview/live-preview-mode.mjs +503 -0
  107. package/dist/client/components/preview/preview-pane.mjs +388 -0
  108. package/dist/client/components/primitives/asset-preview.mjs +771 -0
  109. package/dist/client/components/primitives/checkbox-input.mjs +59 -0
  110. package/dist/client/components/primitives/date-input.mjs +461 -0
  111. package/dist/client/components/primitives/dropzone.mjs +368 -0
  112. package/dist/client/components/primitives/number-input.mjs +117 -0
  113. package/dist/client/components/primitives/select-multi.mjs +590 -0
  114. package/dist/client/components/primitives/select-single.mjs +473 -0
  115. package/dist/client/components/primitives/text-input.mjs +45 -0
  116. package/dist/client/components/primitives/textarea-input.mjs +43 -0
  117. package/dist/client/components/primitives/time-input.mjs +145 -0
  118. package/dist/client/components/primitives/toggle-input.mjs +51 -0
  119. package/dist/client/components/primitives/types.mjs +12 -0
  120. package/dist/client/components/sheets/resource-sheet.mjs +86 -0
  121. package/dist/client/components/ui/accordion.mjs +169 -0
  122. package/dist/client/components/ui/alert.mjs +85 -0
  123. package/dist/client/components/ui/badge.mjs +76 -0
  124. package/dist/client/components/ui/button.mjs +84 -0
  125. package/dist/client/components/ui/card.mjs +206 -0
  126. package/dist/client/components/ui/checkbox.mjs +82 -0
  127. package/dist/client/components/ui/command.mjs +239 -0
  128. package/dist/client/components/ui/dialog.mjs +296 -0
  129. package/dist/client/components/ui/drawer.mjs +278 -0
  130. package/dist/client/components/ui/dropdown-menu.mjs +315 -0
  131. package/dist/client/components/ui/empty-state.mjs +99 -0
  132. package/dist/client/components/ui/field.mjs +354 -0
  133. package/dist/client/components/ui/input-group.mjs +201 -0
  134. package/dist/client/components/ui/input.mjs +46 -0
  135. package/dist/client/components/ui/kbd.mjs +53 -0
  136. package/dist/client/components/ui/label.mjs +45 -0
  137. package/dist/client/components/ui/popover.mjs +176 -0
  138. package/dist/client/components/ui/responsive-dialog.mjs +308 -0
  139. package/dist/client/components/ui/search-input.mjs +139 -0
  140. package/dist/client/components/ui/select.mjs +325 -0
  141. package/dist/client/components/ui/separator.mjs +47 -0
  142. package/dist/client/components/ui/sheet.mjs +280 -0
  143. package/dist/client/components/ui/sidebar.mjs +774 -0
  144. package/dist/client/components/ui/skeleton.mjs +40 -0
  145. package/dist/client/components/ui/sonner.d.mts +13 -0
  146. package/dist/client/components/ui/sonner.mjs +85 -0
  147. package/dist/client/components/ui/spinner.mjs +52 -0
  148. package/dist/client/components/ui/switch.mjs +58 -0
  149. package/dist/client/components/ui/table.mjs +276 -0
  150. package/dist/client/components/ui/tabs.mjs +160 -0
  151. package/dist/client/components/ui/textarea.mjs +40 -0
  152. package/dist/client/components/ui/toolbar.mjs +136 -0
  153. package/dist/client/components/ui/tooltip.mjs +146 -0
  154. package/dist/client/components/widgets/chart-widget.mjs +582 -0
  155. package/dist/client/components/widgets/progress-widget.mjs +200 -0
  156. package/dist/client/components/widgets/quick-actions-widget.mjs +209 -0
  157. package/dist/client/components/widgets/recent-items-widget.mjs +196 -0
  158. package/dist/client/components/widgets/stats-widget.mjs +261 -0
  159. package/dist/client/components/widgets/table-widget.mjs +273 -0
  160. package/dist/client/components/widgets/timeline-widget.mjs +279 -0
  161. package/dist/client/components/widgets/value-widget.mjs +312 -0
  162. package/dist/client/components/widgets/widget-skeletons.mjs +427 -0
  163. package/dist/client/contexts/breadcrumb-context.mjs +60 -0
  164. package/dist/client/contexts/focus-context.d.mts +87 -0
  165. package/dist/client/contexts/focus-context.mjs +250 -0
  166. package/dist/client/hooks/typed-hooks.d.mts +110 -0
  167. package/dist/client/hooks/typed-hooks.mjs +888 -0
  168. package/dist/client/hooks/use-action.mjs +329 -0
  169. package/dist/client/hooks/use-admin-config.mjs +69 -0
  170. package/dist/client/hooks/use-admin-preferences.mjs +171 -0
  171. package/dist/client/hooks/use-admin-routes.mjs +130 -0
  172. package/dist/client/hooks/use-audit-history.mjs +157 -0
  173. package/dist/client/hooks/use-auth.d.mts +97 -0
  174. package/dist/{use-auth-BoLmWtmU.mjs → client/hooks/use-auth.mjs} +9 -10
  175. package/dist/client/hooks/use-collection-fields.mjs +71 -0
  176. package/dist/client/hooks/use-collection-meta.mjs +153 -0
  177. package/dist/client/hooks/use-collection-schema.mjs +90 -0
  178. package/dist/client/hooks/use-collection-validation.mjs +88 -0
  179. package/dist/client/hooks/use-collection.d.mts +96 -0
  180. package/dist/client/hooks/use-collection.mjs +673 -0
  181. package/dist/client/hooks/use-current-user.d.mts +60 -0
  182. package/dist/client/hooks/use-current-user.mjs +79 -0
  183. package/dist/client/hooks/use-field-hooks.mjs +199 -0
  184. package/dist/client/hooks/use-field-options.d.mts +57 -0
  185. package/dist/client/hooks/use-field-options.mjs +269 -0
  186. package/dist/client/hooks/use-global-fields.mjs +58 -0
  187. package/dist/client/hooks/use-global-meta.mjs +105 -0
  188. package/dist/client/hooks/use-global-schema.mjs +53 -0
  189. package/dist/client/hooks/use-global.d.mts +51 -0
  190. package/dist/client/hooks/use-global.mjs +284 -0
  191. package/dist/client/hooks/use-locks.mjs +452 -0
  192. package/dist/client/hooks/use-media-query.d.mts +22 -0
  193. package/dist/client/hooks/use-media-query.mjs +81 -0
  194. package/dist/client/hooks/use-prefill-params.mjs +47 -0
  195. package/dist/client/hooks/use-questpie-query-options.mjs +50 -0
  196. package/dist/client/hooks/use-reactive-fields.d.mts +78 -0
  197. package/dist/client/hooks/use-reactive-fields.mjs +201 -0
  198. package/dist/client/hooks/use-realtime-highlight.mjs +158 -0
  199. package/dist/client/hooks/use-saved-views.mjs +140 -0
  200. package/dist/client/hooks/use-search-param-toggle.d.mts +12 -0
  201. package/dist/client/hooks/use-search-param-toggle.mjs +115 -0
  202. package/dist/client/hooks/use-search.mjs +258 -0
  203. package/dist/client/hooks/use-server-actions.mjs +191 -0
  204. package/dist/client/hooks/use-server-validation.mjs +291 -0
  205. package/dist/client/hooks/use-server-widget-data.d.mts +25 -0
  206. package/dist/client/hooks/use-server-widget-data.mjs +65 -0
  207. package/dist/client/hooks/use-setup-status.d.mts +38 -0
  208. package/dist/client/hooks/use-setup-status.mjs +62 -0
  209. package/dist/client/hooks/use-sidebar-search-param.d.mts +9 -0
  210. package/dist/client/hooks/use-sidebar-search-param.mjs +104 -0
  211. package/dist/client/hooks/use-transition-stage.mjs +125 -0
  212. package/dist/client/hooks/use-upload-collection.mjs +31 -0
  213. package/dist/client/hooks/use-upload.mjs +209 -0
  214. package/dist/client/hooks/use-validation-error-map.mjs +57 -0
  215. package/dist/client/hooks/use-view-state.mjs +479 -0
  216. package/dist/client/i18n/hooks.mjs +284 -0
  217. package/dist/client/i18n/intl-cache.mjs +64 -0
  218. package/dist/client/i18n/messages.mjs +6 -0
  219. package/dist/client/i18n/simple.d.mts +21 -0
  220. package/dist/client/i18n/simple.mjs +156 -0
  221. package/dist/client/i18n/types.d.mts +109 -0
  222. package/dist/client/lib/cookies.mjs +9 -0
  223. package/dist/client/lib/events.mjs +5 -0
  224. package/dist/client/lib/render-profiler.mjs +51 -0
  225. package/dist/client/lib/utils.mjs +23 -0
  226. package/dist/client/preview/block-scope-context.d.mts +73 -0
  227. package/dist/client/preview/block-scope-context.mjs +116 -0
  228. package/dist/client/preview/index.d.mts +5 -0
  229. package/dist/client/preview/preview-banner.d.mts +45 -0
  230. package/dist/client/preview/preview-banner.mjs +134 -0
  231. package/dist/client/preview/preview-field.d.mts +107 -0
  232. package/dist/client/preview/preview-field.mjs +227 -0
  233. package/dist/client/preview/types.d.mts +114 -0
  234. package/dist/client/preview/types.mjs +20 -0
  235. package/dist/client/preview/use-collection-preview.d.mts +70 -0
  236. package/dist/client/preview/use-collection-preview.mjs +163 -0
  237. package/dist/client/runtime/content-locales-provider.d.mts +1 -0
  238. package/dist/client/runtime/content-locales-provider.mjs +136 -0
  239. package/dist/client/runtime/index.d.mts +5 -0
  240. package/dist/client/runtime/index.mjs +6 -0
  241. package/dist/client/runtime/locale-scope.d.mts +2 -0
  242. package/dist/client/runtime/locale-scope.mjs +108 -0
  243. package/dist/client/runtime/provider.d.mts +203 -0
  244. package/dist/client/runtime/provider.mjs +393 -0
  245. package/dist/client/runtime/routes.d.mts +49 -0
  246. package/dist/client/runtime/routes.mjs +91 -0
  247. package/dist/client/runtime/translations-provider.mjs +242 -0
  248. package/dist/client/scope/index.d.mts +3 -0
  249. package/dist/client/scope/picker.d.mts +53 -0
  250. package/dist/client/scope/picker.mjs +395 -0
  251. package/dist/client/scope/provider.d.mts +103 -0
  252. package/dist/client/scope/provider.mjs +167 -0
  253. package/dist/client/scope/types.d.mts +111 -0
  254. package/dist/client/styles/index.css +344 -188
  255. package/dist/client/utils/auto-expand-fields.mjs +83 -0
  256. package/dist/client/utils/build-field-definitions-from-schema.mjs +259 -0
  257. package/dist/client/utils/dependency-tracker.mjs +61 -0
  258. package/dist/client/utils/detect-relations.mjs +45 -0
  259. package/dist/client/utils/locale-to-flag.d.mts +119 -0
  260. package/dist/client/utils/locale-to-flag.mjs +129 -0
  261. package/dist/client/utils/routes.mjs +195 -0
  262. package/dist/client/views/auth/accept-invite-form.d.mts +72 -0
  263. package/dist/client/views/auth/accept-invite-form.mjs +473 -0
  264. package/dist/client/views/auth/auth-layout.d.mts +43 -0
  265. package/dist/client/views/auth/auth-layout.mjs +116 -0
  266. package/dist/client/views/auth/forgot-password-form.d.mts +58 -0
  267. package/dist/client/views/auth/forgot-password-form.mjs +386 -0
  268. package/dist/client/views/auth/invite-form.mjs +497 -0
  269. package/dist/client/views/auth/login-form.d.mts +75 -0
  270. package/dist/client/views/auth/login-form.mjs +387 -0
  271. package/dist/client/views/auth/reset-password-form.d.mts +65 -0
  272. package/dist/client/views/auth/reset-password-form.mjs +515 -0
  273. package/dist/client/views/auth/setup-form.d.mts +60 -0
  274. package/dist/client/views/auth/setup-form.mjs +526 -0
  275. package/dist/client/views/collection/auto-form-fields.mjs +873 -0
  276. package/dist/client/views/collection/bulk-action-toolbar.mjs +480 -0
  277. package/dist/client/views/collection/cells/complex-cells.mjs +746 -0
  278. package/dist/client/views/collection/cells/primitive-cells.mjs +395 -0
  279. package/dist/client/views/collection/cells/relation-cells.mjs +260 -0
  280. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +509 -0
  281. package/dist/client/views/collection/cells/shared/cell-helpers.mjs +125 -0
  282. package/dist/client/views/collection/cells/shared/relation-chip.mjs +121 -0
  283. package/dist/client/views/collection/cells/upload-cells.mjs +28 -0
  284. package/dist/client/views/collection/columns/build-columns.mjs +195 -0
  285. package/dist/client/views/collection/columns/column-defaults.mjs +123 -0
  286. package/dist/client/views/collection/field-context.mjs +126 -0
  287. package/dist/client/views/collection/field-renderer.mjs +368 -0
  288. package/dist/client/views/collection/form-view.mjs +1566 -0
  289. package/dist/client/views/collection/table-view.mjs +832 -0
  290. package/dist/client/views/collection/view-skeletons.mjs +215 -0
  291. package/dist/client/views/common/global-search.mjs +700 -0
  292. package/dist/client/views/dashboard/dashboard-grid.mjs +881 -0
  293. package/dist/client/views/dashboard/dashboard-widget.mjs +265 -0
  294. package/dist/client/views/dashboard/widget-card.mjs +372 -0
  295. package/dist/client/views/globals/global-form-view.mjs +1306 -0
  296. package/dist/client/views/layout/admin-layout-provider.d.mts +137 -0
  297. package/dist/client/views/layout/admin-layout-provider.mjs +193 -0
  298. package/dist/client/views/layout/admin-layout.d.mts +133 -0
  299. package/dist/client/views/layout/admin-layout.mjs +302 -0
  300. package/dist/client/views/layout/admin-router.d.mts +93 -0
  301. package/dist/client/views/layout/admin-router.mjs +1254 -0
  302. package/dist/client/views/layout/admin-sidebar.d.mts +99 -0
  303. package/dist/client/views/layout/admin-sidebar.mjs +1379 -0
  304. package/dist/client/views/layout/admin-topbar.mjs +236 -0
  305. package/dist/client/views/pages/accept-invite-page.d.mts +66 -0
  306. package/dist/client/views/pages/accept-invite-page.mjs +349 -0
  307. package/dist/client/views/pages/dashboard-page.d.mts +43 -0
  308. package/dist/client/views/pages/dashboard-page.mjs +84 -0
  309. package/dist/client/views/pages/forgot-password-page.d.mts +56 -0
  310. package/dist/client/views/pages/forgot-password-page.mjs +152 -0
  311. package/dist/client/views/pages/invite-page.d.mts +70 -0
  312. package/dist/client/views/pages/invite-page.mjs +161 -0
  313. package/dist/client/views/pages/login-page.d.mts +69 -0
  314. package/dist/client/views/pages/login-page.mjs +193 -0
  315. package/dist/client/views/pages/reset-password-page.d.mts +63 -0
  316. package/dist/client/views/pages/reset-password-page.mjs +257 -0
  317. package/dist/client/views/pages/setup-page.d.mts +61 -0
  318. package/dist/client/views/pages/setup-page.mjs +156 -0
  319. package/dist/client-module.d.mts +3 -0
  320. package/dist/client-module.mjs +3 -0
  321. package/dist/client.d.mts +99 -3
  322. package/dist/client.mjs +52 -12
  323. package/dist/components/rich-text/index.d.mts +1 -0
  324. package/dist/components/rich-text/rich-text-renderer.d.mts +103 -0
  325. package/dist/components/rich-text/rich-text-renderer.mjs +237 -0
  326. package/dist/index.d.mts +59 -3
  327. package/dist/index.mjs +52 -12
  328. package/dist/plugin.d.mts +2 -0
  329. package/dist/plugin.mjs +3 -0
  330. package/dist/server/adapters/nextjs.d.mts +120 -0
  331. package/dist/server/adapters/nextjs.mjs +110 -0
  332. package/dist/server/adapters/tanstack.d.mts +132 -0
  333. package/dist/server/adapters/tanstack.mjs +89 -0
  334. package/dist/server/augmentation/actions.d.mts +279 -0
  335. package/dist/server/augmentation/common.d.mts +76 -0
  336. package/dist/server/augmentation/dashboard.d.mts +547 -0
  337. package/dist/server/augmentation/form-layout.d.mts +303 -0
  338. package/dist/server/augmentation/index.d.mts +44 -0
  339. package/dist/server/augmentation/index.mjs +10 -0
  340. package/dist/server/augmentation/sidebar.d.mts +181 -0
  341. package/dist/server/augmentation/views.d.mts +237 -0
  342. package/dist/server/augmentation.d.mts +7 -0
  343. package/dist/server/block/index.d.mts +4 -0
  344. package/dist/server/codegen/admin-client-template.mjs +93 -0
  345. package/dist/server/codegen/projection-validator.mjs +67 -0
  346. package/dist/server/fields/blocks.d.mts +71 -0
  347. package/dist/server/fields/blocks.mjs +151 -0
  348. package/dist/server/fields/index.d.mts +15 -0
  349. package/dist/server/fields/index.mjs +15 -0
  350. package/dist/server/fields/rich-text.d.mts +68 -0
  351. package/dist/server/fields/rich-text.mjs +147 -0
  352. package/dist/server/i18n/index.mjs +43 -0
  353. package/dist/server/i18n/messages/cs.mjs +461 -0
  354. package/dist/server/i18n/messages/de.mjs +461 -0
  355. package/dist/server/i18n/messages/en.mjs +707 -0
  356. package/dist/server/i18n/messages/es.mjs +461 -0
  357. package/dist/server/i18n/messages/fr.mjs +461 -0
  358. package/dist/server/i18n/messages/index.mjs +23 -0
  359. package/dist/server/i18n/messages/pl.mjs +461 -0
  360. package/dist/server/i18n/messages/pt.mjs +464 -0
  361. package/dist/server/i18n/messages/sk.mjs +689 -0
  362. package/dist/server/modules/admin/.generated/module.d.mts +52 -0
  363. package/dist/server/modules/admin/.generated/module.mjs +78 -0
  364. package/dist/server/modules/admin/.generated/registries.d.mts +22 -0
  365. package/dist/server/modules/admin/auth-helpers.d.mts +142 -0
  366. package/dist/server/modules/admin/auth-helpers.mjs +107 -0
  367. package/dist/server/modules/admin/block/block-builder.d.mts +383 -0
  368. package/dist/server/modules/admin/block/block-builder.mjs +315 -0
  369. package/dist/server/modules/admin/block/index.d.mts +3 -0
  370. package/dist/server/modules/admin/block/introspection.d.mts +89 -0
  371. package/dist/server/modules/admin/block/introspection.mjs +100 -0
  372. package/dist/server/modules/admin/block/prefetch.d.mts +78 -0
  373. package/dist/server/modules/admin/block/prefetch.mjs +241 -0
  374. package/dist/server/modules/admin/client/.generated/module.d.mts +94 -0
  375. package/dist/server/modules/admin/client/.generated/module.mjs +91 -0
  376. package/dist/server/modules/admin/client/components/badge.d.mts +1 -0
  377. package/dist/server/modules/admin/client/components/icon.d.mts +1 -0
  378. package/dist/server/modules/admin/client/fields/array.d.mts +6 -0
  379. package/dist/server/modules/admin/client/fields/array.mjs +12 -0
  380. package/dist/server/modules/admin/client/fields/assetPreview.d.mts +6 -0
  381. package/dist/server/modules/admin/client/fields/assetPreview.mjs +18 -0
  382. package/dist/server/modules/admin/client/fields/blocks.d.mts +6 -0
  383. package/dist/server/modules/admin/client/fields/blocks.mjs +12 -0
  384. package/dist/server/modules/admin/client/fields/boolean.d.mts +6 -0
  385. package/dist/server/modules/admin/client/fields/boolean.mjs +12 -0
  386. package/dist/server/modules/admin/client/fields/date.d.mts +6 -0
  387. package/dist/server/modules/admin/client/fields/date.mjs +12 -0
  388. package/dist/server/modules/admin/client/fields/datetime.d.mts +6 -0
  389. package/dist/server/modules/admin/client/fields/datetime.mjs +12 -0
  390. package/dist/server/modules/admin/client/fields/email.d.mts +6 -0
  391. package/dist/server/modules/admin/client/fields/email.mjs +12 -0
  392. package/dist/server/modules/admin/client/fields/json.d.mts +6 -0
  393. package/dist/server/modules/admin/client/fields/json.mjs +11 -0
  394. package/dist/server/modules/admin/client/fields/number.d.mts +6 -0
  395. package/dist/server/modules/admin/client/fields/number.mjs +12 -0
  396. package/dist/server/modules/admin/client/fields/object.d.mts +6 -0
  397. package/dist/server/modules/admin/client/fields/object.mjs +12 -0
  398. package/dist/server/modules/admin/client/fields/relation.d.mts +6 -0
  399. package/dist/server/modules/admin/client/fields/relation.mjs +12 -0
  400. package/dist/server/modules/admin/client/fields/richText.d.mts +6 -0
  401. package/dist/server/modules/admin/client/fields/richText.mjs +11 -0
  402. package/dist/server/modules/admin/client/fields/select.d.mts +6 -0
  403. package/dist/server/modules/admin/client/fields/select.mjs +12 -0
  404. package/dist/server/modules/admin/client/fields/text.d.mts +6 -0
  405. package/dist/server/modules/admin/client/fields/text.mjs +12 -0
  406. package/dist/server/modules/admin/client/fields/textarea.d.mts +6 -0
  407. package/dist/server/modules/admin/client/fields/textarea.mjs +12 -0
  408. package/dist/server/modules/admin/client/fields/time.d.mts +6 -0
  409. package/dist/server/modules/admin/client/fields/time.mjs +12 -0
  410. package/dist/server/modules/admin/client/fields/upload.d.mts +6 -0
  411. package/dist/server/modules/admin/client/fields/upload.mjs +12 -0
  412. package/dist/server/modules/admin/client/fields/url.d.mts +6 -0
  413. package/dist/server/modules/admin/client/fields/url.mjs +12 -0
  414. package/dist/server/modules/admin/client/index.d.mts +1 -0
  415. package/dist/server/modules/admin/client/pages/dashboard.d.mts +6 -0
  416. package/dist/server/modules/admin/client/pages/dashboard.mjs +11 -0
  417. package/dist/server/modules/admin/client/pages/forgotPassword.d.mts +6 -0
  418. package/dist/server/modules/admin/client/pages/forgotPassword.mjs +11 -0
  419. package/dist/server/modules/admin/client/pages/login.d.mts +6 -0
  420. package/dist/server/modules/admin/client/pages/login.mjs +11 -0
  421. package/dist/server/modules/admin/client/pages/resetPassword.d.mts +6 -0
  422. package/dist/server/modules/admin/client/pages/resetPassword.mjs +11 -0
  423. package/dist/server/modules/admin/client/pages/setup.d.mts +6 -0
  424. package/dist/server/modules/admin/client/pages/setup.mjs +11 -0
  425. package/dist/server/modules/admin/client/views/collection-form.mjs +10 -0
  426. package/dist/server/modules/admin/client/views/collection-table.mjs +10 -0
  427. package/dist/server/modules/admin/client/views/global-form.mjs +10 -0
  428. package/dist/server/modules/admin/client/widgets/chart.d.mts +6 -0
  429. package/dist/server/modules/admin/client/widgets/chart.mjs +7 -0
  430. package/dist/server/modules/admin/client/widgets/progress.d.mts +6 -0
  431. package/dist/server/modules/admin/client/widgets/progress.mjs +7 -0
  432. package/dist/server/modules/admin/client/widgets/quickActions.d.mts +6 -0
  433. package/dist/server/modules/admin/client/widgets/quickActions.mjs +7 -0
  434. package/dist/server/modules/admin/client/widgets/recentItems.d.mts +6 -0
  435. package/dist/server/modules/admin/client/widgets/recentItems.mjs +7 -0
  436. package/dist/server/modules/admin/client/widgets/stats.d.mts +6 -0
  437. package/dist/server/modules/admin/client/widgets/stats.mjs +7 -0
  438. package/dist/server/modules/admin/client/widgets/table.d.mts +6 -0
  439. package/dist/server/modules/admin/client/widgets/table.mjs +7 -0
  440. package/dist/server/modules/admin/client/widgets/timeline.d.mts +6 -0
  441. package/dist/server/modules/admin/client/widgets/timeline.mjs +7 -0
  442. package/dist/server/modules/admin/client/widgets/value.d.mts +6 -0
  443. package/dist/server/modules/admin/client/widgets/value.mjs +7 -0
  444. package/dist/server/modules/admin/collections/account.d.mts +77 -0
  445. package/dist/server/modules/admin/collections/account.mjs +23 -0
  446. package/dist/server/modules/admin/collections/admin-locks.d.mts +90 -0
  447. package/dist/server/modules/admin/collections/admin-locks.mjs +16 -0
  448. package/dist/server/modules/admin/collections/admin-preferences.d.mts +69 -0
  449. package/dist/server/modules/admin/collections/admin-preferences.mjs +16 -0
  450. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +83 -0
  451. package/dist/server/modules/admin/collections/admin-saved-views.mjs +16 -0
  452. package/dist/server/modules/admin/collections/apikey.d.mts +99 -0
  453. package/dist/server/modules/admin/collections/apikey.mjs +15 -0
  454. package/dist/server/modules/admin/collections/assets.d.mts +72 -0
  455. package/dist/server/modules/admin/collections/assets.mjs +71 -0
  456. package/dist/server/modules/admin/collections/session.d.mts +69 -0
  457. package/dist/server/modules/admin/collections/session.mjs +15 -0
  458. package/dist/server/modules/admin/collections/user.d.mts +85 -0
  459. package/dist/server/modules/admin/collections/user.mjs +204 -0
  460. package/dist/server/modules/admin/collections/verification.d.mts +63 -0
  461. package/dist/server/modules/admin/collections/verification.mjs +15 -0
  462. package/dist/server/modules/admin/components/badge.d.mts +10 -0
  463. package/dist/server/modules/admin/components/badge.mjs +10 -0
  464. package/dist/server/modules/admin/components/icon.d.mts +9 -0
  465. package/dist/server/modules/admin/components/icon.mjs +11 -0
  466. package/dist/server/modules/admin/config/admin.mjs +34 -0
  467. package/dist/server/modules/admin/dto/admin-config.dto.mjs +102 -0
  468. package/dist/server/modules/admin/factories.mjs +172 -0
  469. package/dist/server/modules/admin/index.d.mts +1093 -0
  470. package/dist/server/modules/admin/index.mjs +26 -0
  471. package/dist/server/modules/admin/modules.mjs +11 -0
  472. package/dist/server/modules/admin/plugin.mjs +13 -0
  473. package/dist/server/modules/admin/routes/admin-config.d.mts +28 -0
  474. package/dist/server/modules/admin/routes/admin-config.mjs +552 -0
  475. package/dist/server/modules/admin/routes/execute-action.d.mts +92 -0
  476. package/dist/server/modules/admin/routes/execute-action.mjs +433 -0
  477. package/dist/server/modules/admin/routes/locales.d.mts +18 -0
  478. package/dist/server/modules/admin/routes/locales.mjs +69 -0
  479. package/dist/server/modules/admin/routes/preview.d.mts +80 -0
  480. package/dist/server/modules/admin/routes/preview.mjs +230 -0
  481. package/dist/server/modules/admin/routes/reactive.d.mts +74 -0
  482. package/dist/server/modules/admin/routes/reactive.mjs +350 -0
  483. package/dist/server/modules/admin/routes/route-helpers.d.mts +23 -0
  484. package/dist/server/modules/admin/routes/route-helpers.mjs +76 -0
  485. package/dist/server/modules/admin/routes/setup.d.mts +63 -0
  486. package/dist/server/modules/admin/routes/setup.mjs +114 -0
  487. package/dist/server/modules/admin/routes/translations.d.mts +26 -0
  488. package/dist/server/modules/admin/routes/translations.mjs +114 -0
  489. package/dist/server/modules/admin/routes/widget-data.d.mts +32 -0
  490. package/dist/server/modules/admin/routes/widget-data.mjs +62 -0
  491. package/dist/server/modules/admin/views/form.d.mts +8 -0
  492. package/dist/server/modules/admin/views/form.mjs +7 -0
  493. package/dist/server/modules/admin/views/global-form.d.mts +8 -0
  494. package/dist/server/modules/admin/views/global-form.mjs +7 -0
  495. package/dist/server/modules/admin/views/table.d.mts +8 -0
  496. package/dist/server/modules/admin/views/table.mjs +7 -0
  497. package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +37 -0
  498. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +55 -0
  499. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +99 -0
  500. package/dist/server/modules/admin-preferences/collections/saved-views.mjs +38 -0
  501. package/dist/server/modules/audit/.generated/module.d.mts +60 -0
  502. package/dist/server/modules/audit/.generated/module.mjs +30 -0
  503. package/dist/server/modules/audit/collections/audit-log.d.mts +214 -0
  504. package/dist/server/modules/audit/collections/audit-log.mjs +107 -0
  505. package/dist/server/modules/audit/config/admin.mjs +21 -0
  506. package/dist/server/modules/audit/config/app.mjs +262 -0
  507. package/dist/server/modules/audit/index.d.mts +2 -0
  508. package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +13 -0
  509. package/dist/server/modules/audit/jobs/audit-cleanup.mjs +28 -0
  510. package/dist/server/plugin.d.mts +26 -0
  511. package/dist/server/plugin.mjs +385 -0
  512. package/dist/server/proxy-factories.d.mts +85 -0
  513. package/dist/server/proxy-factories.mjs +302 -0
  514. package/dist/server/registry-helpers.d.mts +83 -0
  515. package/dist/server/registry-helpers.mjs +104 -0
  516. package/dist/server.d.mts +33 -250
  517. package/dist/server.mjs +22 -832
  518. package/dist/shared/preview-utils.d.mts +53 -0
  519. package/dist/{preview-utils-BKQ9-TMa.mjs → shared/preview-utils.mjs} +2 -3
  520. package/dist/{saved-views.types-BMsz5mCy.d.mts → shared/types/saved-views.types.d.mts} +7 -2
  521. package/dist/shared.d.mts +3 -57
  522. package/dist/shared.mjs +1 -1
  523. package/package.json +56 -51
  524. package/skills/questpie-admin/SKILL.md +397 -0
  525. package/skills/questpie-admin/blocks/SKILL.md +305 -0
  526. package/skills/questpie-admin/custom-ui/SKILL.md +307 -0
  527. package/skills/questpie-admin/views/SKILL.md +442 -0
  528. package/dist/auth-layout-M8K8_q5R.mjs +0 -181
  529. package/dist/auth-layout-M8K8_q5R.mjs.map +0 -1
  530. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs +0 -273
  531. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs.map +0 -1
  532. package/dist/card-BKHjBQfw.mjs +0 -58
  533. package/dist/card-BKHjBQfw.mjs.map +0 -1
  534. package/dist/client-D1DqawtP.d.mts +0 -13403
  535. package/dist/client-D1DqawtP.d.mts.map +0 -1
  536. package/dist/client-njX1rZmi.mjs +0 -22612
  537. package/dist/client-njX1rZmi.mjs.map +0 -1
  538. package/dist/content-locales-provider-BXvuIgfg.mjs +0 -1650
  539. package/dist/content-locales-provider-BXvuIgfg.mjs.map +0 -1
  540. package/dist/dashboard-page-B4PGEdc2.mjs +0 -2500
  541. package/dist/dashboard-page-B4PGEdc2.mjs.map +0 -1
  542. package/dist/dashboard-page-mCY0pgZv.mjs +0 -3
  543. package/dist/dropzone-Do3awXKd.mjs +0 -634
  544. package/dist/dropzone-Do3awXKd.mjs.map +0 -1
  545. package/dist/forgot-password-page-Bcp-An4Y.mjs +0 -221
  546. package/dist/forgot-password-page-Bcp-An4Y.mjs.map +0 -1
  547. package/dist/forgot-password-page-CEwsdLwn.mjs +0 -3
  548. package/dist/index-B4H3amCD.d.mts +0 -2753
  549. package/dist/index-B4H3amCD.d.mts.map +0 -1
  550. package/dist/login-page-BUnpCbCa.mjs +0 -3
  551. package/dist/login-page-CP4gA-dl.mjs +0 -298
  552. package/dist/login-page-CP4gA-dl.mjs.map +0 -1
  553. package/dist/preview-utils-BKQ9-TMa.mjs.map +0 -1
  554. package/dist/reset-password-page-BqfDmLxA.mjs +0 -281
  555. package/dist/reset-password-page-BqfDmLxA.mjs.map +0 -1
  556. package/dist/reset-password-page-CufHz3h3.mjs +0 -3
  557. package/dist/runtime-6VZM878K.mjs +0 -69
  558. package/dist/runtime-6VZM878K.mjs.map +0 -1
  559. package/dist/saved-views.types-BMsz5mCy.d.mts.map +0 -1
  560. package/dist/server.d.mts.map +0 -1
  561. package/dist/server.mjs.map +0 -1
  562. package/dist/setup-page-BNNzt_Z6.mjs +0 -3
  563. package/dist/setup-page-YAP_fzqh.mjs +0 -264
  564. package/dist/setup-page-YAP_fzqh.mjs.map +0 -1
  565. package/dist/shared.d.mts.map +0 -1
  566. package/dist/use-auth-BoLmWtmU.mjs.map +0 -1
@@ -0,0 +1,89 @@
1
+ import { ComponentReference } from "../../../augmentation/common.mjs";
2
+ import { BlockCategoryConfig, FieldLayoutItem } from "../../../augmentation/form-layout.mjs";
3
+ import "../../../augmentation.mjs";
4
+ import { AnyBlockDefinition } from "./block-builder.mjs";
5
+ import { I18nText } from "questpie/shared";
6
+ import { FieldSchema } from "questpie";
7
+
8
+ //#region src/server/modules/admin/block/introspection.d.ts
9
+
10
+ /**
11
+ * Introspected block schema for admin consumption.
12
+ * All admin metadata comes from the .admin() configuration.
13
+ */
14
+ interface BlockSchema {
15
+ /** Block type name */
16
+ name: string;
17
+ /** Admin configuration */
18
+ admin?: {
19
+ /** Display label */
20
+ label?: I18nText;
21
+ /** Description */
22
+ description?: I18nText;
23
+ /** Icon reference */
24
+ icon?: ComponentReference;
25
+ /** Category for grouping in block picker */
26
+ category?: BlockCategoryConfig;
27
+ /** Order within category in block picker */
28
+ order?: number;
29
+ /** Hide from block picker */
30
+ hidden?: boolean;
31
+ };
32
+ /** Allow child blocks */
33
+ allowChildren?: boolean;
34
+ /** Maximum number of child blocks */
35
+ maxChildren?: number;
36
+ /** Has prefetch function */
37
+ hasPrefetch: boolean;
38
+ /** Field schemas - unified format using FieldSchema */
39
+ fields: Record<string, FieldSchema>;
40
+ /** Form layout for block fields (sections, tabs, grid) */
41
+ form?: {
42
+ fields: FieldLayoutItem[];
43
+ };
44
+ /** Validation schemas */
45
+ validation?: {
46
+ insert?: unknown;
47
+ update?: unknown;
48
+ };
49
+ }
50
+ /**
51
+ * Category info extracted from blocks for UI rendering.
52
+ */
53
+ interface CategoryInfo {
54
+ /** Category key (derived from label or auto-generated) */
55
+ key: string;
56
+ /** Category configuration */
57
+ config: BlockCategoryConfig;
58
+ /** Blocks in this category */
59
+ blocks: BlockSchema[];
60
+ }
61
+ /**
62
+ * Introspect a single block definition.
63
+ * Handles both server BlockBuilder definitions and client BlockDefinition objects
64
+ * that were converted via the `.blocks()` patch.
65
+ */
66
+ declare function introspectBlock(blockDef: AnyBlockDefinition): BlockSchema;
67
+ /**
68
+ * Introspect all registered blocks.
69
+ *
70
+ * @param blocks - Record of registered block definitions
71
+ * @returns Record of block schemas
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { introspectBlocks } from "@questpie/admin/server";
76
+ *
77
+ * // In an API route
78
+ * const blocks = introspectBlocks(app.state.blocks);
79
+ * return Response.json({ blocks });
80
+ * ```
81
+ */
82
+ declare function introspectBlocks(blocks: Record<string, AnyBlockDefinition> | undefined): Record<string, BlockSchema>;
83
+ /**
84
+ * Get blocks grouped by category with full category info.
85
+ * Useful for block picker UI.
86
+ */
87
+ declare function getBlocksByCategory(blocks: Record<string, BlockSchema>): CategoryInfo[];
88
+ //#endregion
89
+ export { BlockSchema, getBlocksByCategory, introspectBlock, introspectBlocks };
@@ -0,0 +1,100 @@
1
+ import { isI18nLocaleMap } from "questpie/shared";
2
+
3
+ //#region src/server/modules/admin/block/introspection.ts
4
+ /**
5
+ * Normalize a block entry to a BlockDefinition.
6
+ * App state may contain either built BlockDefinition objects (with getFieldMetadata)
7
+ * or raw BlockBuilder instances (with a .build() method). This normalizes both
8
+ * to a BlockDefinition by calling .build() on builders.
9
+ */
10
+ function normalizeBlockDef(blockDef) {
11
+ if (typeof blockDef?.build === "function" && !blockDef.getFieldMetadata) return blockDef.build();
12
+ return blockDef;
13
+ }
14
+ /**
15
+ * Introspect a single block definition.
16
+ * Handles both server BlockBuilder definitions and client BlockDefinition objects
17
+ * that were converted via the `.blocks()` patch.
18
+ */
19
+ function introspectBlock(blockDef) {
20
+ const resolved = normalizeBlockDef(blockDef);
21
+ const state = resolved.state;
22
+ return {
23
+ name: state.name ?? resolved.name,
24
+ admin: state.admin,
25
+ allowChildren: state.allowChildren,
26
+ maxChildren: state.maxChildren,
27
+ hasPrefetch: typeof state.prefetch === "function",
28
+ fields: resolved.getFieldMetadata(),
29
+ form: state.form
30
+ };
31
+ }
32
+ /**
33
+ * Introspect all registered blocks.
34
+ *
35
+ * @param blocks - Record of registered block definitions
36
+ * @returns Record of block schemas
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * import { introspectBlocks } from "@questpie/admin/server";
41
+ *
42
+ * // In an API route
43
+ * const blocks = introspectBlocks(app.state.blocks);
44
+ * return Response.json({ blocks });
45
+ * ```
46
+ */
47
+ function introspectBlocks(blocks) {
48
+ if (!blocks) return {};
49
+ const schemas = {};
50
+ for (const [name, blockDef] of Object.entries(blocks)) schemas[name] = introspectBlock(blockDef);
51
+ return schemas;
52
+ }
53
+ /**
54
+ * Generate a category key from category config.
55
+ * Uses English label as key, falling back to first available label.
56
+ */
57
+ function getCategoryKey(category) {
58
+ const { label } = category;
59
+ if (typeof label === "string") return label.toLowerCase().replace(/\s+/g, "-");
60
+ if (isI18nLocaleMap(label)) return (label.en ?? Object.values(label)[0] ?? "").toLowerCase().replace(/\s+/g, "-");
61
+ return label.key.toLowerCase().replace(/[.:]/g, "-");
62
+ }
63
+ /**
64
+ * Get blocks grouped by category with full category info.
65
+ * Useful for block picker UI.
66
+ */
67
+ function getBlocksByCategory(blocks) {
68
+ const categoryMap = /* @__PURE__ */ new Map();
69
+ const uncategorizedKey = "uncategorized";
70
+ const uncategorizedConfig = {
71
+ label: { en: "Uncategorized" },
72
+ order: 999
73
+ };
74
+ for (const block of Object.values(blocks)) {
75
+ if (block.admin?.hidden) continue;
76
+ const categoryConfig = block.admin?.category;
77
+ let key;
78
+ let config;
79
+ if (categoryConfig) {
80
+ key = getCategoryKey(categoryConfig);
81
+ config = categoryConfig;
82
+ } else {
83
+ key = uncategorizedKey;
84
+ config = uncategorizedConfig;
85
+ }
86
+ if (!categoryMap.has(key)) categoryMap.set(key, {
87
+ key,
88
+ config,
89
+ blocks: []
90
+ });
91
+ categoryMap.get(key).blocks.push(block);
92
+ }
93
+ const categories = Array.from(categoryMap.values());
94
+ categories.sort((a, b) => (a.config.order ?? 999) - (b.config.order ?? 999));
95
+ for (const category of categories) category.blocks.sort((a, b) => (a.admin?.order ?? 999) - (b.admin?.order ?? 999));
96
+ return categories;
97
+ }
98
+
99
+ //#endregion
100
+ export { getBlocksByCategory, introspectBlock, introspectBlocks };
@@ -0,0 +1,78 @@
1
+ import { BlocksDocument } from "../../../fields/blocks.mjs";
2
+ import { AnyBlockDefinition } from "./block-builder.mjs";
3
+
4
+ //#region src/server/modules/admin/block/prefetch.d.ts
5
+
6
+ /**
7
+ * Context for blocks prefetch processing.
8
+ * Use `typedApp<App>(ctx.app)` for typed access.
9
+ */
10
+ interface BlocksPrefetchContext {
11
+ /** app instance — use `typedApp<App>(ctx.app)` for typed access */
12
+ app: any;
13
+ /** Database client */
14
+ db: unknown;
15
+ /** Current locale */
16
+ locale?: string;
17
+ }
18
+ /**
19
+ * Process blocks data for a single blocks document.
20
+ *
21
+ * This function does two things:
22
+ * 1. **Expands declared fields** from `.prefetch({ with: [...] })` (batch-fetched)
23
+ * 2. **Executes prefetch functions/loaders** for blocks that have them
24
+ *
25
+ * The results are merged into `_data[blockId]`. Prefetch function / loader data
26
+ * takes precedence over expanded data on key conflicts.
27
+ *
28
+ * @param blocks - The blocks document to process
29
+ * @param blockDefinitions - Registered block definitions
30
+ * @param ctx - Prefetch context
31
+ * @returns The blocks document with `_data` populated
32
+ */
33
+ declare function processBlocksDocument(blocks: BlocksDocument | null | undefined, blockDefinitions: Record<string, AnyBlockDefinition>, ctx: BlocksPrefetchContext): Promise<BlocksDocument | null | undefined>;
34
+ /**
35
+ * Process blocks prefetch for a document.
36
+ * Finds all blocks fields in the document and processes them.
37
+ *
38
+ * @param doc - The document containing blocks fields
39
+ * @param fieldDefinitions - Field definitions to identify blocks fields
40
+ * @param blockDefinitions - Registered block definitions
41
+ * @param ctx - Prefetch context
42
+ * @returns The document with blocks prefetch data attached
43
+ */
44
+ declare function processDocumentBlocksPrefetch<T extends Record<string, unknown>>(doc: T, fieldDefinitions: Record<string, {
45
+ _state: {
46
+ customType?: string;
47
+ type: string;
48
+ };
49
+ }>, blockDefinitions: Record<string, AnyBlockDefinition>, ctx: BlocksPrefetchContext): Promise<T>;
50
+ /**
51
+ * Create an afterRead hook for processing blocks prefetch.
52
+ * This hook can be added to collections that have blocks fields.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * // collections/pages/index.ts
57
+ * import { collection } from "questpie";
58
+ * import { createBlocksPrefetchHook } from "@questpie/admin/server";
59
+ *
60
+ * export default collection("pages", {
61
+ * fields: ({ f }) => ({
62
+ * title: f.text({ required: true }),
63
+ * content: f.blocks({ allowedBlocks: ["hero", "text"] }),
64
+ * }),
65
+ * hooks: {
66
+ * afterRead: createBlocksPrefetchHook(),
67
+ * },
68
+ * });
69
+ * ```
70
+ */
71
+ declare function createBlocksPrefetchHook(): (ctx: {
72
+ data: Record<string, unknown>;
73
+ app: any;
74
+ db: unknown;
75
+ locale?: string;
76
+ }) => Promise<void>;
77
+ //#endregion
78
+ export { BlocksPrefetchContext, createBlocksPrefetchHook, processBlocksDocument, processDocumentBlocksPrefetch };
@@ -0,0 +1,241 @@
1
+ //#region src/server/modules/admin/block/prefetch.ts
2
+ /**
3
+ * Expand relation/upload fields declared in `prefetchWith`.
4
+ *
5
+ * Uses the same object syntax as `with` in find operations:
6
+ * ```ts
7
+ * { backgroundImage: true, author: { with: { avatar: true } } }
8
+ * ```
9
+ *
10
+ * Nested `with` is passed through to the collection's `find` call,
11
+ * reusing the existing relation resolution machinery.
12
+ *
13
+ * @internal
14
+ */
15
+ async function expandDeclaredFields(allNodes, values, blockDefinitions, ctx) {
16
+ const expansionsByCollection = /* @__PURE__ */ new Map();
17
+ for (const node of allNodes) {
18
+ const blockDef = blockDefinitions[node.type];
19
+ const prefetchWith = blockDef?.state.prefetchWith;
20
+ if (!prefetchWith || typeof prefetchWith !== "object") continue;
21
+ if (!blockDef?.state.fields) continue;
22
+ const blockValues = values[node.id] || {};
23
+ for (const [fieldName, fieldConfig] of Object.entries(prefetchWith)) {
24
+ if (!fieldConfig) continue;
25
+ const fieldDef = blockDef.state.fields[fieldName];
26
+ if (!fieldDef || typeof fieldDef !== "object") continue;
27
+ const metadata = "getMetadata" in fieldDef && typeof fieldDef.getMetadata === "function" ? fieldDef.getMetadata() : void 0;
28
+ if (!metadata) continue;
29
+ if (metadata.type !== "relation") continue;
30
+ const targetCollection = metadata.targetCollection;
31
+ if (!targetCollection || typeof targetCollection !== "string") continue;
32
+ const value = blockValues[fieldName];
33
+ if (!value) continue;
34
+ const stringIds = (Array.isArray(value) ? value : [value]).filter((id) => typeof id === "string" && id.length > 0);
35
+ if (stringIds.length === 0) continue;
36
+ const nestedWith = typeof fieldConfig === "object" && fieldConfig.with ? fieldConfig.with : void 0;
37
+ const groupKey = nestedWith ? `${targetCollection}:${JSON.stringify(nestedWith)}` : targetCollection;
38
+ if (!expansionsByCollection.has(groupKey)) expansionsByCollection.set(groupKey, {
39
+ ids: /* @__PURE__ */ new Set(),
40
+ targets: [],
41
+ nestedWith
42
+ });
43
+ const entry = expansionsByCollection.get(groupKey);
44
+ for (const id of stringIds) entry.ids.add(id);
45
+ entry.targets.push({
46
+ blockId: node.id,
47
+ fieldName,
48
+ isSingle: !Array.isArray(value),
49
+ nestedWith
50
+ });
51
+ }
52
+ }
53
+ if (expansionsByCollection.size === 0) return {};
54
+ const fetchedByGroup = /* @__PURE__ */ new Map();
55
+ const fetchPromises = [...expansionsByCollection.entries()].map(async ([groupKey, { ids, nestedWith }]) => {
56
+ const collection = groupKey.includes(":") ? groupKey.slice(0, groupKey.indexOf(":")) : groupKey;
57
+ try {
58
+ const collectionApi = ctx.app?.collections?.[collection];
59
+ if (!collectionApi?.find) {
60
+ console.warn(`[prefetch] Collection "${collection}" not found on app.collections, skipping`);
61
+ return;
62
+ }
63
+ const result = await collectionApi.find({
64
+ where: { id: { in: [...ids] } },
65
+ limit: ids.size,
66
+ ...nestedWith ? { with: nestedWith } : {}
67
+ });
68
+ const recordMap = /* @__PURE__ */ new Map();
69
+ for (const doc of result?.docs || []) if (doc && typeof doc === "object" && "id" in doc) recordMap.set(doc.id, doc);
70
+ fetchedByGroup.set(groupKey, recordMap);
71
+ } catch (error) {
72
+ console.error(`[prefetch] Failed to fetch from "${collection}":`, error);
73
+ }
74
+ });
75
+ await Promise.all(fetchPromises);
76
+ const expandedData = {};
77
+ for (const [groupKey, { targets }] of expansionsByCollection) {
78
+ const recordMap = fetchedByGroup.get(groupKey);
79
+ if (!recordMap) continue;
80
+ for (const { blockId, fieldName, isSingle } of targets) {
81
+ if (!expandedData[blockId]) expandedData[blockId] = {};
82
+ const blockVal = values[blockId]?.[fieldName];
83
+ if (isSingle) expandedData[blockId][fieldName] = recordMap.get(blockVal) ?? null;
84
+ else {
85
+ const ids = blockVal;
86
+ expandedData[blockId][fieldName] = ids.map((id) => recordMap.get(id)).filter(Boolean);
87
+ }
88
+ }
89
+ }
90
+ return expandedData;
91
+ }
92
+ /**
93
+ * Process blocks data for a single blocks document.
94
+ *
95
+ * This function does two things:
96
+ * 1. **Expands declared fields** from `.prefetch({ with: [...] })` (batch-fetched)
97
+ * 2. **Executes prefetch functions/loaders** for blocks that have them
98
+ *
99
+ * The results are merged into `_data[blockId]`. Prefetch function / loader data
100
+ * takes precedence over expanded data on key conflicts.
101
+ *
102
+ * @param blocks - The blocks document to process
103
+ * @param blockDefinitions - Registered block definitions
104
+ * @param ctx - Prefetch context
105
+ * @returns The blocks document with `_data` populated
106
+ */
107
+ async function processBlocksDocument(blocks, blockDefinitions, ctx) {
108
+ if (!blocks || !blocks._tree || !blocks._values) return blocks;
109
+ const allNodes = [];
110
+ const collectNodes = (nodes) => {
111
+ for (const node of nodes) {
112
+ allNodes.push(node);
113
+ if (node.children.length > 0) collectNodes(node.children);
114
+ }
115
+ };
116
+ collectNodes(blocks._tree);
117
+ const expandedData = await expandDeclaredFields(allNodes, blocks._values, blockDefinitions, ctx);
118
+ const prefetchedData = await executePrefetchFunctions(allNodes, blocks._values, blockDefinitions, ctx, expandedData);
119
+ const mergedData = {};
120
+ const allBlockIds = new Set([...Object.keys(expandedData), ...Object.keys(prefetchedData)]);
121
+ for (const blockId of allBlockIds) mergedData[blockId] = {
122
+ ...expandedData[blockId] || {},
123
+ ...prefetchedData[blockId] || {}
124
+ };
125
+ return {
126
+ ...blocks,
127
+ _data: mergedData
128
+ };
129
+ }
130
+ /**
131
+ * Execute prefetch functions and loaders for blocks.
132
+ *
133
+ * Handles two shapes:
134
+ * - Shape 1: `state.prefetch` — call with `{ values, ctx }`
135
+ * - Shape 3: `state._prefetchLoader` — call with `{ values, expanded, ctx }`
136
+ *
137
+ * Shape 2 (with-only) has no function to call — expansion is handled separately.
138
+ *
139
+ * @internal
140
+ */
141
+ async function executePrefetchFunctions(allNodes, values, blockDefinitions, ctx, expandedData) {
142
+ const prefetchedData = {};
143
+ const prefetchPromises = [];
144
+ for (const node of allNodes) {
145
+ const blockDef = blockDefinitions[node.type];
146
+ if (!blockDef) continue;
147
+ const blockValues = values[node.id] || {};
148
+ const prefetchCtx = {
149
+ blockId: node.id,
150
+ blockType: node.type,
151
+ ...ctx,
152
+ locale: ctx.locale
153
+ };
154
+ const loader = blockDef.state._prefetchLoader;
155
+ if (typeof loader === "function") {
156
+ const expanded = expandedData[node.id] || {};
157
+ prefetchPromises.push((async () => {
158
+ try {
159
+ const data = await loader({
160
+ values: blockValues,
161
+ expanded,
162
+ ctx: prefetchCtx
163
+ });
164
+ if (data && typeof data === "object") prefetchedData[node.id] = data;
165
+ } catch (error) {
166
+ console.error(`Block prefetch loader failed for ${node.type}:${node.id}:`, error);
167
+ prefetchedData[node.id] = { _error: "Prefetch failed" };
168
+ }
169
+ })());
170
+ } else if (blockDef.state.prefetch) prefetchPromises.push((async () => {
171
+ try {
172
+ const data = await blockDef.executePrefetch(blockValues, prefetchCtx);
173
+ prefetchedData[node.id] = data;
174
+ } catch (error) {
175
+ console.error(`Block prefetch failed for ${node.type}:${node.id}:`, error);
176
+ prefetchedData[node.id] = { _error: "Prefetch failed" };
177
+ }
178
+ })());
179
+ }
180
+ await Promise.all(prefetchPromises);
181
+ return prefetchedData;
182
+ }
183
+ /**
184
+ * Process blocks prefetch for a document.
185
+ * Finds all blocks fields in the document and processes them.
186
+ *
187
+ * @param doc - The document containing blocks fields
188
+ * @param fieldDefinitions - Field definitions to identify blocks fields
189
+ * @param blockDefinitions - Registered block definitions
190
+ * @param ctx - Prefetch context
191
+ * @returns The document with blocks prefetch data attached
192
+ */
193
+ async function processDocumentBlocksPrefetch(doc, fieldDefinitions, blockDefinitions, ctx) {
194
+ if (!doc || !blockDefinitions || Object.keys(blockDefinitions).length === 0) return doc;
195
+ const result = { ...doc };
196
+ for (const [fieldName, fieldDef] of Object.entries(fieldDefinitions)) if ((fieldDef?._state?.customType ?? fieldDef?._state?.type) === "blocks" && result[fieldName]) result[fieldName] = await processBlocksDocument(result[fieldName], blockDefinitions, ctx);
197
+ return result;
198
+ }
199
+ /**
200
+ * Create an afterRead hook for processing blocks prefetch.
201
+ * This hook can be added to collections that have blocks fields.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * // collections/pages/index.ts
206
+ * import { collection } from "questpie";
207
+ * import { createBlocksPrefetchHook } from "@questpie/admin/server";
208
+ *
209
+ * export default collection("pages", {
210
+ * fields: ({ f }) => ({
211
+ * title: f.text({ required: true }),
212
+ * content: f.blocks({ allowedBlocks: ["hero", "text"] }),
213
+ * }),
214
+ * hooks: {
215
+ * afterRead: createBlocksPrefetchHook(),
216
+ * },
217
+ * });
218
+ * ```
219
+ */
220
+ function createBlocksPrefetchHook() {
221
+ return async (ctx) => {
222
+ const blocks = ctx.app?.state?.blocks;
223
+ if (!blocks || Object.keys(blocks).length === 0) return;
224
+ for (const [key, value] of Object.entries(ctx.data)) if (isBlocksDocument(value)) ctx.data[key] = await processBlocksDocument(value, blocks, {
225
+ app: ctx.app,
226
+ db: ctx.db,
227
+ locale: ctx.locale
228
+ });
229
+ };
230
+ }
231
+ /**
232
+ * Check if a value is a blocks document.
233
+ */
234
+ function isBlocksDocument(value) {
235
+ if (!value || typeof value !== "object") return false;
236
+ const doc = value;
237
+ return Array.isArray(doc._tree) && typeof doc._values === "object" && doc._values !== null;
238
+ }
239
+
240
+ //#endregion
241
+ export { createBlocksPrefetchHook, processBlocksDocument, processDocumentBlocksPrefetch };
@@ -0,0 +1,94 @@
1
+ import { ViewDefinition } from "../../../../../client/builder/view/view.mjs";
2
+ import { Badge, IconifyIcon } from "../../../../../client/components/component-renderer.mjs";
3
+ import "../../../../../index.mjs";
4
+ import "../components/badge.mjs";
5
+ import "../components/icon.mjs";
6
+ import { _default } from "../fields/array.mjs";
7
+ import { _default as _default$1 } from "../fields/assetPreview.mjs";
8
+ import { _default as _default$2 } from "../fields/blocks.mjs";
9
+ import { _default as _default$3 } from "../fields/boolean.mjs";
10
+ import { _default as _default$4 } from "../fields/date.mjs";
11
+ import { _default as _default$5 } from "../fields/datetime.mjs";
12
+ import { _default as _default$6 } from "../fields/email.mjs";
13
+ import { _default as _default$7 } from "../fields/json.mjs";
14
+ import { _default as _default$8 } from "../fields/number.mjs";
15
+ import { _default as _default$9 } from "../fields/object.mjs";
16
+ import { _default as _default$10 } from "../fields/relation.mjs";
17
+ import { _default as _default$11 } from "../fields/richText.mjs";
18
+ import { _default as _default$12 } from "../fields/select.mjs";
19
+ import { _default as _default$13 } from "../fields/text.mjs";
20
+ import { _default as _default$14 } from "../fields/textarea.mjs";
21
+ import { _default as _default$15 } from "../fields/time.mjs";
22
+ import { _default as _default$16 } from "../fields/upload.mjs";
23
+ import { _default as _default$17 } from "../fields/url.mjs";
24
+ import { _default as _default$18 } from "../pages/dashboard.mjs";
25
+ import { _default as _default$19 } from "../pages/forgotPassword.mjs";
26
+ import { _default as _default$20 } from "../pages/login.mjs";
27
+ import { _default as _default$21 } from "../pages/resetPassword.mjs";
28
+ import { _default as _default$22 } from "../pages/setup.mjs";
29
+ import { _default as _default$23 } from "../widgets/chart.mjs";
30
+ import { _default as _default$24 } from "../widgets/progress.mjs";
31
+ import { _default as _default$25 } from "../widgets/quickActions.mjs";
32
+ import { _default as _default$26 } from "../widgets/recentItems.mjs";
33
+ import { _default as _default$27 } from "../widgets/stats.mjs";
34
+ import { _default as _default$28 } from "../widgets/table.mjs";
35
+ import { _default as _default$29 } from "../widgets/timeline.mjs";
36
+ import { _default as _default$30 } from "../widgets/value.mjs";
37
+
38
+ //#region src/server/modules/admin/client/.generated/module.d.ts
39
+ interface AdminComponents {
40
+ badge: typeof Badge;
41
+ icon: typeof IconifyIcon;
42
+ }
43
+ interface AdminFields {
44
+ array: typeof _default;
45
+ assetPreview: typeof _default$1;
46
+ blocks: typeof _default$2;
47
+ boolean: typeof _default$3;
48
+ date: typeof _default$4;
49
+ datetime: typeof _default$5;
50
+ email: typeof _default$6;
51
+ json: typeof _default$7;
52
+ number: typeof _default$8;
53
+ object: typeof _default$9;
54
+ relation: typeof _default$10;
55
+ richText: typeof _default$11;
56
+ select: typeof _default$12;
57
+ text: typeof _default$13;
58
+ textarea: typeof _default$14;
59
+ time: typeof _default$15;
60
+ upload: typeof _default$16;
61
+ url: typeof _default$17;
62
+ }
63
+ interface AdminPages {
64
+ dashboard: typeof _default$18;
65
+ forgotPassword: typeof _default$19;
66
+ login: typeof _default$20;
67
+ resetPassword: typeof _default$21;
68
+ setup: typeof _default$22;
69
+ }
70
+ interface AdminWidgets {
71
+ chart: typeof _default$23;
72
+ progress: typeof _default$24;
73
+ quickActions: typeof _default$25;
74
+ recentItems: typeof _default$26;
75
+ stats: typeof _default$27;
76
+ table: typeof _default$28;
77
+ timeline: typeof _default$29;
78
+ value: typeof _default$30;
79
+ }
80
+ declare const _module: {
81
+ name: "questpie-admin";
82
+ views: {
83
+ "collection-form": ViewDefinition<"collection-form", "form">;
84
+ "collection-table": ViewDefinition<"collection-table", "list">;
85
+ "global-form": ViewDefinition<"global-form", "form">;
86
+ };
87
+ components: AdminComponents;
88
+ fields: AdminFields;
89
+ pages: AdminPages;
90
+ widgets: AdminWidgets;
91
+ blocks: {};
92
+ };
93
+ //#endregion
94
+ export { _module };
@@ -0,0 +1,91 @@
1
+ import collection_form_default from "../views/collection-form.mjs";
2
+ import collection_table_default from "../views/collection-table.mjs";
3
+ import global_form_default from "../views/global-form.mjs";
4
+ import { Badge, IconifyIcon } from "../../../../../client/components/component-renderer.mjs";
5
+ import array_default from "../fields/array.mjs";
6
+ import assetPreview_default from "../fields/assetPreview.mjs";
7
+ import blocks_default from "../fields/blocks.mjs";
8
+ import boolean_default from "../fields/boolean.mjs";
9
+ import date_default from "../fields/date.mjs";
10
+ import datetime_default from "../fields/datetime.mjs";
11
+ import email_default from "../fields/email.mjs";
12
+ import json_default from "../fields/json.mjs";
13
+ import number_default from "../fields/number.mjs";
14
+ import object_default from "../fields/object.mjs";
15
+ import relation_default from "../fields/relation.mjs";
16
+ import richText_default from "../fields/richText.mjs";
17
+ import select_default from "../fields/select.mjs";
18
+ import text_default from "../fields/text.mjs";
19
+ import textarea_default from "../fields/textarea.mjs";
20
+ import time_default from "../fields/time.mjs";
21
+ import upload_default from "../fields/upload.mjs";
22
+ import url_default from "../fields/url.mjs";
23
+ import dashboard_default from "../pages/dashboard.mjs";
24
+ import forgotPassword_default from "../pages/forgotPassword.mjs";
25
+ import login_default from "../pages/login.mjs";
26
+ import resetPassword_default from "../pages/resetPassword.mjs";
27
+ import setup_default from "../pages/setup.mjs";
28
+ import chart_default from "../widgets/chart.mjs";
29
+ import progress_default from "../widgets/progress.mjs";
30
+ import quickActions_default from "../widgets/quickActions.mjs";
31
+ import recentItems_default from "../widgets/recentItems.mjs";
32
+ import stats_default from "../widgets/stats.mjs";
33
+ import table_default from "../widgets/table.mjs";
34
+ import timeline_default from "../widgets/timeline.mjs";
35
+ import value_default from "../widgets/value.mjs";
36
+
37
+ //#region src/server/modules/admin/client/.generated/module.ts
38
+ const _module = {
39
+ name: "questpie-admin",
40
+ views: {
41
+ [collection_form_default.name]: collection_form_default,
42
+ [collection_table_default.name]: collection_table_default,
43
+ [global_form_default.name]: global_form_default
44
+ },
45
+ components: {
46
+ badge: Badge,
47
+ icon: IconifyIcon
48
+ },
49
+ fields: {
50
+ array: array_default,
51
+ assetPreview: assetPreview_default,
52
+ blocks: blocks_default,
53
+ boolean: boolean_default,
54
+ date: date_default,
55
+ datetime: datetime_default,
56
+ email: email_default,
57
+ json: json_default,
58
+ number: number_default,
59
+ object: object_default,
60
+ relation: relation_default,
61
+ richText: richText_default,
62
+ select: select_default,
63
+ text: text_default,
64
+ textarea: textarea_default,
65
+ time: time_default,
66
+ upload: upload_default,
67
+ url: url_default
68
+ },
69
+ pages: {
70
+ dashboard: dashboard_default,
71
+ forgotPassword: forgotPassword_default,
72
+ login: login_default,
73
+ resetPassword: resetPassword_default,
74
+ setup: setup_default
75
+ },
76
+ widgets: {
77
+ chart: chart_default,
78
+ progress: progress_default,
79
+ quickActions: quickActions_default,
80
+ recentItems: recentItems_default,
81
+ stats: stats_default,
82
+ table: table_default,
83
+ timeline: timeline_default,
84
+ value: value_default
85
+ },
86
+ blocks: {}
87
+ };
88
+ var module_default = _module;
89
+
90
+ //#endregion
91
+ export { module_default as default };