@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,92 @@
1
+ import { ServerActionDefinition, ServerActionResult } from "../../../augmentation/actions.mjs";
2
+ import "../../../augmentation.mjs";
3
+ import { App } from "./route-helpers.mjs";
4
+ import * as questpie76 from "questpie";
5
+
6
+ //#region src/server/modules/admin/routes/execute-action.d.ts
7
+
8
+ /**
9
+ * Request to execute an action
10
+ */
11
+ interface ExecuteActionRequest {
12
+ /** Collection slug */
13
+ collection: string;
14
+ /** Action ID (builtin: "create", "delete", etc. or custom id) */
15
+ actionId: string;
16
+ /** Single item ID (for single-item actions) */
17
+ itemId?: string;
18
+ /** Multiple item IDs (for bulk actions) */
19
+ itemIds?: string[];
20
+ /** Form data (for actions with forms) */
21
+ data?: Record<string, unknown>;
22
+ /** Current locale */
23
+ locale?: string;
24
+ }
25
+ /**
26
+ * Response from action execution
27
+ */
28
+ interface ExecuteActionResponse {
29
+ success: boolean;
30
+ result?: ServerActionResult;
31
+ error?: string;
32
+ }
33
+ /**
34
+ * Get action configuration for introspection.
35
+ * Returns action definitions without handlers (for client-side rendering).
36
+ */
37
+ declare function getActionsConfig(app: App, collectionSlug: string): {
38
+ builtin: string[];
39
+ custom: Array<Omit<ServerActionDefinition, "handler">>;
40
+ } | null;
41
+ /**
42
+ * Execute a collection action.
43
+ * Handles both built-in actions and custom actions.
44
+ */
45
+ declare function executeAction(app: App, request: ExecuteActionRequest, session?: unknown): Promise<ExecuteActionResponse>;
46
+ /**
47
+ * Execute a collection action.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * // From client
52
+ * const result = await client.routes.executeAction({
53
+ * collection: "posts",
54
+ * actionId: "publish",
55
+ * itemId: "123",
56
+ * });
57
+ * ```
58
+ */
59
+ declare const executeActionFn: questpie76.JsonRouteDefinition<{
60
+ collection: string;
61
+ actionId: string;
62
+ itemId?: string | undefined;
63
+ itemIds?: string[] | undefined;
64
+ data?: Record<string, unknown> | undefined;
65
+ locale?: string | undefined;
66
+ }, any>;
67
+ /**
68
+ * Get actions configuration for a collection.
69
+ * Returns action definitions without handlers for client rendering.
70
+ */
71
+ declare const getActionsConfigFn: questpie76.JsonRouteDefinition<{
72
+ collection: string;
73
+ }, any>;
74
+ /**
75
+ * QUESTPIE functions for action execution.
76
+ * These are registered on the `adminModule`.
77
+ */
78
+ declare const actionFunctions: {
79
+ executeAction: questpie76.JsonRouteDefinition<{
80
+ collection: string;
81
+ actionId: string;
82
+ itemId?: string | undefined;
83
+ itemIds?: string[] | undefined;
84
+ data?: Record<string, unknown> | undefined;
85
+ locale?: string | undefined;
86
+ }, any>;
87
+ getActionsConfig: questpie76.JsonRouteDefinition<{
88
+ collection: string;
89
+ }, any>;
90
+ };
91
+ //#endregion
92
+ export { ExecuteActionRequest, ExecuteActionResponse, actionFunctions, executeAction, executeActionFn, getActionsConfig, getActionsConfigFn };
@@ -0,0 +1,433 @@
1
+ import { getApp, getAppState, getSession } from "./route-helpers.mjs";
2
+ import { z } from "zod";
3
+ import { route } from "questpie";
4
+
5
+ //#region src/server/modules/admin/routes/execute-action.ts
6
+ /**
7
+ * Action Execution Functions
8
+ *
9
+ * Server-side functions for executing collection actions.
10
+ * Actions can be built-in (create, delete, etc.) or custom with forms.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // Execute a custom action
15
+ * const result = await executeAction(app, {
16
+ * collection: "posts",
17
+ * actionId: "publish",
18
+ * itemId: "123",
19
+ * data: {},
20
+ * });
21
+ * ```
22
+ */
23
+ /**
24
+ * Get action configuration for introspection.
25
+ * Returns action definitions without handlers (for client-side rendering).
26
+ */
27
+ function getActionsConfig(app, collectionSlug) {
28
+ const collection$1 = getAppState(app).collections?.[collectionSlug];
29
+ if (!collection$1) return null;
30
+ const actionsConfig = (collection$1.state || collection$1).adminActions;
31
+ if (!actionsConfig) return {
32
+ builtin: [
33
+ "create",
34
+ "save",
35
+ "delete",
36
+ "deleteMany",
37
+ "restore",
38
+ "restoreMany",
39
+ "duplicate",
40
+ "transition"
41
+ ],
42
+ custom: []
43
+ };
44
+ const customWithoutHandlers = (actionsConfig.custom || []).map((action) => {
45
+ const { handler, ...rest } = action;
46
+ return rest;
47
+ });
48
+ return {
49
+ builtin: actionsConfig.builtin || [
50
+ "create",
51
+ "save",
52
+ "delete",
53
+ "deleteMany",
54
+ "restore",
55
+ "restoreMany",
56
+ "duplicate"
57
+ ],
58
+ custom: customWithoutHandlers
59
+ };
60
+ }
61
+ /**
62
+ * Execute a collection action.
63
+ * Handles both built-in actions and custom actions.
64
+ */
65
+ async function executeAction(app, request, session) {
66
+ const { collection: collectionSlug, actionId, itemId, itemIds, data, locale } = request;
67
+ const collection$1 = getAppState(app).collections?.[collectionSlug];
68
+ if (!collection$1) return {
69
+ success: false,
70
+ error: `Collection "${collectionSlug}" not found`
71
+ };
72
+ const actionsConfig = (collection$1.state || collection$1).adminActions;
73
+ if ((actionsConfig?.builtin || [
74
+ "create",
75
+ "save",
76
+ "delete",
77
+ "deleteMany",
78
+ "restore",
79
+ "restoreMany",
80
+ "duplicate",
81
+ "transition"
82
+ ]).includes(actionId)) return executeBuiltinAction(app, {
83
+ collectionSlug,
84
+ actionId,
85
+ itemId,
86
+ itemIds,
87
+ data,
88
+ locale,
89
+ session
90
+ });
91
+ const customAction = actionsConfig?.custom?.find((a) => a.id === actionId);
92
+ if (!customAction) return {
93
+ success: false,
94
+ error: `Action "${actionId}" not found on collection "${collectionSlug}"`
95
+ };
96
+ if (customAction.form) {
97
+ const validationError = validateActionFormData(customAction.form.fields, data || {});
98
+ if (validationError) return {
99
+ success: false,
100
+ result: {
101
+ type: "error",
102
+ toast: { message: validationError }
103
+ }
104
+ };
105
+ }
106
+ try {
107
+ const appRec = app;
108
+ const context = {
109
+ data: data || {},
110
+ itemId,
111
+ itemIds,
112
+ auth: appRec.auth,
113
+ collections: appRec.api?.collections,
114
+ globals: appRec.api?.globals,
115
+ db: appRec.db,
116
+ session,
117
+ locale
118
+ };
119
+ const result = await customAction.handler(context);
120
+ return {
121
+ success: result.type === "success" || result.type === "redirect",
122
+ result
123
+ };
124
+ } catch (error) {
125
+ console.error(`Action "${actionId}" failed:`, error);
126
+ return {
127
+ success: false,
128
+ result: {
129
+ type: "error",
130
+ toast: { message: error instanceof Error ? error.message : "Action execution failed" }
131
+ }
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Execute a built-in action.
137
+ */
138
+ async function executeBuiltinAction(app, params) {
139
+ const { collectionSlug, actionId, itemId, itemIds, data } = params;
140
+ const appRec = app;
141
+ const collectionCrud = appRec.api?.collections?.[collectionSlug];
142
+ const crudContext = {
143
+ db: appRec.db,
144
+ session: params.session,
145
+ locale: params.locale
146
+ };
147
+ try {
148
+ switch (actionId) {
149
+ case "create": {
150
+ const result = await appRec.create(collectionSlug, data || {});
151
+ return {
152
+ success: true,
153
+ result: {
154
+ type: "success",
155
+ toast: { message: "Item created successfully" },
156
+ effects: {
157
+ invalidate: [collectionSlug],
158
+ redirect: `/admin/collections/${collectionSlug}/${result.id}`
159
+ }
160
+ }
161
+ };
162
+ }
163
+ case "save":
164
+ if (!itemId) return {
165
+ success: false,
166
+ result: {
167
+ type: "error",
168
+ toast: { message: "Item ID is required for save action" }
169
+ }
170
+ };
171
+ await appRec.update(collectionSlug, itemId, data || {});
172
+ return {
173
+ success: true,
174
+ result: {
175
+ type: "success",
176
+ toast: { message: "Item saved successfully" },
177
+ effects: { invalidate: [collectionSlug] }
178
+ }
179
+ };
180
+ case "delete":
181
+ if (!itemId) return {
182
+ success: false,
183
+ result: {
184
+ type: "error",
185
+ toast: { message: "Item ID is required for delete action" }
186
+ }
187
+ };
188
+ await appRec.delete(collectionSlug, itemId);
189
+ return {
190
+ success: true,
191
+ result: {
192
+ type: "success",
193
+ toast: { message: "Item deleted successfully" },
194
+ effects: {
195
+ invalidate: [collectionSlug],
196
+ redirect: `/admin/collections/${collectionSlug}`
197
+ }
198
+ }
199
+ };
200
+ case "deleteMany":
201
+ if (!itemIds || itemIds.length === 0) return {
202
+ success: false,
203
+ result: {
204
+ type: "error",
205
+ toast: { message: "Item IDs are required for bulk delete action" }
206
+ }
207
+ };
208
+ await Promise.all(itemIds.map((id) => appRec.delete(collectionSlug, id)));
209
+ return {
210
+ success: true,
211
+ result: {
212
+ type: "success",
213
+ toast: { message: `${itemIds.length} items deleted successfully` },
214
+ effects: { invalidate: [collectionSlug] }
215
+ }
216
+ };
217
+ case "restore":
218
+ if (!itemId) return {
219
+ success: false,
220
+ result: {
221
+ type: "error",
222
+ toast: { message: "Item ID is required for restore action" }
223
+ }
224
+ };
225
+ if (typeof appRec.restore === "function") await appRec.restore(collectionSlug, itemId);
226
+ else if (collectionCrud?.restoreById) await collectionCrud.restoreById({ id: itemId }, crudContext);
227
+ else return {
228
+ success: false,
229
+ result: {
230
+ type: "error",
231
+ toast: { message: "Restore is not supported for this collection" }
232
+ }
233
+ };
234
+ return {
235
+ success: true,
236
+ result: {
237
+ type: "success",
238
+ toast: { message: "Item restored successfully" },
239
+ effects: {
240
+ invalidate: [collectionSlug],
241
+ redirect: `/admin/collections/${collectionSlug}/${itemId}`
242
+ }
243
+ }
244
+ };
245
+ case "restoreMany":
246
+ if (!itemIds || itemIds.length === 0) return {
247
+ success: false,
248
+ result: {
249
+ type: "error",
250
+ toast: { message: "Item IDs are required for bulk restore action" }
251
+ }
252
+ };
253
+ if (typeof appRec.restore === "function") await Promise.all(itemIds.map((id) => appRec.restore(collectionSlug, id)));
254
+ else if (collectionCrud?.restoreById) await Promise.all(itemIds.map((id) => collectionCrud.restoreById({ id }, crudContext)));
255
+ else return {
256
+ success: false,
257
+ result: {
258
+ type: "error",
259
+ toast: { message: "Restore is not supported for this collection" }
260
+ }
261
+ };
262
+ return {
263
+ success: true,
264
+ result: {
265
+ type: "success",
266
+ toast: { message: `${itemIds.length} items restored successfully` },
267
+ effects: { invalidate: [collectionSlug] }
268
+ }
269
+ };
270
+ case "duplicate": {
271
+ if (!itemId) return {
272
+ success: false,
273
+ result: {
274
+ type: "error",
275
+ toast: { message: "Item ID is required for duplicate action" }
276
+ }
277
+ };
278
+ const original = await appRec.findById(collectionSlug, itemId);
279
+ if (!original) return {
280
+ success: false,
281
+ result: {
282
+ type: "error",
283
+ toast: { message: "Item not found" }
284
+ }
285
+ };
286
+ const { id, createdAt, updatedAt, ...duplicateData } = original;
287
+ const duplicated = await appRec.create(collectionSlug, duplicateData);
288
+ return {
289
+ success: true,
290
+ result: {
291
+ type: "success",
292
+ toast: { message: "Item duplicated successfully" },
293
+ effects: {
294
+ invalidate: [collectionSlug],
295
+ redirect: `/admin/collections/${collectionSlug}/${duplicated.id}`
296
+ }
297
+ }
298
+ };
299
+ }
300
+ case "transition": {
301
+ if (!itemId) return {
302
+ success: false,
303
+ result: {
304
+ type: "error",
305
+ toast: { message: "Item ID is required for transition action" }
306
+ }
307
+ };
308
+ const stage = data?.stage;
309
+ if (!stage) return {
310
+ success: false,
311
+ result: {
312
+ type: "error",
313
+ toast: { message: "Target stage is required for transition action" }
314
+ }
315
+ };
316
+ if (collectionCrud?.transitionStage) {
317
+ const scheduledAt = data?.scheduledAt;
318
+ const transitionParams = {
319
+ id: itemId,
320
+ stage
321
+ };
322
+ if (scheduledAt) transitionParams.scheduledAt = new Date(scheduledAt);
323
+ await collectionCrud.transitionStage(transitionParams, crudContext);
324
+ } else return {
325
+ success: false,
326
+ result: {
327
+ type: "error",
328
+ toast: { message: "Workflow transitions are not supported for this collection" }
329
+ }
330
+ };
331
+ return {
332
+ success: true,
333
+ result: {
334
+ type: "success",
335
+ toast: { message: `Transitioned to "${stage}" successfully` },
336
+ effects: { invalidate: [collectionSlug] }
337
+ }
338
+ };
339
+ }
340
+ default: return {
341
+ success: false,
342
+ result: {
343
+ type: "error",
344
+ toast: { message: `Unknown built-in action: ${actionId}` }
345
+ }
346
+ };
347
+ }
348
+ } catch (error) {
349
+ console.error(`Built-in action "${actionId}" failed:`, error);
350
+ return {
351
+ success: false,
352
+ result: {
353
+ type: "error",
354
+ toast: { message: error instanceof Error ? error.message : "Action execution failed" }
355
+ }
356
+ };
357
+ }
358
+ }
359
+ /**
360
+ * Check if a field is a ServerActionFormFieldDefinition (has getMetadata)
361
+ */
362
+ function isFieldDefinition(field$1) {
363
+ return typeof field$1.getMetadata === "function";
364
+ }
365
+ /**
366
+ * Extract required status from a form field (handles both config and definition)
367
+ */
368
+ function isFieldRequired(field$1) {
369
+ if (isFieldDefinition(field$1)) return !!field$1._state?.notNull;
370
+ return !!field$1.required;
371
+ }
372
+ /**
373
+ * Validate form data against action form fields.
374
+ * Returns error message if validation fails, null if valid.
375
+ */
376
+ function validateActionFormData(fields, data) {
377
+ for (const [fieldName, fieldConfig] of Object.entries(fields)) if (isFieldRequired(fieldConfig) && !data[fieldName]) return `Field "${fieldName}" is required`;
378
+ return null;
379
+ }
380
+ const executeActionRequestSchema = z.object({
381
+ collection: z.string(),
382
+ actionId: z.string(),
383
+ itemId: z.string().optional(),
384
+ itemIds: z.array(z.string()).optional(),
385
+ data: z.record(z.string(), z.unknown()).optional(),
386
+ locale: z.string().optional()
387
+ });
388
+ const executeActionResponseSchema = z.object({
389
+ success: z.boolean(),
390
+ result: z.record(z.string(), z.any()).optional(),
391
+ error: z.string().optional()
392
+ });
393
+ const getActionsConfigRequestSchema = z.object({ collection: z.string() });
394
+ const getActionsConfigResponseSchema = z.object({
395
+ builtin: z.array(z.string()),
396
+ custom: z.array(z.record(z.string(), z.any()))
397
+ }).nullable();
398
+ /**
399
+ * Execute a collection action.
400
+ *
401
+ * @example
402
+ * ```ts
403
+ * // From client
404
+ * const result = await client.routes.executeAction({
405
+ * collection: "posts",
406
+ * actionId: "publish",
407
+ * itemId: "123",
408
+ * });
409
+ * ```
410
+ */
411
+ const executeActionFn = route().post().schema(executeActionRequestSchema).outputSchema(executeActionResponseSchema).handler(async (ctx) => {
412
+ const app = getApp(ctx);
413
+ const session = getSession(ctx);
414
+ return executeAction(app, ctx.input, session);
415
+ });
416
+ /**
417
+ * Get actions configuration for a collection.
418
+ * Returns action definitions without handlers for client rendering.
419
+ */
420
+ const getActionsConfigFn = route().post().schema(getActionsConfigRequestSchema).outputSchema(getActionsConfigResponseSchema).handler((ctx) => {
421
+ return getActionsConfig(getApp(ctx), ctx.input.collection);
422
+ });
423
+ /**
424
+ * QUESTPIE functions for action execution.
425
+ * These are registered on the `adminModule`.
426
+ */
427
+ const actionFunctions = {
428
+ executeAction: executeActionFn,
429
+ getActionsConfig: getActionsConfigFn
430
+ };
431
+
432
+ //#endregion
433
+ export { actionFunctions, executeAction, executeActionFn, getActionsConfig, getActionsConfigFn };
@@ -0,0 +1,18 @@
1
+ import * as questpie312 from "questpie";
2
+
3
+ //#region src/server/modules/admin/routes/locales.d.ts
4
+
5
+ /**
6
+ * Content Locales Functions
7
+ *
8
+ * Functions for retrieving available content locales from the app configuration.
9
+ * Used by the admin panel to populate locale switchers and validate locale selection.
10
+ */
11
+ /**
12
+ * Bundle of locale-related functions.
13
+ */
14
+ declare const localeFunctions: {
15
+ readonly getContentLocales: questpie312.JsonRouteDefinition<Record<string, never> | undefined, any>;
16
+ };
17
+ //#endregion
18
+ export { localeFunctions };
@@ -0,0 +1,69 @@
1
+ import { getApp } from "./route-helpers.mjs";
2
+ import { z } from "zod";
3
+ import { route } from "questpie";
4
+
5
+ //#region src/server/modules/admin/routes/locales.ts
6
+ /**
7
+ * Content Locales Functions
8
+ *
9
+ * Functions for retrieving available content locales from the app configuration.
10
+ * Used by the admin panel to populate locale switchers and validate locale selection.
11
+ */
12
+ const getContentLocalesSchema = z.object({}).optional();
13
+ const getContentLocalesOutputSchema = z.object({
14
+ locales: z.array(z.object({
15
+ code: z.string(),
16
+ label: z.string().optional(),
17
+ fallback: z.boolean().optional(),
18
+ flagCountryCode: z.string().optional()
19
+ })),
20
+ defaultLocale: z.string(),
21
+ fallbacks: z.record(z.string(), z.string()).optional()
22
+ });
23
+ /**
24
+ * Get available content locales from app configuration.
25
+ *
26
+ * Returns the list of available locales for content localization,
27
+ * the default locale, and any fallback mappings.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const result = await client.routes.getContentLocales({});
32
+ * // {
33
+ * // locales: [
34
+ * // { code: "en", label: "English", fallback: true },
35
+ * // { code: "sk", label: "Slovenčina" },
36
+ * // ],
37
+ * // defaultLocale: "en",
38
+ * // fallbacks: { "en-GB": "en" },
39
+ * // }
40
+ * ```
41
+ */
42
+ const getContentLocales = route().post().schema(getContentLocalesSchema).outputSchema(getContentLocalesOutputSchema).handler(async (ctx) => {
43
+ const localeConfig = getApp(ctx).config.locale;
44
+ if (!localeConfig) return {
45
+ locales: [{
46
+ code: "en",
47
+ label: "English",
48
+ fallback: true
49
+ }],
50
+ defaultLocale: "en"
51
+ };
52
+ return {
53
+ locales: (typeof localeConfig.locales === "function" ? await localeConfig.locales() : localeConfig.locales).map((l) => ({
54
+ code: l.code,
55
+ label: l.label,
56
+ fallback: l.fallback,
57
+ flagCountryCode: l.flagCountryCode
58
+ })),
59
+ defaultLocale: localeConfig.defaultLocale,
60
+ fallbacks: localeConfig.fallbacks
61
+ };
62
+ });
63
+ /**
64
+ * Bundle of locale-related functions.
65
+ */
66
+ const localeFunctions = { getContentLocales };
67
+
68
+ //#endregion
69
+ export { localeFunctions };
@@ -0,0 +1,80 @@
1
+ import * as questpie109 from "questpie";
2
+
3
+ //#region src/server/modules/admin/routes/preview.d.ts
4
+
5
+ /**
6
+ * Preview Functions - Server-side
7
+ *
8
+ * RPC functions for draft mode preview.
9
+ * Handles token minting for secure, shareable preview links.
10
+ *
11
+ * Browser-safe utilities (isDraftMode, createDraftModeCookie, etc.) are in @questpie/admin/shared
12
+ */
13
+ interface PreviewTokenPayload {
14
+ path: string;
15
+ exp: number;
16
+ }
17
+ /**
18
+ * Create preview-related RPC functions.
19
+ *
20
+ * @param secret - Secret key for signing tokens
21
+ * @returns Object with preview functions
22
+ */
23
+ declare function createPreviewFunctions(secret: string): {
24
+ mintPreviewToken: questpie109.JsonRouteDefinition<{
25
+ path: string;
26
+ ttlMs?: number | undefined;
27
+ }, any>;
28
+ verifyPreviewToken: questpie109.JsonRouteDefinition<{
29
+ token: string;
30
+ }, any>;
31
+ };
32
+ /**
33
+ * Verify a preview token without RPC.
34
+ * Used directly in route handlers where RPC is not available.
35
+ *
36
+ * @param token - The preview token to verify
37
+ * @param secret - The secret used to sign the token
38
+ * @returns The payload if valid, null otherwise
39
+ */
40
+ declare function verifyPreviewTokenDirect(token: string, secret: string): PreviewTokenPayload | null;
41
+ /**
42
+ * Create a preview token verifier with bound secret.
43
+ * Use this in route handlers to avoid passing secret repeatedly.
44
+ *
45
+ * @param secret - The secret used to sign tokens (optional, uses env if not provided)
46
+ * @returns A verify function that only needs the token
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * // Create once at module level
51
+ * const verifyPreviewToken = createPreviewTokenVerifier();
52
+ *
53
+ * // Use in route handler
54
+ * const payload = verifyPreviewToken(token);
55
+ * if (!payload) {
56
+ * return new Response("Invalid token", { status: 401 });
57
+ * }
58
+ * ```
59
+ */
60
+ declare function createPreviewTokenVerifier(secret?: string): (token: string) => PreviewTokenPayload | null;
61
+ /**
62
+ * Default preview functions bundle with env-based secret.
63
+ * Used by the `adminModule` to register preview RPC functions.
64
+ */
65
+ declare const previewFunctions: {
66
+ getPreviewUrl: questpie109.JsonRouteDefinition<{
67
+ collection: string;
68
+ record: Record<string, unknown>;
69
+ locale?: string | undefined;
70
+ }, any>;
71
+ mintPreviewToken: questpie109.JsonRouteDefinition<{
72
+ path: string;
73
+ ttlMs?: number | undefined;
74
+ }, any>;
75
+ verifyPreviewToken: questpie109.JsonRouteDefinition<{
76
+ token: string;
77
+ }, any>;
78
+ };
79
+ //#endregion
80
+ export { PreviewTokenPayload, createPreviewFunctions, createPreviewTokenVerifier, previewFunctions, verifyPreviewTokenDirect };