@questpie/admin 2.0.0 → 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 (1091) hide show
  1. package/README.md +119 -122
  2. package/dist/augmentation.d.mts +110 -11
  3. package/dist/client/blocks/block-renderer.d.mts +5 -12
  4. package/dist/client/blocks/block-renderer.mjs +89 -55
  5. package/dist/client/blocks/index.d.mts +2 -4
  6. package/dist/client/blocks/types.d.mts +3 -4
  7. package/dist/client/blocks/types.mjs +1 -2
  8. package/dist/client/builder/admin-types.d.mts +11 -44
  9. package/dist/client/builder/admin.d.mts +34 -45
  10. package/dist/client/builder/admin.mjs +35 -44
  11. package/dist/client/builder/field/field.d.mts +27 -205
  12. package/dist/client/builder/field/field.mjs +22 -68
  13. package/dist/client/builder/index.d.mts +23 -28
  14. package/dist/client/builder/page/page.d.mts +15 -27
  15. package/dist/client/builder/page/page.mjs +21 -17
  16. package/dist/client/builder/registry.d.mts +14 -34
  17. package/dist/client/builder/types/action-registry.mjs +148 -14
  18. package/dist/client/builder/types/action-types.d.mts +8 -35
  19. package/dist/client/builder/types/collection-types.mjs +1 -2
  20. package/dist/client/builder/types/common.d.mts +6 -20
  21. package/dist/client/builder/types/field-types.d.mts +4 -5
  22. package/dist/client/builder/types/field-types.mjs +1 -2
  23. package/dist/client/builder/types/ui-config.d.mts +3 -5
  24. package/dist/client/builder/types/widget-types.d.mts +19 -20
  25. package/dist/client/builder/validation.d.mts +33 -3
  26. package/dist/client/builder/validation.mjs +169 -150
  27. package/dist/client/builder/view/view.d.mts +26 -106
  28. package/dist/client/builder/view/view.mjs +14 -96
  29. package/dist/client/builder/widget/widget.d.mts +16 -22
  30. package/dist/client/builder/widget/widget.mjs +11 -16
  31. package/dist/client/components/actions/action-button.mjs +207 -97
  32. package/dist/client/components/actions/action-dialog.mjs +471 -176
  33. package/dist/client/components/actions/confirmation-dialog.mjs +166 -47
  34. package/dist/client/components/actions/header-actions.mjs +164 -71
  35. package/dist/client/components/admin-link.d.mts +8 -9
  36. package/dist/client/components/admin-link.mjs +127 -48
  37. package/dist/client/components/auth/auth-guard.d.mts +6 -7
  38. package/dist/client/components/auth/auth-guard.mjs +9 -9
  39. package/dist/client/components/auth/auth-loading.d.mts +3 -4
  40. package/dist/client/components/auth/auth-loading.mjs +38 -10
  41. package/dist/client/components/blocks/block-canvas.mjs +111 -42
  42. package/dist/client/components/blocks/block-editor-context.mjs +90 -23
  43. package/dist/client/components/blocks/block-editor-layout.mjs +176 -59
  44. package/dist/client/components/blocks/block-editor-provider.mjs +219 -139
  45. package/dist/client/components/blocks/block-fields-renderer.mjs +212 -42
  46. package/dist/client/components/blocks/block-insert-button.mjs +168 -51
  47. package/dist/client/components/blocks/block-item-menu.mjs +312 -110
  48. package/dist/client/components/blocks/block-item.mjs +372 -125
  49. package/dist/client/components/blocks/block-library-sidebar.mjs +209 -114
  50. package/dist/client/components/blocks/block-tree.mjs +73 -15
  51. package/dist/client/components/blocks/block-type-icon.mjs +65 -20
  52. package/dist/client/components/blocks/utils/tree-utils.mjs +1 -2
  53. package/dist/client/components/component-renderer.d.mts +11 -22
  54. package/dist/client/components/component-renderer.mjs +151 -38
  55. package/dist/client/components/error-boundary.mjs +77 -25
  56. package/dist/client/components/fields/array-field.mjs +474 -199
  57. package/dist/client/components/fields/asset-preview-field.mjs +143 -44
  58. package/dist/client/components/fields/blocks-field/blocks-field.mjs +143 -35
  59. package/dist/client/components/fields/boolean-field.mjs +62 -32
  60. package/dist/client/components/fields/date-field.mjs +46 -12
  61. package/dist/client/components/fields/datetime-field.mjs +42 -11
  62. package/dist/client/components/fields/email-field.mjs +57 -28
  63. package/dist/client/components/fields/field-utils.mjs +1 -2
  64. package/dist/client/components/fields/field-wrapper.mjs +107 -32
  65. package/dist/client/components/fields/json-field.mjs +323 -110
  66. package/dist/client/components/fields/locale-badge.mjs +16 -8
  67. package/dist/client/components/fields/number-field.mjs +63 -30
  68. package/dist/client/components/fields/object-array-field.mjs +666 -272
  69. package/dist/client/components/fields/object-field.mjs +656 -98
  70. package/dist/client/components/fields/relation/displays/cards-display.mjs +225 -111
  71. package/dist/client/components/fields/relation/displays/chips-display.mjs +150 -77
  72. package/dist/client/components/fields/relation/displays/grid-display.mjs +186 -91
  73. package/dist/client/components/fields/relation/displays/list-display.mjs +230 -111
  74. package/dist/client/components/fields/relation/displays/table-display.mjs +241 -66
  75. package/dist/client/components/fields/relation/displays/types.mjs +2 -3
  76. package/dist/client/components/fields/relation/relation-items-display.mjs +131 -35
  77. package/dist/client/components/fields/relation-field.mjs +70 -15
  78. package/dist/client/components/fields/relation-picker.mjs +93 -98
  79. package/dist/client/components/fields/relation-select.mjs +42 -29
  80. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +90 -41
  81. package/dist/client/components/fields/rich-text-editor/extensions.mjs +33 -7
  82. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +48 -23
  83. package/dist/client/components/fields/rich-text-editor/index.mjs +491 -158
  84. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +13 -14
  85. package/dist/client/components/fields/rich-text-editor/presets.mjs +1 -2
  86. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +96 -53
  87. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +416 -107
  88. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +476 -215
  89. package/dist/client/components/fields/rich-text-editor/types.mjs +1 -2
  90. package/dist/client/components/fields/rich-text-editor/utils.mjs +1 -2
  91. package/dist/client/components/fields/rich-text-field.mjs +55 -17
  92. package/dist/client/components/fields/select-field.mjs +79 -44
  93. package/dist/client/components/fields/text-field.mjs +62 -29
  94. package/dist/client/components/fields/textarea-field.mjs +61 -29
  95. package/dist/client/components/fields/time-field.mjs +39 -11
  96. package/dist/client/components/fields/upload-field.mjs +253 -129
  97. package/dist/client/components/filter-builder/columns-tab.mjs +287 -93
  98. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +437 -138
  99. package/dist/client/components/filter-builder/filters-tab.mjs +409 -126
  100. package/dist/client/components/filter-builder/saved-views-tab.mjs +259 -106
  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 +231 -108
  104. package/dist/client/components/media/media-grid.mjs +259 -84
  105. package/dist/client/components/media/media-picker-dialog.mjs +500 -192
  106. package/dist/client/components/preview/live-preview-mode.mjs +416 -124
  107. package/dist/client/components/preview/preview-pane.mjs +353 -144
  108. package/dist/client/components/primitives/asset-preview.mjs +665 -257
  109. package/dist/client/components/primitives/checkbox-input.mjs +37 -11
  110. package/dist/client/components/primitives/date-input.mjs +392 -149
  111. package/dist/client/components/primitives/dropzone.mjs +314 -185
  112. package/dist/client/components/primitives/number-input.mjs +14 -10
  113. package/dist/client/components/primitives/select-multi.mjs +519 -185
  114. package/dist/client/components/primitives/select-single.mjs +416 -126
  115. package/dist/client/components/primitives/text-input.mjs +10 -5
  116. package/dist/client/components/primitives/textarea-input.mjs +10 -5
  117. package/dist/client/components/primitives/time-input.mjs +118 -45
  118. package/dist/client/components/primitives/toggle-input.mjs +31 -11
  119. package/dist/client/components/primitives/types.mjs +1 -2
  120. package/dist/client/components/sheets/resource-sheet.mjs +72 -64
  121. package/dist/client/components/ui/accordion.mjs +156 -37
  122. package/dist/client/components/ui/alert.mjs +70 -17
  123. package/dist/client/components/ui/badge.mjs +57 -16
  124. package/dist/client/components/ui/button.mjs +49 -14
  125. package/dist/client/components/ui/card.mjs +194 -39
  126. package/dist/client/components/ui/checkbox.mjs +71 -16
  127. package/dist/client/components/ui/command.mjs +220 -50
  128. package/dist/client/components/ui/dialog.mjs +265 -52
  129. package/dist/client/components/ui/drawer.mjs +260 -57
  130. package/dist/client/components/ui/dropdown-menu.mjs +293 -67
  131. package/dist/client/components/ui/empty-state.mjs +72 -26
  132. package/dist/client/components/ui/field.mjs +332 -56
  133. package/dist/client/components/ui/input-group.mjs +174 -41
  134. package/dist/client/components/ui/input.mjs +38 -9
  135. package/dist/client/components/ui/kbd.mjs +37 -8
  136. package/dist/client/components/ui/label.mjs +38 -8
  137. package/dist/client/components/ui/popover.mjs +162 -35
  138. package/dist/client/components/ui/responsive-dialog.mjs +277 -71
  139. package/dist/client/components/ui/search-input.mjs +101 -36
  140. package/dist/client/components/ui/select.mjs +297 -57
  141. package/dist/client/components/ui/separator.mjs +39 -9
  142. package/dist/client/components/ui/sheet.mjs +253 -51
  143. package/dist/client/components/ui/sidebar.mjs +700 -182
  144. package/dist/client/components/ui/skeleton.mjs +33 -8
  145. package/dist/client/components/ui/sonner.d.mts +2 -3
  146. package/dist/client/components/ui/sonner.mjs +45 -15
  147. package/dist/client/components/ui/spinner.mjs +44 -10
  148. package/dist/client/components/ui/switch.mjs +47 -12
  149. package/dist/client/components/ui/table.mjs +260 -50
  150. package/dist/client/components/ui/tabs.mjs +140 -29
  151. package/dist/client/components/ui/textarea.mjs +33 -8
  152. package/dist/client/components/ui/toolbar.mjs +105 -23
  153. package/dist/client/components/ui/tooltip.mjs +130 -29
  154. package/dist/client/components/widgets/chart-widget.mjs +456 -156
  155. package/dist/client/components/widgets/progress-widget.mjs +150 -60
  156. package/dist/client/components/widgets/quick-actions-widget.mjs +175 -87
  157. package/dist/client/components/widgets/recent-items-widget.mjs +157 -62
  158. package/dist/client/components/widgets/stats-widget.mjs +153 -42
  159. package/dist/client/components/widgets/table-widget.mjs +198 -64
  160. package/dist/client/components/widgets/timeline-widget.mjs +193 -82
  161. package/dist/client/components/widgets/value-widget.mjs +257 -56
  162. package/dist/client/components/widgets/widget-skeletons.mjs +390 -108
  163. package/dist/client/contexts/breadcrumb-context.mjs +44 -16
  164. package/dist/client/{context → contexts}/focus-context.d.mts +6 -7
  165. package/dist/client/{context → contexts}/focus-context.mjs +134 -62
  166. package/dist/client/hooks/typed-hooks.d.mts +38 -12
  167. package/dist/client/hooks/typed-hooks.mjs +758 -142
  168. package/dist/client/hooks/use-action.mjs +197 -69
  169. package/dist/client/hooks/use-admin-config.mjs +39 -10
  170. package/dist/client/hooks/use-admin-preferences.mjs +118 -15
  171. package/dist/client/hooks/use-admin-routes.mjs +60 -27
  172. package/dist/client/hooks/use-audit-history.mjs +157 -0
  173. package/dist/client/hooks/use-auth.d.mts +14 -15
  174. package/dist/client/hooks/use-auth.mjs +8 -9
  175. package/dist/client/hooks/use-collection-fields.mjs +58 -19
  176. package/dist/client/hooks/use-collection-meta.mjs +45 -13
  177. package/dist/client/hooks/use-collection-schema.mjs +34 -11
  178. package/dist/client/hooks/use-collection-validation.mjs +39 -25
  179. package/dist/client/hooks/use-collection.d.mts +18 -8
  180. package/dist/client/hooks/use-collection.mjs +560 -101
  181. package/dist/client/hooks/use-current-user.d.mts +6 -3
  182. package/dist/client/hooks/use-current-user.mjs +2 -2
  183. package/dist/client/hooks/use-field-hooks.mjs +73 -65
  184. package/dist/client/hooks/use-field-options.d.mts +1 -34
  185. package/dist/client/hooks/use-field-options.mjs +233 -148
  186. package/dist/client/hooks/use-global-fields.mjs +47 -16
  187. package/dist/client/hooks/use-global-meta.mjs +57 -11
  188. package/dist/client/hooks/use-global-schema.mjs +31 -11
  189. package/dist/client/hooks/use-global.d.mts +13 -2
  190. package/dist/client/hooks/use-global.mjs +244 -34
  191. package/dist/client/hooks/use-locks.mjs +331 -124
  192. package/dist/client/hooks/use-media-query.d.mts +1 -2
  193. package/dist/client/hooks/use-media-query.mjs +38 -19
  194. package/dist/client/hooks/use-prefill-params.mjs +2 -2
  195. package/dist/client/hooks/use-questpie-query-options.mjs +33 -11
  196. package/dist/client/hooks/use-reactive-fields.d.mts +6 -3
  197. package/dist/client/hooks/use-reactive-fields.mjs +130 -93
  198. package/dist/client/hooks/use-realtime-highlight.mjs +115 -53
  199. package/dist/client/hooks/use-saved-views.mjs +109 -34
  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 +147 -36
  203. package/dist/client/hooks/use-server-actions.mjs +191 -0
  204. package/dist/client/hooks/use-server-validation.mjs +164 -72
  205. package/dist/client/hooks/use-server-widget-data.d.mts +2 -3
  206. package/dist/client/hooks/use-server-widget-data.mjs +36 -11
  207. package/dist/client/hooks/use-setup-status.d.mts +3 -4
  208. package/dist/client/hooks/use-setup-status.mjs +28 -16
  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 +1 -2
  213. package/dist/client/hooks/use-upload.mjs +189 -125
  214. package/dist/client/hooks/use-validation-error-map.mjs +10 -6
  215. package/dist/client/hooks/use-view-state.mjs +380 -162
  216. package/dist/client/i18n/hooks.mjs +191 -67
  217. package/dist/client/i18n/intl-cache.mjs +1 -2
  218. package/dist/client/i18n/messages.mjs +1 -2
  219. package/dist/client/i18n/simple.d.mts +1 -2
  220. package/dist/client/i18n/simple.mjs +1 -2
  221. package/dist/client/i18n/types.d.mts +1 -2
  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 +1 -6
  226. package/dist/client/preview/block-scope-context.d.mts +5 -6
  227. package/dist/client/preview/block-scope-context.mjs +50 -27
  228. package/dist/client/preview/index.d.mts +2 -2
  229. package/dist/client/preview/preview-banner.d.mts +3 -4
  230. package/dist/client/preview/preview-banner.mjs +74 -35
  231. package/dist/client/preview/preview-field.d.mts +9 -10
  232. package/dist/client/preview/preview-field.mjs +163 -61
  233. package/dist/client/preview/types.d.mts +1 -2
  234. package/dist/client/preview/types.mjs +1 -2
  235. package/dist/client/preview/use-collection-preview.d.mts +1 -2
  236. package/dist/client/preview/use-collection-preview.mjs +105 -56
  237. package/dist/client/runtime/content-locales-provider.mjs +87 -36
  238. package/dist/client/runtime/index.d.mts +1 -3
  239. package/dist/client/runtime/index.mjs +1 -3
  240. package/dist/client/runtime/locale-scope.mjs +69 -29
  241. package/dist/client/runtime/provider.d.mts +18 -9922
  242. package/dist/client/runtime/provider.mjs +250 -86
  243. package/dist/client/runtime/routes.d.mts +7 -7
  244. package/dist/client/runtime/routes.mjs +4 -20
  245. package/dist/client/runtime/translations-provider.mjs +114 -53
  246. package/dist/client/scope/picker.d.mts +3 -4
  247. package/dist/client/scope/picker.mjs +324 -90
  248. package/dist/client/scope/provider.d.mts +4 -5
  249. package/dist/client/scope/provider.mjs +30 -22
  250. package/dist/client/scope/types.d.mts +1 -2
  251. package/dist/client/styles/index.css +301 -225
  252. package/dist/client/utils/auto-expand-fields.mjs +23 -5
  253. package/dist/client/utils/build-field-definitions-from-schema.mjs +10 -7
  254. package/dist/client/utils/dependency-tracker.mjs +61 -0
  255. package/dist/client/utils/detect-relations.mjs +1 -2
  256. package/dist/client/utils/locale-to-flag.d.mts +8 -7
  257. package/dist/client/utils/locale-to-flag.mjs +1 -2
  258. package/dist/client/utils/routes.mjs +1 -2
  259. package/dist/client/views/auth/accept-invite-form.d.mts +3 -4
  260. package/dist/client/views/auth/accept-invite-form.mjs +414 -121
  261. package/dist/client/views/auth/auth-layout.d.mts +7 -8
  262. package/dist/client/views/auth/auth-layout.mjs +93 -30
  263. package/dist/client/views/auth/forgot-password-form.d.mts +4 -5
  264. package/dist/client/views/auth/forgot-password-form.mjs +332 -100
  265. package/dist/client/views/auth/invite-form.mjs +447 -105
  266. package/dist/client/views/auth/login-form.d.mts +4 -5
  267. package/dist/client/views/auth/login-form.mjs +340 -120
  268. package/dist/client/views/auth/reset-password-form.d.mts +4 -5
  269. package/dist/client/views/auth/reset-password-form.mjs +458 -131
  270. package/dist/client/views/auth/setup-form.d.mts +4 -5
  271. package/dist/client/views/auth/setup-form.mjs +481 -141
  272. package/dist/client/views/collection/auto-form-fields.mjs +686 -266
  273. package/dist/client/views/collection/bulk-action-toolbar.mjs +392 -203
  274. package/dist/client/views/collection/cells/complex-cells.mjs +635 -216
  275. package/dist/client/views/collection/cells/primitive-cells.mjs +332 -102
  276. package/dist/client/views/collection/cells/relation-cells.mjs +227 -72
  277. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +456 -136
  278. package/dist/client/views/collection/cells/shared/cell-helpers.mjs +49 -2
  279. package/dist/client/views/collection/cells/shared/relation-chip.mjs +109 -25
  280. package/dist/client/views/collection/cells/upload-cells.mjs +16 -8
  281. package/dist/client/views/collection/columns/build-columns.mjs +51 -12
  282. package/dist/client/views/collection/columns/column-defaults.mjs +17 -2
  283. package/dist/client/views/collection/field-context.mjs +10 -11
  284. package/dist/client/views/collection/field-renderer.mjs +237 -40
  285. package/dist/client/views/collection/form-view.mjs +1108 -445
  286. package/dist/client/views/collection/table-view.mjs +300 -163
  287. package/dist/client/views/collection/view-skeletons.mjs +181 -87
  288. package/dist/client/views/common/global-search.mjs +557 -233
  289. package/dist/client/views/dashboard/dashboard-grid.mjs +707 -211
  290. package/dist/client/views/dashboard/dashboard-widget.mjs +145 -58
  291. package/dist/client/views/dashboard/widget-card.mjs +315 -102
  292. package/dist/client/views/globals/global-form-view.mjs +1256 -131
  293. package/dist/client/views/layout/admin-layout-provider.d.mts +18 -21
  294. package/dist/client/views/layout/admin-layout-provider.mjs +135 -32
  295. package/dist/client/views/layout/admin-layout.d.mts +14 -32
  296. package/dist/client/views/layout/admin-layout.mjs +254 -96
  297. package/dist/client/views/layout/admin-router.d.mts +10 -42
  298. package/dist/client/views/layout/admin-router.mjs +1086 -426
  299. package/dist/client/views/layout/admin-sidebar.d.mts +10 -16
  300. package/dist/client/views/layout/admin-sidebar.mjs +1211 -382
  301. package/dist/client/views/layout/admin-topbar.mjs +220 -112
  302. package/dist/client/views/pages/accept-invite-page.d.mts +5 -6
  303. package/dist/client/views/pages/accept-invite-page.mjs +302 -96
  304. package/dist/client/views/pages/dashboard-page.d.mts +7 -16
  305. package/dist/client/views/pages/dashboard-page.mjs +62 -23
  306. package/dist/client/views/pages/forgot-password-page.d.mts +7 -10
  307. package/dist/client/views/pages/forgot-password-page.mjs +112 -40
  308. package/dist/client/views/pages/invite-page.d.mts +6 -7
  309. package/dist/client/views/pages/invite-page.mjs +121 -46
  310. package/dist/client/views/pages/login-page.d.mts +8 -15
  311. package/dist/client/views/pages/login-page.mjs +152 -57
  312. package/dist/client/views/pages/reset-password-page.d.mts +7 -10
  313. package/dist/client/views/pages/reset-password-page.mjs +209 -57
  314. package/dist/client/views/pages/setup-page.d.mts +7 -10
  315. package/dist/client/views/pages/setup-page.mjs +108 -43
  316. package/dist/client-module.d.mts +3 -0
  317. package/dist/client-module.mjs +3 -0
  318. package/dist/client.d.mts +55 -48
  319. package/dist/client.mjs +26 -28
  320. package/dist/components/rich-text/rich-text-renderer.d.mts +3 -4
  321. package/dist/components/rich-text/rich-text-renderer.mjs +97 -70
  322. package/dist/index.d.mts +36 -39
  323. package/dist/index.mjs +26 -28
  324. package/dist/plugin.d.mts +2 -0
  325. package/dist/plugin.mjs +3 -0
  326. package/dist/server/adapters/nextjs.d.mts +13 -14
  327. package/dist/server/adapters/nextjs.mjs +12 -13
  328. package/dist/server/adapters/tanstack.d.mts +10 -11
  329. package/dist/server/adapters/tanstack.mjs +11 -12
  330. package/dist/server/augmentation/actions.d.mts +279 -0
  331. package/dist/server/augmentation/common.d.mts +76 -0
  332. package/dist/server/augmentation/dashboard.d.mts +547 -0
  333. package/dist/server/augmentation/form-layout.d.mts +303 -0
  334. package/dist/server/augmentation/index.d.mts +44 -0
  335. package/dist/server/augmentation/index.mjs +10 -0
  336. package/dist/server/augmentation/sidebar.d.mts +181 -0
  337. package/dist/server/augmentation/views.d.mts +237 -0
  338. package/dist/server/augmentation.d.mts +7 -1523
  339. package/dist/server/block/index.d.mts +4 -3
  340. package/dist/server/codegen/admin-client-template.mjs +93 -0
  341. package/dist/server/codegen/projection-validator.mjs +67 -0
  342. package/dist/server/fields/blocks.d.mts +10 -78
  343. package/dist/server/fields/blocks.mjs +74 -115
  344. package/dist/server/fields/index.d.mts +6 -39
  345. package/dist/server/fields/index.mjs +6 -7
  346. package/dist/server/fields/rich-text.d.mts +10 -77
  347. package/dist/server/fields/rich-text.mjs +59 -100
  348. package/dist/server/i18n/index.mjs +8 -9
  349. package/dist/server/i18n/messages/cs.mjs +3 -3
  350. package/dist/server/i18n/messages/de.mjs +3 -3
  351. package/dist/server/i18n/messages/en.mjs +217 -3
  352. package/dist/server/i18n/messages/es.mjs +3 -3
  353. package/dist/server/i18n/messages/fr.mjs +3 -3
  354. package/dist/server/i18n/messages/index.mjs +1 -2
  355. package/dist/server/i18n/messages/pl.mjs +3 -3
  356. package/dist/server/i18n/messages/pt.mjs +3 -3
  357. package/dist/server/i18n/messages/sk.mjs +202 -3
  358. package/dist/server/modules/admin/.generated/module.d.mts +52 -0
  359. package/dist/server/modules/admin/.generated/module.mjs +78 -0
  360. package/dist/server/modules/admin/.generated/registries.d.mts +22 -0
  361. package/dist/server/{auth-helpers.d.mts → modules/admin/auth-helpers.d.mts} +13 -14
  362. package/dist/server/{auth-helpers.mjs → modules/admin/auth-helpers.mjs} +15 -16
  363. package/dist/server/{block → modules/admin/block}/block-builder.d.mts +96 -32
  364. package/dist/server/{block → modules/admin/block}/block-builder.mjs +113 -15
  365. package/dist/server/modules/admin/block/index.d.mts +3 -0
  366. package/dist/server/{block → modules/admin/block}/introspection.d.mts +10 -5
  367. package/dist/server/{block → modules/admin/block}/introspection.mjs +18 -7
  368. package/dist/server/{block → modules/admin/block}/prefetch.d.mts +17 -17
  369. package/dist/server/{block → modules/admin/block}/prefetch.mjs +17 -16
  370. package/dist/server/modules/admin/client/.generated/module.d.mts +94 -0
  371. package/dist/server/modules/admin/client/.generated/module.mjs +91 -0
  372. package/dist/server/modules/admin/client/components/badge.d.mts +1 -0
  373. package/dist/server/modules/admin/client/components/icon.d.mts +1 -0
  374. package/dist/server/modules/admin/client/fields/array.d.mts +6 -0
  375. package/dist/server/modules/admin/client/fields/array.mjs +12 -0
  376. package/dist/server/modules/admin/client/fields/assetPreview.d.mts +6 -0
  377. package/dist/server/modules/admin/client/fields/assetPreview.mjs +18 -0
  378. package/dist/server/modules/admin/client/fields/blocks.d.mts +6 -0
  379. package/dist/server/modules/admin/client/fields/blocks.mjs +12 -0
  380. package/dist/server/modules/admin/client/fields/boolean.d.mts +6 -0
  381. package/dist/server/modules/admin/client/fields/boolean.mjs +12 -0
  382. package/dist/server/modules/admin/client/fields/date.d.mts +6 -0
  383. package/dist/server/modules/admin/client/fields/date.mjs +12 -0
  384. package/dist/server/modules/admin/client/fields/datetime.d.mts +6 -0
  385. package/dist/server/modules/admin/client/fields/datetime.mjs +12 -0
  386. package/dist/server/modules/admin/client/fields/email.d.mts +6 -0
  387. package/dist/server/modules/admin/client/fields/email.mjs +12 -0
  388. package/dist/server/modules/admin/client/fields/json.d.mts +6 -0
  389. package/dist/server/modules/admin/client/fields/json.mjs +11 -0
  390. package/dist/server/modules/admin/client/fields/number.d.mts +6 -0
  391. package/dist/server/modules/admin/client/fields/number.mjs +12 -0
  392. package/dist/server/modules/admin/client/fields/object.d.mts +6 -0
  393. package/dist/server/modules/admin/client/fields/object.mjs +12 -0
  394. package/dist/server/modules/admin/client/fields/relation.d.mts +6 -0
  395. package/dist/server/modules/admin/client/fields/relation.mjs +12 -0
  396. package/dist/server/modules/admin/client/fields/richText.d.mts +6 -0
  397. package/dist/server/modules/admin/client/fields/richText.mjs +11 -0
  398. package/dist/server/modules/admin/client/fields/select.d.mts +6 -0
  399. package/dist/server/modules/admin/client/fields/select.mjs +12 -0
  400. package/dist/server/modules/admin/client/fields/text.d.mts +6 -0
  401. package/dist/server/modules/admin/client/fields/text.mjs +12 -0
  402. package/dist/server/modules/admin/client/fields/textarea.d.mts +6 -0
  403. package/dist/server/modules/admin/client/fields/textarea.mjs +12 -0
  404. package/dist/server/modules/admin/client/fields/time.d.mts +6 -0
  405. package/dist/server/modules/admin/client/fields/time.mjs +12 -0
  406. package/dist/server/modules/admin/client/fields/upload.d.mts +6 -0
  407. package/dist/server/modules/admin/client/fields/upload.mjs +12 -0
  408. package/dist/server/modules/admin/client/fields/url.d.mts +6 -0
  409. package/dist/server/modules/admin/client/fields/url.mjs +12 -0
  410. package/dist/server/modules/admin/client/index.d.mts +1 -0
  411. package/dist/server/modules/admin/client/pages/dashboard.d.mts +6 -0
  412. package/dist/server/modules/admin/client/pages/dashboard.mjs +11 -0
  413. package/dist/server/modules/admin/client/pages/forgotPassword.d.mts +6 -0
  414. package/dist/server/modules/admin/client/pages/forgotPassword.mjs +11 -0
  415. package/dist/server/modules/admin/client/pages/login.d.mts +6 -0
  416. package/dist/server/modules/admin/client/pages/login.mjs +11 -0
  417. package/dist/server/modules/admin/client/pages/resetPassword.d.mts +6 -0
  418. package/dist/server/modules/admin/client/pages/resetPassword.mjs +11 -0
  419. package/dist/server/modules/admin/client/pages/setup.d.mts +6 -0
  420. package/dist/server/modules/admin/client/pages/setup.mjs +11 -0
  421. package/dist/server/modules/admin/client/views/collection-form.mjs +10 -0
  422. package/dist/server/modules/admin/client/views/collection-table.mjs +10 -0
  423. package/dist/server/modules/admin/client/views/global-form.mjs +10 -0
  424. package/dist/server/modules/admin/client/widgets/chart.d.mts +6 -0
  425. package/dist/server/modules/admin/client/widgets/chart.mjs +7 -0
  426. package/dist/server/modules/admin/client/widgets/progress.d.mts +6 -0
  427. package/dist/server/modules/admin/client/widgets/progress.mjs +7 -0
  428. package/dist/server/modules/admin/client/widgets/quickActions.d.mts +6 -0
  429. package/dist/server/modules/admin/client/widgets/quickActions.mjs +7 -0
  430. package/dist/server/modules/admin/client/widgets/recentItems.d.mts +6 -0
  431. package/dist/server/modules/admin/client/widgets/recentItems.mjs +7 -0
  432. package/dist/server/modules/admin/client/widgets/stats.d.mts +6 -0
  433. package/dist/server/modules/admin/client/widgets/stats.mjs +7 -0
  434. package/dist/server/modules/admin/client/widgets/table.d.mts +6 -0
  435. package/dist/server/modules/admin/client/widgets/table.mjs +7 -0
  436. package/dist/server/modules/admin/client/widgets/timeline.d.mts +6 -0
  437. package/dist/server/modules/admin/client/widgets/timeline.mjs +7 -0
  438. package/dist/server/modules/admin/client/widgets/value.d.mts +6 -0
  439. package/dist/server/modules/admin/client/widgets/value.mjs +7 -0
  440. package/dist/server/modules/admin/collections/account.d.mts +77 -0
  441. package/dist/server/modules/admin/collections/account.mjs +23 -0
  442. package/dist/server/modules/admin/collections/admin-locks.d.mts +90 -0
  443. package/dist/server/modules/admin/collections/admin-locks.mjs +16 -0
  444. package/dist/server/modules/admin/collections/admin-preferences.d.mts +69 -0
  445. package/dist/server/modules/admin/collections/admin-preferences.mjs +16 -0
  446. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +83 -0
  447. package/dist/server/modules/admin/collections/admin-saved-views.mjs +16 -0
  448. package/dist/server/modules/admin/collections/apikey.d.mts +99 -0
  449. package/dist/server/modules/admin/collections/apikey.mjs +15 -0
  450. package/dist/server/modules/admin/collections/assets.d.mts +72 -0
  451. package/dist/server/modules/admin/collections/assets.mjs +71 -0
  452. package/dist/server/modules/admin/collections/session.d.mts +69 -0
  453. package/dist/server/modules/admin/collections/session.mjs +15 -0
  454. package/dist/server/modules/admin/collections/user.d.mts +85 -0
  455. package/dist/server/modules/admin/collections/user.mjs +204 -0
  456. package/dist/server/modules/admin/collections/verification.d.mts +63 -0
  457. package/dist/server/modules/admin/collections/verification.mjs +15 -0
  458. package/dist/server/modules/admin/components/badge.d.mts +10 -0
  459. package/dist/server/modules/admin/components/badge.mjs +10 -0
  460. package/dist/server/modules/admin/components/icon.d.mts +9 -0
  461. package/dist/server/modules/admin/components/icon.mjs +11 -0
  462. package/dist/server/modules/admin/config/admin.mjs +34 -0
  463. package/dist/server/modules/admin/dto/admin-config.dto.mjs +102 -0
  464. package/dist/server/modules/admin/factories.mjs +172 -0
  465. package/dist/server/modules/admin/index.d.mts +1060 -16846
  466. package/dist/server/modules/admin/index.mjs +17 -240
  467. package/dist/server/modules/admin/modules.mjs +11 -0
  468. package/dist/server/modules/admin/plugin.mjs +13 -0
  469. package/dist/server/modules/admin/routes/admin-config.d.mts +28 -0
  470. package/dist/server/modules/admin/routes/admin-config.mjs +552 -0
  471. package/dist/server/modules/admin/{functions → routes}/execute-action.d.mts +17 -32
  472. package/dist/server/modules/admin/{functions → routes}/execute-action.mjs +146 -44
  473. package/dist/server/modules/admin/routes/locales.d.mts +18 -0
  474. package/dist/server/modules/admin/routes/locales.mjs +69 -0
  475. package/dist/server/modules/admin/{functions → routes}/preview.d.mts +25 -15
  476. package/dist/server/modules/admin/{functions → routes}/preview.mjs +84 -97
  477. package/dist/server/modules/admin/{functions → routes}/reactive.d.mts +19 -44
  478. package/dist/server/modules/admin/{functions → routes}/reactive.mjs +89 -117
  479. package/dist/server/modules/admin/routes/route-helpers.d.mts +23 -0
  480. package/dist/server/modules/admin/routes/route-helpers.mjs +76 -0
  481. package/dist/server/modules/admin/{functions → routes}/setup.d.mts +11 -32
  482. package/dist/server/modules/admin/routes/setup.mjs +114 -0
  483. package/dist/server/modules/admin/routes/translations.d.mts +26 -0
  484. package/dist/server/modules/admin/routes/translations.mjs +114 -0
  485. package/dist/server/modules/admin/routes/widget-data.d.mts +32 -0
  486. package/dist/server/modules/admin/routes/widget-data.mjs +62 -0
  487. package/dist/server/modules/admin/views/form.d.mts +8 -0
  488. package/dist/server/modules/admin/views/form.mjs +7 -0
  489. package/dist/server/modules/admin/views/global-form.d.mts +8 -0
  490. package/dist/server/modules/admin/views/global-form.mjs +7 -0
  491. package/dist/server/modules/admin/views/table.d.mts +8 -0
  492. package/dist/server/modules/admin/views/table.mjs +7 -0
  493. package/dist/server/modules/admin-preferences/collections/{admin-preferences.collection.mjs → admin-preferences.mjs} +13 -24
  494. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +18 -42
  495. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +99 -0
  496. package/dist/server/modules/admin-preferences/collections/saved-views.mjs +38 -0
  497. package/dist/server/modules/audit/.generated/module.d.mts +60 -0
  498. package/dist/server/modules/audit/.generated/module.mjs +30 -0
  499. package/dist/server/modules/audit/collections/audit-log.d.mts +214 -0
  500. package/dist/server/modules/audit/collections/audit-log.mjs +107 -0
  501. package/dist/server/modules/audit/config/admin.mjs +21 -0
  502. package/dist/server/modules/audit/config/app.mjs +262 -0
  503. package/dist/server/modules/audit/index.d.mts +2 -0
  504. package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +13 -0
  505. package/dist/server/modules/audit/jobs/audit-cleanup.mjs +28 -0
  506. package/dist/server/plugin.d.mts +26 -0
  507. package/dist/server/plugin.mjs +385 -0
  508. package/dist/server/proxy-factories.d.mts +85 -0
  509. package/dist/server/proxy-factories.mjs +302 -0
  510. package/dist/server/registry-helpers.d.mts +83 -0
  511. package/dist/server/registry-helpers.mjs +104 -0
  512. package/dist/server.d.mts +30 -18
  513. package/dist/server.mjs +19 -16
  514. package/dist/shared/preview-utils.d.mts +2 -3
  515. package/dist/shared/preview-utils.mjs +2 -3
  516. package/dist/shared/types/saved-views.types.d.mts +2 -2
  517. package/package.json +50 -40
  518. package/skills/questpie-admin/SKILL.md +397 -0
  519. package/skills/questpie-admin/blocks/SKILL.md +305 -0
  520. package/skills/questpie-admin/custom-ui/SKILL.md +307 -0
  521. package/skills/questpie-admin/views/SKILL.md +442 -0
  522. package/dist/_virtual/rolldown_runtime.mjs +0 -18
  523. package/dist/augmentation.d.mts.map +0 -1
  524. package/dist/client/blocks/block-registry.d.mts +0 -199
  525. package/dist/client/blocks/block-registry.d.mts.map +0 -1
  526. package/dist/client/blocks/block-registry.mjs +0 -88
  527. package/dist/client/blocks/block-registry.mjs.map +0 -1
  528. package/dist/client/blocks/block-renderer.d.mts.map +0 -1
  529. package/dist/client/blocks/block-renderer.mjs.map +0 -1
  530. package/dist/client/blocks/prefetch.d.mts +0 -45
  531. package/dist/client/blocks/prefetch.d.mts.map +0 -1
  532. package/dist/client/blocks/prefetch.mjs +0 -26
  533. package/dist/client/blocks/prefetch.mjs.map +0 -1
  534. package/dist/client/blocks/types.d.mts.map +0 -1
  535. package/dist/client/blocks/types.mjs.map +0 -1
  536. package/dist/client/builder/admin-builder.d.mts +0 -112
  537. package/dist/client/builder/admin-builder.d.mts.map +0 -1
  538. package/dist/client/builder/admin-builder.mjs +0 -185
  539. package/dist/client/builder/admin-builder.mjs.map +0 -1
  540. package/dist/client/builder/admin-types.d.mts.map +0 -1
  541. package/dist/client/builder/admin.d.mts.map +0 -1
  542. package/dist/client/builder/admin.mjs.map +0 -1
  543. package/dist/client/builder/defaults/components.mjs +0 -20
  544. package/dist/client/builder/defaults/components.mjs.map +0 -1
  545. package/dist/client/builder/defaults/core.d.mts +0 -354
  546. package/dist/client/builder/defaults/core.d.mts.map +0 -1
  547. package/dist/client/builder/defaults/core.mjs +0 -49
  548. package/dist/client/builder/defaults/core.mjs.map +0 -1
  549. package/dist/client/builder/defaults/fields.mjs +0 -328
  550. package/dist/client/builder/defaults/fields.mjs.map +0 -1
  551. package/dist/client/builder/defaults/pages.mjs +0 -58
  552. package/dist/client/builder/defaults/pages.mjs.map +0 -1
  553. package/dist/client/builder/defaults/starter.d.mts +0 -351
  554. package/dist/client/builder/defaults/starter.d.mts.map +0 -1
  555. package/dist/client/builder/defaults/starter.mjs +0 -28
  556. package/dist/client/builder/defaults/starter.mjs.map +0 -1
  557. package/dist/client/builder/defaults/views.mjs +0 -27
  558. package/dist/client/builder/defaults/views.mjs.map +0 -1
  559. package/dist/client/builder/defaults/widgets.mjs +0 -31
  560. package/dist/client/builder/defaults/widgets.mjs.map +0 -1
  561. package/dist/client/builder/field/field.d.mts.map +0 -1
  562. package/dist/client/builder/field/field.mjs.map +0 -1
  563. package/dist/client/builder/index.d.mts.map +0 -1
  564. package/dist/client/builder/page/page.d.mts.map +0 -1
  565. package/dist/client/builder/page/page.mjs.map +0 -1
  566. package/dist/client/builder/proxies.d.mts +0 -2
  567. package/dist/client/builder/proxies.mjs +0 -24
  568. package/dist/client/builder/proxies.mjs.map +0 -1
  569. package/dist/client/builder/qa.d.mts +0 -50
  570. package/dist/client/builder/qa.d.mts.map +0 -1
  571. package/dist/client/builder/qa.mjs +0 -42
  572. package/dist/client/builder/qa.mjs.map +0 -1
  573. package/dist/client/builder/registry.d.mts.map +0 -1
  574. package/dist/client/builder/types/action-registry.d.mts +0 -2
  575. package/dist/client/builder/types/action-registry.mjs.map +0 -1
  576. package/dist/client/builder/types/action-types.d.mts.map +0 -1
  577. package/dist/client/builder/types/collection-types.d.mts +0 -199
  578. package/dist/client/builder/types/collection-types.d.mts.map +0 -1
  579. package/dist/client/builder/types/collection-types.mjs.map +0 -1
  580. package/dist/client/builder/types/common.d.mts.map +0 -1
  581. package/dist/client/builder/types/field-types.d.mts.map +0 -1
  582. package/dist/client/builder/types/field-types.mjs.map +0 -1
  583. package/dist/client/builder/types/global-types.d.mts +0 -22
  584. package/dist/client/builder/types/global-types.d.mts.map +0 -1
  585. package/dist/client/builder/types/ui-config.d.mts.map +0 -1
  586. package/dist/client/builder/types/views.d.mts +0 -89
  587. package/dist/client/builder/types/views.d.mts.map +0 -1
  588. package/dist/client/builder/types/widget-types.d.mts.map +0 -1
  589. package/dist/client/builder/validation.mjs.map +0 -1
  590. package/dist/client/builder/view/view.d.mts.map +0 -1
  591. package/dist/client/builder/view/view.mjs.map +0 -1
  592. package/dist/client/builder/widget/widget.d.mts.map +0 -1
  593. package/dist/client/builder/widget/widget.mjs.map +0 -1
  594. package/dist/client/components/actions/action-button.d.mts +0 -2
  595. package/dist/client/components/actions/action-button.mjs.map +0 -1
  596. package/dist/client/components/actions/action-dialog.d.mts +0 -2
  597. package/dist/client/components/actions/action-dialog.mjs.map +0 -1
  598. package/dist/client/components/actions/confirmation-dialog.d.mts +0 -2
  599. package/dist/client/components/actions/confirmation-dialog.mjs.map +0 -1
  600. package/dist/client/components/actions/header-actions.d.mts +0 -2
  601. package/dist/client/components/actions/header-actions.mjs.map +0 -1
  602. package/dist/client/components/actions/index.d.mts +0 -4
  603. package/dist/client/components/admin-link.d.mts.map +0 -1
  604. package/dist/client/components/admin-link.mjs.map +0 -1
  605. package/dist/client/components/auth/auth-guard.d.mts.map +0 -1
  606. package/dist/client/components/auth/auth-guard.mjs.map +0 -1
  607. package/dist/client/components/auth/auth-loading.d.mts.map +0 -1
  608. package/dist/client/components/auth/auth-loading.mjs.map +0 -1
  609. package/dist/client/components/auth/index.d.mts +0 -2
  610. package/dist/client/components/blocks/block-canvas.mjs.map +0 -1
  611. package/dist/client/components/blocks/block-editor-context.mjs.map +0 -1
  612. package/dist/client/components/blocks/block-editor-layout.mjs.map +0 -1
  613. package/dist/client/components/blocks/block-editor-provider.mjs.map +0 -1
  614. package/dist/client/components/blocks/block-fields-renderer.mjs.map +0 -1
  615. package/dist/client/components/blocks/block-insert-button.mjs.map +0 -1
  616. package/dist/client/components/blocks/block-item-menu.mjs.map +0 -1
  617. package/dist/client/components/blocks/block-item.mjs.map +0 -1
  618. package/dist/client/components/blocks/block-library-sidebar.mjs.map +0 -1
  619. package/dist/client/components/blocks/block-tree.mjs.map +0 -1
  620. package/dist/client/components/blocks/block-type-icon.mjs.map +0 -1
  621. package/dist/client/components/blocks/utils/tree-utils.mjs.map +0 -1
  622. package/dist/client/components/component-renderer.d.mts.map +0 -1
  623. package/dist/client/components/component-renderer.mjs.map +0 -1
  624. package/dist/client/components/error-boundary.mjs.map +0 -1
  625. package/dist/client/components/fields/array-field.d.mts +0 -44
  626. package/dist/client/components/fields/array-field.d.mts.map +0 -1
  627. package/dist/client/components/fields/array-field.mjs.map +0 -1
  628. package/dist/client/components/fields/asset-preview-field.d.mts +0 -52
  629. package/dist/client/components/fields/asset-preview-field.d.mts.map +0 -1
  630. package/dist/client/components/fields/asset-preview-field.mjs.map +0 -1
  631. package/dist/client/components/fields/blocks-field/blocks-field.d.mts +0 -41
  632. package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +0 -1
  633. package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +0 -1
  634. package/dist/client/components/fields/blocks-field/index.d.mts +0 -1
  635. package/dist/client/components/fields/boolean-field.d.mts +0 -30
  636. package/dist/client/components/fields/boolean-field.d.mts.map +0 -1
  637. package/dist/client/components/fields/boolean-field.mjs.map +0 -1
  638. package/dist/client/components/fields/custom-field.d.mts +0 -3
  639. package/dist/client/components/fields/date-field.d.mts +0 -22
  640. package/dist/client/components/fields/date-field.d.mts.map +0 -1
  641. package/dist/client/components/fields/date-field.mjs.map +0 -1
  642. package/dist/client/components/fields/datetime-field.d.mts +0 -23
  643. package/dist/client/components/fields/datetime-field.d.mts.map +0 -1
  644. package/dist/client/components/fields/datetime-field.mjs.map +0 -1
  645. package/dist/client/components/fields/email-field.d.mts +0 -19
  646. package/dist/client/components/fields/email-field.d.mts.map +0 -1
  647. package/dist/client/components/fields/email-field.mjs.map +0 -1
  648. package/dist/client/components/fields/embedded-collection.d.mts +0 -3
  649. package/dist/client/components/fields/field-types.d.mts +0 -571
  650. package/dist/client/components/fields/field-types.d.mts.map +0 -1
  651. package/dist/client/components/fields/field-utils.d.mts +0 -1
  652. package/dist/client/components/fields/field-utils.mjs.map +0 -1
  653. package/dist/client/components/fields/field-wrapper.d.mts +0 -3
  654. package/dist/client/components/fields/field-wrapper.mjs.map +0 -1
  655. package/dist/client/components/fields/index.d.mts +0 -33
  656. package/dist/client/components/fields/json-field.d.mts +0 -84
  657. package/dist/client/components/fields/json-field.d.mts.map +0 -1
  658. package/dist/client/components/fields/json-field.mjs.map +0 -1
  659. package/dist/client/components/fields/locale-badge.d.mts +0 -1
  660. package/dist/client/components/fields/locale-badge.mjs.map +0 -1
  661. package/dist/client/components/fields/number-field.d.mts +0 -23
  662. package/dist/client/components/fields/number-field.d.mts.map +0 -1
  663. package/dist/client/components/fields/number-field.mjs.map +0 -1
  664. package/dist/client/components/fields/object-array-field.d.mts +0 -2
  665. package/dist/client/components/fields/object-array-field.mjs.map +0 -1
  666. package/dist/client/components/fields/object-field.d.mts +0 -32
  667. package/dist/client/components/fields/object-field.d.mts.map +0 -1
  668. package/dist/client/components/fields/object-field.mjs.map +0 -1
  669. package/dist/client/components/fields/relation/displays/cards-display.d.mts +0 -2
  670. package/dist/client/components/fields/relation/displays/cards-display.mjs.map +0 -1
  671. package/dist/client/components/fields/relation/displays/chips-display.d.mts +0 -2
  672. package/dist/client/components/fields/relation/displays/chips-display.mjs.map +0 -1
  673. package/dist/client/components/fields/relation/displays/grid-display.d.mts +0 -2
  674. package/dist/client/components/fields/relation/displays/grid-display.mjs.map +0 -1
  675. package/dist/client/components/fields/relation/displays/index.d.mts +0 -6
  676. package/dist/client/components/fields/relation/displays/list-display.d.mts +0 -2
  677. package/dist/client/components/fields/relation/displays/list-display.mjs.map +0 -1
  678. package/dist/client/components/fields/relation/displays/table-display.d.mts +0 -2
  679. package/dist/client/components/fields/relation/displays/table-display.mjs.map +0 -1
  680. package/dist/client/components/fields/relation/displays/types.d.mts +0 -22
  681. package/dist/client/components/fields/relation/displays/types.d.mts.map +0 -1
  682. package/dist/client/components/fields/relation/displays/types.mjs.map +0 -1
  683. package/dist/client/components/fields/relation/index.d.mts +0 -3
  684. package/dist/client/components/fields/relation/relation-items-display.d.mts +0 -5
  685. package/dist/client/components/fields/relation/relation-items-display.mjs.map +0 -1
  686. package/dist/client/components/fields/relation-field.d.mts +0 -134
  687. package/dist/client/components/fields/relation-field.d.mts.map +0 -1
  688. package/dist/client/components/fields/relation-field.mjs.map +0 -1
  689. package/dist/client/components/fields/relation-picker.d.mts +0 -4
  690. package/dist/client/components/fields/relation-picker.mjs.map +0 -1
  691. package/dist/client/components/fields/relation-select.d.mts +0 -3
  692. package/dist/client/components/fields/relation-select.mjs.map +0 -1
  693. package/dist/client/components/fields/reverse-relation-field.d.mts +0 -2
  694. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +0 -1
  695. package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +0 -1
  696. package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +0 -1
  697. package/dist/client/components/fields/rich-text-editor/index.d.mts +0 -4
  698. package/dist/client/components/fields/rich-text-editor/index.mjs.map +0 -1
  699. package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +0 -1
  700. package/dist/client/components/fields/rich-text-editor/presets.d.mts +0 -11
  701. package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +0 -1
  702. package/dist/client/components/fields/rich-text-editor/presets.mjs.map +0 -1
  703. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +0 -1
  704. package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +0 -1
  705. package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +0 -1
  706. package/dist/client/components/fields/rich-text-editor/types.d.mts +0 -78
  707. package/dist/client/components/fields/rich-text-editor/types.d.mts.map +0 -1
  708. package/dist/client/components/fields/rich-text-editor/types.mjs.map +0 -1
  709. package/dist/client/components/fields/rich-text-editor/utils.mjs.map +0 -1
  710. package/dist/client/components/fields/rich-text-editor/variants.d.mts +0 -2
  711. package/dist/client/components/fields/rich-text-field.d.mts +0 -14
  712. package/dist/client/components/fields/rich-text-field.d.mts.map +0 -1
  713. package/dist/client/components/fields/rich-text-field.mjs.map +0 -1
  714. package/dist/client/components/fields/select-field.d.mts +0 -25
  715. package/dist/client/components/fields/select-field.d.mts.map +0 -1
  716. package/dist/client/components/fields/select-field.mjs.map +0 -1
  717. package/dist/client/components/fields/status-field.d.mts +0 -2
  718. package/dist/client/components/fields/text-field.d.mts +0 -22
  719. package/dist/client/components/fields/text-field.d.mts.map +0 -1
  720. package/dist/client/components/fields/text-field.mjs.map +0 -1
  721. package/dist/client/components/fields/textarea-field.d.mts +0 -22
  722. package/dist/client/components/fields/textarea-field.d.mts.map +0 -1
  723. package/dist/client/components/fields/textarea-field.mjs.map +0 -1
  724. package/dist/client/components/fields/time-field.d.mts +0 -20
  725. package/dist/client/components/fields/time-field.d.mts.map +0 -1
  726. package/dist/client/components/fields/time-field.mjs.map +0 -1
  727. package/dist/client/components/fields/upload-field.d.mts +0 -97
  728. package/dist/client/components/fields/upload-field.d.mts.map +0 -1
  729. package/dist/client/components/fields/upload-field.mjs.map +0 -1
  730. package/dist/client/components/filter-builder/columns-tab.d.mts +0 -1
  731. package/dist/client/components/filter-builder/columns-tab.mjs.map +0 -1
  732. package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +0 -1
  733. package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +0 -1
  734. package/dist/client/components/filter-builder/filters-tab.d.mts +0 -1
  735. package/dist/client/components/filter-builder/filters-tab.mjs.map +0 -1
  736. package/dist/client/components/filter-builder/index.d.mts +0 -5
  737. package/dist/client/components/filter-builder/saved-views-tab.d.mts +0 -1
  738. package/dist/client/components/filter-builder/saved-views-tab.mjs.map +0 -1
  739. package/dist/client/components/index.d.mts +0 -80
  740. package/dist/client/components/locale-switcher.d.mts +0 -2
  741. package/dist/client/components/locale-switcher.mjs.map +0 -1
  742. package/dist/client/components/media/media-grid.mjs.map +0 -1
  743. package/dist/client/components/media/media-picker-dialog.mjs.map +0 -1
  744. package/dist/client/components/preview/live-preview-mode.mjs.map +0 -1
  745. package/dist/client/components/preview/preview-pane.mjs.map +0 -1
  746. package/dist/client/components/primitives/asset-preview.mjs.map +0 -1
  747. package/dist/client/components/primitives/checkbox-input.mjs.map +0 -1
  748. package/dist/client/components/primitives/date-input.mjs.map +0 -1
  749. package/dist/client/components/primitives/dropzone.mjs.map +0 -1
  750. package/dist/client/components/primitives/number-input.mjs.map +0 -1
  751. package/dist/client/components/primitives/select-multi.mjs.map +0 -1
  752. package/dist/client/components/primitives/select-single.mjs.map +0 -1
  753. package/dist/client/components/primitives/text-input.mjs.map +0 -1
  754. package/dist/client/components/primitives/textarea-input.mjs.map +0 -1
  755. package/dist/client/components/primitives/time-input.mjs.map +0 -1
  756. package/dist/client/components/primitives/toggle-input.mjs.map +0 -1
  757. package/dist/client/components/primitives/types.d.mts +0 -14
  758. package/dist/client/components/primitives/types.d.mts.map +0 -1
  759. package/dist/client/components/primitives/types.mjs.map +0 -1
  760. package/dist/client/components/sheets/index.d.mts +0 -1
  761. package/dist/client/components/sheets/resource-sheet.d.mts +0 -1
  762. package/dist/client/components/sheets/resource-sheet.mjs.map +0 -1
  763. package/dist/client/components/ui/accordion.d.mts +0 -2
  764. package/dist/client/components/ui/accordion.mjs.map +0 -1
  765. package/dist/client/components/ui/alert.mjs.map +0 -1
  766. package/dist/client/components/ui/avatar.d.mts +0 -3
  767. package/dist/client/components/ui/badge.d.mts +0 -3
  768. package/dist/client/components/ui/badge.mjs.map +0 -1
  769. package/dist/client/components/ui/button.d.mts +0 -3
  770. package/dist/client/components/ui/button.mjs.map +0 -1
  771. package/dist/client/components/ui/card.d.mts +0 -2
  772. package/dist/client/components/ui/card.mjs.map +0 -1
  773. package/dist/client/components/ui/checkbox.d.mts +0 -2
  774. package/dist/client/components/ui/checkbox.mjs.map +0 -1
  775. package/dist/client/components/ui/combobox.d.mts +0 -3
  776. package/dist/client/components/ui/command.mjs.map +0 -1
  777. package/dist/client/components/ui/dialog.d.mts +0 -3
  778. package/dist/client/components/ui/dialog.mjs.map +0 -1
  779. package/dist/client/components/ui/drawer.mjs.map +0 -1
  780. package/dist/client/components/ui/dropdown-menu.d.mts +0 -3
  781. package/dist/client/components/ui/dropdown-menu.mjs.map +0 -1
  782. package/dist/client/components/ui/empty-state.mjs.map +0 -1
  783. package/dist/client/components/ui/field.d.mts +0 -3
  784. package/dist/client/components/ui/field.mjs.map +0 -1
  785. package/dist/client/components/ui/input-group.d.mts +0 -4
  786. package/dist/client/components/ui/input-group.mjs.map +0 -1
  787. package/dist/client/components/ui/input.d.mts +0 -2
  788. package/dist/client/components/ui/input.mjs.map +0 -1
  789. package/dist/client/components/ui/kbd.mjs.map +0 -1
  790. package/dist/client/components/ui/label.d.mts +0 -2
  791. package/dist/client/components/ui/label.mjs.map +0 -1
  792. package/dist/client/components/ui/popover.d.mts +0 -3
  793. package/dist/client/components/ui/popover.mjs.map +0 -1
  794. package/dist/client/components/ui/responsive-dialog.mjs.map +0 -1
  795. package/dist/client/components/ui/scroll-area.d.mts +0 -2
  796. package/dist/client/components/ui/search-input.mjs.map +0 -1
  797. package/dist/client/components/ui/select.d.mts +0 -3
  798. package/dist/client/components/ui/select.mjs.map +0 -1
  799. package/dist/client/components/ui/separator.d.mts +0 -2
  800. package/dist/client/components/ui/separator.mjs.map +0 -1
  801. package/dist/client/components/ui/sheet.d.mts +0 -3
  802. package/dist/client/components/ui/sheet.mjs.map +0 -1
  803. package/dist/client/components/ui/sidebar.d.mts +0 -8
  804. package/dist/client/components/ui/sidebar.mjs.map +0 -1
  805. package/dist/client/components/ui/skeleton.d.mts +0 -1
  806. package/dist/client/components/ui/skeleton.mjs.map +0 -1
  807. package/dist/client/components/ui/sonner.d.mts.map +0 -1
  808. package/dist/client/components/ui/sonner.mjs.map +0 -1
  809. package/dist/client/components/ui/spinner.d.mts +0 -1
  810. package/dist/client/components/ui/spinner.mjs.map +0 -1
  811. package/dist/client/components/ui/switch.d.mts +0 -2
  812. package/dist/client/components/ui/switch.mjs.map +0 -1
  813. package/dist/client/components/ui/table.d.mts +0 -2
  814. package/dist/client/components/ui/table.mjs.map +0 -1
  815. package/dist/client/components/ui/tabs.d.mts +0 -3
  816. package/dist/client/components/ui/tabs.mjs.map +0 -1
  817. package/dist/client/components/ui/textarea.d.mts +0 -2
  818. package/dist/client/components/ui/textarea.mjs.map +0 -1
  819. package/dist/client/components/ui/toolbar.mjs.map +0 -1
  820. package/dist/client/components/ui/tooltip.d.mts +0 -2
  821. package/dist/client/components/ui/tooltip.mjs.map +0 -1
  822. package/dist/client/components/widgets/chart-widget.d.mts +0 -57
  823. package/dist/client/components/widgets/chart-widget.d.mts.map +0 -1
  824. package/dist/client/components/widgets/chart-widget.mjs.map +0 -1
  825. package/dist/client/components/widgets/progress-widget.d.mts +0 -41
  826. package/dist/client/components/widgets/progress-widget.d.mts.map +0 -1
  827. package/dist/client/components/widgets/progress-widget.mjs.map +0 -1
  828. package/dist/client/components/widgets/quick-actions-widget.d.mts +0 -29
  829. package/dist/client/components/widgets/quick-actions-widget.d.mts.map +0 -1
  830. package/dist/client/components/widgets/quick-actions-widget.mjs.map +0 -1
  831. package/dist/client/components/widgets/recent-items-widget.d.mts +0 -51
  832. package/dist/client/components/widgets/recent-items-widget.d.mts.map +0 -1
  833. package/dist/client/components/widgets/recent-items-widget.mjs.map +0 -1
  834. package/dist/client/components/widgets/stats-widget.d.mts +0 -55
  835. package/dist/client/components/widgets/stats-widget.d.mts.map +0 -1
  836. package/dist/client/components/widgets/stats-widget.mjs.map +0 -1
  837. package/dist/client/components/widgets/table-widget.d.mts +0 -31
  838. package/dist/client/components/widgets/table-widget.d.mts.map +0 -1
  839. package/dist/client/components/widgets/table-widget.mjs.map +0 -1
  840. package/dist/client/components/widgets/timeline-widget.d.mts +0 -51
  841. package/dist/client/components/widgets/timeline-widget.d.mts.map +0 -1
  842. package/dist/client/components/widgets/timeline-widget.mjs.map +0 -1
  843. package/dist/client/components/widgets/value-widget.d.mts +0 -39
  844. package/dist/client/components/widgets/value-widget.d.mts.map +0 -1
  845. package/dist/client/components/widgets/value-widget.mjs.map +0 -1
  846. package/dist/client/components/widgets/widget-skeletons.mjs.map +0 -1
  847. package/dist/client/context/focus-context.d.mts.map +0 -1
  848. package/dist/client/context/focus-context.mjs.map +0 -1
  849. package/dist/client/contexts/breadcrumb-context.mjs.map +0 -1
  850. package/dist/client/hooks/typed-hooks.d.mts.map +0 -1
  851. package/dist/client/hooks/typed-hooks.mjs.map +0 -1
  852. package/dist/client/hooks/use-action.mjs.map +0 -1
  853. package/dist/client/hooks/use-admin-config.mjs.map +0 -1
  854. package/dist/client/hooks/use-admin-preferences.mjs.map +0 -1
  855. package/dist/client/hooks/use-admin-routes.mjs.map +0 -1
  856. package/dist/client/hooks/use-auth.d.mts.map +0 -1
  857. package/dist/client/hooks/use-auth.mjs.map +0 -1
  858. package/dist/client/hooks/use-collection-fields.mjs.map +0 -1
  859. package/dist/client/hooks/use-collection-meta.mjs.map +0 -1
  860. package/dist/client/hooks/use-collection-schema.mjs.map +0 -1
  861. package/dist/client/hooks/use-collection-validation.mjs.map +0 -1
  862. package/dist/client/hooks/use-collection.d.mts.map +0 -1
  863. package/dist/client/hooks/use-collection.mjs.map +0 -1
  864. package/dist/client/hooks/use-current-user.d.mts.map +0 -1
  865. package/dist/client/hooks/use-current-user.mjs.map +0 -1
  866. package/dist/client/hooks/use-field-hooks.mjs.map +0 -1
  867. package/dist/client/hooks/use-field-options.d.mts.map +0 -1
  868. package/dist/client/hooks/use-field-options.mjs.map +0 -1
  869. package/dist/client/hooks/use-global-fields.mjs.map +0 -1
  870. package/dist/client/hooks/use-global-meta.mjs.map +0 -1
  871. package/dist/client/hooks/use-global-schema.mjs.map +0 -1
  872. package/dist/client/hooks/use-global.d.mts.map +0 -1
  873. package/dist/client/hooks/use-global.mjs.map +0 -1
  874. package/dist/client/hooks/use-locks.mjs.map +0 -1
  875. package/dist/client/hooks/use-media-query.d.mts.map +0 -1
  876. package/dist/client/hooks/use-media-query.mjs.map +0 -1
  877. package/dist/client/hooks/use-prefill-params.mjs.map +0 -1
  878. package/dist/client/hooks/use-questpie-query-options.mjs.map +0 -1
  879. package/dist/client/hooks/use-reactive-fields.d.mts.map +0 -1
  880. package/dist/client/hooks/use-reactive-fields.mjs.map +0 -1
  881. package/dist/client/hooks/use-realtime-highlight.mjs.map +0 -1
  882. package/dist/client/hooks/use-saved-views.mjs.map +0 -1
  883. package/dist/client/hooks/use-search.mjs.map +0 -1
  884. package/dist/client/hooks/use-server-validation.mjs.map +0 -1
  885. package/dist/client/hooks/use-server-widget-data.d.mts.map +0 -1
  886. package/dist/client/hooks/use-server-widget-data.mjs.map +0 -1
  887. package/dist/client/hooks/use-setup-status.d.mts.map +0 -1
  888. package/dist/client/hooks/use-setup-status.mjs.map +0 -1
  889. package/dist/client/hooks/use-upload-collection.mjs.map +0 -1
  890. package/dist/client/hooks/use-upload.d.mts +0 -23
  891. package/dist/client/hooks/use-upload.d.mts.map +0 -1
  892. package/dist/client/hooks/use-upload.mjs.map +0 -1
  893. package/dist/client/hooks/use-validation-error-map.mjs.map +0 -1
  894. package/dist/client/hooks/use-view-state.mjs.map +0 -1
  895. package/dist/client/i18n/hooks.mjs.map +0 -1
  896. package/dist/client/i18n/intl-cache.mjs.map +0 -1
  897. package/dist/client/i18n/messages.mjs.map +0 -1
  898. package/dist/client/i18n/simple.d.mts.map +0 -1
  899. package/dist/client/i18n/simple.mjs.map +0 -1
  900. package/dist/client/i18n/types.d.mts.map +0 -1
  901. package/dist/client/lib/utils.d.mts +0 -1
  902. package/dist/client/lib/utils.mjs.map +0 -1
  903. package/dist/client/preview/block-scope-context.d.mts.map +0 -1
  904. package/dist/client/preview/block-scope-context.mjs.map +0 -1
  905. package/dist/client/preview/preview-banner.d.mts.map +0 -1
  906. package/dist/client/preview/preview-banner.mjs.map +0 -1
  907. package/dist/client/preview/preview-field.d.mts.map +0 -1
  908. package/dist/client/preview/preview-field.mjs.map +0 -1
  909. package/dist/client/preview/types.d.mts.map +0 -1
  910. package/dist/client/preview/types.mjs.map +0 -1
  911. package/dist/client/preview/use-collection-preview.d.mts.map +0 -1
  912. package/dist/client/preview/use-collection-preview.mjs.map +0 -1
  913. package/dist/client/runtime/content-locales-provider.mjs.map +0 -1
  914. package/dist/client/runtime/locale-scope.mjs.map +0 -1
  915. package/dist/client/runtime/provider.d.mts.map +0 -1
  916. package/dist/client/runtime/provider.mjs.map +0 -1
  917. package/dist/client/runtime/routes.d.mts.map +0 -1
  918. package/dist/client/runtime/routes.mjs.map +0 -1
  919. package/dist/client/runtime/translations-provider.d.mts +0 -2
  920. package/dist/client/runtime/translations-provider.mjs.map +0 -1
  921. package/dist/client/scope/picker.d.mts.map +0 -1
  922. package/dist/client/scope/picker.mjs.map +0 -1
  923. package/dist/client/scope/provider.d.mts.map +0 -1
  924. package/dist/client/scope/provider.mjs.map +0 -1
  925. package/dist/client/scope/types.d.mts.map +0 -1
  926. package/dist/client/utils/auto-expand-fields.mjs.map +0 -1
  927. package/dist/client/utils/build-field-definitions-from-schema.mjs.map +0 -1
  928. package/dist/client/utils/detect-relations.mjs.map +0 -1
  929. package/dist/client/utils/locale-to-flag.d.mts.map +0 -1
  930. package/dist/client/utils/locale-to-flag.mjs.map +0 -1
  931. package/dist/client/utils/routes.mjs.map +0 -1
  932. package/dist/client/views/auth/accept-invite-form.d.mts.map +0 -1
  933. package/dist/client/views/auth/accept-invite-form.mjs.map +0 -1
  934. package/dist/client/views/auth/auth-layout.d.mts.map +0 -1
  935. package/dist/client/views/auth/auth-layout.mjs.map +0 -1
  936. package/dist/client/views/auth/forgot-password-form.d.mts.map +0 -1
  937. package/dist/client/views/auth/forgot-password-form.mjs.map +0 -1
  938. package/dist/client/views/auth/index.d.mts +0 -7
  939. package/dist/client/views/auth/invite-form.d.mts +0 -1
  940. package/dist/client/views/auth/invite-form.mjs.map +0 -1
  941. package/dist/client/views/auth/login-form.d.mts.map +0 -1
  942. package/dist/client/views/auth/login-form.mjs.map +0 -1
  943. package/dist/client/views/auth/reset-password-form.d.mts.map +0 -1
  944. package/dist/client/views/auth/reset-password-form.mjs.map +0 -1
  945. package/dist/client/views/auth/setup-form.d.mts.map +0 -1
  946. package/dist/client/views/auth/setup-form.mjs.map +0 -1
  947. package/dist/client/views/collection/auto-form-fields.d.mts +0 -4
  948. package/dist/client/views/collection/auto-form-fields.mjs.map +0 -1
  949. package/dist/client/views/collection/bulk-action-toolbar.mjs.map +0 -1
  950. package/dist/client/views/collection/cells/complex-cells.d.mts +0 -46
  951. package/dist/client/views/collection/cells/complex-cells.d.mts.map +0 -1
  952. package/dist/client/views/collection/cells/complex-cells.mjs.map +0 -1
  953. package/dist/client/views/collection/cells/index.d.mts +0 -7
  954. package/dist/client/views/collection/cells/primitive-cells.d.mts +0 -76
  955. package/dist/client/views/collection/cells/primitive-cells.d.mts.map +0 -1
  956. package/dist/client/views/collection/cells/primitive-cells.mjs.map +0 -1
  957. package/dist/client/views/collection/cells/relation-cells.d.mts +0 -21
  958. package/dist/client/views/collection/cells/relation-cells.d.mts.map +0 -1
  959. package/dist/client/views/collection/cells/relation-cells.mjs.map +0 -1
  960. package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +0 -1
  961. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +0 -1
  962. package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +0 -2
  963. package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +0 -1
  964. package/dist/client/views/collection/cells/shared/relation-chip.d.mts +0 -1
  965. package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +0 -1
  966. package/dist/client/views/collection/cells/upload-cells.d.mts +0 -25
  967. package/dist/client/views/collection/cells/upload-cells.d.mts.map +0 -1
  968. package/dist/client/views/collection/cells/upload-cells.mjs.map +0 -1
  969. package/dist/client/views/collection/columns/build-columns.d.mts +0 -2
  970. package/dist/client/views/collection/columns/build-columns.mjs.map +0 -1
  971. package/dist/client/views/collection/columns/column-defaults.d.mts +0 -2
  972. package/dist/client/views/collection/columns/column-defaults.mjs.map +0 -1
  973. package/dist/client/views/collection/columns/index.d.mts +0 -3
  974. package/dist/client/views/collection/columns/types.d.mts +0 -2
  975. package/dist/client/views/collection/field-context.mjs.map +0 -1
  976. package/dist/client/views/collection/field-renderer.mjs.map +0 -1
  977. package/dist/client/views/collection/form-view.d.mts +0 -112
  978. package/dist/client/views/collection/form-view.d.mts.map +0 -1
  979. package/dist/client/views/collection/form-view.mjs.map +0 -1
  980. package/dist/client/views/collection/index.d.mts +0 -9
  981. package/dist/client/views/collection/table-view.d.mts +0 -102
  982. package/dist/client/views/collection/table-view.d.mts.map +0 -1
  983. package/dist/client/views/collection/table-view.mjs.map +0 -1
  984. package/dist/client/views/collection/view-skeletons.mjs.map +0 -1
  985. package/dist/client/views/common/global-search.d.mts +0 -1
  986. package/dist/client/views/common/global-search.mjs.map +0 -1
  987. package/dist/client/views/common/index.d.mts +0 -1
  988. package/dist/client/views/dashboard/dashboard-grid.mjs.map +0 -1
  989. package/dist/client/views/dashboard/dashboard-widget.mjs.map +0 -1
  990. package/dist/client/views/dashboard/widget-card.mjs.map +0 -1
  991. package/dist/client/views/globals/global-form-view.d.mts +0 -74
  992. package/dist/client/views/globals/global-form-view.d.mts.map +0 -1
  993. package/dist/client/views/globals/global-form-view.mjs.map +0 -1
  994. package/dist/client/views/index.d.mts +0 -28
  995. package/dist/client/views/layout/admin-layout-provider.d.mts.map +0 -1
  996. package/dist/client/views/layout/admin-layout-provider.mjs.map +0 -1
  997. package/dist/client/views/layout/admin-layout.d.mts.map +0 -1
  998. package/dist/client/views/layout/admin-layout.mjs.map +0 -1
  999. package/dist/client/views/layout/admin-root.d.mts +0 -7
  1000. package/dist/client/views/layout/admin-router.d.mts.map +0 -1
  1001. package/dist/client/views/layout/admin-router.mjs.map +0 -1
  1002. package/dist/client/views/layout/admin-sidebar.d.mts.map +0 -1
  1003. package/dist/client/views/layout/admin-sidebar.mjs.map +0 -1
  1004. package/dist/client/views/layout/admin-topbar.mjs.map +0 -1
  1005. package/dist/client/views/layout/index.d.mts +0 -5
  1006. package/dist/client/views/pages/accept-invite-page.d.mts.map +0 -1
  1007. package/dist/client/views/pages/accept-invite-page.mjs.map +0 -1
  1008. package/dist/client/views/pages/dashboard-page.d.mts.map +0 -1
  1009. package/dist/client/views/pages/dashboard-page.mjs.map +0 -1
  1010. package/dist/client/views/pages/forgot-password-page.d.mts.map +0 -1
  1011. package/dist/client/views/pages/forgot-password-page.mjs.map +0 -1
  1012. package/dist/client/views/pages/index.d.mts +0 -7
  1013. package/dist/client/views/pages/invite-page.d.mts.map +0 -1
  1014. package/dist/client/views/pages/invite-page.mjs.map +0 -1
  1015. package/dist/client/views/pages/login-page.d.mts.map +0 -1
  1016. package/dist/client/views/pages/login-page.mjs.map +0 -1
  1017. package/dist/client/views/pages/reset-password-page.d.mts.map +0 -1
  1018. package/dist/client/views/pages/reset-password-page.mjs.map +0 -1
  1019. package/dist/client/views/pages/setup-page.d.mts.map +0 -1
  1020. package/dist/client/views/pages/setup-page.mjs.map +0 -1
  1021. package/dist/client.d.mts.map +0 -1
  1022. package/dist/components/rich-text/rich-text-renderer.d.mts.map +0 -1
  1023. package/dist/components/rich-text/rich-text-renderer.mjs.map +0 -1
  1024. package/dist/server/adapters/nextjs.d.mts.map +0 -1
  1025. package/dist/server/adapters/nextjs.mjs.map +0 -1
  1026. package/dist/server/adapters/tanstack.d.mts.map +0 -1
  1027. package/dist/server/adapters/tanstack.mjs.map +0 -1
  1028. package/dist/server/augmentation.d.mts.map +0 -1
  1029. package/dist/server/auth-helpers.d.mts.map +0 -1
  1030. package/dist/server/auth-helpers.mjs.map +0 -1
  1031. package/dist/server/block/block-builder.d.mts.map +0 -1
  1032. package/dist/server/block/block-builder.mjs.map +0 -1
  1033. package/dist/server/block/introspection.d.mts.map +0 -1
  1034. package/dist/server/block/introspection.mjs.map +0 -1
  1035. package/dist/server/block/prefetch.d.mts.map +0 -1
  1036. package/dist/server/block/prefetch.mjs.map +0 -1
  1037. package/dist/server/fields/blocks.d.mts.map +0 -1
  1038. package/dist/server/fields/blocks.mjs.map +0 -1
  1039. package/dist/server/fields/index.d.mts.map +0 -1
  1040. package/dist/server/fields/index.mjs.map +0 -1
  1041. package/dist/server/fields/rich-text.d.mts.map +0 -1
  1042. package/dist/server/fields/rich-text.mjs.map +0 -1
  1043. package/dist/server/i18n/index.d.mts +0 -16
  1044. package/dist/server/i18n/index.d.mts.map +0 -1
  1045. package/dist/server/i18n/index.mjs.map +0 -1
  1046. package/dist/server/i18n/messages/cs.mjs.map +0 -1
  1047. package/dist/server/i18n/messages/de.mjs.map +0 -1
  1048. package/dist/server/i18n/messages/en.mjs.map +0 -1
  1049. package/dist/server/i18n/messages/es.mjs.map +0 -1
  1050. package/dist/server/i18n/messages/fr.mjs.map +0 -1
  1051. package/dist/server/i18n/messages/index.mjs.map +0 -1
  1052. package/dist/server/i18n/messages/pl.mjs.map +0 -1
  1053. package/dist/server/i18n/messages/pt.mjs.map +0 -1
  1054. package/dist/server/i18n/messages/sk.mjs.map +0 -1
  1055. package/dist/server/index.d.mts +0 -20
  1056. package/dist/server/modules/admin/functions/admin-config.mjs +0 -348
  1057. package/dist/server/modules/admin/functions/admin-config.mjs.map +0 -1
  1058. package/dist/server/modules/admin/functions/execute-action.d.mts.map +0 -1
  1059. package/dist/server/modules/admin/functions/execute-action.mjs.map +0 -1
  1060. package/dist/server/modules/admin/functions/locales.mjs +0 -80
  1061. package/dist/server/modules/admin/functions/locales.mjs.map +0 -1
  1062. package/dist/server/modules/admin/functions/preview.d.mts.map +0 -1
  1063. package/dist/server/modules/admin/functions/preview.mjs.map +0 -1
  1064. package/dist/server/modules/admin/functions/reactive.d.mts.map +0 -1
  1065. package/dist/server/modules/admin/functions/reactive.mjs.map +0 -1
  1066. package/dist/server/modules/admin/functions/setup.d.mts.map +0 -1
  1067. package/dist/server/modules/admin/functions/setup.mjs +0 -131
  1068. package/dist/server/modules/admin/functions/setup.mjs.map +0 -1
  1069. package/dist/server/modules/admin/functions/translations.mjs +0 -125
  1070. package/dist/server/modules/admin/functions/translations.mjs.map +0 -1
  1071. package/dist/server/modules/admin/functions/widget-data.d.mts +0 -33
  1072. package/dist/server/modules/admin/functions/widget-data.d.mts.map +0 -1
  1073. package/dist/server/modules/admin/functions/widget-data.mjs +0 -70
  1074. package/dist/server/modules/admin/functions/widget-data.mjs.map +0 -1
  1075. package/dist/server/modules/admin/index.d.mts.map +0 -1
  1076. package/dist/server/modules/admin/index.mjs.map +0 -1
  1077. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +0 -3
  1078. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +0 -1
  1079. package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +0 -3
  1080. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +0 -1
  1081. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +0 -1490
  1082. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +0 -1
  1083. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +0 -57
  1084. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +0 -1
  1085. package/dist/server/patch.d.mts +0 -100
  1086. package/dist/server/patch.d.mts.map +0 -1
  1087. package/dist/server/patch.mjs +0 -1062
  1088. package/dist/server/patch.mjs.map +0 -1
  1089. package/dist/shared/preview-utils.d.mts.map +0 -1
  1090. package/dist/shared/preview-utils.mjs.map +0 -1
  1091. package/dist/shared/types/saved-views.types.d.mts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactive.mjs","names":["currentDefs: Record<string, any>","fieldDef: any","serverCtx: ReactiveServerContext","results: z.infer<typeof reactiveResultSchema>[]","field"],"sources":["../../../../../src/server/modules/admin/functions/reactive.ts"],"sourcesContent":["/**\n * Reactive Field RPC Endpoints\n *\n * Provides server-side execution of reactive field handlers:\n * - /reactive: Batch endpoint for compute, hidden, readOnly, disabled\n * - /options: Dynamic options for select/relation fields\n */\n\nimport type {\n\tOptionsContext,\n\tReactiveContext,\n\tReactiveServerContext,\n} from \"questpie\";\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Get typed CMS app from context.\n */\nfunction getApp(ctx: { app: unknown }): Questpie<any> {\n\treturn ctx.app as Questpie<any>;\n}\n\n/**\n * Build ReactiveContext from request data.\n */\nfunction buildReactiveContext(\n\tformData: Record<string, any>,\n\tsiblingData: Record<string, any> | null,\n\tprevData: Record<string, any> | null,\n\tprevSiblingData: Record<string, any> | null,\n\tserverCtx: ReactiveServerContext,\n): ReactiveContext {\n\treturn {\n\t\tdata: formData,\n\t\tsibling: siblingData || {},\n\t\tprev: {\n\t\t\tdata: prevData || formData,\n\t\t\tsibling: prevSiblingData || siblingData || {},\n\t\t},\n\t\tctx: serverCtx,\n\t};\n}\n\n/**\n * Build OptionsContext from request data.\n */\nfunction buildOptionsContext(\n\tformData: Record<string, any>,\n\tsiblingData: Record<string, any> | null,\n\tsearch: string,\n\tpage: number,\n\tlimit: number,\n\tserverCtx: ReactiveServerContext,\n): OptionsContext {\n\treturn {\n\t\tdata: formData,\n\t\tsibling: siblingData || {},\n\t\tsearch,\n\t\tpage,\n\t\tlimit,\n\t\tctx: serverCtx,\n\t};\n}\n\n/**\n * Get collection builder by name.\n */\nfunction getCollection(cms: Questpie<any>, collectionName: string) {\n\tconst collections = cms.getCollections();\n\tconst collection = collections[collectionName];\n\tif (!collection) {\n\t\tthrow new Error(`Collection '${collectionName}' not found`);\n\t}\n\n\treturn collection;\n}\n\n/**\n * Get global builder by name.\n */\nfunction getGlobal(cms: Questpie<any>, globalName: string) {\n\tconst globals = cms.getGlobals();\n\tconst global = globals[globalName];\n\tif (!global) {\n\t\tthrow new Error(`Global '${globalName}' not found`);\n\t}\n\n\treturn global;\n}\n\n/**\n * Get entity (collection or global) builder by name and type.\n */\nfunction getEntity(\n\tcms: Questpie<any>,\n\tentityName: string,\n\ttype: \"collection\" | \"global\",\n) {\n\tif (type === \"global\") {\n\t\treturn getGlobal(cms, entityName);\n\t}\n\treturn getCollection(cms, entityName);\n}\n\n/**\n * Get field definition from collection or global.\n */\nfunction getFieldDefinition(\n\tcms: Questpie<any>,\n\tentityName: string,\n\tfieldPath: string,\n\ttype: \"collection\" | \"global\" = \"collection\",\n) {\n\tconst entity = getEntity(cms, entityName, type);\n\n\tconst fieldDefinitions = entity.state.fieldDefinitions || {};\n\n\t// Handle nested field paths (e.g., \"items.0.variant\" -> \"items.variant\")\n\tconst parts = fieldPath.split(\".\");\n\tlet currentDefs: Record<string, any> = fieldDefinitions;\n\tlet fieldDef: any = null;\n\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tconst part = parts[i];\n\n\t\t// Skip numeric indices (array positions)\n\t\tif (/^\\d+$/.test(part)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (currentDefs[part]) {\n\t\t\tfieldDef = currentDefs[part];\n\n\t\t\t// Check for nested fields (object/array)\n\t\t\tif (fieldDef.getNestedFields) {\n\t\t\t\tcurrentDefs = fieldDef.getNestedFields();\n\t\t\t} else if (fieldDef.state?.config?.of) {\n\t\t\t\t// Array field - get the \"of\" field's nested fields\n\t\t\t\tconst ofField = fieldDef.state.config.of;\n\t\t\t\tif (ofField?.getNestedFields) {\n\t\t\t\t\tcurrentDefs = ofField.getNestedFields();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Field '${part}' not found in path '${fieldPath}'`);\n\t\t}\n\t}\n\n\tif (!fieldDef) {\n\t\tconst entityType = type === \"global\" ? \"global\" : \"collection\";\n\t\tthrow new Error(\n\t\t\t`Field '${fieldPath}' not found in ${entityType} '${entityName}'`,\n\t\t);\n\t}\n\n\treturn fieldDef;\n}\n\n/**\n * Remove numeric indices from nested field paths.\n */\nfunction normalizeFieldPath(fieldPath: string): string {\n\treturn fieldPath\n\t\t.split(\".\")\n\t\t.filter((part) => !/^\\d+$/.test(part))\n\t\t.join(\".\");\n}\n\n/**\n * Generate candidate field paths for matching form entries.\n */\nfunction getFieldPathCandidates(fieldPath: string): Set<string> {\n\tconst normalized = normalizeFieldPath(fieldPath);\n\tconst candidates = new Set<string>([normalized]);\n\n\tconst parts = normalized.split(\".\");\n\tif (parts.length > 1) {\n\t\tconst leaf = parts[parts.length - 1];\n\t\tif (leaf) {\n\t\t\tcandidates.add(leaf);\n\t\t}\n\t}\n\n\treturn candidates;\n}\n\n/**\n * Find a reactive field entry in form layout items recursively.\n */\nfunction findReactiveFieldEntryInLayoutItems(\n\titems: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(items)) {\n\t\treturn null;\n\t}\n\n\tfor (const item of items) {\n\t\tif (!item || typeof item !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst entry = item as Record<string, unknown>;\n\n\t\tif (typeof entry.field === \"string\" && fieldCandidates.has(entry.field)) {\n\t\t\treturn entry;\n\t\t}\n\n\t\tif (entry.type === \"section\") {\n\t\t\tconst found = findReactiveFieldEntryInLayoutItems(\n\t\t\t\tentry.fields,\n\t\t\t\tfieldCandidates,\n\t\t\t);\n\t\t\tif (found) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (entry.type === \"tabs\") {\n\t\t\tconst found = findReactiveFieldEntryInTabs(entry.tabs, fieldCandidates);\n\t\t\tif (found) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find a reactive field entry in form sections.\n */\nfunction findReactiveFieldEntryInSections(\n\tsections: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(sections)) {\n\t\treturn null;\n\t}\n\n\tfor (const section of sections) {\n\t\tif (!section || typeof section !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst sectionConfig = section as Record<string, unknown>;\n\t\tconst found = findReactiveFieldEntryInLayoutItems(\n\t\t\tsectionConfig.fields,\n\t\t\tfieldCandidates,\n\t\t);\n\n\t\tif (found) {\n\t\t\treturn found;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find a reactive field entry in form tabs.\n */\nfunction findReactiveFieldEntryInTabs(\n\ttabs: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(tabs)) {\n\t\treturn null;\n\t}\n\n\tfor (const tab of tabs) {\n\t\tif (!tab || typeof tab !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tabConfig = tab as Record<string, unknown>;\n\n\t\tconst fromFields = findReactiveFieldEntryInLayoutItems(\n\t\t\ttabConfig.fields,\n\t\t\tfieldCandidates,\n\t\t);\n\t\tif (fromFields) {\n\t\t\treturn fromFields;\n\t\t}\n\n\t\tconst fromSections = findReactiveFieldEntryInSections(\n\t\t\ttabConfig.sections,\n\t\t\tfieldCandidates,\n\t\t);\n\t\tif (fromSections) {\n\t\t\treturn fromSections;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find field entry config from collection form configuration.\n */\nfunction findReactiveFieldEntry(\n\tformConfig: unknown,\n\tfieldPath: string,\n): Record<string, unknown> | null {\n\tif (!formConfig || typeof formConfig !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst fieldCandidates = getFieldPathCandidates(fieldPath);\n\tconst form = formConfig as Record<string, unknown>;\n\n\tconst fromFields = findReactiveFieldEntryInLayoutItems(\n\t\tform.fields,\n\t\tfieldCandidates,\n\t);\n\tif (fromFields) {\n\t\treturn fromFields;\n\t}\n\n\tconst fromSections = findReactiveFieldEntryInSections(\n\t\tform.sections,\n\t\tfieldCandidates,\n\t);\n\tif (fromSections) {\n\t\treturn fromSections;\n\t}\n\n\tconst fromTabs = findReactiveFieldEntryInTabs(form.tabs, fieldCandidates);\n\tif (fromTabs) {\n\t\treturn fromTabs;\n\t}\n\n\tif (form.sidebar && typeof form.sidebar === \"object\") {\n\t\tconst sidebar = form.sidebar as Record<string, unknown>;\n\t\treturn findReactiveFieldEntryInLayoutItems(sidebar.fields, fieldCandidates);\n\t}\n\n\treturn null;\n}\n\n/**\n * Get reactive handler from collection/global form config.\n */\nfunction getReactiveHandler(\n\tcms: Questpie<any>,\n\tentityName: string,\n\tfieldPath: string,\n\thandlerType: \"hidden\" | \"readOnly\" | \"disabled\" | \"compute\",\n\ttype: \"collection\" | \"global\" = \"collection\",\n): ((ctx: ReactiveContext) => any) | null {\n\tconst entity = getEntity(cms, entityName, type);\n\tconst formConfig = (entity.state as any).adminForm;\n\n\tconst fieldEntry = findReactiveFieldEntry(formConfig, fieldPath);\n\tif (!fieldEntry) {\n\t\treturn null;\n\t}\n\n\tconst handlerConfig = fieldEntry[handlerType];\n\tif (!handlerConfig || typeof handlerConfig === \"boolean\") {\n\t\treturn null;\n\t}\n\n\tif (typeof handlerConfig === \"function\") {\n\t\treturn handlerConfig as (ctx: ReactiveContext) => any;\n\t}\n\n\tif (\n\t\ttypeof handlerConfig === \"object\" &&\n\t\thandlerConfig !== null &&\n\t\t\"handler\" in handlerConfig &&\n\t\ttypeof (handlerConfig as { handler?: unknown }).handler === \"function\"\n\t) {\n\t\treturn (handlerConfig as { handler: (ctx: ReactiveContext) => any })\n\t\t\t.handler;\n\t}\n\n\treturn null;\n}\n\n/**\n * Get options handler from field config.\n */\nfunction getOptionsHandler(\n\tfieldDef: any,\n): ((ctx: OptionsContext) => any) | null {\n\tconst config = fieldDef.state?.config;\n\tconst options = config?.options;\n\n\tif (!options) return null;\n\n\t// Check if it's a dynamic options config\n\tif (typeof options === \"object\" && \"handler\" in options) {\n\t\treturn options.handler;\n\t}\n\n\treturn null;\n}\n\n// ============================================================================\n// Schemas\n// ============================================================================\n\n/**\n * Single reactive request in a batch.\n */\nconst reactiveRequestSchema = z.object({\n\t/** Field path (supports nested paths like \"items.0.variant\") */\n\tfield: z.string(),\n\n\t/** Type of reactive operation */\n\ttype: z.enum([\"hidden\", \"readOnly\", \"disabled\", \"compute\"]),\n\n\t/** Current form data */\n\tformData: z.record(z.string(), z.unknown()),\n\n\t/** Sibling data (for array items) */\n\tsiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Previous form data (for change detection) */\n\tprevData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Previous sibling data */\n\tprevSiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\n/**\n * Batch reactive request.\n */\nconst batchReactiveInputSchema = z.object({\n\t/** Collection or global name */\n\tcollection: z.string(),\n\n\t/** Entity type - collection or global */\n\ttype: z.enum([\"collection\", \"global\"]).default(\"collection\"),\n\n\t/** Array of reactive requests */\n\trequests: z.array(reactiveRequestSchema),\n});\n\n/**\n * Single reactive result.\n */\nconst reactiveResultSchema = z.object({\n\t/** Field path */\n\tfield: z.string(),\n\n\t/** Type of reactive operation */\n\ttype: z.enum([\"hidden\", \"readOnly\", \"disabled\", \"compute\"]),\n\n\t/** Computed value */\n\tvalue: z.unknown(),\n\n\t/** Error message if handler failed */\n\terror: z.string().optional(),\n});\n\n/**\n * Batch reactive response.\n */\nconst batchReactiveOutputSchema = z.object({\n\tresults: z.array(reactiveResultSchema),\n});\n\n/**\n * Options request.\n */\nconst optionsInputSchema = z.object({\n\t/** Collection or global name */\n\tcollection: z.string(),\n\n\t/** Entity type - collection or global */\n\ttype: z.enum([\"collection\", \"global\"]).default(\"collection\"),\n\n\t/** Field path */\n\tfield: z.string(),\n\n\t/** Current form data */\n\tformData: z.record(z.string(), z.unknown()),\n\n\t/** Sibling data (for array items) */\n\tsiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Search query */\n\tsearch: z.string().default(\"\"),\n\n\t/** Page number (0-based) */\n\tpage: z.number().int().min(0).default(0),\n\n\t/** Items per page */\n\tlimit: z.number().int().min(1).max(100).default(20),\n});\n\n/**\n * Options response.\n */\nconst optionsOutputSchema = z.object({\n\toptions: z.array(\n\t\tz.object({\n\t\t\tvalue: z.union([z.string(), z.number()]),\n\t\t\tlabel: z.union([z.string(), z.record(z.string(), z.string())]),\n\t\t}),\n\t),\n\thasMore: z.boolean().optional(),\n\ttotal: z.number().optional(),\n});\n\n// ============================================================================\n// RPC Functions\n// ============================================================================\n\n/**\n * Batch reactive endpoint.\n * Executes multiple reactive handlers in a single request.\n */\nexport const batchReactive = fn({\n\ttype: \"query\",\n\tschema: batchReactiveInputSchema,\n\toutputSchema: batchReactiveOutputSchema,\n\n\thandler: async (ctx) => {\n\t\tconst cms = getApp(ctx);\n\t\tconst { collection: entityName, type: entityType, requests } = ctx.input;\n\n\t\t// Build server context (req is not available in function handlers)\n\t\tconst serverCtx: ReactiveServerContext = {\n\t\t\tdb: ctx.db,\n\t\t\tuser: ctx.session?.user ?? null,\n\t\t\treq: new Request(\"http://localhost\"), // Placeholder - not used in handlers\n\t\t\tlocale: ctx.locale ?? \"en\",\n\t\t};\n\n\t\tconst results: z.infer<typeof reactiveResultSchema>[] = [];\n\n\t\tfor (const request of requests) {\n\t\t\tconst { field, type, formData, siblingData, prevData, prevSiblingData } =\n\t\t\t\trequest;\n\n\t\t\ttry {\n\t\t\t\t// Get field definition\n\t\t\t\tgetFieldDefinition(cms, entityName, field, entityType);\n\n\t\t\t\t// Get reactive handler\n\t\t\t\tconst handler = getReactiveHandler(\n\t\t\t\t\tcms,\n\t\t\t\t\tentityName,\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tentityType,\n\t\t\t\t);\n\n\t\t\t\tif (!handler) {\n\t\t\t\t\t// No handler found - skip\n\t\t\t\t\tresults.push({\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\terror: `No ${type} handler found for field '${field}'`,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Build context\n\t\t\t\tconst reactiveCtx = buildReactiveContext(\n\t\t\t\t\tformData as Record<string, any>,\n\t\t\t\t\tsiblingData as Record<string, any> | null,\n\t\t\t\t\tprevData as Record<string, any> | null,\n\t\t\t\t\tprevSiblingData as Record<string, any> | null,\n\t\t\t\t\tserverCtx,\n\t\t\t\t);\n\n\t\t\t\t// Execute handler\n\t\t\t\tconst value = await handler(reactiveCtx);\n\n\t\t\t\tresults.push({\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Handler error - return error message\n\t\t\t\tresults.push({\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue: undefined,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn { results };\n\t},\n});\n\n/**\n * Dynamic options endpoint.\n * Fetches options for select/relation fields with search and pagination.\n */\nexport const fieldOptions = fn({\n\ttype: \"query\",\n\tschema: optionsInputSchema,\n\toutputSchema: optionsOutputSchema,\n\n\thandler: async (ctx) => {\n\t\tconst cms = getApp(ctx);\n\t\tconst {\n\t\t\tcollection: entityName,\n\t\t\ttype: entityType,\n\t\t\tfield,\n\t\t\tformData,\n\t\t\tsiblingData,\n\t\t\tsearch,\n\t\t\tpage,\n\t\t\tlimit,\n\t\t} = ctx.input;\n\n\t\t// Build server context (req is not available in function handlers)\n\t\tconst serverCtx: ReactiveServerContext = {\n\t\t\tdb: ctx.db,\n\t\t\tuser: ctx.session?.user ?? null,\n\t\t\treq: new Request(\"http://localhost\"), // Placeholder - not used in handlers\n\t\t\tlocale: ctx.locale ?? \"en\",\n\t\t};\n\n\t\ttry {\n\t\t\t// Get field definition\n\t\t\tconst fieldDef = getFieldDefinition(cms, entityName, field, entityType);\n\n\t\t\t// Get options handler\n\t\t\tconst handler = getOptionsHandler(fieldDef);\n\n\t\t\tif (!handler) {\n\t\t\t\t// No dynamic handler - check for static options\n\t\t\t\tconst config = fieldDef.state?.config;\n\t\t\t\tif (Array.isArray(config?.options)) {\n\t\t\t\t\t// Static options - filter by search\n\t\t\t\t\tlet options = config.options as Array<{\n\t\t\t\t\t\tvalue: string | number;\n\t\t\t\t\t\tlabel: string | Record<string, string>;\n\t\t\t\t\t}>;\n\n\t\t\t\t\tif (search) {\n\t\t\t\t\t\tconst searchLower = search.toLowerCase();\n\t\t\t\t\t\toptions = options.filter((opt) => {\n\t\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\t\ttypeof opt.label === \"string\"\n\t\t\t\t\t\t\t\t\t? opt.label\n\t\t\t\t\t\t\t\t\t: Object.values(opt.label).join(\" \");\n\t\t\t\t\t\t\treturn label.toLowerCase().includes(searchLower);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Paginate\n\t\t\t\t\tconst start = page * limit;\n\t\t\t\t\tconst paginatedOptions = options.slice(start, start + limit);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toptions: paginatedOptions,\n\t\t\t\t\t\thasMore: start + limit < options.length,\n\t\t\t\t\t\ttotal: options.length,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// No options at all\n\t\t\t\treturn {\n\t\t\t\t\toptions: [],\n\t\t\t\t\thasMore: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Build context\n\t\t\tconst optionsCtx = buildOptionsContext(\n\t\t\t\tformData as Record<string, any>,\n\t\t\t\tsiblingData as Record<string, any> | null,\n\t\t\t\tsearch,\n\t\t\t\tpage,\n\t\t\t\tlimit,\n\t\t\t\tserverCtx,\n\t\t\t);\n\n\t\t\t// Execute handler\n\t\t\tconst result = await handler(optionsCtx);\n\n\t\t\treturn {\n\t\t\t\toptions: result.options || [],\n\t\t\t\thasMore: result.hasMore,\n\t\t\t\ttotal: result.total,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`Error fetching options for ${entityName}.${field}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\toptions: [],\n\t\t\t\thasMore: false,\n\t\t\t};\n\t\t}\n\t},\n});\n\n/**\n * Reactive functions bundle.\n */\nexport const reactiveFunctions = {\n\tbatchReactive,\n\tfieldOptions,\n} as const;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.mts","names":[],"sources":["../../../../../src/server/modules/admin/functions/setup.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmEA;AAoCA;AA4EA;;;;;;;;;;;;;cAhHa,iBAAe,aAAA,CAAA,uBAAA;;;;;;;;;;;;;;;;;;;;;;;;;cAoCf,kBAmEX,aAAA,CAnE2B;;;;;;;;;;;;;;;;cA4EhB"}
@@ -1,131 +0,0 @@
1
- import { z } from "zod";
2
- import { fn } from "questpie";
3
- import { eq, sql as sql$1 } from "drizzle-orm";
4
-
5
- //#region src/server/modules/admin/functions/setup.ts
6
- /**
7
- * Setup Functions
8
- *
9
- * Built-in functions for bootstrapping the first admin user.
10
- * Solves the chicken-and-egg problem where invitation-based systems
11
- * need an existing admin to create the first invitation.
12
- */
13
- /**
14
- * Helper to get typed CMS app from handler context.
15
- * Used internally for better IDE support without affecting the public API.
16
- */
17
- function getApp(ctx) {
18
- return ctx.app;
19
- }
20
- const isSetupRequiredSchema = z.object({});
21
- const isSetupRequiredOutputSchema = z.object({ required: z.boolean() });
22
- const createFirstAdminSchema = z.object({
23
- email: z.string().email("Invalid email address"),
24
- password: z.string().min(8, "Password must be at least 8 characters"),
25
- name: z.string().min(2, "Name must be at least 2 characters")
26
- });
27
- const createFirstAdminOutputSchema = z.object({
28
- success: z.boolean(),
29
- user: z.object({
30
- id: z.string(),
31
- email: z.string(),
32
- name: z.string()
33
- }).optional(),
34
- error: z.string().optional()
35
- });
36
- /**
37
- * Check if setup is required (no users exist in the system).
38
- *
39
- * @example
40
- * ```ts
41
- * const result = await client.rpc.isSetupRequired({});
42
- * if (result.required) {
43
- * // Redirect to setup page
44
- * }
45
- * ```
46
- */
47
- const isSetupRequired = fn({
48
- type: "query",
49
- schema: isSetupRequiredSchema,
50
- outputSchema: isSetupRequiredOutputSchema,
51
- handler: async (ctx) => {
52
- const app = getApp(ctx);
53
- const userCollection = app.getCollectionConfig("user");
54
- return { required: (await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count === 0 };
55
- }
56
- });
57
- /**
58
- * Create the first admin user in the system.
59
- * This function only works when no users exist (setup mode).
60
- *
61
- * Security: Once any user exists, this function will refuse to create more users.
62
- * This prevents unauthorized admin creation after initial setup.
63
- *
64
- * @example
65
- * ```ts
66
- * const result = await client.rpc.createFirstAdmin({
67
- * email: "admin@example.com",
68
- * password: "securepassword123",
69
- * name: "Admin User",
70
- * });
71
- *
72
- * if (result.success) {
73
- * // Redirect to login page
74
- * } else {
75
- * console.error(result.error);
76
- * }
77
- * ```
78
- */
79
- const createFirstAdmin = fn({
80
- type: "mutation",
81
- schema: createFirstAdminSchema,
82
- outputSchema: createFirstAdminOutputSchema,
83
- handler: async (ctx) => {
84
- const app = getApp(ctx);
85
- const input = ctx.input;
86
- const userCollection = app.getCollectionConfig("user");
87
- if ((await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count > 0) return {
88
- success: false,
89
- error: "Setup already completed - users exist in the system"
90
- };
91
- try {
92
- const signUpResult = await app.auth.api.signUpEmail({ body: {
93
- email: input.email,
94
- password: input.password,
95
- name: input.name
96
- } });
97
- if (!signUpResult.user) return {
98
- success: false,
99
- error: "Failed to create user account"
100
- };
101
- await app.db.update(userCollection.table).set({
102
- role: "admin",
103
- emailVerified: true
104
- }).where(eq(userCollection.table.id, signUpResult.user.id));
105
- return {
106
- success: true,
107
- user: {
108
- id: signUpResult.user.id,
109
- email: signUpResult.user.email,
110
- name: signUpResult.user.name
111
- }
112
- };
113
- } catch (error) {
114
- return {
115
- success: false,
116
- error: error instanceof Error ? error.message : "An unexpected error occurred"
117
- };
118
- }
119
- }
120
- });
121
- /**
122
- * Bundle of setup-related functions.
123
- */
124
- const setupFunctions = {
125
- isSetupRequired,
126
- createFirstAdmin
127
- };
128
-
129
- //#endregion
130
- export { createFirstAdmin, isSetupRequired, setupFunctions };
131
- //# sourceMappingURL=setup.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.mjs","names":[],"sources":["../../../../../src/server/modules/admin/functions/setup.ts"],"sourcesContent":["/**\n * Setup Functions\n *\n * Built-in functions for bootstrapping the first admin user.\n * Solves the chicken-and-egg problem where invitation-based systems\n * need an existing admin to create the first invitation.\n */\n\nimport { eq, sql } from \"drizzle-orm\";\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\n\n// ============================================================================\n// Type Helpers\n// ============================================================================\n\n/**\n * Helper to get typed CMS app from handler context.\n * Used internally for better IDE support without affecting the public API.\n */\nfunction getApp(ctx: { app: unknown }): Questpie<any> {\n return ctx.app as Questpie<any>;\n}\n\n// ============================================================================\n// Schema Definitions\n// ============================================================================\n\nconst isSetupRequiredSchema = z.object({});\n\nconst isSetupRequiredOutputSchema = z.object({\n required: z.boolean(),\n});\n\nconst createFirstAdminSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n name: z.string().min(2, \"Name must be at least 2 characters\"),\n});\n\nconst createFirstAdminOutputSchema = z.object({\n success: z.boolean(),\n user: z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n })\n .optional(),\n error: z.string().optional(),\n});\n\n// ============================================================================\n// Functions\n// ============================================================================\n\n/**\n * Check if setup is required (no users exist in the system).\n *\n * @example\n * ```ts\n * const result = await client.rpc.isSetupRequired({});\n * if (result.required) {\n * // Redirect to setup page\n * }\n * ```\n */\nexport const isSetupRequired = fn({\n type: \"query\",\n schema: isSetupRequiredSchema,\n outputSchema: isSetupRequiredOutputSchema,\n handler: async (ctx) => {\n const app = getApp(ctx);\n const userCollection = app.getCollectionConfig(\"user\");\n const result = await app.db\n .select({ count: sql`count(*)::int` as any })\n .from(userCollection.table);\n return { required: (result[0] as { count: number }).count === 0 };\n },\n});\n\n/**\n * Create the first admin user in the system.\n * This function only works when no users exist (setup mode).\n *\n * Security: Once any user exists, this function will refuse to create more users.\n * This prevents unauthorized admin creation after initial setup.\n *\n * @example\n * ```ts\n * const result = await client.rpc.createFirstAdmin({\n * email: \"admin@example.com\",\n * password: \"securepassword123\",\n * name: \"Admin User\",\n * });\n *\n * if (result.success) {\n * // Redirect to login page\n * } else {\n * console.error(result.error);\n * }\n * ```\n */\nexport const createFirstAdmin = fn({\n type: \"mutation\",\n schema: createFirstAdminSchema,\n outputSchema: createFirstAdminOutputSchema,\n handler: async (ctx) => {\n const app = getApp(ctx);\n const input = ctx.input as z.infer<typeof createFirstAdminSchema>;\n const userCollection = app.getCollectionConfig(\"user\");\n\n // Check if setup already completed (any users exist)\n const checkResult = await app.db\n .select({ count: sql`count(*)::int` as any })\n .from(userCollection.table);\n\n if ((checkResult[0] as { count: number }).count > 0) {\n return {\n success: false,\n error: \"Setup already completed - users exist in the system\",\n };\n }\n\n try {\n // Create user via Better Auth signUp\n const signUpResult = await app.auth.api.signUpEmail({\n body: {\n email: input.email,\n password: input.password,\n name: input.name,\n },\n });\n\n if (!signUpResult.user) {\n return {\n success: false,\n error: \"Failed to create user account\",\n };\n }\n\n // Update role to admin and verify email (first user is always admin)\n // TODO: we can also use our builder pattern for admin functions for proper typesafety here !\n // Note: Type assertion needed due to drizzle-orm duplicate dependency resolution\n await (app.db as any)\n .update(userCollection.table)\n .set({\n role: \"admin\",\n emailVerified: true,\n })\n .where(eq(userCollection.table.id as any, signUpResult.user.id));\n\n return {\n success: true,\n user: {\n id: signUpResult.user.id,\n email: signUpResult.user.email,\n name: signUpResult.user.name,\n },\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : \"An unexpected error occurred\",\n };\n }\n },\n});\n\n// ============================================================================\n// Export Bundle\n// ============================================================================\n\n/**\n * Bundle of setup-related functions.\n */\nexport const setupFunctions = {\n isSetupRequired,\n createFirstAdmin,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,SAAS,OAAO,KAAsC;AACpD,QAAO,IAAI;;AAOb,MAAM,wBAAwB,EAAE,OAAO,EAAE,CAAC;AAE1C,MAAM,8BAA8B,EAAE,OAAO,EAC3C,UAAU,EAAE,SAAS,EACtB,CAAC;AAEF,MAAM,yBAAyB,EAAE,OAAO;CACtC,OAAO,EAAE,QAAQ,CAAC,MAAM,wBAAwB;CAChD,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,yCAAyC;CACrE,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,qCAAqC;CAC9D,CAAC;AAEF,MAAM,+BAA+B,EAAE,OAAO;CAC5C,SAAS,EAAE,SAAS;CACpB,MAAM,EACH,OAAO;EACN,IAAI,EAAE,QAAQ;EACd,OAAO,EAAE,QAAQ;EACjB,MAAM,EAAE,QAAQ;EACjB,CAAC,CACD,UAAU;CACb,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC7B,CAAC;;;;;;;;;;;;AAiBF,MAAa,kBAAkB,GAAG;CAChC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,OAAO,IAAI;EACvB,MAAM,iBAAiB,IAAI,oBAAoB,OAAO;AAItD,SAAO,EAAE,WAHM,MAAM,IAAI,GACtB,OAAO,EAAE,OAAO,KAAG,iBAAwB,CAAC,CAC5C,KAAK,eAAe,MAAM,EACF,GAAyB,UAAU,GAAG;;CAEpE,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAwBF,MAAa,mBAAmB,GAAG;CACjC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,OAAO,IAAI;EACvB,MAAM,QAAQ,IAAI;EAClB,MAAM,iBAAiB,IAAI,oBAAoB,OAAO;AAOtD,OAJoB,MAAM,IAAI,GAC3B,OAAO,EAAE,OAAO,KAAG,iBAAwB,CAAC,CAC5C,KAAK,eAAe,MAAM,EAEZ,GAAyB,QAAQ,EAChD,QAAO;GACL,SAAS;GACT,OAAO;GACR;AAGH,MAAI;GAEF,MAAM,eAAe,MAAM,IAAI,KAAK,IAAI,YAAY,EAClD,MAAM;IACJ,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,MAAM,MAAM;IACb,EACF,CAAC;AAEF,OAAI,CAAC,aAAa,KAChB,QAAO;IACL,SAAS;IACT,OAAO;IACR;AAMH,SAAO,IAAI,GACR,OAAO,eAAe,MAAM,CAC5B,IAAI;IACH,MAAM;IACN,eAAe;IAChB,CAAC,CACD,MAAM,GAAG,eAAe,MAAM,IAAW,aAAa,KAAK,GAAG,CAAC;AAElE,UAAO;IACL,SAAS;IACT,MAAM;KACJ,IAAI,aAAa,KAAK;KACtB,OAAO,aAAa,KAAK;KACzB,MAAM,aAAa,KAAK;KACzB;IACF;WACM,OAAO;AACd,UAAO;IACL,SAAS;IACT,OACE,iBAAiB,QACb,MAAM,UACN;IACP;;;CAGN,CAAC;;;;AASF,MAAa,iBAAiB;CAC5B;CACA;CACD"}
@@ -1,125 +0,0 @@
1
- import { getAdminMessagesForLocale, getSupportedAdminLocales } from "../../../i18n/index.mjs";
2
- import { z } from "zod";
3
- import { fn } from "questpie";
4
-
5
- //#region src/server/modules/admin/functions/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 .messages() on QuestpieBuilder
16
- */
17
- /**
18
- * Helper to get typed CMS app from handler context.
19
- */
20
- function getApp(ctx) {
21
- return ctx.app;
22
- }
23
- /**
24
- * Get admin locale config from CMS state.
25
- */
26
- function getAdminLocaleConfig(cms) {
27
- return cms.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 .messages() on QuestpieBuilder
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.functions.getAdminTranslations({
57
- * locale: "sk",
58
- * });
59
- *
60
- * // messages contains all admin UI strings in Slovak
61
- * ```
62
- */
63
- const getAdminTranslations = fn({
64
- type: "query",
65
- schema: getAdminTranslationsSchema,
66
- outputSchema: getAdminTranslationsOutputSchema,
67
- handler: async (ctx) => {
68
- const cms = getApp(ctx);
69
- const requestedLocale = ctx.input.locale;
70
- const adminLocaleConfig = getAdminLocaleConfig(cms);
71
- const supportedLocales = adminLocaleConfig?.locales ?? getSupportedAdminLocales();
72
- const defaultLocale = adminLocaleConfig?.defaultLocale ?? "en";
73
- const locale = supportedLocales.includes(requestedLocale) ? requestedLocale : defaultLocale;
74
- const builtInMessages = getAdminMessagesForLocale(locale);
75
- const fallbackMessages = locale !== defaultLocale ? getAdminMessagesForLocale(defaultLocale) : {};
76
- const customFallbackMessages = locale !== defaultLocale ? cms.config.translations?.messages?.[defaultLocale] ?? {} : {};
77
- const customMessages = cms.config.translations?.messages?.[locale] ?? {};
78
- return {
79
- locale,
80
- messages: {
81
- ...fallbackMessages,
82
- ...customFallbackMessages,
83
- ...builtInMessages,
84
- ...customMessages
85
- },
86
- fallbackLocale: defaultLocale
87
- };
88
- }
89
- });
90
- /**
91
- * Get available admin UI locales.
92
- *
93
- * Returns locales configured via .adminLocale() or defaults to
94
- * all locales that have built-in message files.
95
- *
96
- * @example
97
- * ```ts
98
- * const { locales, defaultLocale } = await client.functions.getAdminLocales({});
99
- * // locales: ["en", "sk"]
100
- * // defaultLocale: "en"
101
- * ```
102
- */
103
- const getAdminLocales = fn({
104
- type: "query",
105
- schema: getAdminLocalesSchema,
106
- outputSchema: getAdminLocalesOutputSchema,
107
- handler: async (ctx) => {
108
- const adminLocaleConfig = getAdminLocaleConfig(getApp(ctx));
109
- return {
110
- locales: adminLocaleConfig?.locales ?? getSupportedAdminLocales(),
111
- defaultLocale: adminLocaleConfig?.defaultLocale ?? "en"
112
- };
113
- }
114
- });
115
- /**
116
- * Bundle of translation-related functions.
117
- */
118
- const translationFunctions = {
119
- getAdminTranslations,
120
- getAdminLocales
121
- };
122
-
123
- //#endregion
124
- export { getAdminLocales, getAdminTranslations, translationFunctions };
125
- //# sourceMappingURL=translations.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"translations.mjs","names":[],"sources":["../../../../../src/server/modules/admin/functions/translations.ts"],"sourcesContent":["/**\n * Admin Translations Functions\n *\n * Functions for retrieving admin UI translations from the server.\n * The client fetches translations for its current UI locale.\n *\n * This enables:\n * - Single source of truth for all translations on server\n * - Dynamic locale switching without bundling all languages\n * - Custom messages via .messages() on QuestpieBuilder\n */\n\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\nimport type { AdminLocaleConfig } from \"../../../augmentation.js\";\nimport {\n type AdminMessages,\n getAdminMessagesForLocale,\n getSupportedAdminLocales,\n} from \"../../../i18n/index.js\";\n\n// ============================================================================\n// Type Helpers\n// ============================================================================\n\n/**\n * Helper to get typed CMS app from handler context.\n */\nfunction getApp(ctx: { app: unknown }): Questpie<any> {\n return ctx.app as Questpie<any>;\n}\n\n/**\n * Get admin locale config from CMS state.\n */\nfunction getAdminLocaleConfig(\n cms: Questpie<any>,\n): AdminLocaleConfig | undefined {\n return (cms as any).state?.adminLocale;\n}\n\n// ============================================================================\n// Schema Definitions\n// ============================================================================\n\nconst getAdminTranslationsSchema = z.object({\n /** Requested locale code */\n locale: z.string(),\n});\n\nconst messageValueSchema = z.union([\n z.string(),\n z.object({ one: z.string(), other: z.string() }),\n]);\n\nconst getAdminTranslationsOutputSchema = z.object({\n /** Actual locale returned (may differ from requested if not supported) */\n locale: z.string(),\n /** Messages for the locale */\n messages: z.record(z.string(), messageValueSchema),\n /** Fallback locale */\n fallbackLocale: z.string(),\n});\n\nconst getAdminLocalesSchema = z.object({}).optional();\n\nconst getAdminLocalesOutputSchema = z.object({\n /** Available UI locales */\n locales: z.array(z.string()),\n /** Default UI locale */\n defaultLocale: z.string(),\n});\n\n// ============================================================================\n// Functions\n// ============================================================================\n\n/**\n * Get admin UI translations for a specific locale.\n *\n * Merges:\n * 1. Built-in admin messages for the locale\n * 2. Custom messages from .messages() on QuestpieBuilder\n *\n * Custom messages override built-in messages with the same key.\n *\n * @example\n * ```ts\n * // Client fetches translations\n * const { messages, locale, fallbackLocale } = await client.functions.getAdminTranslations({\n * locale: \"sk\",\n * });\n *\n * // messages contains all admin UI strings in Slovak\n * ```\n */\nexport const getAdminTranslations = fn({\n type: \"query\",\n schema: getAdminTranslationsSchema,\n outputSchema: getAdminTranslationsOutputSchema,\n handler: async (ctx) => {\n const cms = getApp(ctx);\n const input = ctx.input as z.infer<typeof getAdminTranslationsSchema>;\n const requestedLocale = input.locale;\n\n // Get admin locale config (set via .adminLocale())\n const adminLocaleConfig = getAdminLocaleConfig(cms);\n const supportedLocales =\n adminLocaleConfig?.locales ?? getSupportedAdminLocales();\n const defaultLocale = adminLocaleConfig?.defaultLocale ?? \"en\";\n\n // Resolve locale - fall back to default if not supported\n const locale = supportedLocales.includes(requestedLocale)\n ? requestedLocale\n : defaultLocale;\n\n // Get built-in admin messages for this locale\n const builtInMessages = getAdminMessagesForLocale(locale);\n\n // Get fallback messages (English by default) so missing keys still resolve\n const fallbackMessages =\n locale !== defaultLocale\n ? getAdminMessagesForLocale(defaultLocale)\n : {};\n\n // Get custom messages from .messages() on QuestpieBuilder\n const customFallbackMessages =\n locale !== defaultLocale\n ? (cms.config.translations?.messages?.[defaultLocale] ?? {})\n : {};\n const customMessages = cms.config.translations?.messages?.[locale] ?? {};\n\n // Merge: fallback → built-in → custom (later overrides earlier)\n const messages: AdminMessages = {\n ...fallbackMessages,\n ...customFallbackMessages,\n ...builtInMessages,\n ...customMessages,\n };\n\n return {\n locale,\n messages,\n fallbackLocale: defaultLocale,\n };\n },\n});\n\n/**\n * Get available admin UI locales.\n *\n * Returns locales configured via .adminLocale() or defaults to\n * all locales that have built-in message files.\n *\n * @example\n * ```ts\n * const { locales, defaultLocale } = await client.functions.getAdminLocales({});\n * // locales: [\"en\", \"sk\"]\n * // defaultLocale: \"en\"\n * ```\n */\nexport const getAdminLocales = fn({\n type: \"query\",\n schema: getAdminLocalesSchema,\n outputSchema: getAdminLocalesOutputSchema,\n handler: async (ctx) => {\n const cms = getApp(ctx);\n const adminLocaleConfig = getAdminLocaleConfig(cms);\n\n return {\n locales: adminLocaleConfig?.locales ?? getSupportedAdminLocales(),\n defaultLocale: adminLocaleConfig?.defaultLocale ?? \"en\",\n };\n },\n});\n\n// ============================================================================\n// Export Bundle\n// ============================================================================\n\n/**\n * Bundle of translation-related functions.\n */\nexport const translationFunctions = {\n getAdminTranslations,\n getAdminLocales,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA4BA,SAAS,OAAO,KAAsC;AACpD,QAAO,IAAI;;;;;AAMb,SAAS,qBACP,KAC+B;AAC/B,QAAQ,IAAY,OAAO;;AAO7B,MAAM,6BAA6B,EAAE,OAAO,EAE1C,QAAQ,EAAE,QAAQ,EACnB,CAAC;AAEF,MAAM,qBAAqB,EAAE,MAAM,CACjC,EAAE,QAAQ,EACV,EAAE,OAAO;CAAE,KAAK,EAAE,QAAQ;CAAE,OAAO,EAAE,QAAQ;CAAE,CAAC,CACjD,CAAC;AAEF,MAAM,mCAAmC,EAAE,OAAO;CAEhD,QAAQ,EAAE,QAAQ;CAElB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB;CAElD,gBAAgB,EAAE,QAAQ;CAC3B,CAAC;AAEF,MAAM,wBAAwB,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU;AAErD,MAAM,8BAA8B,EAAE,OAAO;CAE3C,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;CAE5B,eAAe,EAAE,QAAQ;CAC1B,CAAC;;;;;;;;;;;;;;;;;;;;AAyBF,MAAa,uBAAuB,GAAG;CACrC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,OAAO,IAAI;EAEvB,MAAM,kBADQ,IAAI,MACY;EAG9B,MAAM,oBAAoB,qBAAqB,IAAI;EACnD,MAAM,mBACJ,mBAAmB,WAAW,0BAA0B;EAC1D,MAAM,gBAAgB,mBAAmB,iBAAiB;EAG1D,MAAM,SAAS,iBAAiB,SAAS,gBAAgB,GACrD,kBACA;EAGJ,MAAM,kBAAkB,0BAA0B,OAAO;EAGzD,MAAM,mBACJ,WAAW,gBACP,0BAA0B,cAAc,GACxC,EAAE;EAGR,MAAM,yBACJ,WAAW,gBACN,IAAI,OAAO,cAAc,WAAW,kBAAkB,EAAE,GACzD,EAAE;EACR,MAAM,iBAAiB,IAAI,OAAO,cAAc,WAAW,WAAW,EAAE;AAUxE,SAAO;GACL;GACA,UAT8B;IAC9B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACJ;GAKC,gBAAgB;GACjB;;CAEJ,CAAC;;;;;;;;;;;;;;AAeF,MAAa,kBAAkB,GAAG;CAChC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EAEtB,MAAM,oBAAoB,qBADd,OAAO,IAAI,CAC4B;AAEnD,SAAO;GACL,SAAS,mBAAmB,WAAW,0BAA0B;GACjE,eAAe,mBAAmB,iBAAiB;GACpD;;CAEJ,CAAC;;;;AASF,MAAa,uBAAuB;CAClC;CACA;CACD"}
@@ -1,33 +0,0 @@
1
- import * as questpie15929 from "questpie";
2
-
3
- //#region src/server/modules/admin/functions/widget-data.d.ts
4
-
5
- /**
6
- * Widget Data Functions
7
- *
8
- * Provides server-side data fetching for widgets that declare a fetchFn.
9
- * Called by the client when a widget has `hasFetchFn: 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 fetchFn with server context.
16
- *
17
- * @example
18
- * ```ts
19
- * // Client usage (via useServerWidgetData hook)
20
- * const data = await client.rpc.fetchWidgetData({ widgetId: "my-widget" });
21
- * ```
22
- */
23
- declare const fetchWidgetData: questpie15929.JsonFunctionDefinition<{
24
- widgetId: string;
25
- }, any>;
26
- declare const widgetDataFunctions: {
27
- readonly fetchWidgetData: questpie15929.JsonFunctionDefinition<{
28
- widgetId: string;
29
- }, any>;
30
- };
31
- //#endregion
32
- export { fetchWidgetData, widgetDataFunctions };
33
- //# sourceMappingURL=widget-data.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-data.d.mts","names":[],"sources":["../../../../../src/server/modules/admin/functions/widget-data.ts"],"sourcesContent":[],"mappings":";;;;;;;AA4DA;AAmDA;;;;;;;;;;;;;;cAnDa,iBA6CX,aAAA,CA7C0B;;;cAmDf;4BAEH,aAAA,CAAA"}
@@ -1,70 +0,0 @@
1
- import { z } from "zod";
2
- import { fn } from "questpie";
3
-
4
- //#region src/server/modules/admin/functions/widget-data.ts
5
- /**
6
- * Widget Data Functions
7
- *
8
- * Provides server-side data fetching for widgets that declare a fetchFn.
9
- * Called by the client when a widget has `hasFetchFn: true`.
10
- */
11
- /**
12
- * Find a widget by ID in the dashboard tree (searches raw server config
13
- * which still has fetchFn attached).
14
- */
15
- function findWidgetById(items, id) {
16
- for (const item of items) if (item.type === "section") {
17
- const found = findWidgetById(item.items || [], id);
18
- if (found) return found;
19
- } else if (item.type === "tabs") for (const tab of item.tabs || []) {
20
- const found = findWidgetById(tab.items || [], id);
21
- if (found) return found;
22
- }
23
- else if (item.id === id) return item;
24
- return null;
25
- }
26
- const fetchWidgetDataSchema = z.object({ widgetId: z.string() });
27
- /**
28
- * Fetch data for a server-side widget by its ID.
29
- *
30
- * Looks up the widget in the dashboard config, evaluates its access rule,
31
- * and executes its fetchFn with server context.
32
- *
33
- * @example
34
- * ```ts
35
- * // Client usage (via useServerWidgetData hook)
36
- * const data = await client.rpc.fetchWidgetData({ widgetId: "my-widget" });
37
- * ```
38
- */
39
- const fetchWidgetData = fn({
40
- type: "query",
41
- schema: fetchWidgetDataSchema,
42
- outputSchema: z.unknown(),
43
- handler: async (ctx) => {
44
- const cms = ctx.app;
45
- const dashboard = (cms.state || {}).dashboard;
46
- if (!dashboard?.items) throw new Error("No dashboard configured");
47
- const widget = findWidgetById(dashboard.items, ctx.input.widgetId);
48
- if (!widget) throw new Error(`Widget "${ctx.input.widgetId}" not found`);
49
- if (!widget.fetchFn) throw new Error(`Widget "${ctx.input.widgetId}" has no fetchFn`);
50
- if (widget.access !== void 0) {
51
- if ((typeof widget.access === "function" ? await widget.access({
52
- app: cms,
53
- db: ctx.db,
54
- session: ctx.session,
55
- locale: ctx.locale
56
- }) : widget.access) === false) throw new Error("Access denied");
57
- }
58
- return widget.fetchFn({
59
- app: cms,
60
- db: ctx.db,
61
- session: ctx.session,
62
- locale: ctx.locale
63
- });
64
- }
65
- });
66
- const widgetDataFunctions = { fetchWidgetData };
67
-
68
- //#endregion
69
- export { fetchWidgetData, widgetDataFunctions };
70
- //# sourceMappingURL=widget-data.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-data.mjs","names":[],"sources":["../../../../../src/server/modules/admin/functions/widget-data.ts"],"sourcesContent":["/**\n * Widget Data Functions\n *\n * Provides server-side data fetching for widgets that declare a fetchFn.\n * Called by the client when a widget has `hasFetchFn: true`.\n */\n\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\nimport type { ServerDashboardItem } from \"../../../augmentation.js\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Find a widget by ID in the dashboard tree (searches raw server config\n * which still has fetchFn attached).\n */\nfunction findWidgetById(items: ServerDashboardItem[], id: string): any | null {\n for (const item of items) {\n if (item.type === \"section\") {\n const found = findWidgetById((item as any).items || [], id);\n if (found) return found;\n } else if (item.type === \"tabs\") {\n for (const tab of (item as any).tabs || []) {\n const found = findWidgetById(tab.items || [], id);\n if (found) return found;\n }\n } else if ((item as any).id === id) {\n return item;\n }\n }\n return null;\n}\n\n// ============================================================================\n// Schema\n// ============================================================================\n\nconst fetchWidgetDataSchema = z.object({\n widgetId: z.string(),\n});\n\n// ============================================================================\n// Function\n// ============================================================================\n\n/**\n * Fetch data for a server-side widget by its ID.\n *\n * Looks up the widget in the dashboard config, evaluates its access rule,\n * and executes its fetchFn with server context.\n *\n * @example\n * ```ts\n * // Client usage (via useServerWidgetData hook)\n * const data = await client.rpc.fetchWidgetData({ widgetId: \"my-widget\" });\n * ```\n */\nexport const fetchWidgetData = fn({\n type: \"query\",\n schema: fetchWidgetDataSchema,\n outputSchema: z.unknown(),\n handler: async (ctx) => {\n const cms = ctx.app as Questpie<any>;\n const state = (cms as any).state || {};\n const dashboard = state.dashboard;\n\n if (!dashboard?.items) {\n throw new Error(\"No dashboard configured\");\n }\n\n const widget = findWidgetById(dashboard.items, ctx.input.widgetId);\n if (!widget) {\n throw new Error(`Widget \"${ctx.input.widgetId}\" not found`);\n }\n if (!widget.fetchFn) {\n throw new Error(`Widget \"${ctx.input.widgetId}\" has no fetchFn`);\n }\n\n // Evaluate per-widget access (if defined)\n if (widget.access !== undefined) {\n const accessResult =\n typeof widget.access === \"function\"\n ? await widget.access({\n app: cms,\n db: (ctx as any).db,\n session: (ctx as any).session,\n locale: (ctx as any).locale,\n })\n : widget.access;\n if (accessResult === false) {\n throw new Error(\"Access denied\");\n }\n }\n\n // Execute fetchFn with server context\n return widget.fetchFn({\n app: cms,\n db: (ctx as any).db,\n session: (ctx as any).session,\n locale: (ctx as any).locale,\n });\n },\n});\n\n// ============================================================================\n// Export Bundle\n// ============================================================================\n\nexport const widgetDataFunctions = {\n fetchWidgetData,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAS,eAAe,OAA8B,IAAwB;AAC5E,MAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,SAAS,WAAW;EAC3B,MAAM,QAAQ,eAAgB,KAAa,SAAS,EAAE,EAAE,GAAG;AAC3D,MAAI,MAAO,QAAO;YACT,KAAK,SAAS,OACvB,MAAK,MAAM,OAAQ,KAAa,QAAQ,EAAE,EAAE;EAC1C,MAAM,QAAQ,eAAe,IAAI,SAAS,EAAE,EAAE,GAAG;AACjD,MAAI,MAAO,QAAO;;UAEV,KAAa,OAAO,GAC9B,QAAO;AAGX,QAAO;;AAOT,MAAM,wBAAwB,EAAE,OAAO,EACrC,UAAU,EAAE,QAAQ,EACrB,CAAC;;;;;;;;;;;;;AAkBF,MAAa,kBAAkB,GAAG;CAChC,MAAM;CACN,QAAQ;CACR,cAAc,EAAE,SAAS;CACzB,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,IAAI;EAEhB,MAAM,aADS,IAAY,SAAS,EAAE,EACd;AAExB,MAAI,CAAC,WAAW,MACd,OAAM,IAAI,MAAM,0BAA0B;EAG5C,MAAM,SAAS,eAAe,UAAU,OAAO,IAAI,MAAM,SAAS;AAClE,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,WAAW,IAAI,MAAM,SAAS,aAAa;AAE7D,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,WAAW,IAAI,MAAM,SAAS,kBAAkB;AAIlE,MAAI,OAAO,WAAW,QAUpB;QARE,OAAO,OAAO,WAAW,aACrB,MAAM,OAAO,OAAO;IAClB,KAAK;IACL,IAAK,IAAY;IACjB,SAAU,IAAY;IACtB,QAAS,IAAY;IACtB,CAAC,GACF,OAAO,YACQ,MACnB,OAAM,IAAI,MAAM,gBAAgB;;AAKpC,SAAO,OAAO,QAAQ;GACpB,KAAK;GACL,IAAK,IAAY;GACjB,SAAU,IAAY;GACtB,QAAS,IAAY;GACtB,CAAC;;CAEL,CAAC;AAMF,MAAa,sBAAsB,EACjC,iBACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/server/modules/admin/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiHa;;;;;;;;;;;;;;;;;MAwFA,KAAA,CA6JX,EAAA,MAAA,GAAA,SAAA;IAAA,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA7JW,aAAW,UAAA,CAAA,2BAAA,uBAAA;;UA6JtB,UAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA3L8B,MAAA,uBAAA,CAAA,MAAA,EAAA,OAAA,CAAA;cAAA,OAAA,uBAAA,CAAA,MAAA,EAAA,EAAA,OAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;cAsEL,SAAA,QAAA,uBAAA,CAAA,MAAA,EAAA,OAAA,CAAA;cAAA,SAAA,MAAA,uBAAA,CAAA,OAAA,EAAA,OAAA,CAAA;cAAA,SAAA,SAAA,uBAAA,CAAA,OAAA,EAAA,OAAA,CAAA;YAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAxCH,aAAA,kBAAA,aAAA,CAAA;cAAA,GAAA,EAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA9BQ;gBAAA,YAAA,CAAA,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAsEL,qBAAA,aAAA,kBAAA,YAAA,CAAA;;;;;;;;;;;;uBAAA,YAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAxCH,oBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAAA,OAAA,uBAAA,CAAA,MAAA,EAAA,OAAA,CAAA;UAAA,QAAA,uBAAA,CAAA,MAAA,EAAA,OAAA,CAAA;UAAA,QAAA,uBAAA,CAAA,MAAA,EAAA,OAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/server/modules/admin/index.ts"],"sourcesContent":["/**\n * Admin Module\n *\n * Complete backend module for running the QUESTPIE admin panel.\n * This is the main entry point for setting up the admin backend.\n *\n * Includes:\n * - Auth collections (users, sessions, accounts, verifications, apikeys)\n * - Assets collection with file upload support\n * - Admin saved views collection (named view configurations)\n * - Admin preferences collection (user-specific view state)\n * - Setup functions for bootstrapping first admin\n * - Core auth options (Better Auth configuration)\n *\n * @example\n * ```ts\n * import { q } from \"questpie\";\n * import { adminModule } from \"@questpie/admin/server\";\n *\n * const cms = q({ name: \"my-app\" })\n * .use(adminModule)\n * .collections({\n * posts: postsCollection,\n * })\n * .build({\n * db: { url: process.env.DATABASE_URL },\n * storage: { driver: s3Driver(...) },\n * });\n * ```\n */\n\nimport { CollectionBuilder, q, rpc, starterModule } from \"questpie\";\n// Side-effect imports: apply runtime patches and type augmentation\nimport \"../../augmentation.js\";\nimport \"../../patch.js\";\nimport { adminFields } from \"../../fields/index.js\";\nimport { adminPreferencesCollection } from \"../admin-preferences/collections/admin-preferences.collection.js\";\nimport { locksCollection } from \"../admin-preferences/collections/locks.collection.js\";\nimport { savedViewsCollection } from \"../admin-preferences/collections/saved-views.collection.js\";\nimport { adminConfigFunctions } from \"./functions/admin-config.js\";\nimport { actionFunctions } from \"./functions/execute-action.js\";\nimport { localeFunctions } from \"./functions/locales.js\";\nimport { previewFunctions } from \"./functions/preview.js\";\nimport { reactiveFunctions } from \"./functions/reactive.js\";\nimport { setupFunctions } from \"./functions/setup.js\";\nimport { translationFunctions } from \"./functions/translations.js\";\nimport { widgetDataFunctions } from \"./functions/widget-data.js\";\n\n// Re-export admin preferences collection\nexport { adminPreferencesCollection } from \"../admin-preferences/collections/admin-preferences.collection.js\";\n// Re-export locks collection\nexport { locksCollection } from \"../admin-preferences/collections/locks.collection.js\";\n// Re-export saved views types\nexport {\n\ttype FilterOperator,\n\ttype FilterRule,\n\ttype SortConfig,\n\tsavedViewsCollection,\n\ttype ViewConfiguration,\n} from \"../admin-preferences/collections/saved-views.collection.js\";\n// Re-export admin config functions\nexport {\n\tadminConfigFunctions,\n\tgetAdminConfig,\n} from \"./functions/admin-config.js\";\n// Re-export action functions\nexport {\n\tactionFunctions,\n\ttype ExecuteActionRequest,\n\ttype ExecuteActionResponse,\n\texecuteAction,\n\texecuteActionFn,\n\tgetActionsConfig,\n\tgetActionsConfigFn,\n} from \"./functions/execute-action.js\";\n// Re-export locale functions for individual use\nexport { getContentLocales, localeFunctions } from \"./functions/locales.js\";\n// Re-export server-only preview functions (crypto-based token verification)\n// For browser-safe utilities (isDraftMode, createDraftModeCookie, etc.), use @questpie/admin/shared\nexport {\n\tcreatePreviewFunctions,\n\tcreatePreviewTokenVerifier,\n\tgetPreviewUrl,\n\ttype PreviewTokenPayload,\n\tpreviewFunctions,\n\tverifyPreviewTokenDirect,\n} from \"./functions/preview.js\";\n// Re-export reactive field functions\nexport {\n\tbatchReactive,\n\tfieldOptions,\n\treactiveFunctions,\n} from \"./functions/reactive.js\";\n// Re-export setup functions for individual use\nexport {\n\tcreateFirstAdmin,\n\tisSetupRequired,\n\tsetupFunctions,\n} from \"./functions/setup.js\";\n// Re-export translation functions for individual use\nexport {\n\tgetAdminLocales,\n\tgetAdminTranslations,\n\ttranslationFunctions,\n} from \"./functions/translations.js\";\n// Re-export widget data functions\nexport {\n\tfetchWidgetData,\n\twidgetDataFunctions,\n} from \"./functions/widget-data.js\";\n\nconst r = rpc();\n\nexport const adminRpc = r.router({\n\t...setupFunctions,\n\t...localeFunctions,\n\t...previewFunctions,\n\t...adminConfigFunctions,\n\t...actionFunctions,\n\t...translationFunctions,\n\t...widgetDataFunctions,\n\t...reactiveFunctions,\n});\n\nfunction bindCollectionToBuilder<TCollection extends CollectionBuilder<any>>(\n\tcollection: TCollection,\n\tbuilder: unknown,\n): TCollection {\n\tconst rebound = new CollectionBuilder({\n\t\t...(collection.state as any),\n\t\t\"~questpieApp\": builder,\n\t} as any);\n\n\tif ((collection as any)._indexesFn) {\n\t\t(rebound as any)._indexesFn = (collection as any)._indexesFn;\n\t}\n\n\treturn rebound as TCollection;\n}\n\nconst adminBaseBuilder = q({ name: \"questpie-admin\" })\n\t// Include all starterModule functionality (auth, assets)\n\t.use(starterModule)\n\t// Register default server-side view/component registries.\n\t// These must exist so server config builders (`c.*`, `v.*`) resolve from registry.\n\t.listViews({\n\t\ttable: q.listView(\"table\"),\n\t})\n\t.editViews({\n\t\tform: q.editView(\"form\"),\n\t})\n\t.components({\n\t\ticon: q.component(\"icon\"),\n\t\tbadge: q.component(\"badge\"),\n\t});\n\n/**\n * Admin Module - the complete backend for QUESTPIE admin panel.\n *\n * This module provides everything needed to run the admin panel:\n * - User authentication (Better Auth) - from starterModule\n * - File uploads (assets) - from starterModule\n * - Saved views for collection filters (named configurations)\n * - User preferences (view state synced across devices)\n * - Setup flow for first admin creation\n *\n * @example\n * ```ts\n * import { q } from \"questpie\";\n * import { adminModule } from \"@questpie/admin/server\";\n *\n * const cms = q({ name: \"my-app\" })\n * .use(adminModule)\n * .collections({\n * posts: postsCollection,\n * })\n * .build({\n * db: { url: process.env.DATABASE_URL },\n * });\n * ```\n *\n * @example\n * ```ts\n * // Extend assets collection with custom fields\n * import { q, collection, varchar } from \"questpie\";\n * import { adminModule } from \"@questpie/admin/server\";\n *\n * const cms = q({ name: \"my-app\" })\n * .use(adminModule)\n * .collections({\n * // Override assets with additional fields\n * assets: adminModule.state.collections.assets.merge(\n * collection(\"assets\").fields({\n * folder: varchar(\"folder\", { length: 255 }),\n * tags: varchar(\"tags\", { length: 1000 }),\n * })\n * ),\n * })\n * .build({ ... });\n * ```\n */\nexport const adminModule = adminBaseBuilder\n\t// Register admin-specific field types (richText, blocks)\n\t.fields(adminFields)\n\t// Add admin-specific collections with admin UI config\n\t.collections({\n\t\t// Override auth collections with admin UI config\n\t\tuser: bindCollectionToBuilder(\n\t\t\tstarterModule.state.collections.user,\n\t\t\tadminBaseBuilder,\n\t\t)\n\t\t\t.admin(({ c }) => ({\n\t\t\t\tlabel: { key: \"defaults.users.label\" },\n\t\t\t\ticon: c.icon(\"ph:users\"),\n\t\t\t\tdescription: { key: \"defaults.users.description\" },\n\t\t\t\tgroup: \"administration\",\n\t\t\t}))\n\t\t\t.list(({ v, f, a }) =>\n\t\t\t\tv.table({\n\t\t\t\t\tcolumns: [f.name, f.email, f.role, f.banned],\n\t\t\t\t\tsearchable: [f.name, f.email],\n\t\t\t\t\tdefaultSort: { field: f.name, direction: \"asc\" },\n\t\t\t\t\tactions: {\n\t\t\t\t\t\theader: { primary: [a.create], secondary: [] },\n\t\t\t\t\t\trow: [a.delete],\n\t\t\t\t\t\tbulk: [a.deleteMany],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.form(({ v, f }) =>\n\t\t\t\tv.form({\n\t\t\t\t\tsidebar: {\n\t\t\t\t\t\tposition: \"right\",\n\t\t\t\t\t\tfields: [f.image, f.role, f.emailVerified],\n\t\t\t\t\t},\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"tabs\",\n\t\t\t\t\t\t\ttabs: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: \"profile\",\n\t\t\t\t\t\t\t\t\tlabel: { key: \"defaults.users.tabs.profile\" },\n\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"section\",\n\t\t\t\t\t\t\t\t\t\t\tlabel: { key: \"defaults.users.sections.basicInfo\" },\n\t\t\t\t\t\t\t\t\t\t\tlayout: \"grid\",\n\t\t\t\t\t\t\t\t\t\t\tcolumns: 2,\n\t\t\t\t\t\t\t\t\t\t\tfields: [f.name, f.email],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: \"security\",\n\t\t\t\t\t\t\t\t\tlabel: { key: \"defaults.users.tabs.security\" },\n\t\t\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"section\",\n\t\t\t\t\t\t\t\t\t\t\tlabel: { key: \"defaults.users.sections.accessControl\" },\n\t\t\t\t\t\t\t\t\t\t\tfields: [f.banned, f.banReason, f.banExpires],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t),\n\n\t\tassets: bindCollectionToBuilder(\n\t\t\tstarterModule.state.collections.assets,\n\t\t\tadminBaseBuilder,\n\t\t)\n\t\t\t.admin(({ c }) => ({\n\t\t\t\tlabel: { key: \"defaults.assets.label\" },\n\t\t\t\ticon: c.icon(\"ph:image\"),\n\t\t\t\tdescription: { key: \"defaults.assets.description\" },\n\t\t\t\tgroup: \"administration\",\n\t\t\t}))\n\t\t\t.list(({ v, f, a }) =>\n\t\t\t\tv.table({\n\t\t\t\t\t// Note: filename, mimeType, size, createdAt are upload fields (added by .upload())\n\t\t\t\t\t// so we use string literals instead of f.* proxy\n\t\t\t\t\tcolumns: [\"filename\", \"mimeType\", \"size\"],\n\t\t\t\t\tsearchable: [\"filename\", f.alt],\n\t\t\t\t\tdefaultSort: { field: \"createdAt\", direction: \"desc\" },\n\t\t\t\t\tactions: {\n\t\t\t\t\t\theader: { primary: [], secondary: [] },\n\t\t\t\t\t\trow: [a.delete],\n\t\t\t\t\t\tbulk: [a.deleteMany],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.form(({ v, f }) =>\n\t\t\t\tv.form({\n\t\t\t\t\tsidebar: {\n\t\t\t\t\t\tposition: \"right\",\n\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"section\",\n\t\t\t\t\t\t\t\tlabel: { key: \"defaults.assets.sections.fileInfo\" },\n\t\t\t\t\t\t\t\t// Note: filename, mimeType, size, visibility are upload fields\n\t\t\t\t\t\t\t\tfields: [\"filename\", \"mimeType\", \"size\", \"visibility\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"section\",\n\t\t\t\t\t\t\tlabel: { key: \"defaults.assets.sections.dimensions\" },\n\t\t\t\t\t\t\tlayout: \"grid\",\n\t\t\t\t\t\t\tcolumns: 2,\n\t\t\t\t\t\t\tfields: [f.width, f.height],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"section\",\n\t\t\t\t\t\t\tlabel: { key: \"defaults.assets.sections.metadata\" },\n\t\t\t\t\t\t\tfields: [f.alt, f.caption],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t),\n\n\t\t// Hide internal auth collections\n\t\tsession: starterModule.state.collections.session.admin({ hidden: true }),\n\t\taccount: starterModule.state.collections.account.admin({ hidden: true }),\n\t\tverification: starterModule.state.collections.verification.admin({\n\t\t\thidden: true,\n\t\t}),\n\t\tapikey: starterModule.state.collections.apikey.admin({ hidden: true }),\n\n\t\t// Admin-specific collections (hidden from sidebar)\n\t\tadminSavedViews: savedViewsCollection.admin({ hidden: true }),\n\t\tadminPreferences: adminPreferencesCollection.admin({ hidden: true }),\n\t\tadminLocks: locksCollection.admin({ hidden: true }),\n\t})\n\t// Default sidebar\n\t.sidebar(({ s, c }) =>\n\t\ts.sidebar({\n\t\t\tsections: [\n\t\t\t\ts.section({\n\t\t\t\t\tid: \"administration\",\n\t\t\t\t\ttitle: { key: \"defaults.sidebar.administration\" },\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"collection\",\n\t\t\t\t\t\t\tcollection: \"user\",\n\t\t\t\t\t\t\ticon: c.icon(\"ph:users\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"collection\",\n\t\t\t\t\t\t\tcollection: \"assets\",\n\t\t\t\t\t\t\ticon: c.icon(\"ph:image\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t}),\n\t);\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import "questpie/shared";
2
- import "zod";
3
- import "drizzle-orm/pg-core";
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-preferences.collection.mjs","names":[],"sources":["../../../../../src/server/modules/admin-preferences/collections/admin-preferences.collection.ts"],"sourcesContent":["import { uniqueIndex } from \"drizzle-orm/pg-core\";\nimport { q } from \"questpie\";\n\n/**\n * Admin Preferences Collection\n *\n * Stores user-specific preferences for admin UI state.\n * This includes view configurations (columns, filters, sort)\n * that persist across devices and sessions.\n *\n * Key format: \"viewState:{collectionName}\" for view state preferences\n *\n * @example\n * ```ts\n * import { adminModule } from \"@questpie/admin/server\";\n *\n * const cms = q({ name: \"my-app\" })\n * .use(adminModule)\n * .collections({ ... })\n * .build({ ... });\n *\n * // Access preferences\n * const prefs = await cms.api.collections.adminPreferences.findOne({\n * where: { userId: currentUser.id, key: \"viewState:posts\" }\n * });\n * ```\n */\nexport const adminPreferencesCollection = q\n .collection(\"admin_preferences\")\n .fields((f) => ({\n // User who owns this preference\n userId: f.text({ required: true, maxLength: 255, label: \"User ID\" }),\n\n // Preference key (e.g., \"viewState:posts\")\n key: f.text({ required: true, maxLength: 255, label: \"Key\" }),\n\n // Preference value (JSON)\n value: f.json({ required: true, label: \"Value\" }),\n }))\n .options({\n timestamps: true,\n })\n .indexes(({ table }) => [\n // Unique constraint on userId + key\n // Type assertion needed due to Drizzle ORM duplicate dependency resolution\n uniqueIndex(\"admin_preferences_user_key_idx\").on(\n table.userId as any,\n table.key as any,\n ),\n ]);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,6BAA6B,EACvC,WAAW,oBAAoB,CAC/B,QAAQ,OAAO;CAEd,QAAQ,EAAE,KAAK;EAAE,UAAU;EAAM,WAAW;EAAK,OAAO;EAAW,CAAC;CAGpE,KAAK,EAAE,KAAK;EAAE,UAAU;EAAM,WAAW;EAAK,OAAO;EAAO,CAAC;CAG7D,OAAO,EAAE,KAAK;EAAE,UAAU;EAAM,OAAO;EAAS,CAAC;CAClD,EAAE,CACF,QAAQ,EACP,YAAY,MACb,CAAC,CACD,SAAS,EAAE,YAAY,CAGtB,YAAY,iCAAiC,CAAC,GAC5C,MAAM,QACN,MAAM,IACP,CACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import "questpie/shared";
2
- import "zod";
3
- import "drizzle-orm/pg-core";
@@ -1 +0,0 @@
1
- {"version":3,"file":"locks.collection.mjs","names":[],"sources":["../../../../../src/server/modules/admin-preferences/collections/locks.collection.ts"],"sourcesContent":["import { q } from \"questpie\";\n\n/**\n * Admin Locks Collection\n *\n * Stores document locks for collaborative editing awareness.\n * When a user opens a document for editing, a lock is created.\n * Other users see who is editing and the document becomes read-only for them.\n *\n * Lock behavior:\n * - Locks expire after 60 seconds without heartbeat\n * - Client sends heartbeat every 30 seconds to keep lock alive\n * - On browser close/crash, lock expires automatically\n * - Realtime subscription shows locks in table rows\n *\n * @example\n * ```ts\n * // Acquire lock when opening document\n * await cms.api.collections.adminLocks.create({\n * resourceType: \"collection\",\n * resource: \"posts\",\n * resourceId: \"123\",\n * userId: currentUser.id,\n * userName: currentUser.name,\n * expiresAt: new Date(Date.now() + 60000),\n * });\n *\n * // Heartbeat to keep lock alive\n * await cms.api.collections.adminLocks.update({\n * id: lockId,\n * data: { expiresAt: new Date(Date.now() + 60000) },\n * });\n *\n * // Release lock when closing document\n * await cms.api.collections.adminLocks.delete({ id: lockId });\n * ```\n */\nexport const locksCollection = q\n\t.collection(\"admin_locks\")\n\t.fields((f) => ({\n\t\t// Resource type: \"collection\" or \"global\"\n\t\tresourceType: f.select({\n\t\t\trequired: true,\n\t\t\toptions: [\n\t\t\t\t{ value: \"collection\", label: \"Collection\" },\n\t\t\t\t{ value: \"global\", label: \"Global\" },\n\t\t\t],\n\t\t\tlabel: \"Resource Type\",\n\t\t}),\n\n\t\t// Resource name (collection slug or global slug)\n\t\tresource: f.text({\n\t\t\trequired: true,\n\t\t\tmaxLength: 255,\n\t\t\tlabel: \"Resource\",\n\t\t}),\n\n\t\t// Document ID being locked\n\t\tresourceId: f.text({\n\t\t\trequired: true,\n\t\t\tmaxLength: 255,\n\t\t\tlabel: \"Resource ID\",\n\t\t}),\n\n\t\t// User who holds the lock (relation to user collection)\n\t\tuser: f.relation({\n\t\t\tto: \"user\",\n\t\t\trequired: true,\n\t\t\tlabel: \"User\",\n\t\t}),\n\n\t\t// Browser session ID (unique per tab, allows same user to edit in multiple tabs)\n\t\tsessionId: f.text({\n\t\t\trequired: true,\n\t\t\tmaxLength: 64,\n\t\t\tlabel: \"Session ID\",\n\t\t}),\n\n\t\t// Lock expiration time (refreshed by heartbeat)\n\t\texpiresAt: f.date({\n\t\t\trequired: true,\n\t\t\tlabel: \"Expires At\",\n\t\t}),\n\t}))\n\t.options({\n\t\ttimestamps: true,\n\t});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAa,kBAAkB,EAC7B,WAAW,cAAc,CACzB,QAAQ,OAAO;CAEf,cAAc,EAAE,OAAO;EACtB,UAAU;EACV,SAAS,CACR;GAAE,OAAO;GAAc,OAAO;GAAc,EAC5C;GAAE,OAAO;GAAU,OAAO;GAAU,CACpC;EACD,OAAO;EACP,CAAC;CAGF,UAAU,EAAE,KAAK;EAChB,UAAU;EACV,WAAW;EACX,OAAO;EACP,CAAC;CAGF,YAAY,EAAE,KAAK;EAClB,UAAU;EACV,WAAW;EACX,OAAO;EACP,CAAC;CAGF,MAAM,EAAE,SAAS;EAChB,IAAI;EACJ,UAAU;EACV,OAAO;EACP,CAAC;CAGF,WAAW,EAAE,KAAK;EACjB,UAAU;EACV,WAAW;EACX,OAAO;EACP,CAAC;CAGF,WAAW,EAAE,KAAK;EACjB,UAAU;EACV,OAAO;EACP,CAAC;CACF,EAAE,CACF,QAAQ,EACR,YAAY,MACZ,CAAC"}