@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,76 @@
1
+ //#region src/server/modules/admin/routes/route-helpers.ts
2
+ /**
3
+ * Get typed Questpie app instance from route handler context.
4
+ */
5
+ function getApp(ctx) {
6
+ return ctx.app;
7
+ }
8
+ /**
9
+ * Get session from route handler context.
10
+ * Returns undefined if no session exists.
11
+ */
12
+ function getSession(ctx) {
13
+ return ctx.session;
14
+ }
15
+ /**
16
+ * Get database instance from route handler context.
17
+ */
18
+ function getDb(ctx) {
19
+ return ctx.db;
20
+ }
21
+ /**
22
+ * Get current locale from route handler context.
23
+ */
24
+ function getLocale(ctx) {
25
+ return ctx.locale;
26
+ }
27
+ /**
28
+ * Get the full access context needed by hasReadAccess and similar functions.
29
+ */
30
+ function getAccessContext(ctx) {
31
+ return {
32
+ app: getApp(ctx),
33
+ session: getSession(ctx),
34
+ db: getDb(ctx),
35
+ locale: getLocale(ctx)
36
+ };
37
+ }
38
+ /**
39
+ * Get typed collection state.
40
+ */
41
+ function getCollectionState(collection) {
42
+ return collection.state;
43
+ }
44
+ /**
45
+ * Get typed global state.
46
+ */
47
+ function getGlobalState(global) {
48
+ return global.state;
49
+ }
50
+ /**
51
+ * Get typed app state from app instance.
52
+ */
53
+ function getAppState(app) {
54
+ return app.state || {};
55
+ }
56
+ /**
57
+ * Get admin config from app state.
58
+ */
59
+ function getAdminConfig(app) {
60
+ return getAppState(app).config?.admin || {};
61
+ }
62
+ /**
63
+ * Build a ReactiveServerContext from route handler context.
64
+ */
65
+ function buildServerContext(ctx) {
66
+ const session = getSession(ctx);
67
+ return {
68
+ db: getDb(ctx),
69
+ user: session?.user ?? null,
70
+ req: new Request("http://localhost"),
71
+ locale: getLocale(ctx) ?? "en"
72
+ };
73
+ }
74
+
75
+ //#endregion
76
+ export { buildServerContext, getAccessContext, getAdminConfig, getApp, getAppState, getCollectionState, getGlobalState, getSession };
@@ -0,0 +1,63 @@
1
+ import * as questpie114 from "questpie";
2
+
3
+ //#region src/server/modules/admin/routes/setup.d.ts
4
+
5
+ /**
6
+ * Setup Functions
7
+ *
8
+ * Built-in functions for bootstrapping the first admin user.
9
+ * Solves the chicken-and-egg problem where invitation-based systems
10
+ * need an existing admin to create the first invitation.
11
+ */
12
+ /**
13
+ * Check if setup is required (no users exist in the system).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = await client.routes.isSetupRequired({});
18
+ * if (result.required) {
19
+ * // Redirect to setup page
20
+ * }
21
+ * ```
22
+ */
23
+ declare const isSetupRequired: questpie114.JsonRouteDefinition<Record<string, never>, any>;
24
+ /**
25
+ * Create the first admin user in the system.
26
+ * This function only works when no users exist (setup mode).
27
+ *
28
+ * Security: Once any user exists, this function will refuse to create more users.
29
+ * This prevents unauthorized admin creation after initial setup.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const result = await client.routes.createFirstAdmin({
34
+ * email: "admin@example.com",
35
+ * password: "securepassword123",
36
+ * name: "Admin User",
37
+ * });
38
+ *
39
+ * if (result.success) {
40
+ * // Redirect to login page
41
+ * } else {
42
+ * console.error(result.error);
43
+ * }
44
+ * ```
45
+ */
46
+ declare const createFirstAdmin: questpie114.JsonRouteDefinition<{
47
+ email: string;
48
+ password: string;
49
+ name: string;
50
+ }, any>;
51
+ /**
52
+ * Bundle of setup-related functions.
53
+ */
54
+ declare const setupFunctions: {
55
+ readonly isSetupRequired: questpie114.JsonRouteDefinition<Record<string, never>, any>;
56
+ readonly createFirstAdmin: questpie114.JsonRouteDefinition<{
57
+ email: string;
58
+ password: string;
59
+ name: string;
60
+ }, any>;
61
+ };
62
+ //#endregion
63
+ export { createFirstAdmin, isSetupRequired, setupFunctions };
@@ -0,0 +1,114 @@
1
+ import { getApp } from "./route-helpers.mjs";
2
+ import { z } from "zod";
3
+ import { route } from "questpie";
4
+ import { eq, sql as sql$1 } from "drizzle-orm";
5
+
6
+ //#region src/server/modules/admin/routes/setup.ts
7
+ /**
8
+ * Setup Functions
9
+ *
10
+ * Built-in functions for bootstrapping the first admin user.
11
+ * Solves the chicken-and-egg problem where invitation-based systems
12
+ * need an existing admin to create the first invitation.
13
+ */
14
+ const isSetupRequiredSchema = z.object({});
15
+ const isSetupRequiredOutputSchema = z.object({ required: z.boolean() });
16
+ const createFirstAdminSchema = z.object({
17
+ email: z.string().email("Invalid email address"),
18
+ password: z.string().min(8, "Password must be at least 8 characters"),
19
+ name: z.string().min(2, "Name must be at least 2 characters")
20
+ });
21
+ const createFirstAdminOutputSchema = z.object({
22
+ success: z.boolean(),
23
+ user: z.object({
24
+ id: z.string(),
25
+ email: z.string(),
26
+ name: z.string()
27
+ }).optional(),
28
+ error: z.string().optional()
29
+ });
30
+ /**
31
+ * Check if setup is required (no users exist in the system).
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const result = await client.routes.isSetupRequired({});
36
+ * if (result.required) {
37
+ * // Redirect to setup page
38
+ * }
39
+ * ```
40
+ */
41
+ const isSetupRequired = route().post().schema(isSetupRequiredSchema).outputSchema(isSetupRequiredOutputSchema).handler(async (ctx) => {
42
+ const app = getApp(ctx);
43
+ const userCollection = app.getCollectionConfig("user");
44
+ return { required: (await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count === 0 };
45
+ });
46
+ /**
47
+ * Create the first admin user in the system.
48
+ * This function only works when no users exist (setup mode).
49
+ *
50
+ * Security: Once any user exists, this function will refuse to create more users.
51
+ * This prevents unauthorized admin creation after initial setup.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const result = await client.routes.createFirstAdmin({
56
+ * email: "admin@example.com",
57
+ * password: "securepassword123",
58
+ * name: "Admin User",
59
+ * });
60
+ *
61
+ * if (result.success) {
62
+ * // Redirect to login page
63
+ * } else {
64
+ * console.error(result.error);
65
+ * }
66
+ * ```
67
+ */
68
+ const createFirstAdmin = route().post().schema(createFirstAdminSchema).outputSchema(createFirstAdminOutputSchema).handler(async (ctx) => {
69
+ const app = getApp(ctx);
70
+ const input = ctx.input;
71
+ const userCollection = app.getCollectionConfig("user");
72
+ if ((await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count > 0) return {
73
+ success: false,
74
+ error: "Setup already completed - users exist in the system"
75
+ };
76
+ try {
77
+ const signUpResult = await app.auth.api.signUpEmail({ body: {
78
+ email: input.email,
79
+ password: input.password,
80
+ name: input.name
81
+ } });
82
+ if (!signUpResult.user) return {
83
+ success: false,
84
+ error: "Failed to create user account"
85
+ };
86
+ await app.db.update(userCollection.table).set({
87
+ role: "admin",
88
+ emailVerified: true
89
+ }).where(eq(userCollection.table.id, signUpResult.user.id));
90
+ return {
91
+ success: true,
92
+ user: {
93
+ id: signUpResult.user.id,
94
+ email: signUpResult.user.email,
95
+ name: signUpResult.user.name
96
+ }
97
+ };
98
+ } catch (error) {
99
+ return {
100
+ success: false,
101
+ error: error instanceof Error ? error.message : "An unexpected error occurred"
102
+ };
103
+ }
104
+ });
105
+ /**
106
+ * Bundle of setup-related functions.
107
+ */
108
+ const setupFunctions = {
109
+ isSetupRequired,
110
+ createFirstAdmin
111
+ };
112
+
113
+ //#endregion
114
+ export { createFirstAdmin, isSetupRequired, setupFunctions };
@@ -0,0 +1,26 @@
1
+ import * as questpie310 from "questpie";
2
+
3
+ //#region src/server/modules/admin/routes/translations.d.ts
4
+
5
+ /**
6
+ * Admin Translations Functions
7
+ *
8
+ * Functions for retrieving admin UI translations from the server.
9
+ * The client fetches translations for its current UI locale.
10
+ *
11
+ * This enables:
12
+ * - Single source of truth for all translations on server
13
+ * - Dynamic locale switching without bundling all languages
14
+ * - Custom messages via config translations
15
+ */
16
+ /**
17
+ * Bundle of translation-related functions.
18
+ */
19
+ declare const translationFunctions: {
20
+ readonly getAdminTranslations: questpie310.JsonRouteDefinition<{
21
+ locale: string;
22
+ }, any>;
23
+ readonly getAdminLocales: questpie310.JsonRouteDefinition<Record<string, never> | undefined, any>;
24
+ };
25
+ //#endregion
26
+ export { translationFunctions };
@@ -0,0 +1,114 @@
1
+ import { getAdminMessagesForLocale, getSupportedAdminLocales } from "../../../i18n/index.mjs";
2
+ import { z } from "zod";
3
+ import { route } from "questpie";
4
+
5
+ //#region src/server/modules/admin/routes/translations.ts
6
+ /**
7
+ * Admin Translations Functions
8
+ *
9
+ * Functions for retrieving admin UI translations from the server.
10
+ * The client fetches translations for its current UI locale.
11
+ *
12
+ * This enables:
13
+ * - Single source of truth for all translations on server
14
+ * - Dynamic locale switching without bundling all languages
15
+ * - Custom messages via config translations
16
+ */
17
+ /**
18
+ * Helper to get typed app from handler context.
19
+ */
20
+ function getApp(ctx) {
21
+ return ctx.app;
22
+ }
23
+ /**
24
+ * Get admin locale config from app state.
25
+ */
26
+ function getAdminLocaleConfig(app) {
27
+ return app.state?.adminLocale;
28
+ }
29
+ const getAdminTranslationsSchema = z.object({ locale: z.string() });
30
+ const messageValueSchema = z.union([z.string(), z.object({
31
+ one: z.string(),
32
+ other: z.string()
33
+ })]);
34
+ const getAdminTranslationsOutputSchema = z.object({
35
+ locale: z.string(),
36
+ messages: z.record(z.string(), messageValueSchema),
37
+ fallbackLocale: z.string()
38
+ });
39
+ const getAdminLocalesSchema = z.object({}).optional();
40
+ const getAdminLocalesOutputSchema = z.object({
41
+ locales: z.array(z.string()),
42
+ defaultLocale: z.string()
43
+ });
44
+ /**
45
+ * Get admin UI translations for a specific locale.
46
+ *
47
+ * Merges:
48
+ * 1. Built-in admin messages for the locale
49
+ * 2. Custom messages from config translations
50
+ *
51
+ * Custom messages override built-in messages with the same key.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * // Client fetches translations
56
+ * const { messages, locale, fallbackLocale } = await client.routes.getAdminTranslations({
57
+ * locale: "sk",
58
+ * });
59
+ *
60
+ * // messages contains all admin UI strings in Slovak
61
+ * ```
62
+ */
63
+ const getAdminTranslations = route().post().schema(getAdminTranslationsSchema).outputSchema(getAdminTranslationsOutputSchema).handler(async (ctx) => {
64
+ const app = getApp(ctx);
65
+ const requestedLocale = ctx.input.locale;
66
+ const adminLocaleConfig = getAdminLocaleConfig(app);
67
+ const supportedLocales = adminLocaleConfig?.locales ?? getSupportedAdminLocales();
68
+ const defaultLocale = adminLocaleConfig?.defaultLocale ?? "en";
69
+ const locale = supportedLocales.includes(requestedLocale) ? requestedLocale : defaultLocale;
70
+ const builtInMessages = getAdminMessagesForLocale(locale);
71
+ const fallbackMessages = locale !== defaultLocale ? getAdminMessagesForLocale(defaultLocale) : {};
72
+ const customFallbackMessages = locale !== defaultLocale ? app.config.translations?.messages?.[defaultLocale] ?? {} : {};
73
+ const customMessages = app.config.translations?.messages?.[locale] ?? {};
74
+ return {
75
+ locale,
76
+ messages: {
77
+ ...fallbackMessages,
78
+ ...customFallbackMessages,
79
+ ...builtInMessages,
80
+ ...customMessages
81
+ },
82
+ fallbackLocale: defaultLocale
83
+ };
84
+ });
85
+ /**
86
+ * Get available admin UI locales.
87
+ *
88
+ * Returns locales configured via .adminLocale() or defaults to
89
+ * all locales that have built-in message files.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const { locales, defaultLocale } = await client.routes.getAdminLocales({});
94
+ * // locales: ["en", "sk"]
95
+ * // defaultLocale: "en"
96
+ * ```
97
+ */
98
+ const getAdminLocales = route().post().schema(getAdminLocalesSchema).outputSchema(getAdminLocalesOutputSchema).handler(async (ctx) => {
99
+ const adminLocaleConfig = getAdminLocaleConfig(getApp(ctx));
100
+ return {
101
+ locales: adminLocaleConfig?.locales ?? getSupportedAdminLocales(),
102
+ defaultLocale: adminLocaleConfig?.defaultLocale ?? "en"
103
+ };
104
+ });
105
+ /**
106
+ * Bundle of translation-related functions.
107
+ */
108
+ const translationFunctions = {
109
+ getAdminTranslations,
110
+ getAdminLocales
111
+ };
112
+
113
+ //#endregion
114
+ export { translationFunctions };
@@ -0,0 +1,32 @@
1
+ import * as questpie118 from "questpie";
2
+
3
+ //#region src/server/modules/admin/routes/widget-data.d.ts
4
+
5
+ /**
6
+ * Widget Data Functions
7
+ *
8
+ * Provides server-side data fetching for widgets that declare a loader.
9
+ * Called by the client when a widget has `hasLoader: true`.
10
+ */
11
+ /**
12
+ * Fetch data for a server-side widget by its ID.
13
+ *
14
+ * Looks up the widget in the dashboard config, evaluates its access rule,
15
+ * and executes its loader with server context.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Client usage (via useServerWidgetData hook)
20
+ * const data = await client.routes.fetchWidgetData({ widgetId: "my-widget" });
21
+ * ```
22
+ */
23
+ declare const fetchWidgetData: questpie118.JsonRouteDefinition<{
24
+ widgetId: string;
25
+ }, any>;
26
+ declare const widgetDataFunctions: {
27
+ readonly fetchWidgetData: questpie118.JsonRouteDefinition<{
28
+ widgetId: string;
29
+ }, any>;
30
+ };
31
+ //#endregion
32
+ export { fetchWidgetData, widgetDataFunctions };
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ import { ApiError, route, tryGetContext } from "questpie";
3
+
4
+ //#region src/server/modules/admin/routes/widget-data.ts
5
+ /**
6
+ * Widget Data Functions
7
+ *
8
+ * Provides server-side data fetching for widgets that declare a loader.
9
+ * Called by the client when a widget has `hasLoader: true`.
10
+ */
11
+ /**
12
+ * Find a widget by ID in the dashboard tree (searches raw server config
13
+ * which still has loader attached).
14
+ */
15
+ function findWidgetById(items, id) {
16
+ for (const item of items) {
17
+ const rec = item;
18
+ if (item.type === "section") {
19
+ const found = findWidgetById(rec.items || [], id);
20
+ if (found) return found;
21
+ } else if (item.type === "tabs") for (const tab of rec.tabs || []) {
22
+ const found = findWidgetById(tab.items || [], id);
23
+ if (found) return found;
24
+ }
25
+ else if (rec.id === id) return rec;
26
+ }
27
+ return null;
28
+ }
29
+ const fetchWidgetDataSchema = z.object({ widgetId: z.string() });
30
+ /**
31
+ * Fetch data for a server-side widget by its ID.
32
+ *
33
+ * Looks up the widget in the dashboard config, evaluates its access rule,
34
+ * and executes its loader with server context.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * // Client usage (via useServerWidgetData hook)
39
+ * const data = await client.routes.fetchWidgetData({ widgetId: "my-widget" });
40
+ * ```
41
+ */
42
+ const fetchWidgetData = route().post().schema(fetchWidgetDataSchema).outputSchema(z.unknown()).handler(async (ctx) => {
43
+ const appState = (tryGetContext()?.app)?.state || {};
44
+ const dashboard = appState.config?.admin?.dashboard ?? appState.dashboard;
45
+ if (!dashboard?.items) throw ApiError.internal("No dashboard configured");
46
+ const widget = findWidgetById(dashboard.items, ctx.input.widgetId);
47
+ if (!widget) throw ApiError.notFound("Widget", ctx.input.widgetId);
48
+ if (!widget.loader) throw ApiError.badRequest(`Widget "${ctx.input.widgetId}" has no loader`);
49
+ const widgetCtx = ctx;
50
+ if (widget.access !== void 0) {
51
+ if ((typeof widget.access === "function" ? await widget.access(widgetCtx) : widget.access) === false) throw ApiError.forbidden({
52
+ operation: "read",
53
+ resource: "widget",
54
+ reason: "Access denied"
55
+ });
56
+ }
57
+ return widget.loader(widgetCtx);
58
+ });
59
+ const widgetDataFunctions = { fetchWidgetData };
60
+
61
+ //#endregion
62
+ export { fetchWidgetData, widgetDataFunctions };
@@ -0,0 +1,8 @@
1
+ import { FormViewConfig } from "../../../augmentation/form-layout.mjs";
2
+ import { ViewDefinition } from "../../../augmentation/views.mjs";
3
+ import "../../../augmentation.mjs";
4
+
5
+ //#region src/server/modules/admin/views/form.d.ts
6
+ declare const _default: ViewDefinition<"collection-form", "form", FormViewConfig>;
7
+ //#endregion
8
+ export { _default };
@@ -0,0 +1,7 @@
1
+ import { view } from "../../../registry-helpers.mjs";
2
+
3
+ //#region src/server/modules/admin/views/form.ts
4
+ var form_default = view("collection-form", { kind: "form" });
5
+
6
+ //#endregion
7
+ export { form_default as default };
@@ -0,0 +1,8 @@
1
+ import { FormViewConfig } from "../../../augmentation/form-layout.mjs";
2
+ import { ViewDefinition } from "../../../augmentation/views.mjs";
3
+ import "../../../augmentation.mjs";
4
+
5
+ //#region src/server/modules/admin/views/global-form.d.ts
6
+ declare const _default: ViewDefinition<"global-form", "form", FormViewConfig>;
7
+ //#endregion
8
+ export { _default };
@@ -0,0 +1,7 @@
1
+ import { view } from "../../../registry-helpers.mjs";
2
+
3
+ //#region src/server/modules/admin/views/global-form.ts
4
+ var global_form_default = view("global-form", { kind: "form" });
5
+
6
+ //#endregion
7
+ export { global_form_default as default };
@@ -0,0 +1,8 @@
1
+ import { ListViewConfig } from "../../../augmentation/form-layout.mjs";
2
+ import { ViewDefinition } from "../../../augmentation/views.mjs";
3
+ import "../../../augmentation.mjs";
4
+
5
+ //#region src/server/modules/admin/views/table.d.ts
6
+ declare const _default: ViewDefinition<"collection-table", "list", ListViewConfig>;
7
+ //#endregion
8
+ export { _default };
@@ -0,0 +1,7 @@
1
+ import { view } from "../../../registry-helpers.mjs";
2
+
3
+ //#region src/server/modules/admin/views/table.ts
4
+ var table_default = view("collection-table", { kind: "list" });
5
+
6
+ //#endregion
7
+ export { table_default as default };
@@ -0,0 +1,37 @@
1
+ import { collection } from "questpie";
2
+ import { uniqueIndex } from "drizzle-orm/pg-core";
3
+
4
+ //#region src/server/modules/admin-preferences/collections/admin-preferences.ts
5
+ /**
6
+ * Admin Preferences Collection
7
+ *
8
+ * Stores user-specific preferences for admin UI state.
9
+ * This includes view configurations (columns, filters, sort)
10
+ * that persist across devices and sessions.
11
+ *
12
+ * Key format: "viewState:{collectionName}" for view state preferences
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { runtimeConfig } from "questpie";
17
+ * import { adminModule } from "@questpie/admin/server";
18
+ *
19
+ * export default runtimeConfig({
20
+ * modules: [adminModule],
21
+ * // ...
22
+ * });
23
+ *
24
+ * // Access preferences
25
+ * const prefs = await app.collections.admin_preferences.findOne({
26
+ * where: { userId: currentUser.id, key: "viewState:posts" }
27
+ * });
28
+ * ```
29
+ */
30
+ const adminPreferencesCollection = collection("admin_preferences").fields(({ f }) => ({
31
+ userId: f.text(255).required().label("User ID"),
32
+ key: f.text(255).required().label("Key"),
33
+ value: f.json().required().label("Value")
34
+ })).options({ timestamps: true }).indexes(({ table }) => [uniqueIndex("admin_preferences_user_key_idx").on(table.userId, table.key)]);
35
+
36
+ //#endregion
37
+ export { adminPreferencesCollection };
@@ -0,0 +1,55 @@
1
+ import { collection } from "questpie";
2
+
3
+ //#region src/server/modules/admin-preferences/collections/locks.collection.ts
4
+ /**
5
+ * Admin Locks Collection
6
+ *
7
+ * Stores document locks for collaborative editing awareness.
8
+ * When a user opens a document for editing, a lock is created.
9
+ * Other users see who is editing and the document becomes read-only for them.
10
+ *
11
+ * Lock behavior:
12
+ * - Locks expire after 60 seconds without heartbeat
13
+ * - Client sends heartbeat every 30 seconds to keep lock alive
14
+ * - On browser close/crash, lock expires automatically
15
+ * - Realtime subscription shows locks in table rows
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Acquire lock when opening document
20
+ * await app.collections.admin_locks.create({
21
+ * resourceType: "collection",
22
+ * resource: "posts",
23
+ * resourceId: "123",
24
+ * userId: currentUser.id,
25
+ * userName: currentUser.name,
26
+ * expiresAt: new Date(Date.now() + 60000),
27
+ * });
28
+ *
29
+ * // Heartbeat to keep lock alive
30
+ * await app.collections.admin_locks.update({
31
+ * id: lockId,
32
+ * data: { expiresAt: new Date(Date.now() + 60000) },
33
+ * });
34
+ *
35
+ * // Release lock when closing document
36
+ * await app.collections.admin_locks.delete({ id: lockId });
37
+ * ```
38
+ */
39
+ const locksCollection = collection("admin_locks").fields(({ f }) => ({
40
+ resourceType: f.select([{
41
+ value: "collection",
42
+ label: "Collection"
43
+ }, {
44
+ value: "global",
45
+ label: "Global"
46
+ }]).required().label("Resource Type"),
47
+ resource: f.text(255).required().label("Resource"),
48
+ resourceId: f.text(255).required().label("Resource ID"),
49
+ user: f.relation("user").required().label("User"),
50
+ sessionId: f.text(64).required().label("Session ID"),
51
+ expiresAt: f.date().required().label("Expires At")
52
+ })).options({ timestamps: true });
53
+
54
+ //#endregion
55
+ export { locksCollection };