@questpie/admin 2.0.0 → 3.0.1

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 (1087) hide show
  1. package/README.md +173 -143
  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 +5 -6
  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 +2 -3
  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 +21 -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 +51 -40
  518. package/dist/_virtual/rolldown_runtime.mjs +0 -18
  519. package/dist/augmentation.d.mts.map +0 -1
  520. package/dist/client/blocks/block-registry.d.mts +0 -199
  521. package/dist/client/blocks/block-registry.d.mts.map +0 -1
  522. package/dist/client/blocks/block-registry.mjs +0 -88
  523. package/dist/client/blocks/block-registry.mjs.map +0 -1
  524. package/dist/client/blocks/block-renderer.d.mts.map +0 -1
  525. package/dist/client/blocks/block-renderer.mjs.map +0 -1
  526. package/dist/client/blocks/prefetch.d.mts +0 -45
  527. package/dist/client/blocks/prefetch.d.mts.map +0 -1
  528. package/dist/client/blocks/prefetch.mjs +0 -26
  529. package/dist/client/blocks/prefetch.mjs.map +0 -1
  530. package/dist/client/blocks/types.d.mts.map +0 -1
  531. package/dist/client/blocks/types.mjs.map +0 -1
  532. package/dist/client/builder/admin-builder.d.mts +0 -112
  533. package/dist/client/builder/admin-builder.d.mts.map +0 -1
  534. package/dist/client/builder/admin-builder.mjs +0 -185
  535. package/dist/client/builder/admin-builder.mjs.map +0 -1
  536. package/dist/client/builder/admin-types.d.mts.map +0 -1
  537. package/dist/client/builder/admin.d.mts.map +0 -1
  538. package/dist/client/builder/admin.mjs.map +0 -1
  539. package/dist/client/builder/defaults/components.mjs +0 -20
  540. package/dist/client/builder/defaults/components.mjs.map +0 -1
  541. package/dist/client/builder/defaults/core.d.mts +0 -354
  542. package/dist/client/builder/defaults/core.d.mts.map +0 -1
  543. package/dist/client/builder/defaults/core.mjs +0 -49
  544. package/dist/client/builder/defaults/core.mjs.map +0 -1
  545. package/dist/client/builder/defaults/fields.mjs +0 -328
  546. package/dist/client/builder/defaults/fields.mjs.map +0 -1
  547. package/dist/client/builder/defaults/pages.mjs +0 -58
  548. package/dist/client/builder/defaults/pages.mjs.map +0 -1
  549. package/dist/client/builder/defaults/starter.d.mts +0 -351
  550. package/dist/client/builder/defaults/starter.d.mts.map +0 -1
  551. package/dist/client/builder/defaults/starter.mjs +0 -28
  552. package/dist/client/builder/defaults/starter.mjs.map +0 -1
  553. package/dist/client/builder/defaults/views.mjs +0 -27
  554. package/dist/client/builder/defaults/views.mjs.map +0 -1
  555. package/dist/client/builder/defaults/widgets.mjs +0 -31
  556. package/dist/client/builder/defaults/widgets.mjs.map +0 -1
  557. package/dist/client/builder/field/field.d.mts.map +0 -1
  558. package/dist/client/builder/field/field.mjs.map +0 -1
  559. package/dist/client/builder/index.d.mts.map +0 -1
  560. package/dist/client/builder/page/page.d.mts.map +0 -1
  561. package/dist/client/builder/page/page.mjs.map +0 -1
  562. package/dist/client/builder/proxies.d.mts +0 -2
  563. package/dist/client/builder/proxies.mjs +0 -24
  564. package/dist/client/builder/proxies.mjs.map +0 -1
  565. package/dist/client/builder/qa.d.mts +0 -50
  566. package/dist/client/builder/qa.d.mts.map +0 -1
  567. package/dist/client/builder/qa.mjs +0 -42
  568. package/dist/client/builder/qa.mjs.map +0 -1
  569. package/dist/client/builder/registry.d.mts.map +0 -1
  570. package/dist/client/builder/types/action-registry.d.mts +0 -2
  571. package/dist/client/builder/types/action-registry.mjs.map +0 -1
  572. package/dist/client/builder/types/action-types.d.mts.map +0 -1
  573. package/dist/client/builder/types/collection-types.d.mts +0 -199
  574. package/dist/client/builder/types/collection-types.d.mts.map +0 -1
  575. package/dist/client/builder/types/collection-types.mjs.map +0 -1
  576. package/dist/client/builder/types/common.d.mts.map +0 -1
  577. package/dist/client/builder/types/field-types.d.mts.map +0 -1
  578. package/dist/client/builder/types/field-types.mjs.map +0 -1
  579. package/dist/client/builder/types/global-types.d.mts +0 -22
  580. package/dist/client/builder/types/global-types.d.mts.map +0 -1
  581. package/dist/client/builder/types/ui-config.d.mts.map +0 -1
  582. package/dist/client/builder/types/views.d.mts +0 -89
  583. package/dist/client/builder/types/views.d.mts.map +0 -1
  584. package/dist/client/builder/types/widget-types.d.mts.map +0 -1
  585. package/dist/client/builder/validation.mjs.map +0 -1
  586. package/dist/client/builder/view/view.d.mts.map +0 -1
  587. package/dist/client/builder/view/view.mjs.map +0 -1
  588. package/dist/client/builder/widget/widget.d.mts.map +0 -1
  589. package/dist/client/builder/widget/widget.mjs.map +0 -1
  590. package/dist/client/components/actions/action-button.d.mts +0 -2
  591. package/dist/client/components/actions/action-button.mjs.map +0 -1
  592. package/dist/client/components/actions/action-dialog.d.mts +0 -2
  593. package/dist/client/components/actions/action-dialog.mjs.map +0 -1
  594. package/dist/client/components/actions/confirmation-dialog.d.mts +0 -2
  595. package/dist/client/components/actions/confirmation-dialog.mjs.map +0 -1
  596. package/dist/client/components/actions/header-actions.d.mts +0 -2
  597. package/dist/client/components/actions/header-actions.mjs.map +0 -1
  598. package/dist/client/components/actions/index.d.mts +0 -4
  599. package/dist/client/components/admin-link.d.mts.map +0 -1
  600. package/dist/client/components/admin-link.mjs.map +0 -1
  601. package/dist/client/components/auth/auth-guard.d.mts.map +0 -1
  602. package/dist/client/components/auth/auth-guard.mjs.map +0 -1
  603. package/dist/client/components/auth/auth-loading.d.mts.map +0 -1
  604. package/dist/client/components/auth/auth-loading.mjs.map +0 -1
  605. package/dist/client/components/auth/index.d.mts +0 -2
  606. package/dist/client/components/blocks/block-canvas.mjs.map +0 -1
  607. package/dist/client/components/blocks/block-editor-context.mjs.map +0 -1
  608. package/dist/client/components/blocks/block-editor-layout.mjs.map +0 -1
  609. package/dist/client/components/blocks/block-editor-provider.mjs.map +0 -1
  610. package/dist/client/components/blocks/block-fields-renderer.mjs.map +0 -1
  611. package/dist/client/components/blocks/block-insert-button.mjs.map +0 -1
  612. package/dist/client/components/blocks/block-item-menu.mjs.map +0 -1
  613. package/dist/client/components/blocks/block-item.mjs.map +0 -1
  614. package/dist/client/components/blocks/block-library-sidebar.mjs.map +0 -1
  615. package/dist/client/components/blocks/block-tree.mjs.map +0 -1
  616. package/dist/client/components/blocks/block-type-icon.mjs.map +0 -1
  617. package/dist/client/components/blocks/utils/tree-utils.mjs.map +0 -1
  618. package/dist/client/components/component-renderer.d.mts.map +0 -1
  619. package/dist/client/components/component-renderer.mjs.map +0 -1
  620. package/dist/client/components/error-boundary.mjs.map +0 -1
  621. package/dist/client/components/fields/array-field.d.mts +0 -44
  622. package/dist/client/components/fields/array-field.d.mts.map +0 -1
  623. package/dist/client/components/fields/array-field.mjs.map +0 -1
  624. package/dist/client/components/fields/asset-preview-field.d.mts +0 -52
  625. package/dist/client/components/fields/asset-preview-field.d.mts.map +0 -1
  626. package/dist/client/components/fields/asset-preview-field.mjs.map +0 -1
  627. package/dist/client/components/fields/blocks-field/blocks-field.d.mts +0 -41
  628. package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +0 -1
  629. package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +0 -1
  630. package/dist/client/components/fields/blocks-field/index.d.mts +0 -1
  631. package/dist/client/components/fields/boolean-field.d.mts +0 -30
  632. package/dist/client/components/fields/boolean-field.d.mts.map +0 -1
  633. package/dist/client/components/fields/boolean-field.mjs.map +0 -1
  634. package/dist/client/components/fields/custom-field.d.mts +0 -3
  635. package/dist/client/components/fields/date-field.d.mts +0 -22
  636. package/dist/client/components/fields/date-field.d.mts.map +0 -1
  637. package/dist/client/components/fields/date-field.mjs.map +0 -1
  638. package/dist/client/components/fields/datetime-field.d.mts +0 -23
  639. package/dist/client/components/fields/datetime-field.d.mts.map +0 -1
  640. package/dist/client/components/fields/datetime-field.mjs.map +0 -1
  641. package/dist/client/components/fields/email-field.d.mts +0 -19
  642. package/dist/client/components/fields/email-field.d.mts.map +0 -1
  643. package/dist/client/components/fields/email-field.mjs.map +0 -1
  644. package/dist/client/components/fields/embedded-collection.d.mts +0 -3
  645. package/dist/client/components/fields/field-types.d.mts +0 -571
  646. package/dist/client/components/fields/field-types.d.mts.map +0 -1
  647. package/dist/client/components/fields/field-utils.d.mts +0 -1
  648. package/dist/client/components/fields/field-utils.mjs.map +0 -1
  649. package/dist/client/components/fields/field-wrapper.d.mts +0 -3
  650. package/dist/client/components/fields/field-wrapper.mjs.map +0 -1
  651. package/dist/client/components/fields/index.d.mts +0 -33
  652. package/dist/client/components/fields/json-field.d.mts +0 -84
  653. package/dist/client/components/fields/json-field.d.mts.map +0 -1
  654. package/dist/client/components/fields/json-field.mjs.map +0 -1
  655. package/dist/client/components/fields/locale-badge.d.mts +0 -1
  656. package/dist/client/components/fields/locale-badge.mjs.map +0 -1
  657. package/dist/client/components/fields/number-field.d.mts +0 -23
  658. package/dist/client/components/fields/number-field.d.mts.map +0 -1
  659. package/dist/client/components/fields/number-field.mjs.map +0 -1
  660. package/dist/client/components/fields/object-array-field.d.mts +0 -2
  661. package/dist/client/components/fields/object-array-field.mjs.map +0 -1
  662. package/dist/client/components/fields/object-field.d.mts +0 -32
  663. package/dist/client/components/fields/object-field.d.mts.map +0 -1
  664. package/dist/client/components/fields/object-field.mjs.map +0 -1
  665. package/dist/client/components/fields/relation/displays/cards-display.d.mts +0 -2
  666. package/dist/client/components/fields/relation/displays/cards-display.mjs.map +0 -1
  667. package/dist/client/components/fields/relation/displays/chips-display.d.mts +0 -2
  668. package/dist/client/components/fields/relation/displays/chips-display.mjs.map +0 -1
  669. package/dist/client/components/fields/relation/displays/grid-display.d.mts +0 -2
  670. package/dist/client/components/fields/relation/displays/grid-display.mjs.map +0 -1
  671. package/dist/client/components/fields/relation/displays/index.d.mts +0 -6
  672. package/dist/client/components/fields/relation/displays/list-display.d.mts +0 -2
  673. package/dist/client/components/fields/relation/displays/list-display.mjs.map +0 -1
  674. package/dist/client/components/fields/relation/displays/table-display.d.mts +0 -2
  675. package/dist/client/components/fields/relation/displays/table-display.mjs.map +0 -1
  676. package/dist/client/components/fields/relation/displays/types.d.mts +0 -22
  677. package/dist/client/components/fields/relation/displays/types.d.mts.map +0 -1
  678. package/dist/client/components/fields/relation/displays/types.mjs.map +0 -1
  679. package/dist/client/components/fields/relation/index.d.mts +0 -3
  680. package/dist/client/components/fields/relation/relation-items-display.d.mts +0 -5
  681. package/dist/client/components/fields/relation/relation-items-display.mjs.map +0 -1
  682. package/dist/client/components/fields/relation-field.d.mts +0 -134
  683. package/dist/client/components/fields/relation-field.d.mts.map +0 -1
  684. package/dist/client/components/fields/relation-field.mjs.map +0 -1
  685. package/dist/client/components/fields/relation-picker.d.mts +0 -4
  686. package/dist/client/components/fields/relation-picker.mjs.map +0 -1
  687. package/dist/client/components/fields/relation-select.d.mts +0 -3
  688. package/dist/client/components/fields/relation-select.mjs.map +0 -1
  689. package/dist/client/components/fields/reverse-relation-field.d.mts +0 -2
  690. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +0 -1
  691. package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +0 -1
  692. package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +0 -1
  693. package/dist/client/components/fields/rich-text-editor/index.d.mts +0 -4
  694. package/dist/client/components/fields/rich-text-editor/index.mjs.map +0 -1
  695. package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +0 -1
  696. package/dist/client/components/fields/rich-text-editor/presets.d.mts +0 -11
  697. package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +0 -1
  698. package/dist/client/components/fields/rich-text-editor/presets.mjs.map +0 -1
  699. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +0 -1
  700. package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +0 -1
  701. package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +0 -1
  702. package/dist/client/components/fields/rich-text-editor/types.d.mts +0 -78
  703. package/dist/client/components/fields/rich-text-editor/types.d.mts.map +0 -1
  704. package/dist/client/components/fields/rich-text-editor/types.mjs.map +0 -1
  705. package/dist/client/components/fields/rich-text-editor/utils.mjs.map +0 -1
  706. package/dist/client/components/fields/rich-text-editor/variants.d.mts +0 -2
  707. package/dist/client/components/fields/rich-text-field.d.mts +0 -14
  708. package/dist/client/components/fields/rich-text-field.d.mts.map +0 -1
  709. package/dist/client/components/fields/rich-text-field.mjs.map +0 -1
  710. package/dist/client/components/fields/select-field.d.mts +0 -25
  711. package/dist/client/components/fields/select-field.d.mts.map +0 -1
  712. package/dist/client/components/fields/select-field.mjs.map +0 -1
  713. package/dist/client/components/fields/status-field.d.mts +0 -2
  714. package/dist/client/components/fields/text-field.d.mts +0 -22
  715. package/dist/client/components/fields/text-field.d.mts.map +0 -1
  716. package/dist/client/components/fields/text-field.mjs.map +0 -1
  717. package/dist/client/components/fields/textarea-field.d.mts +0 -22
  718. package/dist/client/components/fields/textarea-field.d.mts.map +0 -1
  719. package/dist/client/components/fields/textarea-field.mjs.map +0 -1
  720. package/dist/client/components/fields/time-field.d.mts +0 -20
  721. package/dist/client/components/fields/time-field.d.mts.map +0 -1
  722. package/dist/client/components/fields/time-field.mjs.map +0 -1
  723. package/dist/client/components/fields/upload-field.d.mts +0 -97
  724. package/dist/client/components/fields/upload-field.d.mts.map +0 -1
  725. package/dist/client/components/fields/upload-field.mjs.map +0 -1
  726. package/dist/client/components/filter-builder/columns-tab.d.mts +0 -1
  727. package/dist/client/components/filter-builder/columns-tab.mjs.map +0 -1
  728. package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +0 -1
  729. package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +0 -1
  730. package/dist/client/components/filter-builder/filters-tab.d.mts +0 -1
  731. package/dist/client/components/filter-builder/filters-tab.mjs.map +0 -1
  732. package/dist/client/components/filter-builder/index.d.mts +0 -5
  733. package/dist/client/components/filter-builder/saved-views-tab.d.mts +0 -1
  734. package/dist/client/components/filter-builder/saved-views-tab.mjs.map +0 -1
  735. package/dist/client/components/index.d.mts +0 -80
  736. package/dist/client/components/locale-switcher.d.mts +0 -2
  737. package/dist/client/components/locale-switcher.mjs.map +0 -1
  738. package/dist/client/components/media/media-grid.mjs.map +0 -1
  739. package/dist/client/components/media/media-picker-dialog.mjs.map +0 -1
  740. package/dist/client/components/preview/live-preview-mode.mjs.map +0 -1
  741. package/dist/client/components/preview/preview-pane.mjs.map +0 -1
  742. package/dist/client/components/primitives/asset-preview.mjs.map +0 -1
  743. package/dist/client/components/primitives/checkbox-input.mjs.map +0 -1
  744. package/dist/client/components/primitives/date-input.mjs.map +0 -1
  745. package/dist/client/components/primitives/dropzone.mjs.map +0 -1
  746. package/dist/client/components/primitives/number-input.mjs.map +0 -1
  747. package/dist/client/components/primitives/select-multi.mjs.map +0 -1
  748. package/dist/client/components/primitives/select-single.mjs.map +0 -1
  749. package/dist/client/components/primitives/text-input.mjs.map +0 -1
  750. package/dist/client/components/primitives/textarea-input.mjs.map +0 -1
  751. package/dist/client/components/primitives/time-input.mjs.map +0 -1
  752. package/dist/client/components/primitives/toggle-input.mjs.map +0 -1
  753. package/dist/client/components/primitives/types.d.mts +0 -14
  754. package/dist/client/components/primitives/types.d.mts.map +0 -1
  755. package/dist/client/components/primitives/types.mjs.map +0 -1
  756. package/dist/client/components/sheets/index.d.mts +0 -1
  757. package/dist/client/components/sheets/resource-sheet.d.mts +0 -1
  758. package/dist/client/components/sheets/resource-sheet.mjs.map +0 -1
  759. package/dist/client/components/ui/accordion.d.mts +0 -2
  760. package/dist/client/components/ui/accordion.mjs.map +0 -1
  761. package/dist/client/components/ui/alert.mjs.map +0 -1
  762. package/dist/client/components/ui/avatar.d.mts +0 -3
  763. package/dist/client/components/ui/badge.d.mts +0 -3
  764. package/dist/client/components/ui/badge.mjs.map +0 -1
  765. package/dist/client/components/ui/button.d.mts +0 -3
  766. package/dist/client/components/ui/button.mjs.map +0 -1
  767. package/dist/client/components/ui/card.d.mts +0 -2
  768. package/dist/client/components/ui/card.mjs.map +0 -1
  769. package/dist/client/components/ui/checkbox.d.mts +0 -2
  770. package/dist/client/components/ui/checkbox.mjs.map +0 -1
  771. package/dist/client/components/ui/combobox.d.mts +0 -3
  772. package/dist/client/components/ui/command.mjs.map +0 -1
  773. package/dist/client/components/ui/dialog.d.mts +0 -3
  774. package/dist/client/components/ui/dialog.mjs.map +0 -1
  775. package/dist/client/components/ui/drawer.mjs.map +0 -1
  776. package/dist/client/components/ui/dropdown-menu.d.mts +0 -3
  777. package/dist/client/components/ui/dropdown-menu.mjs.map +0 -1
  778. package/dist/client/components/ui/empty-state.mjs.map +0 -1
  779. package/dist/client/components/ui/field.d.mts +0 -3
  780. package/dist/client/components/ui/field.mjs.map +0 -1
  781. package/dist/client/components/ui/input-group.d.mts +0 -4
  782. package/dist/client/components/ui/input-group.mjs.map +0 -1
  783. package/dist/client/components/ui/input.d.mts +0 -2
  784. package/dist/client/components/ui/input.mjs.map +0 -1
  785. package/dist/client/components/ui/kbd.mjs.map +0 -1
  786. package/dist/client/components/ui/label.d.mts +0 -2
  787. package/dist/client/components/ui/label.mjs.map +0 -1
  788. package/dist/client/components/ui/popover.d.mts +0 -3
  789. package/dist/client/components/ui/popover.mjs.map +0 -1
  790. package/dist/client/components/ui/responsive-dialog.mjs.map +0 -1
  791. package/dist/client/components/ui/scroll-area.d.mts +0 -2
  792. package/dist/client/components/ui/search-input.mjs.map +0 -1
  793. package/dist/client/components/ui/select.d.mts +0 -3
  794. package/dist/client/components/ui/select.mjs.map +0 -1
  795. package/dist/client/components/ui/separator.d.mts +0 -2
  796. package/dist/client/components/ui/separator.mjs.map +0 -1
  797. package/dist/client/components/ui/sheet.d.mts +0 -3
  798. package/dist/client/components/ui/sheet.mjs.map +0 -1
  799. package/dist/client/components/ui/sidebar.d.mts +0 -8
  800. package/dist/client/components/ui/sidebar.mjs.map +0 -1
  801. package/dist/client/components/ui/skeleton.d.mts +0 -1
  802. package/dist/client/components/ui/skeleton.mjs.map +0 -1
  803. package/dist/client/components/ui/sonner.d.mts.map +0 -1
  804. package/dist/client/components/ui/sonner.mjs.map +0 -1
  805. package/dist/client/components/ui/spinner.d.mts +0 -1
  806. package/dist/client/components/ui/spinner.mjs.map +0 -1
  807. package/dist/client/components/ui/switch.d.mts +0 -2
  808. package/dist/client/components/ui/switch.mjs.map +0 -1
  809. package/dist/client/components/ui/table.d.mts +0 -2
  810. package/dist/client/components/ui/table.mjs.map +0 -1
  811. package/dist/client/components/ui/tabs.d.mts +0 -3
  812. package/dist/client/components/ui/tabs.mjs.map +0 -1
  813. package/dist/client/components/ui/textarea.d.mts +0 -2
  814. package/dist/client/components/ui/textarea.mjs.map +0 -1
  815. package/dist/client/components/ui/toolbar.mjs.map +0 -1
  816. package/dist/client/components/ui/tooltip.d.mts +0 -2
  817. package/dist/client/components/ui/tooltip.mjs.map +0 -1
  818. package/dist/client/components/widgets/chart-widget.d.mts +0 -57
  819. package/dist/client/components/widgets/chart-widget.d.mts.map +0 -1
  820. package/dist/client/components/widgets/chart-widget.mjs.map +0 -1
  821. package/dist/client/components/widgets/progress-widget.d.mts +0 -41
  822. package/dist/client/components/widgets/progress-widget.d.mts.map +0 -1
  823. package/dist/client/components/widgets/progress-widget.mjs.map +0 -1
  824. package/dist/client/components/widgets/quick-actions-widget.d.mts +0 -29
  825. package/dist/client/components/widgets/quick-actions-widget.d.mts.map +0 -1
  826. package/dist/client/components/widgets/quick-actions-widget.mjs.map +0 -1
  827. package/dist/client/components/widgets/recent-items-widget.d.mts +0 -51
  828. package/dist/client/components/widgets/recent-items-widget.d.mts.map +0 -1
  829. package/dist/client/components/widgets/recent-items-widget.mjs.map +0 -1
  830. package/dist/client/components/widgets/stats-widget.d.mts +0 -55
  831. package/dist/client/components/widgets/stats-widget.d.mts.map +0 -1
  832. package/dist/client/components/widgets/stats-widget.mjs.map +0 -1
  833. package/dist/client/components/widgets/table-widget.d.mts +0 -31
  834. package/dist/client/components/widgets/table-widget.d.mts.map +0 -1
  835. package/dist/client/components/widgets/table-widget.mjs.map +0 -1
  836. package/dist/client/components/widgets/timeline-widget.d.mts +0 -51
  837. package/dist/client/components/widgets/timeline-widget.d.mts.map +0 -1
  838. package/dist/client/components/widgets/timeline-widget.mjs.map +0 -1
  839. package/dist/client/components/widgets/value-widget.d.mts +0 -39
  840. package/dist/client/components/widgets/value-widget.d.mts.map +0 -1
  841. package/dist/client/components/widgets/value-widget.mjs.map +0 -1
  842. package/dist/client/components/widgets/widget-skeletons.mjs.map +0 -1
  843. package/dist/client/context/focus-context.d.mts.map +0 -1
  844. package/dist/client/context/focus-context.mjs.map +0 -1
  845. package/dist/client/contexts/breadcrumb-context.mjs.map +0 -1
  846. package/dist/client/hooks/typed-hooks.d.mts.map +0 -1
  847. package/dist/client/hooks/typed-hooks.mjs.map +0 -1
  848. package/dist/client/hooks/use-action.mjs.map +0 -1
  849. package/dist/client/hooks/use-admin-config.mjs.map +0 -1
  850. package/dist/client/hooks/use-admin-preferences.mjs.map +0 -1
  851. package/dist/client/hooks/use-admin-routes.mjs.map +0 -1
  852. package/dist/client/hooks/use-auth.d.mts.map +0 -1
  853. package/dist/client/hooks/use-auth.mjs.map +0 -1
  854. package/dist/client/hooks/use-collection-fields.mjs.map +0 -1
  855. package/dist/client/hooks/use-collection-meta.mjs.map +0 -1
  856. package/dist/client/hooks/use-collection-schema.mjs.map +0 -1
  857. package/dist/client/hooks/use-collection-validation.mjs.map +0 -1
  858. package/dist/client/hooks/use-collection.d.mts.map +0 -1
  859. package/dist/client/hooks/use-collection.mjs.map +0 -1
  860. package/dist/client/hooks/use-current-user.d.mts.map +0 -1
  861. package/dist/client/hooks/use-current-user.mjs.map +0 -1
  862. package/dist/client/hooks/use-field-hooks.mjs.map +0 -1
  863. package/dist/client/hooks/use-field-options.d.mts.map +0 -1
  864. package/dist/client/hooks/use-field-options.mjs.map +0 -1
  865. package/dist/client/hooks/use-global-fields.mjs.map +0 -1
  866. package/dist/client/hooks/use-global-meta.mjs.map +0 -1
  867. package/dist/client/hooks/use-global-schema.mjs.map +0 -1
  868. package/dist/client/hooks/use-global.d.mts.map +0 -1
  869. package/dist/client/hooks/use-global.mjs.map +0 -1
  870. package/dist/client/hooks/use-locks.mjs.map +0 -1
  871. package/dist/client/hooks/use-media-query.d.mts.map +0 -1
  872. package/dist/client/hooks/use-media-query.mjs.map +0 -1
  873. package/dist/client/hooks/use-prefill-params.mjs.map +0 -1
  874. package/dist/client/hooks/use-questpie-query-options.mjs.map +0 -1
  875. package/dist/client/hooks/use-reactive-fields.d.mts.map +0 -1
  876. package/dist/client/hooks/use-reactive-fields.mjs.map +0 -1
  877. package/dist/client/hooks/use-realtime-highlight.mjs.map +0 -1
  878. package/dist/client/hooks/use-saved-views.mjs.map +0 -1
  879. package/dist/client/hooks/use-search.mjs.map +0 -1
  880. package/dist/client/hooks/use-server-validation.mjs.map +0 -1
  881. package/dist/client/hooks/use-server-widget-data.d.mts.map +0 -1
  882. package/dist/client/hooks/use-server-widget-data.mjs.map +0 -1
  883. package/dist/client/hooks/use-setup-status.d.mts.map +0 -1
  884. package/dist/client/hooks/use-setup-status.mjs.map +0 -1
  885. package/dist/client/hooks/use-upload-collection.mjs.map +0 -1
  886. package/dist/client/hooks/use-upload.d.mts +0 -23
  887. package/dist/client/hooks/use-upload.d.mts.map +0 -1
  888. package/dist/client/hooks/use-upload.mjs.map +0 -1
  889. package/dist/client/hooks/use-validation-error-map.mjs.map +0 -1
  890. package/dist/client/hooks/use-view-state.mjs.map +0 -1
  891. package/dist/client/i18n/hooks.mjs.map +0 -1
  892. package/dist/client/i18n/intl-cache.mjs.map +0 -1
  893. package/dist/client/i18n/messages.mjs.map +0 -1
  894. package/dist/client/i18n/simple.d.mts.map +0 -1
  895. package/dist/client/i18n/simple.mjs.map +0 -1
  896. package/dist/client/i18n/types.d.mts.map +0 -1
  897. package/dist/client/lib/utils.d.mts +0 -1
  898. package/dist/client/lib/utils.mjs.map +0 -1
  899. package/dist/client/preview/block-scope-context.d.mts.map +0 -1
  900. package/dist/client/preview/block-scope-context.mjs.map +0 -1
  901. package/dist/client/preview/preview-banner.d.mts.map +0 -1
  902. package/dist/client/preview/preview-banner.mjs.map +0 -1
  903. package/dist/client/preview/preview-field.d.mts.map +0 -1
  904. package/dist/client/preview/preview-field.mjs.map +0 -1
  905. package/dist/client/preview/types.d.mts.map +0 -1
  906. package/dist/client/preview/types.mjs.map +0 -1
  907. package/dist/client/preview/use-collection-preview.d.mts.map +0 -1
  908. package/dist/client/preview/use-collection-preview.mjs.map +0 -1
  909. package/dist/client/runtime/content-locales-provider.mjs.map +0 -1
  910. package/dist/client/runtime/locale-scope.mjs.map +0 -1
  911. package/dist/client/runtime/provider.d.mts.map +0 -1
  912. package/dist/client/runtime/provider.mjs.map +0 -1
  913. package/dist/client/runtime/routes.d.mts.map +0 -1
  914. package/dist/client/runtime/routes.mjs.map +0 -1
  915. package/dist/client/runtime/translations-provider.d.mts +0 -2
  916. package/dist/client/runtime/translations-provider.mjs.map +0 -1
  917. package/dist/client/scope/picker.d.mts.map +0 -1
  918. package/dist/client/scope/picker.mjs.map +0 -1
  919. package/dist/client/scope/provider.d.mts.map +0 -1
  920. package/dist/client/scope/provider.mjs.map +0 -1
  921. package/dist/client/scope/types.d.mts.map +0 -1
  922. package/dist/client/utils/auto-expand-fields.mjs.map +0 -1
  923. package/dist/client/utils/build-field-definitions-from-schema.mjs.map +0 -1
  924. package/dist/client/utils/detect-relations.mjs.map +0 -1
  925. package/dist/client/utils/locale-to-flag.d.mts.map +0 -1
  926. package/dist/client/utils/locale-to-flag.mjs.map +0 -1
  927. package/dist/client/utils/routes.mjs.map +0 -1
  928. package/dist/client/views/auth/accept-invite-form.d.mts.map +0 -1
  929. package/dist/client/views/auth/accept-invite-form.mjs.map +0 -1
  930. package/dist/client/views/auth/auth-layout.d.mts.map +0 -1
  931. package/dist/client/views/auth/auth-layout.mjs.map +0 -1
  932. package/dist/client/views/auth/forgot-password-form.d.mts.map +0 -1
  933. package/dist/client/views/auth/forgot-password-form.mjs.map +0 -1
  934. package/dist/client/views/auth/index.d.mts +0 -7
  935. package/dist/client/views/auth/invite-form.d.mts +0 -1
  936. package/dist/client/views/auth/invite-form.mjs.map +0 -1
  937. package/dist/client/views/auth/login-form.d.mts.map +0 -1
  938. package/dist/client/views/auth/login-form.mjs.map +0 -1
  939. package/dist/client/views/auth/reset-password-form.d.mts.map +0 -1
  940. package/dist/client/views/auth/reset-password-form.mjs.map +0 -1
  941. package/dist/client/views/auth/setup-form.d.mts.map +0 -1
  942. package/dist/client/views/auth/setup-form.mjs.map +0 -1
  943. package/dist/client/views/collection/auto-form-fields.d.mts +0 -4
  944. package/dist/client/views/collection/auto-form-fields.mjs.map +0 -1
  945. package/dist/client/views/collection/bulk-action-toolbar.mjs.map +0 -1
  946. package/dist/client/views/collection/cells/complex-cells.d.mts +0 -46
  947. package/dist/client/views/collection/cells/complex-cells.d.mts.map +0 -1
  948. package/dist/client/views/collection/cells/complex-cells.mjs.map +0 -1
  949. package/dist/client/views/collection/cells/index.d.mts +0 -7
  950. package/dist/client/views/collection/cells/primitive-cells.d.mts +0 -76
  951. package/dist/client/views/collection/cells/primitive-cells.d.mts.map +0 -1
  952. package/dist/client/views/collection/cells/primitive-cells.mjs.map +0 -1
  953. package/dist/client/views/collection/cells/relation-cells.d.mts +0 -21
  954. package/dist/client/views/collection/cells/relation-cells.d.mts.map +0 -1
  955. package/dist/client/views/collection/cells/relation-cells.mjs.map +0 -1
  956. package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +0 -1
  957. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +0 -1
  958. package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +0 -2
  959. package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +0 -1
  960. package/dist/client/views/collection/cells/shared/relation-chip.d.mts +0 -1
  961. package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +0 -1
  962. package/dist/client/views/collection/cells/upload-cells.d.mts +0 -25
  963. package/dist/client/views/collection/cells/upload-cells.d.mts.map +0 -1
  964. package/dist/client/views/collection/cells/upload-cells.mjs.map +0 -1
  965. package/dist/client/views/collection/columns/build-columns.d.mts +0 -2
  966. package/dist/client/views/collection/columns/build-columns.mjs.map +0 -1
  967. package/dist/client/views/collection/columns/column-defaults.d.mts +0 -2
  968. package/dist/client/views/collection/columns/column-defaults.mjs.map +0 -1
  969. package/dist/client/views/collection/columns/index.d.mts +0 -3
  970. package/dist/client/views/collection/columns/types.d.mts +0 -2
  971. package/dist/client/views/collection/field-context.mjs.map +0 -1
  972. package/dist/client/views/collection/field-renderer.mjs.map +0 -1
  973. package/dist/client/views/collection/form-view.d.mts +0 -112
  974. package/dist/client/views/collection/form-view.d.mts.map +0 -1
  975. package/dist/client/views/collection/form-view.mjs.map +0 -1
  976. package/dist/client/views/collection/index.d.mts +0 -9
  977. package/dist/client/views/collection/table-view.d.mts +0 -102
  978. package/dist/client/views/collection/table-view.d.mts.map +0 -1
  979. package/dist/client/views/collection/table-view.mjs.map +0 -1
  980. package/dist/client/views/collection/view-skeletons.mjs.map +0 -1
  981. package/dist/client/views/common/global-search.d.mts +0 -1
  982. package/dist/client/views/common/global-search.mjs.map +0 -1
  983. package/dist/client/views/common/index.d.mts +0 -1
  984. package/dist/client/views/dashboard/dashboard-grid.mjs.map +0 -1
  985. package/dist/client/views/dashboard/dashboard-widget.mjs.map +0 -1
  986. package/dist/client/views/dashboard/widget-card.mjs.map +0 -1
  987. package/dist/client/views/globals/global-form-view.d.mts +0 -74
  988. package/dist/client/views/globals/global-form-view.d.mts.map +0 -1
  989. package/dist/client/views/globals/global-form-view.mjs.map +0 -1
  990. package/dist/client/views/index.d.mts +0 -28
  991. package/dist/client/views/layout/admin-layout-provider.d.mts.map +0 -1
  992. package/dist/client/views/layout/admin-layout-provider.mjs.map +0 -1
  993. package/dist/client/views/layout/admin-layout.d.mts.map +0 -1
  994. package/dist/client/views/layout/admin-layout.mjs.map +0 -1
  995. package/dist/client/views/layout/admin-root.d.mts +0 -7
  996. package/dist/client/views/layout/admin-router.d.mts.map +0 -1
  997. package/dist/client/views/layout/admin-router.mjs.map +0 -1
  998. package/dist/client/views/layout/admin-sidebar.d.mts.map +0 -1
  999. package/dist/client/views/layout/admin-sidebar.mjs.map +0 -1
  1000. package/dist/client/views/layout/admin-topbar.mjs.map +0 -1
  1001. package/dist/client/views/layout/index.d.mts +0 -5
  1002. package/dist/client/views/pages/accept-invite-page.d.mts.map +0 -1
  1003. package/dist/client/views/pages/accept-invite-page.mjs.map +0 -1
  1004. package/dist/client/views/pages/dashboard-page.d.mts.map +0 -1
  1005. package/dist/client/views/pages/dashboard-page.mjs.map +0 -1
  1006. package/dist/client/views/pages/forgot-password-page.d.mts.map +0 -1
  1007. package/dist/client/views/pages/forgot-password-page.mjs.map +0 -1
  1008. package/dist/client/views/pages/index.d.mts +0 -7
  1009. package/dist/client/views/pages/invite-page.d.mts.map +0 -1
  1010. package/dist/client/views/pages/invite-page.mjs.map +0 -1
  1011. package/dist/client/views/pages/login-page.d.mts.map +0 -1
  1012. package/dist/client/views/pages/login-page.mjs.map +0 -1
  1013. package/dist/client/views/pages/reset-password-page.d.mts.map +0 -1
  1014. package/dist/client/views/pages/reset-password-page.mjs.map +0 -1
  1015. package/dist/client/views/pages/setup-page.d.mts.map +0 -1
  1016. package/dist/client/views/pages/setup-page.mjs.map +0 -1
  1017. package/dist/client.d.mts.map +0 -1
  1018. package/dist/components/rich-text/rich-text-renderer.d.mts.map +0 -1
  1019. package/dist/components/rich-text/rich-text-renderer.mjs.map +0 -1
  1020. package/dist/server/adapters/nextjs.d.mts.map +0 -1
  1021. package/dist/server/adapters/nextjs.mjs.map +0 -1
  1022. package/dist/server/adapters/tanstack.d.mts.map +0 -1
  1023. package/dist/server/adapters/tanstack.mjs.map +0 -1
  1024. package/dist/server/augmentation.d.mts.map +0 -1
  1025. package/dist/server/auth-helpers.d.mts.map +0 -1
  1026. package/dist/server/auth-helpers.mjs.map +0 -1
  1027. package/dist/server/block/block-builder.d.mts.map +0 -1
  1028. package/dist/server/block/block-builder.mjs.map +0 -1
  1029. package/dist/server/block/introspection.d.mts.map +0 -1
  1030. package/dist/server/block/introspection.mjs.map +0 -1
  1031. package/dist/server/block/prefetch.d.mts.map +0 -1
  1032. package/dist/server/block/prefetch.mjs.map +0 -1
  1033. package/dist/server/fields/blocks.d.mts.map +0 -1
  1034. package/dist/server/fields/blocks.mjs.map +0 -1
  1035. package/dist/server/fields/index.d.mts.map +0 -1
  1036. package/dist/server/fields/index.mjs.map +0 -1
  1037. package/dist/server/fields/rich-text.d.mts.map +0 -1
  1038. package/dist/server/fields/rich-text.mjs.map +0 -1
  1039. package/dist/server/i18n/index.d.mts +0 -16
  1040. package/dist/server/i18n/index.d.mts.map +0 -1
  1041. package/dist/server/i18n/index.mjs.map +0 -1
  1042. package/dist/server/i18n/messages/cs.mjs.map +0 -1
  1043. package/dist/server/i18n/messages/de.mjs.map +0 -1
  1044. package/dist/server/i18n/messages/en.mjs.map +0 -1
  1045. package/dist/server/i18n/messages/es.mjs.map +0 -1
  1046. package/dist/server/i18n/messages/fr.mjs.map +0 -1
  1047. package/dist/server/i18n/messages/index.mjs.map +0 -1
  1048. package/dist/server/i18n/messages/pl.mjs.map +0 -1
  1049. package/dist/server/i18n/messages/pt.mjs.map +0 -1
  1050. package/dist/server/i18n/messages/sk.mjs.map +0 -1
  1051. package/dist/server/index.d.mts +0 -20
  1052. package/dist/server/modules/admin/functions/admin-config.mjs +0 -348
  1053. package/dist/server/modules/admin/functions/admin-config.mjs.map +0 -1
  1054. package/dist/server/modules/admin/functions/execute-action.d.mts.map +0 -1
  1055. package/dist/server/modules/admin/functions/execute-action.mjs.map +0 -1
  1056. package/dist/server/modules/admin/functions/locales.mjs +0 -80
  1057. package/dist/server/modules/admin/functions/locales.mjs.map +0 -1
  1058. package/dist/server/modules/admin/functions/preview.d.mts.map +0 -1
  1059. package/dist/server/modules/admin/functions/preview.mjs.map +0 -1
  1060. package/dist/server/modules/admin/functions/reactive.d.mts.map +0 -1
  1061. package/dist/server/modules/admin/functions/reactive.mjs.map +0 -1
  1062. package/dist/server/modules/admin/functions/setup.d.mts.map +0 -1
  1063. package/dist/server/modules/admin/functions/setup.mjs +0 -131
  1064. package/dist/server/modules/admin/functions/setup.mjs.map +0 -1
  1065. package/dist/server/modules/admin/functions/translations.mjs +0 -125
  1066. package/dist/server/modules/admin/functions/translations.mjs.map +0 -1
  1067. package/dist/server/modules/admin/functions/widget-data.d.mts +0 -33
  1068. package/dist/server/modules/admin/functions/widget-data.d.mts.map +0 -1
  1069. package/dist/server/modules/admin/functions/widget-data.mjs +0 -70
  1070. package/dist/server/modules/admin/functions/widget-data.mjs.map +0 -1
  1071. package/dist/server/modules/admin/index.d.mts.map +0 -1
  1072. package/dist/server/modules/admin/index.mjs.map +0 -1
  1073. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +0 -3
  1074. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +0 -1
  1075. package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +0 -3
  1076. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +0 -1
  1077. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +0 -1490
  1078. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +0 -1
  1079. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +0 -57
  1080. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +0 -1
  1081. package/dist/server/patch.d.mts +0 -100
  1082. package/dist/server/patch.d.mts.map +0 -1
  1083. package/dist/server/patch.mjs +0 -1062
  1084. package/dist/server/patch.mjs.map +0 -1
  1085. package/dist/shared/preview-utils.d.mts.map +0 -1
  1086. package/dist/shared/preview-utils.mjs.map +0 -1
  1087. package/dist/shared/types/saved-views.types.d.mts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-builder.mjs","names":["fields: Record<string, FieldSchema>"],"sources":["../../../src/server/block/block-builder.ts"],"sourcesContent":["/**\n * Block Builder\n *\n * Defines block types for the visual block editor.\n * Blocks are registered on the CMS builder and can be used in blocks fields.\n *\n * Each block has:\n * - Admin metadata (label, description, icon, category) via .admin()\n * - Fields (using the same field system as collections)\n * - Optional prefetch function (runs on CRUD read to fetch related data)\n * - Optional children configuration (for nested blocks)\n *\n * @example\n * ```ts\n * import { block } from \"@questpie/admin/server\";\n *\n * const heroBlock = block(\"hero\")\n * .admin(({ c }) => ({\n * label: { en: \"Hero Section\", sk: \"Hero sekcia\" },\n * icon: c.icon(\"ph:image\"),\n * category: {\n * label: { en: \"Sections\", sk: \"Sekcie\" },\n * icon: c.icon(\"ph:layout\"),\n * },\n * }))\n * .fields((f) => ({\n * title: f.text({ required: true }),\n * subtitle: f.text(),\n * backgroundImage: f.upload({ accept: \"image/*\" }),\n * }))\n * .prefetch({ with: { backgroundImage: true } });\n * ```\n */\n\nimport type {\n\tFieldBuilderProxy,\n\tFieldDefinition,\n\tFieldDefinitionState,\n\tFieldSchema,\n\tRegisteredApp,\n} from \"questpie\";\nimport type { AdminBlockConfig, AdminConfigContext } from \"../augmentation.js\";\n\n// ============================================================================\n// Block Types\n// ============================================================================\n\n/**\n * Block prefetch context.\n * Provided to prefetch functions to fetch related data.\n *\n * When you register your app via `Register.app`, `ctx.app` is automatically typed.\n * For module-scoped typing, use `getApp<T>(ctx.app)`.\n *\n * @example\n * ```ts\n * // questpie.gen.ts - register your app for automatic typing\n * declare module \"questpie\" {\n * interface Register {\n * app: typeof import(\"./cms\").baseCms.$inferCms;\n * }\n * }\n *\n * // blocks.ts - ctx.app is now typed\n * .prefetch(async ({ values, ctx }) => {\n * const res = await ctx.app.api.collections.posts.find({ limit: 5 });\n * return { posts: res.docs };\n * })\n * ```\n */\nexport interface BlockPrefetchContext {\n\t/** Block instance ID */\n\tblockId: string;\n\t/** Block type name */\n\tblockType: string;\n\t/** CMS app instance — typed via Register.app */\n\tapp: RegisteredApp;\n\t/** Current locale */\n\tlocale?: string;\n\t/** Database client */\n\tdb: unknown;\n}\n\n/**\n * Block prefetch function.\n * Runs during CRUD read to fetch related data for the block.\n * The returned data is attached to `_data[blockId]` in the response.\n */\nexport type BlockPrefetchFn<TValues = Record<string, unknown>> = (params: {\n\t/** Block field values */\n\tvalues: TValues;\n\t/** Prefetch context */\n\tctx: BlockPrefetchContext;\n}) => Promise<Record<string, unknown>> | Record<string, unknown>;\n\n/**\n * Expanded record from expansion of relation/upload fields.\n * Contains at minimum an `id` field plus any other fields from the referenced record.\n */\nexport type ExpandedRecord = Record<string, unknown> & { id: string };\n\n/**\n * Options for a single relation inside a block prefetch `with` clause.\n * Same syntax as find's `with`, but only nested `with` is supported —\n * query options (where, orderBy, limit, etc.) don't apply to block field expansion.\n *\n * Nested `with` is passed through to the collection's `find` call,\n * reusing the existing relation resolution machinery.\n */\nexport type BlockPrefetchWithOptions = {\n\twith?: Record<string, true | BlockPrefetchWithOptions>;\n};\n\n/**\n * Block prefetch `with` clause.\n * Same object syntax as `with` in find operations.\n *\n * Each key is a relation/upload field name. Value can be:\n * - `true` — expand the field to a full record\n * - `{ with: { ... } }` — expand with nested relation loading\n *\n * @example\n * ```ts\n * // Simple expansion\n * .prefetch({ with: { backgroundImage: true } })\n *\n * // Nested expansion (e.g., expand author and their avatar)\n * .prefetch({ with: { author: { with: { avatar: true } } } })\n * ```\n */\nexport type BlockPrefetchWith<TFields = Record<string, unknown>> = {\n\t[K in keyof TFields]?: true | BlockPrefetchWithOptions;\n};\n\n/**\n * Compute the expanded data type from a `with` config object.\n * Each key that is `true` or `{ with: ... }` produces `ExpandedRecord | null`.\n */\nexport type ExpandWithResult<TWith> = {\n\t[K in keyof TWith as TWith[K] extends false | undefined\n\t\t? never\n\t\t: K]: ExpandedRecord | null;\n};\n\n/**\n * Block builder state.\n */\nexport interface BlockBuilderState<\n\tTName extends string = string,\n\tTFields extends Record<\n\t\tstring,\n\t\tFieldDefinition<FieldDefinitionState>\n\t> = Record<string, FieldDefinition<FieldDefinitionState>>,\n> {\n\t/** Block type name */\n\tname: TName;\n\t/** Admin configuration (label, icon, description, category, etc.) */\n\tadmin?: AdminBlockConfig;\n\t/** Field definitions */\n\tfields?: TFields;\n\t/** Allow child blocks */\n\tallowChildren?: boolean;\n\t/** Maximum number of child blocks */\n\tmaxChildren?: number;\n\t/** Prefetch function (Shape 1: pure function) */\n\tprefetch?: BlockPrefetchFn<any>;\n\t/** Relation fields to expand via `.prefetch({ with: { ... } })` */\n\tprefetchWith?: BlockPrefetchWith;\n\t/** Loader function for `.prefetch({ with, loader })` (Shape 3) */\n\t_prefetchLoader?: (params: {\n\t\tvalues: any;\n\t\texpanded: Record<string, unknown>;\n\t\tctx: BlockPrefetchContext;\n\t}) => Promise<Record<string, unknown>> | Record<string, unknown>;\n\t/** Type-level marker for prefetch data type (not used at runtime) */\n\t\"~prefetchData\"?: unknown;\n\t/** Optional registered component names from Questpie builder registry */\n\t\"~components\"?: string[];\n}\n\n/**\n * Block definition - the built block ready for registration.\n */\nexport interface BlockDefinition<\n\tTState extends BlockBuilderState = BlockBuilderState,\n> {\n\t/** Block type name */\n\treadonly name: TState[\"name\"];\n\t/** Full state */\n\treadonly state: TState;\n\t/** Get field metadata for introspection */\n\tgetFieldMetadata(): Record<string, FieldSchema>;\n\t/** Execute prefetch if defined */\n\texecutePrefetch(\n\t\tvalues: Record<string, unknown>,\n\t\tctx: BlockPrefetchContext,\n\t): Promise<Record<string, unknown>>;\n}\n\n// ============================================================================\n// Component Proxy Factory (same pattern as collections)\n// ============================================================================\n\n/**\n * Create a component proxy for type-safe icon and UI element references.\n * Used in .admin() config functions.\n */\nfunction createComponentProxy(\n\tregisteredComponentNames: string[] = [],\n): AdminConfigContext[\"c\"] {\n\tconst registered = new Set(registeredComponentNames);\n\tconst hasRegistry = registered.size > 0;\n\n\treturn new Proxy(\n\t\t{} as Record<string, (props: Record<string, unknown> | string) => unknown>,\n\t\t{\n\t\t\tget: (_target, prop: string | symbol) => {\n\t\t\t\tif (typeof prop !== \"string\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (prop === \"then\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (hasRegistry && !registered.has(prop)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Unknown component \"${prop}\" for block admin config. ` +\n\t\t\t\t\t\t\t`Available components: ${[...registered].sort().join(\", \")}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (props: Record<string, unknown> | string) => {\n\t\t\t\t\tif (prop === \"icon\" && typeof props === \"string\") {\n\t\t\t\t\t\treturn { type: \"icon\", props: { name: props } } as const;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof props === \"object\" && props !== null) {\n\t\t\t\t\t\treturn { type: prop, props } as const;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { type: prop, props: { value: props } } as const;\n\t\t\t\t};\n\t\t\t},\n\t\t\thas: (_target, prop: string | symbol) => {\n\t\t\t\tif (typeof prop !== \"string\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn hasRegistry ? registered.has(prop) : true;\n\t\t\t},\n\t\t\townKeys: () => (hasRegistry ? [...registered] : []),\n\t\t\tgetOwnPropertyDescriptor: (_target, prop: string | symbol) => {\n\t\t\t\tif (typeof prop !== \"string\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (hasRegistry && !registered.has(prop)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: hasRegistry,\n\t\t\t\t\twritable: false,\n\t\t\t\t\tvalue: (props: Record<string, unknown> | string) => {\n\t\t\t\t\t\tif (prop === \"icon\" && typeof props === \"string\") {\n\t\t\t\t\t\t\treturn { type: \"icon\", props: { name: props } } as const;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof props === \"object\" && props !== null) {\n\t\t\t\t\t\t\treturn { type: prop, props } as const;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { type: prop, props: { value: props } } as const;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t) as AdminConfigContext[\"c\"];\n}\n\n// ============================================================================\n// Block Builder Class\n// ============================================================================\n\n/**\n * Builder class for defining block types.\n *\n * @template TState - Block builder state\n * @template TFieldMap - Field type map for typed field proxy (from builder's registered fields)\n * @template TData - Prefetch data type (set by .prefetch(), preserved through chain)\n */\nexport class BlockBuilder<\n\tTState extends BlockBuilderState = BlockBuilderState,\n\tTFieldMap extends Record<string, any> = Record<string, any>,\n\tTData = Record<string, unknown>,\n> {\n\tprivate _state: TState;\n\n\tconstructor(state: TState) {\n\t\tthis._state = state;\n\t}\n\n\t/**\n\t * Set admin metadata for the block.\n\t * Follows the same pattern as collection .admin() method.\n\t *\n\t * @example\n\t * ```ts\n\t * block(\"hero\")\n\t * .admin(({ c }) => ({\n\t * label: { en: \"Hero Section\", sk: \"Hero sekcia\" },\n\t * icon: c.icon(\"ph:image\"),\n\t * description: { en: \"Full-width hero with background image\" },\n\t * category: {\n\t * label: { en: \"Sections\", sk: \"Sekcie\" },\n\t * icon: c.icon(\"ph:layout\"),\n\t * order: 1,\n\t * },\n\t * order: 1,\n\t * hidden: false,\n\t * }))\n\t * ```\n\t */\n\tadmin(\n\t\tconfigOrFn:\n\t\t\t| AdminBlockConfig\n\t\t\t| ((ctx: AdminConfigContext) => AdminBlockConfig),\n\t): BlockBuilder<TState & { admin: AdminBlockConfig }, TFieldMap, TData> {\n\t\tconst registeredComponents =\n\t\t\t(this._state as any)[\"~components\"] ?? ([] as string[]);\n\n\t\tconst config =\n\t\t\ttypeof configOrFn === \"function\"\n\t\t\t\t? configOrFn({ c: createComponentProxy(registeredComponents) })\n\t\t\t\t: configOrFn;\n\n\t\treturn new BlockBuilder<\n\t\t\tTState & { admin: AdminBlockConfig },\n\t\t\tTFieldMap,\n\t\t\tTData\n\t\t>({\n\t\t\t...this._state,\n\t\t\tadmin: config,\n\t\t} as TState & { admin: AdminBlockConfig });\n\t}\n\n\t/**\n\t * Define fields for the block.\n\t * Uses the same field builder as collections.\n\t *\n\t * @example\n\t * ```ts\n\t * block(\"hero\").fields((f) => ({\n\t * title: f.text({ required: true }),\n\t * subtitle: f.text(),\n\t * image: f.upload({ accept: \"image/*\" }),\n\t * }))\n\t * ```\n\t */\n\tfields<\n\t\tTNewFields extends Record<string, FieldDefinition<FieldDefinitionState>>,\n\t>(\n\t\tfactory: (f: FieldBuilderProxy<TFieldMap>) => TNewFields,\n\t): BlockBuilder<\n\t\tOmit<TState, \"fields\"> & { fields: TNewFields },\n\t\tTFieldMap,\n\t\tTData\n\t> {\n\t\t// Store the factory for later resolution when CMS is built\n\t\t// The actual field definitions are created when block is registered\n\t\treturn new BlockBuilder({\n\t\t\t...this._state,\n\t\t\t_fieldsFactory: factory,\n\t\t} as any);\n\t}\n\n\t/**\n\t * Allow child blocks (for layout blocks).\n\t *\n\t * @example\n\t * ```ts\n\t * block(\"columns\").allowChildren()\n\t * block(\"columns\").allowChildren(4) // max 4 children\n\t * ```\n\t */\n\tallowChildren(\n\t\tmaxChildren?: number,\n\t): BlockBuilder<\n\t\tTState & { allowChildren: true; maxChildren?: number },\n\t\tTFieldMap,\n\t\tTData\n\t> {\n\t\treturn new BlockBuilder({\n\t\t\t...this._state,\n\t\t\tallowChildren: true,\n\t\t\tmaxChildren,\n\t\t} as TState & { allowChildren: true; maxChildren?: number });\n\t}\n\n\t/**\n\t * Add prefetch configuration for server-side data fetching.\n\t * Runs during CRUD read to fetch related data for the block.\n\t *\n\t * Supports three shapes:\n\t *\n\t * **Shape 1: Pure function** — return data directly, `TData` inferred from return type.\n\t * ```ts\n\t * .prefetch(async ({ values, ctx }) => {\n\t * return { services: res.docs };\n\t * })\n\t * ```\n\t *\n\t * **Shape 2: Expand relation/upload fields** — same `with` syntax as find operations.\n\t * ```ts\n\t * .prefetch({ with: { backgroundImage: true } })\n\t *\n\t * // Nested expansion (passes through to collection find's `with`)\n\t * .prefetch({ with: { author: { with: { avatar: true } } } })\n\t * ```\n\t *\n\t * **Shape 3: Expand + custom loader** — expand fields, then run a loader with the expanded data.\n\t * ```ts\n\t * .prefetch({\n\t * with: { backgroundImage: true },\n\t * loader: async ({ values, expanded, ctx }) => {\n\t * return { analytics: await getStats() };\n\t * },\n\t * })\n\t * ```\n\t */\n\t// Overload 1: Pure function (Shape 1)\n\tprefetch<TNewData extends Record<string, unknown>>(\n\t\tfn: (params: {\n\t\t\tvalues: InferBlockValues<TState>;\n\t\t\tctx: BlockPrefetchContext;\n\t\t}) => Promise<TNewData> | TNewData,\n\t): BlockBuilder<\n\t\tOmit<TState, \"prefetch\" | \"~prefetchData\"> & {\n\t\t\tprefetch: typeof fn;\n\t\t\t\"~prefetchData\": TNewData;\n\t\t},\n\t\tTFieldMap,\n\t\tTNewData\n\t>;\n\t// Overload 2: Config object with `with` and optional `loader` (Shape 2 & 3)\n\tprefetch<\n\t\tconst TWith extends BlockPrefetchWith<InferBlockValues<TState>>,\n\t\tTLoaderData extends Record<string, unknown> = {},\n\t>(config: {\n\t\twith: TWith;\n\t\tloader?: (params: {\n\t\t\tvalues: InferBlockValues<TState>;\n\t\t\texpanded: ExpandWithResult<TWith>;\n\t\t\tctx: BlockPrefetchContext;\n\t\t}) => Promise<TLoaderData> | TLoaderData;\n\t}): BlockBuilder<\n\t\tOmit<\n\t\t\tTState,\n\t\t\t\"prefetch\" | \"prefetchWith\" | \"_prefetchLoader\" | \"~prefetchData\"\n\t\t> & {\n\t\t\tprefetchWith: TWith;\n\t\t\t\"~prefetchData\": ExpandWithResult<TWith> & TLoaderData;\n\t\t},\n\t\tTFieldMap,\n\t\tExpandWithResult<TWith> & TLoaderData\n\t>;\n\t// Implementation\n\tprefetch(fnOrConfig: any): any {\n\t\tif (typeof fnOrConfig === \"function\") {\n\t\t\treturn new BlockBuilder({\n\t\t\t\t...this._state,\n\t\t\t\tprefetch: fnOrConfig,\n\t\t\t} as any);\n\t\t}\n\n\t\tconst { with: withFields, loader } = fnOrConfig;\n\t\treturn new BlockBuilder({\n\t\t\t...this._state,\n\t\t\tprefetchWith: withFields,\n\t\t\t_prefetchLoader: loader,\n\t\t} as any);\n\t}\n\n\t/**\n\t * Build the block definition.\n\t * Called automatically when registering with .blocks().\n\t */\n\tbuild(): BlockDefinition<TState> {\n\t\tconst state = this._state;\n\n\t\treturn {\n\t\t\tname: state.name,\n\t\t\tstate,\n\t\t\tgetFieldMetadata() {\n\t\t\t\tif (!state.fields) return {};\n\t\t\t\tconst fields: Record<string, FieldSchema> = {};\n\t\t\t\tfor (const [name, fieldDef] of Object.entries(state.fields)) {\n\t\t\t\t\tfields[name] = {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tmetadata: fieldDef.getMetadata(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn fields;\n\t\t\t},\n\t\t\tasync executePrefetch(values, ctx) {\n\t\t\t\tif (!state.prefetch) return {};\n\t\t\t\treturn state.prefetch({ values, ctx });\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Get the current state (for internal use).\n\t */\n\tget state(): TState {\n\t\treturn this._state;\n\t}\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a new server-side block builder.\n *\n * Defines block types with fields, validation, and prefetch logic.\n * Blocks are server-only - the frontend handles rendering independently.\n *\n * @example\n * ```ts\n * import { block } from \"@questpie/admin/server\";\n *\n * const heroBlock = block(\"hero\")\n * .admin(({ c }) => ({\n * label: { en: \"Hero Section\" },\n * icon: c.icon(\"ph:image\"),\n * category: {\n * label: { en: \"Layout\" },\n * },\n * }))\n * .fields((f) => ({\n * title: f.text({ required: true }),\n * subtitle: f.text(),\n * }));\n *\n * // Register blocks on CMS\n * const cms = q({ name: \"my-app\" })\n * .use(adminModule)\n * .blocks({ hero: heroBlock })\n * .build({ ... });\n * ```\n */\nexport function block<TName extends string>(\n\tname: TName,\n): BlockBuilder<{ name: TName }> {\n\treturn new BlockBuilder({ name });\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Extract field values type from block state.\n * Infers value type per-field to produce heterogeneous types\n * (e.g., { title: string, count: number, showPrices: boolean }).\n */\nexport type InferBlockValues<TState extends BlockBuilderState> =\n\tTState[\"fields\"] extends Record<string, FieldDefinition<FieldDefinitionState>>\n\t\t? {\n\t\t\t\t[K in keyof TState[\"fields\"]]: TState[\"fields\"][K] extends FieldDefinition<\n\t\t\t\t\tinfer TFieldState\n\t\t\t\t>\n\t\t\t\t\t? TFieldState[\"value\"]\n\t\t\t\t\t: unknown;\n\t\t\t}\n\t\t: Record<string, unknown>;\n\n/**\n * Extract prefetch data type from a block builder or block state.\n * Infers the `data` type based on `.prefetch()` configuration:\n * - Shape 1 (function): return type of the prefetch function\n * - Shape 2 (`{ with }` ): expanded fields as `{ [field]: ExpandedRecord | null }`\n * - Shape 3 (`{ with, loader }`): expanded fields merged with loader return type\n * - No prefetch: `Record<string, unknown>`\n *\n * Accepts either a `BlockBuilder` instance or a `BlockBuilderState`.\n * Prefer passing the builder — state-level extraction may fail when\n * `as any` casts are present in the builder chain.\n */\nexport type InferBlockData<T> =\n\tT extends BlockBuilder<any, any, infer TData>\n\t\t? TData\n\t\t: T extends BlockBuilderState\n\t\t\t? T[\"~prefetchData\"] extends Record<string, unknown>\n\t\t\t\t? T[\"~prefetchData\"]\n\t\t\t\t: Record<string, unknown>\n\t\t\t: Record<string, unknown>;\n\n/**\n * Any block builder (for generic usage).\n */\nexport type AnyBlockBuilder = BlockBuilder<BlockBuilderState, any, any>;\n\n/**\n * Any block definition (for generic usage).\n */\nexport type AnyBlockDefinition = BlockDefinition<BlockBuilderState>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspection.d.mts","names":[],"sources":["../../../src/server/block/introspection.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAqDe,UA9BE,WAAA,CA8BF;EAYE;EAkBD,IAAA,EAAA,MAAA;EA4BA;EACQ,KAAA,CAAA,EAAA;IAAf;IACS,KAAA,CAAA,EAnFR,QAmFQ;IAAf;IAAM,WAAA,CAAA,EAjFO,QAiFP;IAwCO;IACQ,IAAA,CAAA,EAxHf,kBAwHe;IAAf;IACN,QAAA,CAAA,EAvHU,mBAuHV;IAAY;;;;;;;;;;;;UAtGN,eAAe;;;;;;;;;;UAYP,YAAA;;;;UAIR;;UAEA;;;;;;;iBAYO,eAAA,WAA0B,qBAAqB;;;;;;;;;;;;;;;;iBA4B/C,gBAAA,SACP,eAAe,kCACrB,eAAe;;;;;iBAwCF,mBAAA,SACP,eAAe,eACrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspection.mjs","names":["schemas: Record<string, BlockSchema>","uncategorizedConfig: BlockCategoryConfig","key: string","config: BlockCategoryConfig"],"sources":["../../../src/server/block/introspection.ts"],"sourcesContent":["/**\n * Block Introspection\n *\n * Provides introspection of registered blocks for admin UI consumption.\n */\n\nimport type { FieldSchema } from \"questpie\";\nimport { type I18nText, isI18nLocaleMap } from \"questpie/shared\";\nimport type {\n\tAdminBlockConfig,\n\tBlockCategoryConfig,\n\tComponentReference,\n} from \"../augmentation.js\";\nimport type { AnyBlockDefinition, BlockBuilderState } from \"./block-builder.js\";\n\n// ============================================================================\n// Block Schema Types\n// ============================================================================\n\n/**\n * Introspected block schema for admin consumption.\n * All admin metadata comes from the .admin() configuration.\n */\nexport interface BlockSchema {\n\t/** Block type name */\n\tname: string;\n\n\t/** Admin configuration */\n\tadmin?: {\n\t\t/** Display label */\n\t\tlabel?: I18nText;\n\t\t/** Description */\n\t\tdescription?: I18nText;\n\t\t/** Icon reference */\n\t\ticon?: ComponentReference;\n\t\t/** Category for grouping in block picker */\n\t\tcategory?: BlockCategoryConfig;\n\t\t/** Order within category in block picker */\n\t\torder?: number;\n\t\t/** Hide from block picker */\n\t\thidden?: boolean;\n\t};\n\n\t/** Allow child blocks */\n\tallowChildren?: boolean;\n\n\t/** Maximum number of child blocks */\n\tmaxChildren?: number;\n\n\t/** Has prefetch function */\n\thasPrefetch: boolean;\n\n\t/** Field schemas - unified format using FieldSchema */\n\tfields: Record<string, FieldSchema>;\n\n\t/** Validation schemas */\n\tvalidation?: {\n\t\tinsert?: unknown;\n\t\tupdate?: unknown;\n\t};\n}\n\n/**\n * Category info extracted from blocks for UI rendering.\n */\nexport interface CategoryInfo {\n\t/** Category key (derived from label or auto-generated) */\n\tkey: string;\n\t/** Category configuration */\n\tconfig: BlockCategoryConfig;\n\t/** Blocks in this category */\n\tblocks: BlockSchema[];\n}\n\n// ============================================================================\n// Introspection Functions\n// ============================================================================\n\n/**\n * Introspect a single block definition.\n * Handles both server BlockBuilder definitions and client BlockDefinition objects\n * that were converted via the `.blocks()` patch.\n */\nexport function introspectBlock(blockDef: AnyBlockDefinition): BlockSchema {\n\tconst state = blockDef.state;\n\n\treturn {\n\t\tname: state.name ?? blockDef.name,\n\t\tadmin: state.admin,\n\t\tallowChildren: state.allowChildren,\n\t\tmaxChildren: state.maxChildren,\n\t\thasPrefetch: typeof state.prefetch === \"function\",\n\t\tfields: blockDef.getFieldMetadata(),\n\t};\n}\n\n/**\n * Introspect all registered blocks.\n *\n * @param blocks - Record of registered block definitions\n * @returns Record of block schemas\n *\n * @example\n * ```ts\n * import { introspectBlocks } from \"@questpie/admin/server\";\n *\n * // In an API route\n * const blocks = introspectBlocks(cms.state.blocks);\n * return Response.json({ blocks });\n * ```\n */\nexport function introspectBlocks(\n\tblocks: Record<string, AnyBlockDefinition> | undefined,\n): Record<string, BlockSchema> {\n\tif (!blocks) {\n\t\treturn {};\n\t}\n\n\tconst schemas: Record<string, BlockSchema> = {};\n\n\tfor (const [name, blockDef] of Object.entries(blocks)) {\n\t\tschemas[name] = introspectBlock(blockDef);\n\t}\n\n\treturn schemas;\n}\n\n/**\n * Generate a category key from category config.\n * Uses English label as key, falling back to first available label.\n */\nfunction getCategoryKey(category: BlockCategoryConfig): string {\n\tconst { label } = category;\n\n\tif (typeof label === \"string\") {\n\t\treturn label.toLowerCase().replace(/\\s+/g, \"-\");\n\t}\n\n\t// For locale map or translation key\n\tif (isI18nLocaleMap(label)) {\n\t\t// Use English label as key, or first available\n\t\tconst text = label.en ?? Object.values(label)[0] ?? \"\";\n\t\treturn text.toLowerCase().replace(/\\s+/g, \"-\");\n\t}\n\n\t// Translation key - use the key itself\n\treturn label.key.toLowerCase().replace(/[.:]/g, \"-\");\n}\n\n/**\n * Get blocks grouped by category with full category info.\n * Useful for block picker UI.\n */\nexport function getBlocksByCategory(\n\tblocks: Record<string, BlockSchema>,\n): CategoryInfo[] {\n\tconst categoryMap = new Map<string, CategoryInfo>();\n\n\t// Default uncategorized category\n\tconst uncategorizedKey = \"uncategorized\";\n\tconst uncategorizedConfig: BlockCategoryConfig = {\n\t\tlabel: { en: \"Uncategorized\" },\n\t\torder: 999,\n\t};\n\n\tfor (const block of Object.values(blocks)) {\n\t\t// Skip hidden blocks\n\t\tif (block.admin?.hidden) continue;\n\n\t\tconst categoryConfig = block.admin?.category;\n\t\tlet key: string;\n\t\tlet config: BlockCategoryConfig;\n\n\t\tif (categoryConfig) {\n\t\t\tkey = getCategoryKey(categoryConfig);\n\t\t\tconfig = categoryConfig;\n\t\t} else {\n\t\t\tkey = uncategorizedKey;\n\t\t\tconfig = uncategorizedConfig;\n\t\t}\n\n\t\tif (!categoryMap.has(key)) {\n\t\t\tcategoryMap.set(key, {\n\t\t\t\tkey,\n\t\t\t\tconfig,\n\t\t\t\tblocks: [],\n\t\t\t});\n\t\t}\n\n\t\tcategoryMap.get(key)!.blocks.push(block);\n\t}\n\n\t// Convert to array and sort\n\tconst categories = Array.from(categoryMap.values());\n\n\t// Sort categories by order\n\tcategories.sort((a, b) => (a.config.order ?? 999) - (b.config.order ?? 999));\n\n\t// Sort blocks within each category by order\n\tfor (const category of categories) {\n\t\tcategory.blocks.sort(\n\t\t\t(a, b) => (a.admin?.order ?? 999) - (b.admin?.order ?? 999),\n\t\t);\n\t}\n\n\treturn categories;\n}\n"],"mappings":";;;;;;;;AAmFA,SAAgB,gBAAgB,UAA2C;CAC1E,MAAM,QAAQ,SAAS;AAEvB,QAAO;EACN,MAAM,MAAM,QAAQ,SAAS;EAC7B,OAAO,MAAM;EACb,eAAe,MAAM;EACrB,aAAa,MAAM;EACnB,aAAa,OAAO,MAAM,aAAa;EACvC,QAAQ,SAAS,kBAAkB;EACnC;;;;;;;;;;;;;;;;;AAkBF,SAAgB,iBACf,QAC8B;AAC9B,KAAI,CAAC,OACJ,QAAO,EAAE;CAGV,MAAMA,UAAuC,EAAE;AAE/C,MAAK,MAAM,CAAC,MAAM,aAAa,OAAO,QAAQ,OAAO,CACpD,SAAQ,QAAQ,gBAAgB,SAAS;AAG1C,QAAO;;;;;;AAOR,SAAS,eAAe,UAAuC;CAC9D,MAAM,EAAE,UAAU;AAElB,KAAI,OAAO,UAAU,SACpB,QAAO,MAAM,aAAa,CAAC,QAAQ,QAAQ,IAAI;AAIhD,KAAI,gBAAgB,MAAM,CAGzB,SADa,MAAM,MAAM,OAAO,OAAO,MAAM,CAAC,MAAM,IACxC,aAAa,CAAC,QAAQ,QAAQ,IAAI;AAI/C,QAAO,MAAM,IAAI,aAAa,CAAC,QAAQ,SAAS,IAAI;;;;;;AAOrD,SAAgB,oBACf,QACiB;CACjB,MAAM,8BAAc,IAAI,KAA2B;CAGnD,MAAM,mBAAmB;CACzB,MAAMC,sBAA2C;EAChD,OAAO,EAAE,IAAI,iBAAiB;EAC9B,OAAO;EACP;AAED,MAAK,MAAM,SAAS,OAAO,OAAO,OAAO,EAAE;AAE1C,MAAI,MAAM,OAAO,OAAQ;EAEzB,MAAM,iBAAiB,MAAM,OAAO;EACpC,IAAIC;EACJ,IAAIC;AAEJ,MAAI,gBAAgB;AACnB,SAAM,eAAe,eAAe;AACpC,YAAS;SACH;AACN,SAAM;AACN,YAAS;;AAGV,MAAI,CAAC,YAAY,IAAI,IAAI,CACxB,aAAY,IAAI,KAAK;GACpB;GACA;GACA,QAAQ,EAAE;GACV,CAAC;AAGH,cAAY,IAAI,IAAI,CAAE,OAAO,KAAK,MAAM;;CAIzC,MAAM,aAAa,MAAM,KAAK,YAAY,QAAQ,CAAC;AAGnD,YAAW,MAAM,GAAG,OAAO,EAAE,OAAO,SAAS,QAAQ,EAAE,OAAO,SAAS,KAAK;AAG5E,MAAK,MAAM,YAAY,WACtB,UAAS,OAAO,MACd,GAAG,OAAO,EAAE,OAAO,SAAS,QAAQ,EAAE,OAAO,SAAS,KACvD;AAGF,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prefetch.d.mts","names":[],"sources":["../../../src/server/block/prefetch.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;UAiDiB,qBAAA;;OAEX;;;;;;;;;;;;;;;;;;;;;iBAoNgB,qBAAA,SACb,qDACU,eAAe,0BAC5B,wBACH,QAAQ;;;;;;;;;;;iBAuJW,wCACX,8BAEL,qBACa;;;;;;sBACA,eAAe,0BAC5B,wBACH,QAAQ;;;;;;;;;;;;;;;;;;;iBAyCK,wBAAA,CAAA;QAER;;;;MAIN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prefetch.mjs","names":["expandedData: Record<string, Record<string, unknown>>","allNodes: Array<{ id: string; type: string; children: any[] }>","mergedData: Record<string, Record<string, unknown>>","prefetchedData: Record<string, Record<string, unknown>>","prefetchPromises: Promise<void>[]","prefetchCtx: BlockPrefetchContext","result: Record<string, unknown>"],"sources":["../../../src/server/block/prefetch.ts"],"sourcesContent":["/**\n * Server CRUD Block Prefetch Utility\n *\n * Handles data fetching for blocks during the afterRead hook.\n * The fetched data is attached to `_data[blockId]` in the response.\n *\n * Two mechanisms populate `_data`:\n *\n * 1. **Declared field expansion** (`.prefetch({ with: [...] })`): Explicitly\n * declared relation/upload fields are batch-fetched and expanded to full records.\n * Only the fields listed in `with` are expanded — nothing is implicit.\n *\n * 2. **Custom prefetch function** (`.prefetch(fn)`): For computed data that can't\n * be auto-expanded, define a prefetch function that returns arbitrary data.\n *\n * 3. **Expand + loader** (`.prefetch({ with: [...], loader })`): Expand fields\n * first, then pass the expanded data to a loader for additional processing.\n *\n * @example\n * ```ts\n * // Shape 1: Pure function\n * block(\"featuredPosts\").prefetch(async ({ values, ctx }) => {\n * return { posts: await fetchPosts(values.count) };\n * })\n *\n * // Shape 2: Expand specific fields\n * block(\"hero\").prefetch({ with: ['backgroundImage'] })\n *\n * // Shape 3: Expand + custom loader\n * block(\"hero\").prefetch({\n * with: ['backgroundImage'],\n * loader: async ({ expanded, ctx }) => ({\n * analytics: await getStats(),\n * }),\n * })\n * ```\n */\n\nimport type { RegisteredApp } from \"questpie\";\nimport type { BlocksDocument } from \"../fields/blocks.js\";\nimport type {\n\tAnyBlockDefinition,\n\tBlockPrefetchContext,\n} from \"./block-builder.js\";\n\n/**\n * Context for blocks prefetch processing.\n * Typed via Register.app when registered.\n */\nexport interface BlocksPrefetchContext {\n\t/** CMS app instance — typed via Register.app */\n\tapp: RegisteredApp;\n\t/** Database client */\n\tdb: unknown;\n\t/** Current locale */\n\tlocale?: string;\n}\n\n// ============================================================================\n// Declared field expansion (replaces old auto-expansion)\n// ============================================================================\n\n/**\n * Tracks a field that needs expansion.\n * @internal\n */\ninterface ExpansionTarget {\n\tblockId: string;\n\tfieldName: string;\n\t/** Whether the original value was a single ID (not an array) */\n\tisSingle: boolean;\n\t/** Nested `with` config to pass through to the collection's find call */\n\tnestedWith?: Record<string, unknown>;\n}\n\n/**\n * Expand relation/upload fields declared in `prefetchWith`.\n *\n * Uses the same object syntax as `with` in find operations:\n * ```ts\n * { backgroundImage: true, author: { with: { avatar: true } } }\n * ```\n *\n * Nested `with` is passed through to the collection's `find` call,\n * reusing the existing relation resolution machinery.\n *\n * @internal\n */\nasync function expandDeclaredFields(\n\tallNodes: Array<{ id: string; type: string }>,\n\tvalues: Record<string, Record<string, unknown>>,\n\tblockDefinitions: Record<string, AnyBlockDefinition>,\n\tctx: BlocksPrefetchContext,\n): Promise<Record<string, Record<string, unknown>>> {\n\t// Group expansion requirements by target collection for batch fetching\n\t// Key: \"collection:nestedWithHash\" to separate different with configs\n\tconst expansionsByCollection = new Map<\n\t\tstring,\n\t\t{\n\t\t\tids: Set<string>;\n\t\t\ttargets: ExpansionTarget[];\n\t\t\tnestedWith?: Record<string, unknown>;\n\t\t}\n\t>();\n\n\tfor (const node of allNodes) {\n\t\tconst blockDef = blockDefinitions[node.type];\n\t\tconst prefetchWith = blockDef?.state.prefetchWith;\n\t\tif (!prefetchWith || typeof prefetchWith !== \"object\") continue;\n\t\tif (!blockDef?.state.fields) continue;\n\n\t\tconst blockValues = values[node.id] || {};\n\n\t\tfor (const [fieldName, fieldConfig] of Object.entries(prefetchWith)) {\n\t\t\tif (!fieldConfig) continue;\n\n\t\t\tconst fieldDef = blockDef.state.fields[fieldName];\n\t\t\tif (!fieldDef || typeof fieldDef !== \"object\") continue;\n\n\t\t\t// Get field metadata to find the target collection\n\t\t\tconst metadata =\n\t\t\t\t\"getMetadata\" in fieldDef &&\n\t\t\t\ttypeof (fieldDef as any).getMetadata === \"function\"\n\t\t\t\t\t? (fieldDef as any).getMetadata()\n\t\t\t\t\t: undefined;\n\t\t\tif (!metadata) continue;\n\n\t\t\t// Support relation fields and upload fields\n\t\t\tif (metadata.type !== \"relation\") continue;\n\n\t\t\tconst targetCollection = metadata.targetCollection;\n\t\t\tif (!targetCollection || typeof targetCollection !== \"string\") continue;\n\n\t\t\t// Extract ID(s) from block value\n\t\t\tconst value = blockValues[fieldName];\n\t\t\tif (!value) continue;\n\n\t\t\tconst rawIds = Array.isArray(value) ? value : [value];\n\t\t\tconst stringIds = rawIds.filter(\n\t\t\t\t(id): id is string => typeof id === \"string\" && id.length > 0,\n\t\t\t);\n\t\t\tif (stringIds.length === 0) continue;\n\n\t\t\t// Extract nested `with` config (for passing to collection find)\n\t\t\tconst nestedWith =\n\t\t\t\ttypeof fieldConfig === \"object\" && fieldConfig.with\n\t\t\t\t\t? (fieldConfig.with as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\n\t\t\t// Group by collection + nested with config\n\t\t\tconst groupKey = nestedWith\n\t\t\t\t? `${targetCollection}:${JSON.stringify(nestedWith)}`\n\t\t\t\t: targetCollection;\n\n\t\t\tif (!expansionsByCollection.has(groupKey)) {\n\t\t\t\texpansionsByCollection.set(groupKey, {\n\t\t\t\t\tids: new Set(),\n\t\t\t\t\ttargets: [],\n\t\t\t\t\tnestedWith,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst entry = expansionsByCollection.get(groupKey)!;\n\t\t\tfor (const id of stringIds) entry.ids.add(id);\n\t\t\tentry.targets.push({\n\t\t\t\tblockId: node.id,\n\t\t\t\tfieldName,\n\t\t\t\tisSingle: !Array.isArray(value),\n\t\t\t\tnestedWith,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (expansionsByCollection.size === 0) return {};\n\n\t// Batch-fetch records from each target collection\n\tconst fetchedByGroup = new Map<string, Map<string, unknown>>();\n\n\tconst fetchPromises = [...expansionsByCollection.entries()].map(\n\t\tasync ([groupKey, { ids, nestedWith }]) => {\n\t\t\t// Extract collection name from group key\n\t\t\tconst collection = groupKey.includes(\":\")\n\t\t\t\t? groupKey.slice(0, groupKey.indexOf(\":\"))\n\t\t\t\t: groupKey;\n\n\t\t\ttry {\n\t\t\t\tconst appApi = (ctx.app as any)?.api?.collections?.[collection];\n\t\t\t\tif (!appApi?.find) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[prefetch] Collection \"${collection}\" not found on app API, skipping`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Pass nested `with` through to collection's find — reuses existing\n\t\t\t\t// relation resolution machinery (same as find({ with: { ... } }))\n\t\t\t\tconst result = await appApi.find({\n\t\t\t\t\twhere: { id: { in: [...ids] } },\n\t\t\t\t\tlimit: ids.size,\n\t\t\t\t\t...(nestedWith ? { with: nestedWith } : {}),\n\t\t\t\t});\n\n\t\t\t\tconst recordMap = new Map<string, unknown>();\n\t\t\t\tfor (const doc of result?.docs || []) {\n\t\t\t\t\tif (doc && typeof doc === \"object\" && \"id\" in doc) {\n\t\t\t\t\t\trecordMap.set((doc as any).id, doc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfetchedByGroup.set(groupKey, recordMap);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[prefetch] Failed to fetch from \"${collection}\":`,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t);\n\tawait Promise.all(fetchPromises);\n\n\t// Distribute expanded records to block _data\n\tconst expandedData: Record<string, Record<string, unknown>> = {};\n\n\tfor (const [groupKey, { targets }] of expansionsByCollection) {\n\t\tconst recordMap = fetchedByGroup.get(groupKey);\n\t\tif (!recordMap) continue;\n\n\t\tfor (const { blockId, fieldName, isSingle } of targets) {\n\t\t\tif (!expandedData[blockId]) expandedData[blockId] = {};\n\n\t\t\tconst blockVal = (values[blockId] || {})[fieldName];\n\t\t\tif (isSingle) {\n\t\t\t\texpandedData[blockId][fieldName] =\n\t\t\t\t\trecordMap.get(blockVal as string) ?? null;\n\t\t\t} else {\n\t\t\t\tconst ids = blockVal as string[];\n\t\t\t\texpandedData[blockId][fieldName] = ids\n\t\t\t\t\t.map((id) => recordMap.get(id))\n\t\t\t\t\t.filter(Boolean);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn expandedData;\n}\n\n// ============================================================================\n// Prefetch function execution\n// ============================================================================\n\n/**\n * Process blocks data for a single blocks document.\n *\n * This function does two things:\n * 1. **Expands declared fields** from `.prefetch({ with: [...] })` (batch-fetched)\n * 2. **Executes prefetch functions/loaders** for blocks that have them\n *\n * The results are merged into `_data[blockId]`. Prefetch function / loader data\n * takes precedence over expanded data on key conflicts.\n *\n * @param blocks - The blocks document to process\n * @param blockDefinitions - Registered block definitions\n * @param ctx - Prefetch context\n * @returns The blocks document with `_data` populated\n */\nexport async function processBlocksDocument(\n\tblocks: BlocksDocument | null | undefined,\n\tblockDefinitions: Record<string, AnyBlockDefinition>,\n\tctx: BlocksPrefetchContext,\n): Promise<BlocksDocument | null | undefined> {\n\tif (!blocks || !blocks._tree || !blocks._values) {\n\t\treturn blocks;\n\t}\n\n\t// Flatten the tree\n\tconst allNodes: Array<{ id: string; type: string; children: any[] }> = [];\n\tconst collectNodes = (\n\t\tnodes: Array<{ id: string; type: string; children: any[] }>,\n\t) => {\n\t\tfor (const node of nodes) {\n\t\t\tallNodes.push(node);\n\t\t\tif (node.children.length > 0) {\n\t\t\t\tcollectNodes(node.children);\n\t\t\t}\n\t\t}\n\t};\n\tcollectNodes(blocks._tree);\n\n\t// Step 1: Expand declared `with` fields (batch across all blocks)\n\tconst expandedData = await expandDeclaredFields(\n\t\tallNodes,\n\t\tblocks._values,\n\t\tblockDefinitions,\n\t\tctx,\n\t);\n\n\t// Step 2: Execute prefetch functions and loaders\n\tconst prefetchedData = await executePrefetchFunctions(\n\t\tallNodes,\n\t\tblocks._values,\n\t\tblockDefinitions,\n\t\tctx,\n\t\texpandedData,\n\t);\n\n\t// Step 3: Merge expanded + prefetched (prefetched overrides on conflict)\n\tconst mergedData: Record<string, Record<string, unknown>> = {};\n\tconst allBlockIds = new Set([\n\t\t...Object.keys(expandedData),\n\t\t...Object.keys(prefetchedData),\n\t]);\n\n\tfor (const blockId of allBlockIds) {\n\t\tmergedData[blockId] = {\n\t\t\t...(expandedData[blockId] || {}),\n\t\t\t...(prefetchedData[blockId] || {}),\n\t\t};\n\t}\n\n\treturn {\n\t\t...blocks,\n\t\t_data: mergedData,\n\t};\n}\n\n/**\n * Execute prefetch functions and loaders for blocks.\n *\n * Handles two shapes:\n * - Shape 1: `state.prefetch` — call with `{ values, ctx }`\n * - Shape 3: `state._prefetchLoader` — call with `{ values, expanded, ctx }`\n *\n * Shape 2 (with-only) has no function to call — expansion is handled separately.\n *\n * @internal\n */\nasync function executePrefetchFunctions(\n\tallNodes: Array<{ id: string; type: string }>,\n\tvalues: Record<string, Record<string, unknown>>,\n\tblockDefinitions: Record<string, AnyBlockDefinition>,\n\tctx: BlocksPrefetchContext,\n\texpandedData: Record<string, Record<string, unknown>>,\n): Promise<Record<string, Record<string, unknown>>> {\n\tconst prefetchedData: Record<string, Record<string, unknown>> = {};\n\tconst prefetchPromises: Promise<void>[] = [];\n\n\tfor (const node of allNodes) {\n\t\tconst blockDef = blockDefinitions[node.type];\n\t\tif (!blockDef) continue;\n\n\t\tconst blockValues = values[node.id] || {};\n\t\tconst prefetchCtx: BlockPrefetchContext = {\n\t\t\tblockId: node.id,\n\t\t\tblockType: node.type,\n\t\t\tapp: ctx.app,\n\t\t\tdb: ctx.db,\n\t\t\tlocale: ctx.locale,\n\t\t};\n\n\t\t// Shape 3: with + loader\n\t\tconst loader = (blockDef.state as any)._prefetchLoader;\n\t\tif (typeof loader === \"function\") {\n\t\t\tconst expanded = expandedData[node.id] || {};\n\t\t\tprefetchPromises.push(\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await loader({\n\t\t\t\t\t\t\tvalues: blockValues,\n\t\t\t\t\t\t\texpanded,\n\t\t\t\t\t\t\tctx: prefetchCtx,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\t\t\t\tprefetchedData[node.id] = data as Record<string, unknown>;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`Block prefetch loader failed for ${node.type}:${node.id}:`,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprefetchedData[node.id] = { _error: \"Prefetch failed\" };\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t);\n\t\t}\n\t\t// Shape 1: pure function prefetch\n\t\telse if (blockDef.state.prefetch) {\n\t\t\tprefetchPromises.push(\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await blockDef.executePrefetch(\n\t\t\t\t\t\t\tblockValues,\n\t\t\t\t\t\t\tprefetchCtx,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprefetchedData[node.id] = data;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`Block prefetch failed for ${node.type}:${node.id}:`,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprefetchedData[node.id] = { _error: \"Prefetch failed\" };\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t);\n\t\t}\n\t}\n\n\tawait Promise.all(prefetchPromises);\n\treturn prefetchedData;\n}\n\n/**\n * Process blocks prefetch for a document.\n * Finds all blocks fields in the document and processes them.\n *\n * @param doc - The document containing blocks fields\n * @param fieldDefinitions - Field definitions to identify blocks fields\n * @param blockDefinitions - Registered block definitions\n * @param ctx - Prefetch context\n * @returns The document with blocks prefetch data attached\n */\nexport async function processDocumentBlocksPrefetch<\n\tT extends Record<string, unknown>,\n>(\n\tdoc: T,\n\tfieldDefinitions: Record<string, { state: { config: { type?: string } } }>,\n\tblockDefinitions: Record<string, AnyBlockDefinition>,\n\tctx: BlocksPrefetchContext,\n): Promise<T> {\n\tif (!doc || !blockDefinitions || Object.keys(blockDefinitions).length === 0) {\n\t\treturn doc;\n\t}\n\n\tconst result: Record<string, unknown> = { ...doc };\n\n\t// Find all blocks fields and process them\n\tfor (const [fieldName, fieldDef] of Object.entries(fieldDefinitions)) {\n\t\tconst fieldType = fieldDef?.state?.config?.type;\n\n\t\tif (fieldType === \"blocks\" && result[fieldName]) {\n\t\t\tresult[fieldName] = await processBlocksDocument(\n\t\t\t\tresult[fieldName] as BlocksDocument,\n\t\t\t\tblockDefinitions,\n\t\t\t\tctx,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn result as T;\n}\n\n/**\n * Create an afterRead hook for processing blocks prefetch.\n * This hook can be added to collections that have blocks fields.\n *\n * @example\n * ```ts\n * import { createBlocksPrefetchHook } from \"@questpie/admin/server\";\n *\n * const pages = q.collection(\"pages\")\n * .fields((f) => ({\n * title: f.text({ required: true }),\n * content: f.blocks({ allowedBlocks: [\"hero\", \"text\"] }),\n * }))\n * .hooks({\n * afterRead: createBlocksPrefetchHook(),\n * });\n * ```\n */\nexport function createBlocksPrefetchHook() {\n\treturn async (ctx: {\n\t\tdata: Record<string, unknown>;\n\t\tapp: any;\n\t\tdb: unknown;\n\t\tlocale?: string;\n\t}) => {\n\t\tconst blocks = ctx.app?.state?.blocks;\n\t\tif (!blocks || Object.keys(blocks).length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Process any field that looks like blocks data\n\t\tfor (const [key, value] of Object.entries(ctx.data)) {\n\t\t\tif (isBlocksDocument(value)) {\n\t\t\t\tctx.data[key] = await processBlocksDocument(value, blocks, {\n\t\t\t\t\tapp: ctx.app,\n\t\t\t\t\tdb: ctx.db,\n\t\t\t\t\tlocale: ctx.locale,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Check if a value is a blocks document.\n */\nfunction isBlocksDocument(value: unknown): value is BlocksDocument {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst doc = value as Record<string, unknown>;\n\treturn (\n\t\tArray.isArray(doc._tree) &&\n\t\ttypeof doc._values === \"object\" &&\n\t\tdoc._values !== null\n\t);\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocks.d.mts","names":[],"sources":["../../../src/server/fields/blocks.ts"],"sourcesContent":[],"mappings":";;;;;;;AAkFA;AAYA;;;AA4CqB,UAvGJ,SAAA,CAuGI;EA5CsB;EAAe,EAAA,EAAA,MAAA;EAsJ7C;EAEoB,IAAA,EAAA,MAAA;EAEA;EAmBZ,QAAA,EAlOV,SAkOU,EAAA;;;;;;AAuGH,KAlUN,WAAA,GAAc,MAkUR,CAAA,MAAA,EAAA,CAAA,CAAA,CAAA;;;;;UA5TD,cAAA;;SAET;;WAEE,eAAe;;UAEhB,eAAe;;;;;;;;;;;;;;;;;UAsBP,eAAA;;;;;;;UAYA,iBAAA,SAA0B;;SAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA0Ca,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;cA0GvB;;mBAEoB;6CAEA;iCAmBZ,sBAAiB,CAAA,CAAA,QAAA,4CAAA,CAAA,CAAA,IAAA,CAAA,kBAAA;qCAuGpB,oBAvGoB,aAAA,CAuGpB,WAAA,EAAA,aAAA,CAAA,WAAA;iCAIG,sBAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocks.mjs","names":["column: any","blockNodeSchema: z.ZodType<BlockNode>","allNodes: BlockNode[]"],"sources":["../../../src/server/fields/blocks.ts"],"sourcesContent":["/**\n * Blocks Field Type\n *\n * Visual block editor field stored as JSONB.\n * Provides a tree-based structure for page builder functionality.\n *\n * The blocks field stores data in a normalized format:\n * - _tree: Array of block nodes with id, type, and children\n * - _values: Record mapping block id to field values\n *\n * This field type is only available when using adminModule.\n */\n\nimport {\n\ttype BaseFieldConfig,\n\ttype ContextualOperators,\n\ttype FieldMetadataBase,\n\tfield,\n\tisNotNull,\n\tisNull,\n\tjsonb,\n\tsql,\n} from \"questpie\";\n\nimport { z } from \"zod\";\nimport type { AnyBlockDefinition } from \"../block/block-builder.js\";\n\n// ============================================================================\n// Blocks Data Schema\n// ============================================================================\n\n/**\n * Block node in the tree structure.\n * Each block has an id, type, and optional children.\n */\nexport interface BlockNode {\n\t/** Unique identifier for this block instance */\n\tid: string;\n\t/** Block type name (e.g., \"hero\", \"text\", \"image\") */\n\ttype: string;\n\t/** Nested child blocks */\n\tchildren: BlockNode[];\n}\n\n/**\n * Block field values.\n * Maps field names to their values for a single block.\n */\nexport type BlockValues = Record<string, {}>;\n\n/**\n * Blocks document structure.\n * Normalized format separating tree structure from values.\n */\nexport interface BlocksDocument {\n\t/** Tree structure defining block hierarchy */\n\t_tree: BlockNode[];\n\t/** Map of block id to field values */\n\t_values: Record<string, BlockValues>;\n\t/** Prefetched data for blocks (populated by afterRead hook) */\n\t_data?: Record<string, Record<string, {}>>;\n}\n\n// ============================================================================\n// Blocks Field Meta (augmentable by admin)\n// ============================================================================\n\n/**\n * Blocks field metadata - augmentable by external packages.\n *\n * @example Admin augmentation:\n * ```ts\n * declare module \"@questpie/admin/server\" {\n * interface BlocksFieldMeta {\n * admin?: {\n * addLabel?: string;\n * emptyMessage?: string;\n * }\n * }\n * }\n * ```\n */\nexport interface BlocksFieldMeta {\n\t/** Phantom property to prevent interface collapse - enables module augmentation */\n\t_?: never;\n}\n\n// ============================================================================\n// Blocks Field Configuration\n// ============================================================================\n\n/**\n * Blocks field configuration options.\n */\nexport interface BlocksFieldConfig extends BaseFieldConfig {\n\t/** Field-specific metadata, augmentable by external packages. */\n\tmeta?: BlocksFieldMeta;\n\n\t/**\n\t * Allowed block types.\n\t * If specified, only these block types can be added.\n\t * Block types must be registered via `.blocks()` on the CMS builder.\n\t */\n\tallowedBlocks?: string[];\n\n\t/**\n\t * Minimum number of blocks required.\n\t */\n\tminBlocks?: number;\n\n\t/**\n\t * Maximum number of blocks allowed.\n\t */\n\tmaxBlocks?: number;\n\n\t/**\n\t * Allow nesting blocks (blocks with children).\n\t * @default true\n\t */\n\tallowNesting?: boolean;\n\n\t/**\n\t * Maximum nesting depth for blocks.\n\t * Only applies when allowNesting is true.\n\t * @default 3\n\t */\n\tmaxDepth?: number;\n\n\t/**\n\t * Placeholder text shown when no blocks exist.\n\t */\n\tplaceholder?: string;\n\n\t/**\n\t * Block definitions injected at build time by `.blocks()` patch.\n\t * Used for per-block field validation in toZodSchema().\n\t * @internal\n\t */\n\t_blockDefinitions?: Record<string, AnyBlockDefinition>;\n}\n\n// ============================================================================\n// Blocks Field Operators\n// ============================================================================\n\n/**\n * Get operators for blocks field.\n * Provides operators for querying block content.\n */\nfunction getBlocksOperators(): ContextualOperators {\n\treturn {\n\t\tcolumn: {\n\t\t\t// Check if any block of a specific type exists\n\t\t\thasBlockType: (col, value) =>\n\t\t\t\tsql`EXISTS (\n\t\t\t\t\tSELECT 1 FROM jsonb_array_elements(${col}->'_tree') AS block\n\t\t\t\t\tWHERE block->>'type' = ${value}\n\t\t\t\t)`,\n\t\t\t// Count blocks at root level\n\t\t\tblockCount: (col, value) => {\n\t\t\t\tconst { op, count } = value as { op: string; count: number };\n\t\t\t\tconst operator = op === \"gte\" ? \">=\" : op === \"lte\" ? \"<=\" : \"=\";\n\t\t\t\treturn sql`jsonb_array_length(${col}->'_tree') ${sql.raw(operator)} ${count}`;\n\t\t\t},\n\t\t\t// Check if document is empty (no blocks)\n\t\t\tisEmpty: (col) =>\n\t\t\t\tsql`(\n\t\t\t\t\t${col} IS NULL \n\t\t\t\t\tOR ${col}->'_tree' IS NULL\n\t\t\t\t\tOR jsonb_array_length(${col}->'_tree') = 0\n\t\t\t\t)`,\n\t\t\tisNotEmpty: (col) =>\n\t\t\t\tsql`(\n\t\t\t\t\t${col} IS NOT NULL \n\t\t\t\t\tAND ${col}->'_tree' IS NOT NULL\n\t\t\t\t\tAND jsonb_array_length(${col}->'_tree') > 0\n\t\t\t\t)`,\n\t\t\tisNull: (col) => isNull(col),\n\t\t\tisNotNull: (col) => isNotNull(col),\n\t\t},\n\t\tjsonb: {\n\t\t\thasBlockType: (col, value, ctx) => {\n\t\t\t\tconst path = ctx.jsonbPath?.join(\",\") ?? \"\";\n\t\t\t\treturn sql`EXISTS (\n\t\t\t\t\tSELECT 1 FROM jsonb_array_elements(${col}#>'{${sql.raw(path)},_tree}') AS block\n\t\t\t\t\tWHERE block->>'type' = ${value}\n\t\t\t\t)`;\n\t\t\t},\n\t\t\tisEmpty: (col, _value, ctx) => {\n\t\t\t\tconst path = ctx.jsonbPath?.join(\",\") ?? \"\";\n\t\t\t\treturn sql`(\n\t\t\t\t\t${col}#>'{${sql.raw(path)}}' IS NULL \n\t\t\t\t\tOR ${col}#>'{${sql.raw(path)},_tree}' IS NULL\n\t\t\t\t\tOR jsonb_array_length(${col}#>'{${sql.raw(path)},_tree}') = 0\n\t\t\t\t)`;\n\t\t\t},\n\t\t\tisNotEmpty: (col, _value, ctx) => {\n\t\t\t\tconst path = ctx.jsonbPath?.join(\",\") ?? \"\";\n\t\t\t\treturn sql`(\n\t\t\t\t\t${col}#>'{${sql.raw(path)}}' IS NOT NULL \n\t\t\t\t\tAND ${col}#>'{${sql.raw(path)},_tree}' IS NOT NULL\n\t\t\t\t\tAND jsonb_array_length(${col}#>'{${sql.raw(path)},_tree}') > 0\n\t\t\t\t)`;\n\t\t\t},\n\t\t\tisNull: (col, _value, ctx) => {\n\t\t\t\tconst path = ctx.jsonbPath?.join(\",\") ?? \"\";\n\t\t\t\treturn sql`${col}#>'{${sql.raw(path)}}' IS NULL`;\n\t\t\t},\n\t\t\tisNotNull: (col, _value, ctx) => {\n\t\t\t\tconst path = ctx.jsonbPath?.join(\",\") ?? \"\";\n\t\t\t\treturn sql`${col}#>'{${sql.raw(path)}}' IS NOT NULL`;\n\t\t\t},\n\t\t},\n\t};\n}\n\n// ============================================================================\n// Blocks Field Definition\n// ============================================================================\n\n/**\n * Blocks field factory.\n * Creates a visual block editor field for page builder functionality.\n *\n * @example\n * ```ts\n * // Basic blocks field\n * const content = blocksField({ label: \"Content\" });\n *\n * // With allowed blocks\n * const pageContent = blocksField({\n * label: \"Page Sections\",\n * allowedBlocks: [\"hero\", \"features\", \"testimonials\", \"cta\"],\n * minBlocks: 1,\n * maxBlocks: 20,\n * });\n *\n * // With nesting disabled\n * const simpleBlocks = blocksField({\n * label: \"Components\",\n * allowNesting: false,\n * });\n * ```\n */\nexport const blocksField = field<BlocksFieldConfig, BlocksDocument>()({\n\ttype: \"blocks\" as const,\n\t_value: undefined as unknown as BlocksDocument,\n\n\ttoColumn(_name: string, config: BlocksFieldConfig) {\n\t\t// Blocks are always stored as JSONB\n\t\tlet column: any = jsonb();\n\n\t\t// Apply constraints\n\t\tif (config.required && config.nullable !== true) {\n\t\t\tcolumn = column.notNull();\n\t\t}\n\t\tif (config.default !== undefined) {\n\t\t\tconst defaultValue =\n\t\t\t\ttypeof config.default === \"function\"\n\t\t\t\t\t? config.default()\n\t\t\t\t\t: config.default;\n\t\t\tcolumn = column.default(defaultValue);\n\t\t}\n\n\t\treturn column;\n\t},\n\n\ttoZodSchema(config: BlocksFieldConfig) {\n\t\t// Block node schema (recursive for nested blocks)\n\t\tconst blockNodeSchema: z.ZodType<BlockNode> = z.lazy(() =>\n\t\t\tz.object({\n\t\t\t\tid: z.string(),\n\t\t\t\ttype: z.string(),\n\t\t\t\tchildren: z.array(blockNodeSchema).default([]),\n\t\t\t}),\n\t\t);\n\n\t\t// Blocks document schema\n\t\tlet docSchema = z.object({\n\t\t\t_tree: z.array(blockNodeSchema),\n\t\t\t_values: z.record(z.string(), z.record(z.string(), z.any())),\n\t\t});\n\n\t\t// Apply validation for min/max blocks\n\t\tif (config.minBlocks !== undefined || config.maxBlocks !== undefined) {\n\t\t\tdocSchema = docSchema.refine(\n\t\t\t\t(doc) => {\n\t\t\t\t\tconst count = doc._tree.length;\n\t\t\t\t\tif (config.minBlocks !== undefined && count < config.minBlocks) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (config.maxBlocks !== undefined && count > config.maxBlocks) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage:\n\t\t\t\t\t\tconfig.minBlocks !== undefined && config.maxBlocks !== undefined\n\t\t\t\t\t\t\t? `Must have between ${config.minBlocks} and ${config.maxBlocks} blocks`\n\t\t\t\t\t\t\t: config.minBlocks !== undefined\n\t\t\t\t\t\t\t\t? `Must have at least ${config.minBlocks} blocks`\n\t\t\t\t\t\t\t\t: `Must have at most ${config.maxBlocks} blocks`,\n\t\t\t\t},\n\t\t\t) as typeof docSchema;\n\t\t}\n\n\t\t// Per-block field validation when block definitions are available\n\t\tif (\n\t\t\tconfig._blockDefinitions &&\n\t\t\tObject.keys(config._blockDefinitions).length > 0\n\t\t) {\n\t\t\tconst blockDefs = config._blockDefinitions;\n\t\t\tdocSchema = docSchema.superRefine((doc, ctx) => {\n\t\t\t\t// Collect all block nodes (flatten tree)\n\t\t\t\tconst allNodes: BlockNode[] = [];\n\t\t\t\tconst collectNodes = (nodes: BlockNode[]) => {\n\t\t\t\t\tfor (const node of nodes) {\n\t\t\t\t\t\tallNodes.push(node);\n\t\t\t\t\t\tif (node.children.length > 0) {\n\t\t\t\t\t\t\tcollectNodes(node.children);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcollectNodes(doc._tree);\n\n\t\t\t\t// Validate each block's values against its definition's field schemas\n\t\t\t\tfor (const node of allNodes) {\n\t\t\t\t\tconst blockDef = blockDefs[node.type];\n\t\t\t\t\tif (!blockDef?.state.fields) continue;\n\n\t\t\t\t\tconst blockValues = doc._values[node.id] || {};\n\n\t\t\t\t\tfor (const [fieldName, fieldDef] of Object.entries(\n\t\t\t\t\t\tblockDef.state.fields,\n\t\t\t\t\t)) {\n\t\t\t\t\t\t// Server FieldDefinition has toZodSchema()\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tfieldDef &&\n\t\t\t\t\t\t\ttypeof fieldDef === \"object\" &&\n\t\t\t\t\t\t\t\"toZodSchema\" in fieldDef &&\n\t\t\t\t\t\t\ttypeof (fieldDef as any).toZodSchema === \"function\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst fieldSchema = (fieldDef as any).toZodSchema() as z.ZodType;\n\t\t\t\t\t\t\tconst result = fieldSchema.safeParse(blockValues[fieldName]);\n\t\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\t\tfor (const issue of result.error.issues) {\n\t\t\t\t\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\t\t\t\t\t...issue,\n\t\t\t\t\t\t\t\t\t\tpath: [\"_values\", node.id, fieldName, ...issue.path],\n\t\t\t\t\t\t\t\t\t\tmessage: `Block \"${node.type}\" field \"${fieldName}\": ${issue.message}`,\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}) as typeof docSchema;\n\t\t}\n\n\t\t// Nullability\n\t\tif (!config.required && config.nullable !== false) {\n\t\t\treturn docSchema.nullish() as z.ZodType<\n\t\t\t\tBlocksDocument | null | undefined\n\t\t\t>;\n\t\t}\n\n\t\treturn docSchema as z.ZodType<BlocksDocument>;\n\t},\n\n\tgetOperators<TApp>() {\n\t\treturn getBlocksOperators();\n\t},\n\n\tgetMetadata(config: BlocksFieldConfig): FieldMetadataBase & {\n\t\tallowedBlocks?: string[];\n\t\tminBlocks?: number;\n\t\tmaxBlocks?: number;\n\t\tallowNesting: boolean;\n\t\tmaxDepth: number;\n\t\tplaceholder?: string;\n\t} {\n\t\treturn {\n\t\t\ttype: \"blocks\",\n\t\t\tlabel: config.label,\n\t\t\tdescription: config.description,\n\t\t\trequired: config.required ?? false,\n\t\t\tlocalized: config.localized ?? false,\n\t\t\treadOnly: config.input === false,\n\t\t\twriteOnly: config.output === false,\n\t\t\tmeta: config.meta,\n\t\t\t// Blocks specific\n\t\t\tallowedBlocks: config.allowedBlocks,\n\t\t\tminBlocks: config.minBlocks,\n\t\t\tmaxBlocks: config.maxBlocks,\n\t\t\tallowNesting: config.allowNesting ?? true,\n\t\t\tmaxDepth: config.maxDepth ?? 3,\n\t\t\tplaceholder: config.placeholder,\n\t\t};\n\t},\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/server/fields/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;cAgDa;;;qBAGH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/server/fields/index.ts"],"sourcesContent":["/**\n * Admin Field Types\n *\n * Additional field types provided by the admin module.\n * These fields are registered automatically when adminModule is used.\n *\n * @example\n * ```ts\n * import { q } from \"questpie\";\n * import { adminModule } from \"@questpie/admin/server\";\n *\n * const cms = q({ name: \"my-cms\" })\n * .use(adminModule) // Registers richText and blocks fields\n * .collections({\n * pages: q.collection(\"pages\").fields((f) => ({\n * title: f.text({ required: true }),\n * content: f.richText({ features: [\"bold\", \"italic\", \"link\"] }),\n * sections: f.blocks({ allowedBlocks: [\"hero\", \"text\"] }),\n * })),\n * });\n * ```\n */\n\n// Export types\nexport type {\n BlockNode,\n BlocksDocument,\n BlocksFieldMeta,\n BlockValues,\n} from \"./blocks.js\";\n// Export field factories\nexport { type BlocksFieldConfig, blocksField } from \"./blocks.js\";\nexport type {\n RichTextFeature,\n RichTextFieldMeta,\n TipTapDocument,\n TipTapNode,\n} from \"./rich-text.js\";\nexport { type RichTextFieldConfig, richTextField } from \"./rich-text.js\";\n\n// Import for adminFields record\nimport { blocksField } from \"./blocks.js\";\nimport { richTextField } from \"./rich-text.js\";\n\n/**\n * Admin field types to be registered with the field registry.\n * These are automatically registered when adminModule is used.\n */\nexport const adminFields = {\n richText: richTextField,\n blocks: blocksField,\n} as const;\n"],"mappings":";;;;;;;;AAgDA,MAAa,cAAc;CACzB,UAAU;CACV,QAAQ;CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text.d.mts","names":[],"sources":["../../../src/server/fields/rich-text.ts"],"sourcesContent":[],"mappings":";;;;;;AA4CA;AAwBA;AAYA;AA0BiB,UA7EA,UAAA,CA6EoB;EAE5B,IAAA,EAAA,MAAA;EAkBI,KAAA,CAAA,EA/FH,MA+FG,CAAA,MAAA,EAAA,GAAA,CAAA;EApBgC,OAAA,CAAA,EA1EjC,UA0EiC,EAAA;EAAe,KAAA,CAAA,EAzElD,KAyEkD,CAAA;IAiL/C,IAAA,EAAA,MA2FZ;IAxFmC,KAAA,CAAA,EA3PxB,MA2PwB,CAAA,MAAA,EAAA,GAAA,CAAA;EAEA,CAAA,CAAA;EAmBZ,IAAA,CAAA,EAAA,MAAA;;;;;;AAyCR,UAhTC,cAAA,CAgTD;EAAe,IAAA,EAAA,KAAA;YA9SnB;;;;;;;;;;;;;;;;;UAsBK,iBAAA;;;;;;;KAYL,eAAA;;;;UA0BK,mBAAA,SAA4B;;SAEpC;;;;;;;;;;;;;;;aAkBI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6JA;;mBAGuB;6CAEA;iCAmBZ;qCAkCH,oBAlCsB,aAAA,CAkCtB,WAAA,EAAA,aAAA,CAAA,WAAA;iCAIG,wBAAsB;;;cAG9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text.mjs","names":["DEFAULT_FEATURES: RichTextFeature[]","DEFAULT_HEADING_LEVELS: (1 | 2 | 3 | 4 | 5 | 6)[]","column: any","nodeSchema: z.ZodType<TipTapNode>"],"sources":["../../../src/server/fields/rich-text.ts"],"sourcesContent":["/**\n * Rich Text Field Type\n *\n * TipTap-based WYSIWYG editor field stored as JSONB.\n * Provides structured rich text editing with configurable features.\n *\n * This field type is only available when using adminModule.\n */\n\nimport {\n type BaseFieldConfig,\n type ContextualOperators,\n field,\n type FieldMetadataBase,\n isNotNull,\n isNull,\n jsonb,\n sql,\n} from \"questpie\";\nimport { z } from \"zod\";\n\n// ============================================================================\n// Rich Text Document Schema\n// ============================================================================\n\n/**\n * TipTap node type.\n * Represents a single node in the document tree.\n */\nexport interface TipTapNode {\n type: string;\n attrs?: Record<string, any>;\n content?: TipTapNode[];\n marks?: Array<{\n type: string;\n attrs?: Record<string, any>;\n }>;\n text?: string;\n}\n\n/**\n * TipTap document structure.\n * Root node always has type \"doc\".\n */\nexport interface TipTapDocument {\n type: \"doc\";\n content?: TipTapNode[];\n}\n\n// ============================================================================\n// Rich Text Field Meta (augmentable by admin)\n// ============================================================================\n\n/**\n * Rich text field metadata - augmentable by external packages.\n *\n * @example Admin augmentation:\n * ```ts\n * declare module \"@questpie/admin/server\" {\n * interface RichTextFieldMeta {\n * admin?: {\n * placeholder?: string;\n * showCharacterCount?: boolean;\n * }\n * }\n * }\n * ```\n */\nexport interface RichTextFieldMeta {\n /** Phantom property to prevent interface collapse - enables module augmentation */\n _?: never;\n}\n\n// ============================================================================\n// Rich Text Field Configuration\n// ============================================================================\n\n/**\n * Available rich text editor features.\n */\nexport type RichTextFeature =\n | \"bold\"\n | \"italic\"\n | \"underline\"\n | \"strike\"\n | \"code\"\n | \"subscript\"\n | \"superscript\"\n | \"heading\"\n | \"bulletList\"\n | \"orderedList\"\n | \"taskList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"horizontalRule\"\n | \"link\"\n | \"image\"\n | \"table\"\n | \"textAlign\"\n | \"textColor\"\n | \"highlight\"\n | \"mention\";\n\n/**\n * Rich text field configuration options.\n */\nexport interface RichTextFieldConfig extends BaseFieldConfig {\n /** Field-specific metadata, augmentable by external packages. */\n meta?: RichTextFieldMeta;\n\n /**\n * Maximum character count (excluding formatting).\n * When set, shows character counter in editor.\n */\n maxCharacters?: number;\n\n /**\n * Minimum character count (excluding formatting).\n */\n minCharacters?: number;\n\n /**\n * Enabled editor features.\n * If not specified, uses a sensible default set.\n * @default [\"bold\", \"italic\", \"link\", \"heading\", \"bulletList\", \"orderedList\"]\n */\n features?: RichTextFeature[];\n\n /**\n * Allowed heading levels when heading feature is enabled.\n * @default [1, 2, 3]\n */\n headingLevels?: (1 | 2 | 3 | 4 | 5 | 6)[];\n\n /**\n * Placeholder text shown when editor is empty.\n */\n placeholder?: string;\n\n /**\n * Allow uploading/embedding images.\n * Requires storage configuration.\n */\n allowImages?: boolean;\n\n /**\n * Collection to use for image uploads.\n * Defaults to \"assets\" if storage is configured.\n */\n imageCollection?: string;\n}\n\n// ============================================================================\n// Rich Text Field Operators\n// ============================================================================\n\n/**\n * Get operators for rich text field.\n * Provides text search within the JSON structure.\n */\nfunction getRichTextOperators(): ContextualOperators {\n return {\n column: {\n // Full-text search in document content\n contains: (col, value) => {\n // Search in text content using recursive CTE or JSON path\n return sql`EXISTS (\n\t\t\t\t\tSELECT 1 FROM jsonb_array_elements_text(\n\t\t\t\t\t\tjsonb_path_query_array(${col}, '$..text')\n\t\t\t\t\t) AS t\n\t\t\t\t\tWHERE t ILIKE ${\"%\" + value + \"%\"}\n\t\t\t\t)`;\n },\n // Check if document is empty (no content or only whitespace)\n isEmpty: (col) =>\n sql`(\n\t\t\t\t\t${col} IS NULL \n\t\t\t\t\tOR ${col} = '{\"type\":\"doc\"}'::jsonb \n\t\t\t\t\tOR ${col} = '{\"type\":\"doc\",\"content\":[]}'::jsonb\n\t\t\t\t\tOR NOT EXISTS (\n\t\t\t\t\t\tSELECT 1 FROM jsonb_array_elements_text(\n\t\t\t\t\t\t\tjsonb_path_query_array(${col}, '$..text')\n\t\t\t\t\t\t) AS t\n\t\t\t\t\t\tWHERE length(trim(t)) > 0\n\t\t\t\t\t)\n\t\t\t\t)`,\n isNotEmpty: (col) =>\n sql`(\n\t\t\t\t\t${col} IS NOT NULL \n\t\t\t\t\tAND ${col} != '{\"type\":\"doc\"}'::jsonb \n\t\t\t\t\tAND ${col} != '{\"type\":\"doc\",\"content\":[]}'::jsonb\n\t\t\t\t\tAND EXISTS (\n\t\t\t\t\t\tSELECT 1 FROM jsonb_array_elements_text(\n\t\t\t\t\t\t\tjsonb_path_query_array(${col}, '$..text')\n\t\t\t\t\t\t) AS t\n\t\t\t\t\t\tWHERE length(trim(t)) > 0\n\t\t\t\t\t)\n\t\t\t\t)`,\n isNull: (col) => isNull(col),\n isNotNull: (col) => isNotNull(col),\n },\n jsonb: {\n contains: (col, value, ctx) => {\n const path = ctx.jsonbPath?.join(\",\") ?? \"\";\n return sql`EXISTS (\n\t\t\t\t\tSELECT 1 FROM jsonb_array_elements_text(\n\t\t\t\t\t\tjsonb_path_query_array(${col}#>'{${sql.raw(path)}}', '$..text')\n\t\t\t\t\t) AS t\n\t\t\t\t\tWHERE t ILIKE ${\"%\" + value + \"%\"}\n\t\t\t\t)`;\n },\n isEmpty: (col, _value, ctx) => {\n const path = ctx.jsonbPath?.join(\",\") ?? \"\";\n return sql`(\n\t\t\t\t\t${col}#>'{${sql.raw(path)}}' IS NULL \n\t\t\t\t\tOR ${col}#>'{${sql.raw(path)}}' = '{\"type\":\"doc\"}'::jsonb\n\t\t\t\t)`;\n },\n isNotEmpty: (col, _value, ctx) => {\n const path = ctx.jsonbPath?.join(\",\") ?? \"\";\n return sql`(\n\t\t\t\t\t${col}#>'{${sql.raw(path)}}' IS NOT NULL \n\t\t\t\t\tAND ${col}#>'{${sql.raw(path)}}' != '{\"type\":\"doc\"}'::jsonb\n\t\t\t\t)`;\n },\n isNull: (col, _value, ctx) => {\n const path = ctx.jsonbPath?.join(\",\") ?? \"\";\n return sql`${col}#>'{${sql.raw(path)}}' IS NULL`;\n },\n isNotNull: (col, _value, ctx) => {\n const path = ctx.jsonbPath?.join(\",\") ?? \"\";\n return sql`${col}#>'{${sql.raw(path)}}' IS NOT NULL`;\n },\n },\n };\n}\n\n// ============================================================================\n// Rich Text Field Definition\n// ============================================================================\n\n/**\n * Default features for rich text editor.\n */\nconst DEFAULT_FEATURES: RichTextFeature[] = [\n \"bold\",\n \"italic\",\n \"link\",\n \"heading\",\n \"bulletList\",\n \"orderedList\",\n];\n\n/**\n * Default heading levels.\n */\nconst DEFAULT_HEADING_LEVELS: (1 | 2 | 3 | 4 | 5 | 6)[] = [1, 2, 3];\n\n/**\n * Rich text field factory.\n * Creates a TipTap-based rich text editor field.\n *\n * @example\n * ```ts\n * // Basic rich text\n * const content = richTextField({ label: \"Content\" });\n *\n * // With all features\n * const richContent = richTextField({\n * label: \"Article Content\",\n * features: [\"bold\", \"italic\", \"underline\", \"heading\", \"bulletList\", \"orderedList\", \"link\", \"image\", \"blockquote\", \"codeBlock\"],\n * maxCharacters: 50000,\n * allowImages: true,\n * });\n *\n * // Minimal editor\n * const bio = richTextField({\n * label: \"Bio\",\n * features: [\"bold\", \"italic\", \"link\"],\n * maxCharacters: 500,\n * });\n * ```\n */\nexport const richTextField = field<RichTextFieldConfig, TipTapDocument>()(\n {\n type: \"richText\" as const,\n _value: undefined as unknown as TipTapDocument,\n\n toColumn(_name: string, config: RichTextFieldConfig) {\n // Rich text is always stored as JSONB\n let column: any = jsonb();\n\n // Apply constraints\n if (config.required && config.nullable !== true) {\n column = column.notNull();\n }\n if (config.default !== undefined) {\n const defaultValue =\n typeof config.default === \"function\"\n ? config.default()\n : config.default;\n column = column.default(defaultValue);\n }\n\n return column;\n },\n\n toZodSchema(config: RichTextFieldConfig) {\n // TipTap document structure validation\n // We use a loose schema that validates the basic structure\n // but allows any valid TipTap content\n const nodeSchema: z.ZodType<TipTapNode> = z.lazy(() =>\n z.object({\n type: z.string(),\n attrs: z.record(z.string(), z.any()).optional(),\n content: z.array(nodeSchema).optional(),\n marks: z\n .array(\n z.object({\n type: z.string(),\n attrs: z.record(z.string(), z.any()).optional(),\n }),\n )\n .optional(),\n text: z.string().optional(),\n }),\n );\n\n const docSchema = z.object({\n type: z.literal(\"doc\"),\n content: z.array(nodeSchema).optional(),\n });\n\n // Nullability\n if (!config.required && config.nullable !== false) {\n return docSchema.nullish() as any;\n }\n\n return docSchema as any;\n },\n\n getOperators<TApp>() {\n return getRichTextOperators();\n },\n\n getMetadata(config: RichTextFieldConfig): FieldMetadataBase & {\n maxCharacters?: number;\n minCharacters?: number;\n features: RichTextFeature[];\n headingLevels: (1 | 2 | 3 | 4 | 5 | 6)[];\n placeholder?: string;\n allowImages?: boolean;\n imageCollection?: string;\n } {\n return {\n type: \"richText\",\n label: config.label,\n description: config.description,\n required: config.required ?? false,\n localized: config.localized ?? false,\n readOnly: config.input === false,\n writeOnly: config.output === false,\n meta: config.meta,\n // Rich text specific\n maxCharacters: config.maxCharacters,\n minCharacters: config.minCharacters,\n features: config.features ?? DEFAULT_FEATURES,\n headingLevels: config.headingLevels ?? DEFAULT_HEADING_LEVELS,\n placeholder: config.placeholder,\n allowImages: config.allowImages,\n imageCollection: config.imageCollection,\n };\n },\n },\n);\n"],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- //#region src/server/i18n/index.d.ts
2
-
3
- /**
4
- * Message value type - string or plural form
5
- */
6
- type MessageValue = string | {
7
- one: string;
8
- other: string;
9
- };
10
- /**
11
- * Messages record type
12
- */
13
- type AdminMessages = Record<string, MessageValue>;
14
- //#endregion
15
- export { AdminMessages };
16
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/server/i18n/index.ts"],"sourcesContent":[],"mappings":";;;;;KA+BY,YAAA;;;;;;;KAKA,aAAA,GAAgB,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/server/i18n/index.ts"],"sourcesContent":["/**\n * Server-Side Admin i18n Messages\n *\n * These messages are served to the admin client via the getAdminTranslations RPC function.\n * The client fetches translations for its current UI locale.\n *\n * @example\n * ```ts\n * // Server: messages are stored here\n * // Client: fetches via client.functions.getAdminTranslations({ locale: \"sk\" })\n * ```\n */\n\nimport { messages } from \"./messages/index.js\";\n\n// Re-export messages\nexport { messages } from \"./messages/index.js\";\n\n// Export individual locale messages for direct access\nexport const adminMessagesEN = messages.en;\nexport const adminMessagesSK = messages.sk;\nexport const adminMessagesCS = messages.cs;\nexport const adminMessagesDE = messages.de;\nexport const adminMessagesFR = messages.fr;\nexport const adminMessagesES = messages.es;\nexport const adminMessagesPT = messages.pt;\nexport const adminMessagesPL = messages.pl;\n\n/**\n * Message value type - string or plural form\n */\nexport type MessageValue = string | { one: string; other: string };\n\n/**\n * Messages record type\n */\nexport type AdminMessages = Record<string, MessageValue>;\n\n/**\n * All admin messages indexed by locale code.\n * Used by getAdminTranslations to serve messages for requested locale.\n */\nexport const allAdminMessages: Record<string, AdminMessages> = messages;\n\n/**\n * Get admin messages for a specific locale.\n * Falls back to English if locale not found.\n *\n * @param locale - Locale code (e.g., \"en\", \"sk\")\n * @returns Messages for the locale\n */\nexport function getAdminMessagesForLocale(locale: string): AdminMessages {\n\treturn messages[locale as keyof typeof messages] ?? messages.en ?? {};\n}\n\n/**\n * Get list of supported admin UI locales.\n * These are locales that have message files.\n */\nexport function getSupportedAdminLocales(): string[] {\n\treturn Object.keys(messages);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;AACxC,MAAa,kBAAkB,SAAS;;;;;;;;AAyBxC,SAAgB,0BAA0B,QAA+B;AACxE,QAAO,SAAS,WAAoC,SAAS,MAAM,EAAE;;;;;;AAOtE,SAAgB,2BAAqC;AACpD,QAAO,OAAO,KAAK,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cs.mjs","names":[],"sources":["../../../../src/server/i18n/messages/cs.ts"],"sourcesContent":["/**\n * Czech Admin UI Messages\n */\nexport default {\n // Common\n \"common.save\": \"Uložit\",\n \"common.cancel\": \"Zrušit\",\n \"common.delete\": \"Smazat\",\n \"common.edit\": \"Upravit\",\n \"common.create\": \"Vytvořit\",\n \"common.add\": \"Přidat\",\n \"common.remove\": \"Odstranit\",\n \"common.close\": \"Zavřít\",\n \"common.form\": \"Formulář\",\n \"common.search\": \"Vyhledat\",\n \"common.filter\": \"Filtr\",\n \"common.refresh\": \"Obnovit\",\n \"common.loading\": \"Načítání...\",\n \"common.confirm\": \"Potvrdit\",\n \"common.back\": \"Zpět\",\n \"common.next\": \"Další\",\n \"common.previous\": \"Předchozí\",\n \"common.actions\": \"Akce\",\n \"common.more\": \"Více\",\n \"common.yes\": \"Ano\",\n \"common.no\": \"Ne\",\n \"common.ok\": \"OK\",\n \"common.apply\": \"Použít\",\n \"common.reset\": \"Resetovat\",\n \"common.clear\": \"Vymazat\",\n \"common.selectAll\": \"Vybrat vše\",\n \"common.deselectAll\": \"Zrušit výběr\",\n \"common.duplicate\": \"Duplikovat\",\n \"common.copy\": \"Kopírovat\",\n \"common.paste\": \"Vložit\",\n \"common.upload\": \"Nahrát\",\n \"common.download\": \"Stáhnout\",\n \"common.preview\": \"Náhled\",\n \"common.view\": \"Zobrazit\",\n \"common.open\": \"Otevřít\",\n \"common.retry\": \"Opakovat\",\n \"common.submit\": \"Odeslat\",\n\n // Navigation\n \"nav.dashboard\": \"Dashboard\",\n \"nav.collections\": \"Kolekce\",\n \"nav.globals\": \"Globály\",\n \"nav.media\": \"Média\",\n \"nav.settings\": \"Nastavení\",\n \"nav.logout\": \"Odhlásit se\",\n \"nav.home\": \"Domů\",\n \"nav.back\": \"Zpět\",\n\n // Dashboard\n \"dashboard.title\": \"Dashboard\",\n \"dashboard.welcome\": \"Vítejte zpět\",\n \"dashboard.recentActivity\": \"Nedávná aktivita\",\n \"dashboard.quickActions\": \"Rychlé akce\",\n\n // Collections\n \"collection.create\": \"Vytvořit {{name}}\",\n \"collection.edit\": \"Upravit {{name}}\",\n \"collection.delete\": \"Smazat {{name}}\",\n \"collection.deleteConfirm\": \"Opravdu chcete smazat {{name}}?\",\n \"collection.noItems\": \"Nenalezeny žádné {{name}}\",\n \"collection.createFirst\": \"Vytvořte svůj první {{name}}\",\n \"collection.itemCount\": {\n one: \"{{count}} položka\",\n other: \"{{count}} položek\",\n },\n \"collection.bulkDelete\": \"Smazat vybrané\",\n \"collection.bulkDeleteConfirm\": \"Opravdu chcete smazat {{count}} položek?\",\n \"collection.bulkDeleteSuccess\": {\n one: \"Úspěšně smazána {{count}} položka\",\n other: \"Úspěšně smazáno {{count}} položek\",\n },\n \"collection.bulkDeleteError\": \"Nepodařilo se smazat položky\",\n \"collection.bulkDeletePartial\": {\n one: \"Smazána {{success}} položka, {{failed}} selhalo\",\n other: \"Smazáno {{success}} položek, {{failed}} selhalo\",\n },\n \"collection.bulkActionFailed\": \"Hromadná akce selhala\",\n \"collection.selected\": \"Vybráno {{count}}\",\n \"collection.selectOnPage\": \"Vše na této stránce\",\n \"collection.selectAllMatching\": \"Vše vyhovující filtru ({{count}})\",\n \"collection.clearSelection\": \"Zrušit výběr\",\n \"collection.list\": \"Seznam {{name}}\",\n \"collection.new\": \"Nový {{name}}\",\n \"collection.duplicateSuccess\": \"{{name}} úspěšně duplikován\",\n \"collection.duplicateError\": \"Nepodařilo se duplikovat {{name}}\",\n\n // Relations\n \"relation.select\": \"Vybrat {{name}}\",\n \"relation.clear\": \"Vymazat výběr\",\n \"relation.search\": \"Hledat {{name}}...\",\n \"relation.noResults\": \"Nenalezeny žádné {{name}}\",\n \"relation.loading\": \"Načítání...\",\n \"relation.createNew\": \"Vytvořit nový {{name}}\",\n \"relation.selected\": \"Vybráno {{count}}\",\n \"relation.removeItem\": \"Odstranit {{name}}\",\n \"relation.addItem\": \"Přidat {{name}}\",\n \"relation.noneSelected\": \"Není vybrán žádný {{name}}\",\n \"relation.noRelated\": \"Nenalezeny žádné související položky\",\n \"relation.saveFirst\":\n \"Nejprve uložte tuto položku pro zobrazení souvisejících položek.\",\n\n // Arrays\n \"array.empty\": \"Zatím nejsou přidány žádné {{name}}\",\n \"array.addItem\": \"Přidat {{name}}\",\n\n // Blocks\n \"blocks.addAbove\": \"Přidat nad\",\n \"blocks.addBelow\": \"Přidat pod\",\n \"blocks.addChild\": \"Přidat podřízený blok\",\n\n // Forms\n \"form.id\": \"ID\",\n \"form.created\": \"Vytvořeno\",\n \"form.updated\": \"Aktualizováno\",\n \"form.required\": \"Toto pole je povinné\",\n \"form.invalid\": \"Neplatná hodnota\",\n \"form.saveChanges\": \"Uložit změny\",\n \"form.unsavedChanges\": \"Máte neuložené změny\",\n \"form.discardChanges\": \"Zahodit změny\",\n \"form.discardConfirm\":\n \"Opravdu chcete zahodit změny? Tuto akci nelze vrátit zpět.\",\n \"form.fieldRequired\": \"{{field}} je povinné\",\n \"form.fieldInvalid\": \"{{field}} je neplatné\",\n \"form.maxLength\": \"Maximálně {{max}} znaků\",\n \"form.minLength\": \"Minimálně {{min}} znaků\",\n \"form.maxValue\": \"Maximálně {{max}}\",\n \"form.minValue\": \"Minimálně {{min}}\",\n \"form.pattern\": \"Neplatný formát\",\n \"form.email\": \"Neplatná e-mailová adresa\",\n \"form.url\": \"Neplatná URL\",\n \"form.createSuccess\": \"{{name}} úspěšně vytvořen\",\n \"form.createError\": \"Nepodařilo se vytvořit {{name}}\",\n \"form.updateSuccess\": \"{{name}} úspěšně aktualizován\",\n \"form.updateError\": \"Nepodařilo se aktualizovat {{name}}\",\n \"form.deleteSuccess\": \"{{name}} úspěšně smazán\",\n \"form.deleteError\": \"Nepodařilo se smazat {{name}}\",\n\n // Auth\n \"auth.login\": \"Přihlásit se\",\n \"auth.logout\": \"Odhlásit se\",\n \"auth.email\": \"E-mail\",\n \"auth.password\": \"Heslo\",\n \"auth.forgotPassword\": \"Zapomenuté heslo?\",\n \"auth.resetPassword\": \"Resetovat heslo\",\n \"auth.signIn\": \"Přihlásit se\",\n \"auth.signOut\": \"Odhlásit se\",\n \"auth.signUp\": \"Registrovat se\",\n \"auth.rememberMe\": \"Zapamatovat si mě\",\n \"auth.invalidCredentials\": \"Neplatný e-mail nebo heslo\",\n \"auth.sessionExpired\": \"Vaše relace vypršela. Prosím přihlaste se znovu.\",\n \"auth.emailPlaceholder\": \"vy@priklad.cz\",\n \"auth.passwordPlaceholder\": \"Zadejte heslo\",\n \"auth.signingIn\": \"Přihlašování...\",\n \"auth.creatingAdmin\": \"Vytváření administrátora...\",\n \"auth.name\": \"Jméno\",\n \"auth.namePlaceholder\": \"Vaše jméno\",\n \"auth.confirmPassword\": \"Potvrdit heslo\",\n \"auth.confirmPasswordPlaceholder\": \"Potvrďte heslo\",\n \"auth.acceptInvite\": \"Přijmout pozvánku\",\n \"auth.acceptingInvite\": \"Přijímání pozvánky...\",\n \"auth.dontHaveAccount\": \"Nemáte účet?\",\n \"auth.alreadyHaveAccount\": \"Máte již účet?\",\n \"auth.emailRequired\": \"E-mail je povinný\",\n \"auth.passwordRequired\": \"Heslo je povinné\",\n \"auth.passwordMinLength\": \"Heslo musí mít alespoň {{min}} znaků\",\n \"auth.nameRequired\": \"Jméno je povinné\",\n \"auth.nameMinLength\": \"Jméno musí mít alespoň {{min}} znaků\",\n \"auth.invalidEmail\": \"Neplatná e-mailová adresa\",\n \"auth.passwordMismatch\": \"Hesla se neshodují\",\n \"auth.newPassword\": \"Nové heslo\",\n \"auth.newPasswordPlaceholder\": \"Zadejte nové heslo\",\n \"auth.sendResetLink\": \"Odeslat odkaz pro reset\",\n \"auth.sendingResetLink\": \"Odesílání...\",\n \"auth.resetLinkSent\": \"Odkaz pro reset hesla byl odeslán na váš e-mail\",\n \"auth.resettingPassword\": \"Resetování hesla...\",\n \"auth.createFirstAdmin\": \"Vytvořit prvního administrátora\",\n \"auth.setupTitle\": \"Nastavení\",\n \"auth.setupDescription\": \"Vytvořte svůj první administrátorský účet.\",\n \"auth.profile\": \"Profil\",\n \"auth.myAccount\": \"Můj účet\",\n \"auth.logoutFailed\": \"Odhlášení se nezdařilo. Zkuste to prosím znovu.\",\n\n // Errors\n \"error.notFound\": \"Nenalezeno\",\n \"error.serverError\": \"Chyba serveru\",\n \"error.networkError\": \"Chyba sítě. Zkontrolujte připojení.\",\n \"error.unauthorized\": \"Nemáte oprávnění k této akci\",\n \"error.forbidden\": \"Přístup zamítnut\",\n \"error.validation\": \"Validace selhala\",\n \"error.unknown\": \"Došlo k neznámé chybě\",\n \"error.timeout\": \"Vypršel čas požadavku. Zkuste to znovu.\",\n \"error.conflict\": \"Nastala kolize. Obnovte stránku a zkuste to znovu.\",\n\n // Table\n \"table.rowsPerPage\": \"Řádků na stránku\",\n \"table.of\": \"z\",\n \"table.noResults\": \"Žádné výsledky\",\n \"table.selectAll\": \"Vybrat vše\",\n \"table.selectRow\": \"Vybrat řádek\",\n \"table.showing\": \"Zobrazeno {{from}} až {{to}} z {{total}}\",\n \"table.page\": \"Strana {{page}}\",\n \"table.firstPage\": \"První strana\",\n \"table.lastPage\": \"Poslední strana\",\n \"table.nextPage\": \"Další strana\",\n \"table.previousPage\": \"Předchozí strana\",\n \"table.sortAsc\": \"Seřadit vzestupně\",\n \"table.sortDesc\": \"Seřadit sestupně\",\n \"table.columns\": \"Sloupce\",\n \"table.hideColumn\": \"Skrýt sloupec\",\n \"table.showColumn\": \"Zobrazit sloupec\",\n\n // Upload\n \"upload.dropzone\": \"Přetáhněte soubory sem nebo klikněte pro nahrání\",\n \"upload.browse\": \"Procházet soubory\",\n \"upload.uploading\": \"Nahrávání...\",\n \"upload.complete\": \"Nahrání dokončeno\",\n \"upload.error\": \"Nahrání selhalo\",\n \"upload.maxSize\": \"Soubor musí být menší než {{size}}\",\n \"upload.invalidType\": \"Neplatný typ souboru. Povoleno: {{types}}\",\n \"upload.remove\": \"Odstranit soubor\",\n \"upload.replace\": \"Nahradit soubor\",\n \"upload.preview\": \"Náhled\",\n \"upload.noFile\": \"Není vybrán žádný soubor\",\n \"upload.dragDrop\": \"Přetáhněte soubory sem\",\n\n // Editor\n \"editor.bold\": \"Tučné\",\n \"editor.italic\": \"Kurzíva\",\n \"editor.underline\": \"Podtržení\",\n \"editor.strikethrough\": \"Přeškrtnutí\",\n \"editor.heading\": \"Nadpis {{level}}\",\n \"editor.link\": \"Vložit odkaz\",\n \"editor.image\": \"Vložit obrázek\",\n \"editor.list\": \"Seznam\",\n \"editor.orderedList\": \"Číslovaný seznam\",\n \"editor.unorderedList\": \"Odrážkový seznam\",\n \"editor.quote\": \"Citace\",\n \"editor.code\": \"Kód\",\n \"editor.codeBlock\": \"Blok kódu\",\n \"editor.table\": \"Vložit tabulku\",\n \"editor.undo\": \"Zpět\",\n \"editor.redo\": \"Znovu\",\n \"editor.alignLeft\": \"Zarovnat vlevo\",\n \"editor.alignCenter\": \"Zarovnat na střed\",\n \"editor.alignRight\": \"Zarovnat vpravo\",\n \"editor.alignJustify\": \"Zarovnat do bloku\",\n \"editor.horizontalRule\": \"Horizontální čára\",\n \"editor.addRowBefore\": \"Přidat řádek před\",\n \"editor.addRowAfter\": \"Přidat řádek za\",\n \"editor.addColumnBefore\": \"Přidat sloupec před\",\n \"editor.addColumnAfter\": \"Přidat sloupec za\",\n \"editor.deleteRow\": \"Smazat řádek\",\n \"editor.deleteColumn\": \"Smazat sloupec\",\n \"editor.deleteTable\": \"Smazat tabulku\",\n \"editor.toggleHeaderRow\": \"Přepnout hlavičku řádku\",\n \"editor.toggleHeaderColumn\": \"Přepnout hlavičku sloupce\",\n \"editor.mergeCells\": \"Sloučit buňky\",\n \"editor.splitCell\": \"Rozdělit buňku\",\n \"editor.insertUrl\": \"Vložit URL\",\n \"editor.altText\": \"Alternativní text (volitelné)\",\n \"editor.uploadFile\": \"Nahrát soubor\",\n \"editor.chooseFile\": \"Vybrat soubor\",\n \"editor.uploading\": \"Nahrávání...\",\n \"editor.browseLibrary\": \"Procházet knihovnu\",\n\n // Toasts\n \"toast.success\": \"Úspěch\",\n \"toast.error\": \"Chyba\",\n \"toast.warning\": \"Varování\",\n \"toast.info\": \"Informace\",\n \"toast.saving\": \"Ukládání...\",\n \"toast.saveFailed\": \"Nepodařilo se uložit změny\",\n \"toast.saveSuccess\": \"Změny úspěšně uloženy\",\n \"toast.creating\": \"Vytváření...\",\n \"toast.createSuccess\": \"Úspěšně vytvořeno\",\n \"toast.createFailed\": \"Nepodařilo se vytvořit\",\n \"toast.deleting\": \"Mazání...\",\n \"toast.deleteFailed\": \"Nepodařilo se smazat\",\n \"toast.deleteSuccess\": \"Úspěšně smazáno\",\n \"toast.loadFailed\": \"Nepodařilo se načíst data\",\n \"toast.uploadFailed\": \"Nepodařilo se nahrát soubor\",\n \"toast.uploadSuccess\": \"Soubor úspěšně nahrán\",\n \"toast.copySuccess\": \"Zkopírováno do schránky\",\n \"toast.copyFailed\": \"Nepodařilo se zkopírovat do schránky\",\n \"toast.idCopied\": \"ID zkopírováno do schránky\",\n \"toast.validationFailed\": \"Validace selhala\",\n \"toast.validationDescription\": \"Zkontrolujte formulář na chyby\",\n \"toast.created\": \"{{name}} vytvořen\",\n \"toast.updated\": \"{{name}} aktualizován\",\n \"toast.resourceSaveFailed\": \"Nepodařilo se uložit {{name}}\",\n \"toast.editComingSoon\": \"Funkce úprav brzy dostupná\",\n \"toast.maxFilesWarning\":\n \"Můžete přidat jen {{remaining}} další soubor(y) (max {{max}})\",\n \"toast.settingsSaveFailed\": \"Nepodařilo se uložit nastavení\",\n \"toast.actionSuccess\": \"Akce úspěšně dokončena\",\n \"toast.actionFailed\": \"Akce selhala\",\n \"toast.localeChangedUnsaved\": \"Jazyk obsahu změněn\",\n \"toast.localeChangedUnsavedDescription\":\n \"Vaše neuložené změny byly nahrazeny obsahem v novém jazyce.\",\n\n // Confirm\n \"confirm.delete\": \"Opravdu chcete smazat? Tuto akci nelze vrátit zpět.\",\n \"confirm.discard\":\n \"Opravdu chcete zahodit změny? Tuto akci nelze vrátit zpět.\",\n \"confirm.unsavedChanges\": \"Máte neuložené změny. Opravdu chcete odejít?\",\n \"confirm.action\": \"Opravdu chcete pokračovat?\",\n \"confirm.irreversible\": \"Tuto akci nelze vrátit zpět.\",\n \"confirm.localeChange\": \"Zahodit neuložené změny?\",\n \"confirm.localeChangeDescription\":\n \"Máte neuložené změny. Přepnutí jazyka zahodí změny a načte obsah v novém jazyce.\",\n \"confirm.localeChangeStay\": \"Zůstat\",\n \"confirm.localeChangeDiscard\": \"Zahodit a přepnout\",\n\n // Status\n \"status.draft\": \"Koncept\",\n \"status.published\": \"Publikováno\",\n \"status.archived\": \"Archivováno\",\n \"status.pending\": \"Čeká\",\n \"status.active\": \"Aktivní\",\n \"status.inactive\": \"Neaktivní\",\n\n // Dates\n \"date.today\": \"Dnes\",\n \"date.yesterday\": \"Včera\",\n \"date.tomorrow\": \"Zítra\",\n \"date.selectDate\": \"Vybrat datum\",\n \"date.selectTime\": \"Vybrat čas\",\n \"date.clear\": \"Vymazat datum\",\n\n // Accessibility\n \"a11y.openMenu\": \"Otevřít menu\",\n \"a11y.closeMenu\": \"Zavřít menu\",\n \"a11y.expand\": \"Rozbalit\",\n \"a11y.collapse\": \"Sbalit\",\n \"a11y.loading\": \"Načítání\",\n \"a11y.required\": \"Povinné\",\n \"a11y.optional\": \"Volitelné\",\n \"a11y.selected\": \"Vybráno\",\n \"a11y.notSelected\": \"Není vybráno\",\n\n // Locale\n \"locale.language\": \"Jazyk\",\n \"locale.switchLanguage\": \"Přepnout jazyk\",\n \"locale.contentLanguage\": \"Jazyk obsahu\",\n \"locale.uiLanguage\": \"Jazyk rozhraní\",\n\n // ===========================================\n // Default Collections\n // ===========================================\n\n // Users Collection\n \"defaults.users.label\": \"Uživatelé\",\n \"defaults.users.description\": \"Spravovat uživatele a jejich role\",\n \"defaults.users.fields.name.label\": \"Jméno\",\n \"defaults.users.fields.name.placeholder\": \"Zadejte jméno uživatele\",\n \"defaults.users.fields.email.label\": \"E-mail\",\n \"defaults.users.fields.email.description\": \"E-mailová adresa (jen pro čtení)\",\n \"defaults.users.fields.role.label\": \"Role\",\n \"defaults.users.fields.role.options.admin\": \"Administrátor\",\n \"defaults.users.fields.role.options.user\": \"Uživatel\",\n \"defaults.users.fields.emailVerified.label\": \"E-mail ověřen\",\n \"defaults.users.fields.emailVerified.description\":\n \"Zda uživatel ověřil svou e-mailovou adresu\",\n \"defaults.users.fields.banned.label\": \"Blokován\",\n \"defaults.users.fields.banned.description\":\n \"Zabránit uživateli přístup do systému\",\n \"defaults.users.fields.banReason.label\": \"Důvod blokace\",\n \"defaults.users.fields.banReason.placeholder\": \"Zadejte důvod blokace...\",\n \"defaults.users.sections.basicInfo\": \"Základní informace\",\n \"defaults.users.sections.permissions\": \"Oprávnění\",\n \"defaults.users.sections.accessControl\": \"Řízení přístupu\",\n \"defaults.users.actions.createUser.label\": \"Vytvořit uživatele\",\n \"defaults.users.actions.createUser.title\": \"Vytvořit uživatele\",\n \"defaults.users.actions.createUser.description\":\n \"Vytvořit nový uživatelský účet s přihlašovacími údaji.\",\n \"defaults.users.actions.createUser.fields.password.label\": \"Heslo\",\n \"defaults.users.actions.createUser.fields.password.placeholder\":\n \"Zadejte heslo\",\n \"defaults.users.actions.createUser.submit\": \"Vytvořit uživatele\",\n \"defaults.users.actions.createUser.success\":\n \"Uživatel {{email}} úspěšně vytvořen. Sdílejte přihlašovací údaje s uživatelem.\",\n \"defaults.users.actions.createUser.errorNoAuth\":\n \"Auth klient není nakonfigurován. Nelze vytvořit uživatele.\",\n \"defaults.users.actions.resetPassword.label\": \"Resetovat heslo\",\n \"defaults.users.actions.resetPassword.title\": \"Resetovat heslo\",\n \"defaults.users.actions.resetPassword.description\":\n \"Nastavit nové heslo pro tohoto uživatele.\",\n \"defaults.users.actions.resetPassword.fields.newPassword.label\": \"Nové heslo\",\n \"defaults.users.actions.resetPassword.fields.newPassword.placeholder\":\n \"Zadejte nové heslo\",\n \"defaults.users.actions.resetPassword.fields.confirmPassword.label\":\n \"Potvrdit heslo\",\n \"defaults.users.actions.resetPassword.fields.confirmPassword.placeholder\":\n \"Potvrďte nové heslo\",\n \"defaults.users.actions.resetPassword.submit\": \"Resetovat heslo\",\n \"defaults.users.actions.resetPassword.success\": \"Heslo úspěšně resetováno!\",\n \"defaults.users.actions.resetPassword.errorMismatch\": \"Hesla se neshodují\",\n \"defaults.users.actions.delete.label\": \"Smazat uživatele\",\n\n // Assets Collection\n \"defaults.assets.label\": \"Média\",\n \"defaults.assets.description\": \"Spravovat nahrané soubory a obrázky\",\n \"defaults.assets.fields.preview.label\": \"Náhled\",\n \"defaults.assets.fields.filename.label\": \"Název souboru\",\n \"defaults.assets.fields.filename.description\":\n \"Původní název nahraného souboru\",\n \"defaults.assets.fields.mimeType.label\": \"Typ\",\n \"defaults.assets.fields.mimeType.description\": \"MIME typ souboru\",\n \"defaults.assets.fields.size.label\": \"Velikost (bajty)\",\n \"defaults.assets.fields.size.description\": \"Velikost souboru v bajtech\",\n \"defaults.assets.fields.alt.label\": \"Alternativní text\",\n \"defaults.assets.fields.alt.placeholder\": \"Popište obrázek pro přístupnost\",\n \"defaults.assets.fields.alt.description\":\n \"Alternativní text pro čtečky obrazovky\",\n \"defaults.assets.fields.caption.label\": \"Popisek\",\n \"defaults.assets.fields.caption.placeholder\": \"Přidejte popisek...\",\n \"defaults.assets.fields.visibility.label\": \"Viditelnost\",\n \"defaults.assets.fields.visibility.options.public\": \"Veřejné\",\n \"defaults.assets.fields.visibility.options.private\": \"Soukromé\",\n \"defaults.assets.fields.visibility.description\":\n \"Veřejné soubory jsou dostupné bez autentizace. Soukromé soubory vyžadují podepsanou URL.\",\n \"defaults.assets.sections.fileInfo\": \"Informace o souboru\",\n \"defaults.assets.sections.metadata\": \"Metadata\",\n \"defaults.assets.sections.metadata.description\":\n \"Přidejte popisné informace pro přístupnost a SEO\",\n \"defaults.assets.actions.upload.label\": \"Nahrát soubory\",\n\n // Default Sidebar\n \"defaults.sidebar.administration\": \"Administrace\",\n\n // View Options (Filter Builder)\n \"viewOptions.title\": \"Možnosti zobrazení\",\n \"viewOptions.columns\": \"Sloupce\",\n \"viewOptions.filters\": \"Filtry\",\n \"viewOptions.savedViews\": \"Uložená zobrazení\",\n \"viewOptions.apply\": \"Použít\",\n \"viewOptions.reset\": \"Resetovat\",\n\n // Saved Views Tab\n \"viewOptions.saveCurrentConfig\": \"Uložit aktuální konfiguraci\",\n \"viewOptions.viewNamePlaceholder\": \"Název zobrazení...\",\n \"viewOptions.saveDescription\": \"Uloží aktuální sloupce, filtry a řazení.\",\n \"viewOptions.noChangesToSave\": \"Žádné filtry nebo změny sloupců k uložení.\",\n \"viewOptions.noSavedViews\": \"Zatím žádná uložená zobrazení.\",\n \"viewOptions.filtersCount\": {\n one: \"{{count}} filtr\",\n other: \"{{count}} filtrů\",\n },\n \"viewOptions.columnsCount\": {\n one: \"{{count}} sloupec\",\n other: \"{{count}} sloupců\",\n },\n \"viewOptions.defaultView\": \"Výchozí\",\n\n // Columns Tab\n \"viewOptions.columnsDragHint\":\n \"Přetáhněte pro změnu pořadí, přepněte pro zobrazení/skrytí sloupců.\",\n \"viewOptions.noFieldsAvailable\": \"Žádná dostupná pole.\",\n\n // Filters Tab\n \"viewOptions.filtersDescription\": \"Zúžte výsledky vlastními pravidly.\",\n \"viewOptions.filterNumber\": \"Filtr #{{number}}\",\n \"viewOptions.selectField\": \"Vybrat pole\",\n \"viewOptions.selectOperator\": \"Vybrat operátor\",\n \"viewOptions.valuePlaceholder\": \"Hodnota...\",\n \"viewOptions.noActiveFilters\": \"Žádné aktivní filtry.\",\n \"viewOptions.addFilter\": \"Přidat filtr\",\n \"viewOptions.clearAll\": \"Vymazat vše\",\n \"viewOptions.activeFilters\": {\n one: \"{{count}} aktivní filtr\",\n other: \"{{count}} aktivních filtrů\",\n },\n \"viewOptions.clearFilters\": \"Vymazat filtry\",\n\n // Filter Operators\n \"filter.contains\": \"Obsahuje\",\n \"filter.notContains\": \"Neobsahuje\",\n \"filter.equals\": \"Rovná se\",\n \"filter.notEquals\": \"Nerovná se\",\n \"filter.startsWith\": \"Začíná na\",\n \"filter.endsWith\": \"Končí na\",\n \"filter.greaterThan\": \"Větší než\",\n \"filter.greaterThanOrEqual\": \"Větší než nebo rovno\",\n \"filter.lessThan\": \"Menší než\",\n \"filter.lessThanOrEqual\": \"Menší než nebo rovno\",\n \"filter.in\": \"Je některý z\",\n \"filter.notIn\": \"Není žádný z\",\n \"filter.some\": \"Má nějaký\",\n \"filter.every\": \"Má všechny\",\n \"filter.none\": \"Nemá žádný\",\n \"filter.isEmpty\": \"Je prázdné\",\n \"filter.isNotEmpty\": \"Není prázdné\",\n\n // Preview\n \"preview.show\": \"Náhled\",\n \"preview.hide\": \"Skrýt náhled\",\n \"preview.title\": \"Náhled\",\n \"preview.livePreview\": \"Živý náhled\",\n \"preview.fullscreen\": \"Celá obrazovka\",\n \"preview.close\": \"Zavřít náhled\",\n \"preview.loading\": \"Načítání náhledu...\",\n\n // Autosave\n \"autosave.saving\": \"Ukládání...\",\n \"autosave.saved\": \"Uloženo\",\n \"autosave.unsavedChanges\": \"Neuložené změny\",\n \"autosave.justNow\": \"právě teď\",\n \"autosave.secondsAgo\": {\n one: \"{{count}}s zpátky\",\n other: \"{{count}}s zpátky\",\n },\n \"autosave.minutesAgo\": {\n one: \"{{count}}m zpátky\",\n other: \"{{count}}m zpátky\",\n },\n \"autosave.hoursAgo\": { one: \"{{count}}h zpátky\", other: \"{{count}}h zpátky\" },\n\n // Global Search\n \"globalSearch.placeholder\": \"Hledat kolekce, globály, akce, záznamy...\",\n \"globalSearch.collections\": \"Kolekce\",\n \"globalSearch.globals\": \"Globály\",\n \"globalSearch.quickActions\": \"Rychlé akce\",\n \"globalSearch.records\": \"Záznamy\",\n \"globalSearch.createNew\": \"Vytvořit nový {{name}}\",\n \"globalSearch.noResults\": \"Nenalezeny žádné výsledky\",\n \"globalSearch.searching\": \"Hledání...\",\n \"globalSearch.navigate\": \"pro navigaci\",\n \"globalSearch.select\": \"pro výběr\",\n\n // Collection Search\n \"collectionSearch.placeholder\": \"Hledat záznamy...\",\n \"collectionSearch.noResults\": \"Nenalezeny žádné odpovídající záznamy\",\n \"collectionSearch.searching\": \"Hledání...\",\n} as const;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"de.mjs","names":[],"sources":["../../../../src/server/i18n/messages/de.ts"],"sourcesContent":["/**\n * German Admin UI Messages\n */\nexport default {\n // Common\n \"common.save\": \"Speichern\",\n \"common.cancel\": \"Abbrechen\",\n \"common.delete\": \"Löschen\",\n \"common.edit\": \"Bearbeiten\",\n \"common.create\": \"Erstellen\",\n \"common.add\": \"Hinzufügen\",\n \"common.remove\": \"Entfernen\",\n \"common.close\": \"Schließen\",\n \"common.form\": \"Formular\",\n \"common.search\": \"Suchen\",\n \"common.filter\": \"Filter\",\n \"common.refresh\": \"Aktualisieren\",\n \"common.loading\": \"Laden...\",\n \"common.confirm\": \"Bestätigen\",\n \"common.back\": \"Zurück\",\n \"common.next\": \"Weiter\",\n \"common.previous\": \"Zurück\",\n \"common.actions\": \"Aktionen\",\n \"common.more\": \"Mehr\",\n \"common.yes\": \"Ja\",\n \"common.no\": \"Nein\",\n \"common.ok\": \"OK\",\n \"common.apply\": \"Anwenden\",\n \"common.reset\": \"Zurücksetzen\",\n \"common.clear\": \"Löschen\",\n \"common.selectAll\": \"Alle auswählen\",\n \"common.deselectAll\": \"Auswahl aufheben\",\n \"common.duplicate\": \"Duplizieren\",\n \"common.copy\": \"Kopieren\",\n \"common.paste\": \"Einfügen\",\n \"common.upload\": \"Hochladen\",\n \"common.download\": \"Herunterladen\",\n \"common.preview\": \"Vorschau\",\n \"common.view\": \"Ansicht\",\n \"common.open\": \"Öffnen\",\n \"common.retry\": \"Wiederholen\",\n \"common.submit\": \"Absenden\",\n\n // Navigation\n \"nav.dashboard\": \"Dashboard\",\n \"nav.collections\": \"Sammlungen\",\n \"nav.globals\": \"Globals\",\n \"nav.media\": \"Medien\",\n \"nav.settings\": \"Einstellungen\",\n \"nav.logout\": \"Abmelden\",\n \"nav.home\": \"Startseite\",\n \"nav.back\": \"Zurück\",\n\n // Dashboard\n \"dashboard.title\": \"Dashboard\",\n \"dashboard.welcome\": \"Willkommen zurück\",\n \"dashboard.recentActivity\": \"Letzte Aktivität\",\n \"dashboard.quickActions\": \"Schnellaktionen\",\n\n // Collections\n \"collection.create\": \"{{name}} erstellen\",\n \"collection.edit\": \"{{name}} bearbeiten\",\n \"collection.delete\": \"{{name}} löschen\",\n \"collection.deleteConfirm\": \"Möchten Sie {{name}} wirklich löschen?\",\n \"collection.noItems\": \"Keine {{name}} gefunden\",\n \"collection.createFirst\": \"Erstellen Sie Ihr erstes {{name}}\",\n \"collection.itemCount\": {\n one: \"{{count}} Element\",\n other: \"{{count}} Elemente\",\n },\n \"collection.bulkDelete\": \"Ausgewählte löschen\",\n \"collection.bulkDeleteConfirm\":\n \"Möchten Sie {{count}} Elemente wirklich löschen?\",\n \"collection.bulkDeleteSuccess\": {\n one: \"{{count}} Element erfolgreich gelöscht\",\n other: \"{{count}} Elemente erfolgreich gelöscht\",\n },\n \"collection.bulkDeleteError\": \"Fehler beim Löschen der Elemente\",\n \"collection.bulkDeletePartial\": {\n one: \"{{success}} Element gelöscht, {{failed}} fehlgeschlagen\",\n other: \"{{success}} Elemente gelöscht, {{failed}} fehlgeschlagen\",\n },\n \"collection.bulkActionFailed\": \"Massenaktion fehlgeschlagen\",\n \"collection.selected\": \"{{count}} ausgewählt\",\n \"collection.selectOnPage\": \"Alle auf dieser Seite\",\n \"collection.selectAllMatching\": \"Alle passenden ({{count}})\",\n \"collection.clearSelection\": \"Auswahl aufheben\",\n \"collection.list\": \"{{name}} Liste\",\n \"collection.new\": \"Neues {{name}}\",\n \"collection.duplicateSuccess\": \"{{name}} erfolgreich dupliziert\",\n \"collection.duplicateError\": \"Fehler beim Duplizieren von {{name}}\",\n\n // Relations\n \"relation.select\": \"{{name}} auswählen\",\n \"relation.clear\": \"Auswahl löschen\",\n \"relation.search\": \"{{name}} suchen...\",\n \"relation.noResults\": \"Keine {{name}} gefunden\",\n \"relation.loading\": \"Laden...\",\n \"relation.createNew\": \"Neues {{name}} erstellen\",\n \"relation.selected\": \"{{count}} ausgewählt\",\n \"relation.removeItem\": \"{{name}} entfernen\",\n \"relation.addItem\": \"{{name}} hinzufügen\",\n \"relation.noneSelected\": \"Kein {{name}} ausgewählt\",\n \"relation.noRelated\": \"Keine verwandten Elemente gefunden\",\n \"relation.saveFirst\":\n \"Speichern Sie dieses Element zuerst, um verwandte Elemente zu sehen.\",\n\n // Arrays\n \"array.empty\": \"Noch keine {{name}} hinzugefügt\",\n \"array.addItem\": \"{{name}} hinzufügen\",\n\n // Blocks\n \"blocks.addAbove\": \"Darüber hinzufügen\",\n \"blocks.addBelow\": \"Darunter hinzufügen\",\n \"blocks.addChild\": \"Untergeordneten Block hinzufügen\",\n\n // Forms\n \"form.id\": \"ID\",\n \"form.created\": \"Erstellt\",\n \"form.updated\": \"Aktualisiert\",\n \"form.required\": \"Dieses Feld ist erforderlich\",\n \"form.invalid\": \"Ungültiger Wert\",\n \"form.saveChanges\": \"Änderungen speichern\",\n \"form.unsavedChanges\": \"Sie haben ungespeicherte Änderungen\",\n \"form.discardChanges\": \"Änderungen verwerfen\",\n \"form.discardConfirm\":\n \"Möchten Sie die Änderungen wirklich verwerfen? Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"form.fieldRequired\": \"{{field}} ist erforderlich\",\n \"form.fieldInvalid\": \"{{field}} ist ungültig\",\n \"form.maxLength\": \"Maximal {{max}} Zeichen\",\n \"form.minLength\": \"Mindestens {{min}} Zeichen\",\n \"form.maxValue\": \"Maximal {{max}}\",\n \"form.minValue\": \"Mindestens {{min}}\",\n \"form.pattern\": \"Ungültiges Format\",\n \"form.email\": \"Ungültige E-Mail-Adresse\",\n \"form.url\": \"Ungültige URL\",\n \"form.createSuccess\": \"{{name}} erfolgreich erstellt\",\n \"form.createError\": \"Fehler beim Erstellen von {{name}}\",\n \"form.updateSuccess\": \"{{name}} erfolgreich aktualisiert\",\n \"form.updateError\": \"Fehler beim Aktualisieren von {{name}}\",\n \"form.deleteSuccess\": \"{{name}} erfolgreich gelöscht\",\n \"form.deleteError\": \"Fehler beim Löschen von {{name}}\",\n\n // Auth\n \"auth.login\": \"Anmelden\",\n \"auth.logout\": \"Abmelden\",\n \"auth.email\": \"E-Mail\",\n \"auth.password\": \"Passwort\",\n \"auth.forgotPassword\": \"Passwort vergessen?\",\n \"auth.resetPassword\": \"Passwort zurücksetzen\",\n \"auth.signIn\": \"Anmelden\",\n \"auth.signOut\": \"Abmelden\",\n \"auth.signUp\": \"Registrieren\",\n \"auth.rememberMe\": \"Angemeldet bleiben\",\n \"auth.invalidCredentials\": \"Ungültige E-Mail oder Passwort\",\n \"auth.sessionExpired\":\n \"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\",\n \"auth.emailPlaceholder\": \"sie@beispiel.de\",\n \"auth.passwordPlaceholder\": \"Passwort eingeben\",\n \"auth.signingIn\": \"Anmeldung...\",\n \"auth.creatingAdmin\": \"Administrator wird erstellt...\",\n \"auth.name\": \"Name\",\n \"auth.namePlaceholder\": \"Ihr Name\",\n \"auth.confirmPassword\": \"Passwort bestätigen\",\n \"auth.confirmPasswordPlaceholder\": \"Passwort bestätigen\",\n \"auth.acceptInvite\": \"Einladung annehmen\",\n \"auth.acceptingInvite\": \"Einladung wird angenommen...\",\n \"auth.dontHaveAccount\": \"Noch kein Konto?\",\n \"auth.alreadyHaveAccount\": \"Bereits ein Konto?\",\n \"auth.emailRequired\": \"E-Mail ist erforderlich\",\n \"auth.passwordRequired\": \"Passwort ist erforderlich\",\n \"auth.passwordMinLength\": \"Passwort muss mindestens {{min}} Zeichen haben\",\n \"auth.nameRequired\": \"Name ist erforderlich\",\n \"auth.nameMinLength\": \"Name muss mindestens {{min}} Zeichen haben\",\n \"auth.invalidEmail\": \"Ungültige E-Mail-Adresse\",\n \"auth.passwordMismatch\": \"Passwörter stimmen nicht überein\",\n \"auth.newPassword\": \"Neues Passwort\",\n \"auth.newPasswordPlaceholder\": \"Neues Passwort eingeben\",\n \"auth.sendResetLink\": \"Reset-Link senden\",\n \"auth.sendingResetLink\": \"Wird gesendet...\",\n \"auth.resetLinkSent\": \"Passwort-Reset-Link wurde an Ihre E-Mail gesendet\",\n \"auth.resettingPassword\": \"Passwort wird zurückgesetzt...\",\n \"auth.createFirstAdmin\": \"Ersten Administrator erstellen\",\n \"auth.setupTitle\": \"Einrichtung\",\n \"auth.setupDescription\": \"Erstellen Sie Ihr erstes Administratorkonto.\",\n \"auth.profile\": \"Profil\",\n \"auth.myAccount\": \"Mein Konto\",\n \"auth.logoutFailed\":\n \"Abmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.\",\n\n // Errors\n \"error.notFound\": \"Nicht gefunden\",\n \"error.serverError\": \"Serverfehler\",\n \"error.networkError\": \"Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.\",\n \"error.unauthorized\": \"Sie sind nicht berechtigt, diese Aktion auszuführen\",\n \"error.forbidden\": \"Zugriff verweigert\",\n \"error.validation\": \"Validierung fehlgeschlagen\",\n \"error.unknown\": \"Ein unbekannter Fehler ist aufgetreten\",\n \"error.timeout\":\n \"Zeitüberschreitung der Anfrage. Bitte versuchen Sie es erneut.\",\n \"error.conflict\":\n \"Ein Konflikt ist aufgetreten. Bitte aktualisieren Sie und versuchen Sie es erneut.\",\n\n // Table\n \"table.rowsPerPage\": \"Zeilen pro Seite\",\n \"table.of\": \"von\",\n \"table.noResults\": \"Keine Ergebnisse\",\n \"table.selectAll\": \"Alle auswählen\",\n \"table.selectRow\": \"Zeile auswählen\",\n \"table.showing\": \"Zeige {{from}} bis {{to}} von {{total}}\",\n \"table.page\": \"Seite {{page}}\",\n \"table.firstPage\": \"Erste Seite\",\n \"table.lastPage\": \"Letzte Seite\",\n \"table.nextPage\": \"Nächste Seite\",\n \"table.previousPage\": \"Vorherige Seite\",\n \"table.sortAsc\": \"Aufsteigend sortieren\",\n \"table.sortDesc\": \"Absteigend sortieren\",\n \"table.columns\": \"Spalten\",\n \"table.hideColumn\": \"Spalte ausblenden\",\n \"table.showColumn\": \"Spalte anzeigen\",\n\n // Upload\n \"upload.dropzone\": \"Dateien hier ablegen oder klicken zum Hochladen\",\n \"upload.browse\": \"Dateien durchsuchen\",\n \"upload.uploading\": \"Wird hochgeladen...\",\n \"upload.complete\": \"Hochladen abgeschlossen\",\n \"upload.error\": \"Hochladen fehlgeschlagen\",\n \"upload.maxSize\": \"Datei muss kleiner als {{size}} sein\",\n \"upload.invalidType\": \"Ungültiger Dateityp. Erlaubt: {{types}}\",\n \"upload.remove\": \"Datei entfernen\",\n \"upload.replace\": \"Datei ersetzen\",\n \"upload.preview\": \"Vorschau\",\n \"upload.noFile\": \"Keine Datei ausgewählt\",\n \"upload.dragDrop\": \"Dateien hier ablegen\",\n\n // Editor\n \"editor.bold\": \"Fett\",\n \"editor.italic\": \"Kursiv\",\n \"editor.underline\": \"Unterstrichen\",\n \"editor.strikethrough\": \"Durchgestrichen\",\n \"editor.heading\": \"Überschrift {{level}}\",\n \"editor.link\": \"Link einfügen\",\n \"editor.image\": \"Bild einfügen\",\n \"editor.list\": \"Liste\",\n \"editor.orderedList\": \"Nummerierte Liste\",\n \"editor.unorderedList\": \"Aufzählungsliste\",\n \"editor.quote\": \"Zitat\",\n \"editor.code\": \"Code\",\n \"editor.codeBlock\": \"Code-Block\",\n \"editor.table\": \"Tabelle einfügen\",\n \"editor.undo\": \"Rückgängig\",\n \"editor.redo\": \"Wiederherstellen\",\n \"editor.alignLeft\": \"Linksbündig\",\n \"editor.alignCenter\": \"Zentriert\",\n \"editor.alignRight\": \"Rechtsbündig\",\n \"editor.alignJustify\": \"Blocksatz\",\n \"editor.horizontalRule\": \"Horizontale Linie\",\n \"editor.addRowBefore\": \"Zeile davor einfügen\",\n \"editor.addRowAfter\": \"Zeile danach einfügen\",\n \"editor.addColumnBefore\": \"Spalte davor einfügen\",\n \"editor.addColumnAfter\": \"Spalte danach einfügen\",\n \"editor.deleteRow\": \"Zeile löschen\",\n \"editor.deleteColumn\": \"Spalte löschen\",\n \"editor.deleteTable\": \"Tabelle löschen\",\n \"editor.toggleHeaderRow\": \"Kopfzeile umschalten\",\n \"editor.toggleHeaderColumn\": \"Kopfspalte umschalten\",\n \"editor.mergeCells\": \"Zellen zusammenführen\",\n \"editor.splitCell\": \"Zelle teilen\",\n \"editor.insertUrl\": \"URL einfügen\",\n \"editor.altText\": \"Alternativtext (optional)\",\n \"editor.uploadFile\": \"Datei hochladen\",\n \"editor.chooseFile\": \"Datei auswählen\",\n \"editor.uploading\": \"Wird hochgeladen...\",\n \"editor.browseLibrary\": \"Bibliothek durchsuchen\",\n\n // Toasts\n \"toast.success\": \"Erfolg\",\n \"toast.error\": \"Fehler\",\n \"toast.warning\": \"Warnung\",\n \"toast.info\": \"Info\",\n \"toast.saving\": \"Wird gespeichert...\",\n \"toast.saveFailed\": \"Fehler beim Speichern der Änderungen\",\n \"toast.saveSuccess\": \"Änderungen erfolgreich gespeichert\",\n \"toast.creating\": \"Wird erstellt...\",\n \"toast.createSuccess\": \"Erfolgreich erstellt\",\n \"toast.createFailed\": \"Fehler beim Erstellen\",\n \"toast.deleting\": \"Wird gelöscht...\",\n \"toast.deleteFailed\": \"Fehler beim Löschen\",\n \"toast.deleteSuccess\": \"Erfolgreich gelöscht\",\n \"toast.loadFailed\": \"Fehler beim Laden der Daten\",\n \"toast.uploadFailed\": \"Fehler beim Hochladen der Datei\",\n \"toast.uploadSuccess\": \"Datei erfolgreich hochgeladen\",\n \"toast.copySuccess\": \"In Zwischenablage kopiert\",\n \"toast.copyFailed\": \"Fehler beim Kopieren in die Zwischenablage\",\n \"toast.idCopied\": \"ID in Zwischenablage kopiert\",\n \"toast.validationFailed\": \"Validierung fehlgeschlagen\",\n \"toast.validationDescription\": \"Bitte überprüfen Sie das Formular auf Fehler\",\n \"toast.created\": \"{{name}} erstellt\",\n \"toast.updated\": \"{{name}} aktualisiert\",\n \"toast.resourceSaveFailed\": \"Fehler beim Speichern von {{name}}\",\n \"toast.editComingSoon\": \"Bearbeitungsfunktion demnächst verfügbar\",\n \"toast.maxFilesWarning\":\n \"Nur noch {{remaining}} Datei(en) können hinzugefügt werden (max {{max}})\",\n \"toast.settingsSaveFailed\": \"Fehler beim Speichern der Einstellungen\",\n \"toast.actionSuccess\": \"Aktion erfolgreich abgeschlossen\",\n \"toast.actionFailed\": \"Aktion fehlgeschlagen\",\n \"toast.localeChangedUnsaved\": \"Inhaltssprache geändert\",\n \"toast.localeChangedUnsavedDescription\":\n \"Ihre ungespeicherten Änderungen wurden durch den Inhalt in der neuen Sprache ersetzt.\",\n\n // Confirm\n \"confirm.delete\":\n \"Möchten Sie dies wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"confirm.discard\":\n \"Möchten Sie die Änderungen wirklich verwerfen? Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"confirm.unsavedChanges\":\n \"Sie haben ungespeicherte Änderungen. Möchten Sie wirklich verlassen?\",\n \"confirm.action\": \"Möchten Sie wirklich fortfahren?\",\n \"confirm.irreversible\": \"Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"confirm.localeChange\": \"Ungespeicherte Änderungen verwerfen?\",\n \"confirm.localeChangeDescription\":\n \"Sie haben ungespeicherte Änderungen. Das Wechseln der Inhaltssprache verwirft Ihre Änderungen und lädt den Inhalt in der neuen Sprache.\",\n \"confirm.localeChangeStay\": \"Bleiben\",\n \"confirm.localeChangeDiscard\": \"Verwerfen & wechseln\",\n\n // Status\n \"status.draft\": \"Entwurf\",\n \"status.published\": \"Veröffentlicht\",\n \"status.archived\": \"Archiviert\",\n \"status.pending\": \"Ausstehend\",\n \"status.active\": \"Aktiv\",\n \"status.inactive\": \"Inaktiv\",\n\n // Dates\n \"date.today\": \"Heute\",\n \"date.yesterday\": \"Gestern\",\n \"date.tomorrow\": \"Morgen\",\n \"date.selectDate\": \"Datum auswählen\",\n \"date.selectTime\": \"Zeit auswählen\",\n \"date.clear\": \"Datum löschen\",\n\n // Accessibility\n \"a11y.openMenu\": \"Menü öffnen\",\n \"a11y.closeMenu\": \"Menü schließen\",\n \"a11y.expand\": \"Erweitern\",\n \"a11y.collapse\": \"Zusammenklappen\",\n \"a11y.loading\": \"Laden\",\n \"a11y.required\": \"Erforderlich\",\n \"a11y.optional\": \"Optional\",\n \"a11y.selected\": \"Ausgewählt\",\n \"a11y.notSelected\": \"Nicht ausgewählt\",\n\n // Locale\n \"locale.language\": \"Sprache\",\n \"locale.switchLanguage\": \"Sprache wechseln\",\n \"locale.contentLanguage\": \"Inhaltssprache\",\n \"locale.uiLanguage\": \"Oberflächensprache\",\n\n // ===========================================\n // Default Collections\n // ===========================================\n\n // Users Collection\n \"defaults.users.label\": \"Benutzer\",\n \"defaults.users.description\": \"Admin-Benutzer und deren Rollen verwalten\",\n \"defaults.users.fields.name.label\": \"Name\",\n \"defaults.users.fields.name.placeholder\": \"Benutzernamen eingeben\",\n \"defaults.users.fields.email.label\": \"E-Mail\",\n \"defaults.users.fields.email.description\":\n \"E-Mail-Adresse (schreibgeschützt)\",\n \"defaults.users.fields.role.label\": \"Rolle\",\n \"defaults.users.fields.role.options.admin\": \"Administrator\",\n \"defaults.users.fields.role.options.user\": \"Benutzer\",\n \"defaults.users.fields.emailVerified.label\": \"E-Mail verifiziert\",\n \"defaults.users.fields.emailVerified.description\":\n \"Ob der Benutzer seine E-Mail-Adresse verifiziert hat\",\n \"defaults.users.fields.banned.label\": \"Gesperrt\",\n \"defaults.users.fields.banned.description\":\n \"Benutzer den Zugriff auf das System verweigern\",\n \"defaults.users.fields.banReason.label\": \"Sperrgrund\",\n \"defaults.users.fields.banReason.placeholder\":\n \"Grund für die Sperre eingeben...\",\n \"defaults.users.sections.basicInfo\": \"Grundinformationen\",\n \"defaults.users.sections.permissions\": \"Berechtigungen\",\n \"defaults.users.sections.accessControl\": \"Zugriffskontrolle\",\n \"defaults.users.actions.createUser.label\": \"Benutzer erstellen\",\n \"defaults.users.actions.createUser.title\": \"Benutzer erstellen\",\n \"defaults.users.actions.createUser.description\":\n \"Neues Benutzerkonto mit Anmeldedaten erstellen.\",\n \"defaults.users.actions.createUser.fields.password.label\": \"Passwort\",\n \"defaults.users.actions.createUser.fields.password.placeholder\":\n \"Passwort eingeben\",\n \"defaults.users.actions.createUser.submit\": \"Benutzer erstellen\",\n \"defaults.users.actions.createUser.success\":\n \"Benutzer {{email}} erfolgreich erstellt. Teilen Sie die Anmeldedaten mit dem Benutzer.\",\n \"defaults.users.actions.createUser.errorNoAuth\":\n \"Auth-Client nicht konfiguriert. Benutzer kann nicht erstellt werden.\",\n \"defaults.users.actions.resetPassword.label\": \"Passwort zurücksetzen\",\n \"defaults.users.actions.resetPassword.title\": \"Passwort zurücksetzen\",\n \"defaults.users.actions.resetPassword.description\":\n \"Neues Passwort für diesen Benutzer festlegen.\",\n \"defaults.users.actions.resetPassword.fields.newPassword.label\":\n \"Neues Passwort\",\n \"defaults.users.actions.resetPassword.fields.newPassword.placeholder\":\n \"Neues Passwort eingeben\",\n \"defaults.users.actions.resetPassword.fields.confirmPassword.label\":\n \"Passwort bestätigen\",\n \"defaults.users.actions.resetPassword.fields.confirmPassword.placeholder\":\n \"Neues Passwort bestätigen\",\n \"defaults.users.actions.resetPassword.submit\": \"Passwort zurücksetzen\",\n \"defaults.users.actions.resetPassword.success\":\n \"Passwort erfolgreich zurückgesetzt!\",\n \"defaults.users.actions.resetPassword.errorMismatch\":\n \"Passwörter stimmen nicht überein\",\n \"defaults.users.actions.delete.label\": \"Benutzer löschen\",\n\n // Assets Collection\n \"defaults.assets.label\": \"Medien\",\n \"defaults.assets.description\": \"Hochgeladene Dateien und Bilder verwalten\",\n \"defaults.assets.fields.preview.label\": \"Vorschau\",\n \"defaults.assets.fields.filename.label\": \"Dateiname\",\n \"defaults.assets.fields.filename.description\":\n \"Originaler Dateiname der hochgeladenen Datei\",\n \"defaults.assets.fields.mimeType.label\": \"Typ\",\n \"defaults.assets.fields.mimeType.description\": \"MIME-Typ der Datei\",\n \"defaults.assets.fields.size.label\": \"Größe (Bytes)\",\n \"defaults.assets.fields.size.description\": \"Dateigröße in Bytes\",\n \"defaults.assets.fields.alt.label\": \"Alternativtext\",\n \"defaults.assets.fields.alt.placeholder\":\n \"Bild für Barrierefreiheit beschreiben\",\n \"defaults.assets.fields.alt.description\": \"Alternativtext für Screenreader\",\n \"defaults.assets.fields.caption.label\": \"Untertitel\",\n \"defaults.assets.fields.caption.placeholder\": \"Untertitel hinzufügen...\",\n \"defaults.assets.fields.visibility.label\": \"Sichtbarkeit\",\n \"defaults.assets.fields.visibility.options.public\": \"Öffentlich\",\n \"defaults.assets.fields.visibility.options.private\": \"Privat\",\n \"defaults.assets.fields.visibility.description\":\n \"Öffentliche Dateien sind ohne Authentifizierung zugänglich. Private Dateien erfordern eine signierte URL.\",\n \"defaults.assets.sections.fileInfo\": \"Dateiinformationen\",\n \"defaults.assets.sections.metadata\": \"Metadaten\",\n \"defaults.assets.sections.metadata.description\":\n \"Beschreibende Informationen für Barrierefreiheit und SEO hinzufügen\",\n \"defaults.assets.actions.upload.label\": \"Dateien hochladen\",\n\n // Default Sidebar\n \"defaults.sidebar.administration\": \"Administration\",\n\n // View Options (Filter Builder)\n \"viewOptions.title\": \"Ansichtsoptionen\",\n \"viewOptions.columns\": \"Spalten\",\n \"viewOptions.filters\": \"Filter\",\n \"viewOptions.savedViews\": \"Gespeicherte Ansichten\",\n \"viewOptions.apply\": \"Anwenden\",\n \"viewOptions.reset\": \"Zurücksetzen\",\n\n // Saved Views Tab\n \"viewOptions.saveCurrentConfig\": \"Aktuelle Konfiguration speichern\",\n \"viewOptions.viewNamePlaceholder\": \"Ansichtsname...\",\n \"viewOptions.saveDescription\":\n \"Speichert aktuelle Spalten, Filter und Sortierung.\",\n \"viewOptions.noChangesToSave\":\n \"Keine Filter oder Spaltenänderungen zum Speichern.\",\n \"viewOptions.noSavedViews\": \"Noch keine gespeicherten Ansichten.\",\n \"viewOptions.filtersCount\": {\n one: \"{{count}} Filter\",\n other: \"{{count}} Filter\",\n },\n \"viewOptions.columnsCount\": {\n one: \"{{count}} Spalte\",\n other: \"{{count}} Spalten\",\n },\n \"viewOptions.defaultView\": \"Standard\",\n\n // Columns Tab\n \"viewOptions.columnsDragHint\":\n \"Ziehen zum Neuanordnen, umschalten zum Ein-/Ausblenden von Spalten.\",\n \"viewOptions.noFieldsAvailable\": \"Keine Felder verfügbar.\",\n\n // Filters Tab\n \"viewOptions.filtersDescription\":\n \"Ergebnisse mit benutzerdefinierten Regeln eingrenzen.\",\n \"viewOptions.filterNumber\": \"Filter #{{number}}\",\n \"viewOptions.selectField\": \"Feld auswählen\",\n \"viewOptions.selectOperator\": \"Operator auswählen\",\n \"viewOptions.valuePlaceholder\": \"Wert...\",\n \"viewOptions.noActiveFilters\": \"Keine aktiven Filter.\",\n \"viewOptions.addFilter\": \"Filter hinzufügen\",\n \"viewOptions.clearAll\": \"Alle löschen\",\n \"viewOptions.activeFilters\": {\n one: \"{{count}} aktiver Filter\",\n other: \"{{count}} aktive Filter\",\n },\n \"viewOptions.clearFilters\": \"Filter löschen\",\n\n // Filter Operators\n \"filter.contains\": \"Enthält\",\n \"filter.notContains\": \"Enthält nicht\",\n \"filter.equals\": \"Gleich\",\n \"filter.notEquals\": \"Ungleich\",\n \"filter.startsWith\": \"Beginnt mit\",\n \"filter.endsWith\": \"Endet mit\",\n \"filter.greaterThan\": \"Größer als\",\n \"filter.greaterThanOrEqual\": \"Größer oder gleich\",\n \"filter.lessThan\": \"Kleiner als\",\n \"filter.lessThanOrEqual\": \"Kleiner oder gleich\",\n \"filter.in\": \"Ist eines von\",\n \"filter.notIn\": \"Ist keines von\",\n \"filter.some\": \"Hat irgendeines\",\n \"filter.every\": \"Hat alle\",\n \"filter.none\": \"Hat keines\",\n \"filter.isEmpty\": \"Ist leer\",\n \"filter.isNotEmpty\": \"Ist nicht leer\",\n\n // Preview\n \"preview.show\": \"Vorschau\",\n \"preview.hide\": \"Vorschau ausblenden\",\n \"preview.title\": \"Vorschau\",\n \"preview.livePreview\": \"Live-Vorschau\",\n \"preview.fullscreen\": \"Vollbild\",\n \"preview.close\": \"Vorschau schließen\",\n \"preview.loading\": \"Vorschau wird geladen...\",\n\n // Autosave\n \"autosave.saving\": \"Wird gespeichert...\",\n \"autosave.saved\": \"Gespeichert\",\n \"autosave.unsavedChanges\": \"Ungespeicherte Änderungen\",\n \"autosave.justNow\": \"gerade eben\",\n \"autosave.secondsAgo\": { one: \"vor {{count}}s\", other: \"vor {{count}}s\" },\n \"autosave.minutesAgo\": { one: \"vor {{count}}m\", other: \"vor {{count}}m\" },\n \"autosave.hoursAgo\": { one: \"vor {{count}}h\", other: \"vor {{count}}h\" },\n\n // Global Search\n \"globalSearch.placeholder\":\n \"Sammlungen, Globals, Aktionen, Datensätze durchsuchen...\",\n \"globalSearch.collections\": \"Sammlungen\",\n \"globalSearch.globals\": \"Globals\",\n \"globalSearch.quickActions\": \"Schnellaktionen\",\n \"globalSearch.records\": \"Datensätze\",\n \"globalSearch.createNew\": \"Neues {{name}} erstellen\",\n \"globalSearch.noResults\": \"Keine Ergebnisse gefunden\",\n \"globalSearch.searching\": \"Suche läuft...\",\n \"globalSearch.navigate\": \"zur Navigation\",\n \"globalSearch.select\": \"zur Auswahl\",\n\n // Collection Search\n \"collectionSearch.placeholder\": \"Datensätze durchsuchen...\",\n \"collectionSearch.noResults\": \"Keine passenden Datensätze gefunden\",\n \"collectionSearch.searching\": \"Suche läuft...\",\n} as const;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"en.mjs","names":[],"sources":["../../../../src/server/i18n/messages/en.ts"],"sourcesContent":["/**\n * English Admin UI Messages (Default)\n */\nexport default {\n\t// Common\n\t\"common.save\": \"Save\",\n\t\"common.cancel\": \"Cancel\",\n\t\"common.delete\": \"Delete\",\n\t\"common.edit\": \"Edit\",\n\t\"common.create\": \"Create\",\n\t\"common.add\": \"Add\",\n\t\"common.remove\": \"Remove\",\n\t\"common.close\": \"Close\",\n\t\"common.form\": \"Form\",\n\t\"common.search\": \"Search\",\n\t\"common.filter\": \"Filter\",\n\t\"common.refresh\": \"Refresh\",\n\t\"common.loading\": \"Loading...\",\n\t\"common.confirm\": \"Confirm\",\n\t\"common.back\": \"Back\",\n\t\"common.next\": \"Next\",\n\t\"common.previous\": \"Previous\",\n\t\"common.actions\": \"Actions\",\n\t\"common.more\": \"More\",\n\t\"common.yes\": \"Yes\",\n\t\"common.no\": \"No\",\n\t\"common.ok\": \"OK\",\n\t\"common.apply\": \"Apply\",\n\t\"common.reset\": \"Reset\",\n\t\"common.clear\": \"Clear\",\n\t\"common.selectAll\": \"Select all\",\n\t\"common.deselectAll\": \"Deselect all\",\n\t\"common.duplicate\": \"Duplicate\",\n\t\"common.copy\": \"Copy\",\n\t\"common.paste\": \"Paste\",\n\t\"common.upload\": \"Upload\",\n\t\"common.download\": \"Download\",\n\t\"common.preview\": \"Preview\",\n\t\"common.view\": \"View\",\n\t\"common.open\": \"Open\",\n\t\"common.retry\": \"Retry\",\n\t\"common.submit\": \"Submit\",\n\n\t// Navigation\n\t\"nav.dashboard\": \"Dashboard\",\n\t\"nav.collections\": \"Collections\",\n\t\"nav.globals\": \"Globals\",\n\t\"nav.media\": \"Media\",\n\t\"nav.settings\": \"Settings\",\n\t\"nav.logout\": \"Log out\",\n\t\"nav.home\": \"Home\",\n\t\"nav.back\": \"Back\",\n\n\t// Dashboard\n\t\"dashboard.title\": \"Dashboard\",\n\t\"dashboard.welcome\": \"Welcome back\",\n\t\"dashboard.recentActivity\": \"Recent Activity\",\n\t\"dashboard.quickActions\": \"Quick Actions\",\n\n\t// Collections\n\t\"collection.create\": \"Create {{name}}\",\n\t\"collection.edit\": \"Edit {{name}}\",\n\t\"collection.delete\": \"Delete {{name}}\",\n\t\"collection.deleteConfirm\": \"Are you sure you want to delete this {{name}}?\",\n\t\"collection.noItems\": \"No {{name}} found\",\n\t\"collection.createFirst\": \"Create your first {{name}}\",\n\t\"collection.itemCount\": { one: \"{{count}} item\", other: \"{{count}} items\" },\n\t\"collection.bulkDelete\": \"Delete selected\",\n\t\"collection.bulkDeleteConfirm\":\n\t\t\"Are you sure you want to delete {{count}} items?\",\n\t\"collection.bulkDeleteSuccess\": {\n\t\tone: \"Successfully deleted {{count}} item\",\n\t\tother: \"Successfully deleted {{count}} items\",\n\t},\n\t\"collection.bulkDeleteError\": \"Failed to delete items\",\n\t\"collection.bulkDeletePartial\": {\n\t\tone: \"Deleted {{success}} item, {{failed}} failed\",\n\t\tother: \"Deleted {{success}} items, {{failed}} failed\",\n\t},\n\t\"collection.bulkActionFailed\": \"Bulk action failed\",\n\t\"collection.selected\": \"{{count}} selected\",\n\t\"collection.selectOnPage\": \"All on this page\",\n\t\"collection.selectAllMatching\": \"All matching filter ({{count}})\",\n\t\"collection.clearSelection\": \"Clear selection\",\n\t\"collection.list\": \"{{name}} list\",\n\t\"collection.new\": \"New {{name}}\",\n\t\"collection.duplicateSuccess\": \"{{name}} duplicated successfully\",\n\t\"collection.duplicateError\": \"Failed to duplicate {{name}}\",\n\n\t// Relations\n\t\"relation.select\": \"Select {{name}}\",\n\t\"relation.clear\": \"Clear selection\",\n\t\"relation.search\": \"Search {{name}}...\",\n\t\"relation.noResults\": \"No {{name}} found\",\n\t\"relation.loading\": \"Loading...\",\n\t\"relation.createNew\": \"Create new {{name}}\",\n\t\"relation.selected\": \"{{count}} selected\",\n\t\"relation.removeItem\": \"Remove {{name}}\",\n\t\"relation.addItem\": \"Add {{name}}\",\n\t\"relation.noneSelected\": \"No {{name}} selected\",\n\t\"relation.noRelated\": \"No related items found\",\n\t\"relation.saveFirst\": \"Save this item first to see related items.\",\n\n\t// Arrays\n\t\"array.empty\": \"No {{name}} added yet\",\n\t\"array.addItem\": \"Add {{name}}\",\n\n\t// Blocks\n\t\"blocks.addAbove\": \"Add above\",\n\t\"blocks.addBelow\": \"Add below\",\n\t\"blocks.addChild\": \"Add child block\",\n\n\t// Forms\n\t\"form.id\": \"ID\",\n\t\"form.created\": \"Created\",\n\t\"form.updated\": \"Updated\",\n\t\"form.required\": \"This field is required\",\n\t\"form.invalid\": \"Invalid value\",\n\t\"form.saveChanges\": \"Save changes\",\n\t\"form.unsavedChanges\": \"You have unsaved changes\",\n\t\"form.discardChanges\": \"Discard changes\",\n\t\"form.discardConfirm\":\n\t\t\"Are you sure you want to discard your changes? This action cannot be undone.\",\n\t\"form.fieldRequired\": \"{{field}} is required\",\n\t\"form.fieldInvalid\": \"{{field}} is invalid\",\n\t\"form.maxLength\": \"Must be at most {{max}} characters\",\n\t\"form.minLength\": \"Must be at least {{min}} characters\",\n\t\"form.maxValue\": \"Must be at most {{max}}\",\n\t\"form.minValue\": \"Must be at least {{min}}\",\n\t\"form.pattern\": \"Invalid format\",\n\t\"form.email\": \"Invalid email address\",\n\t\"form.url\": \"Invalid URL\",\n\t\"form.createSuccess\": \"{{name}} created successfully\",\n\t\"form.createError\": \"Failed to create {{name}}\",\n\t\"form.updateSuccess\": \"{{name}} updated successfully\",\n\t\"form.updateError\": \"Failed to update {{name}}\",\n\t\"form.deleteSuccess\": \"{{name}} deleted successfully\",\n\t\"form.deleteError\": \"Failed to delete {{name}}\",\n\n\t// Auth\n\t\"auth.login\": \"Log in\",\n\t\"auth.logout\": \"Log out\",\n\t\"auth.email\": \"Email\",\n\t\"auth.password\": \"Password\",\n\t\"auth.forgotPassword\": \"Forgot password?\",\n\t\"auth.resetPassword\": \"Reset password\",\n\t\"auth.signIn\": \"Sign in\",\n\t\"auth.signOut\": \"Sign out\",\n\t\"auth.signUp\": \"Sign up\",\n\t\"auth.rememberMe\": \"Remember me\",\n\t\"auth.invalidCredentials\": \"Invalid email or password\",\n\t\"auth.sessionExpired\": \"Your session has expired. Please log in again.\",\n\t\"auth.emailPlaceholder\": \"you@example.com\",\n\t\"auth.passwordPlaceholder\": \"Enter your password\",\n\t\"auth.signingIn\": \"Signing in...\",\n\t\"auth.creatingAdmin\": \"Creating admin...\",\n\t\"auth.name\": \"Name\",\n\t\"auth.namePlaceholder\": \"Your name\",\n\t\"auth.confirmPassword\": \"Confirm password\",\n\t\"auth.confirmPasswordPlaceholder\": \"Confirm your password\",\n\t\"auth.acceptInvite\": \"Accept invite\",\n\t\"auth.acceptingInvite\": \"Accepting invite...\",\n\t\"auth.dontHaveAccount\": \"Don't have an account?\",\n\t\"auth.alreadyHaveAccount\": \"Already have an account?\",\n\t\"auth.emailRequired\": \"Email is required\",\n\t\"auth.passwordRequired\": \"Password is required\",\n\t\"auth.passwordMinLength\": \"Password must be at least {{min}} characters\",\n\t\"auth.nameRequired\": \"Name is required\",\n\t\"auth.nameMinLength\": \"Name must be at least {{min}} characters\",\n\t\"auth.invalidEmail\": \"Invalid email address\",\n\t\"auth.passwordMismatch\": \"Passwords do not match\",\n\t\"auth.newPassword\": \"New password\",\n\t\"auth.newPasswordPlaceholder\": \"Enter new password\",\n\t\"auth.sendResetLink\": \"Send reset link\",\n\t\"auth.sendingResetLink\": \"Sending...\",\n\t\"auth.resetLinkSent\": \"Password reset link sent to your email\",\n\t\"auth.resettingPassword\": \"Resetting password...\",\n\t\"auth.createFirstAdmin\": \"Create first admin\",\n\t\"auth.setupTitle\": \"Setup\",\n\t\"auth.setupDescription\": \"Create your first admin account to get started.\",\n\t\"auth.profile\": \"Profile\",\n\t\"auth.myAccount\": \"My account\",\n\t\"auth.logoutFailed\": \"Failed to log out. Please try again.\",\n\n\t// Errors\n\t\"error.notFound\": \"Not found\",\n\t\"error.serverError\": \"Server error\",\n\t\"error.networkError\": \"Network error. Please check your connection.\",\n\t\"error.unauthorized\": \"You are not authorized to perform this action\",\n\t\"error.forbidden\": \"Access denied\",\n\t\"error.validation\": \"Validation failed\",\n\t\"error.unknown\": \"An unknown error occurred\",\n\t\"error.timeout\": \"Request timed out. Please try again.\",\n\t\"error.conflict\": \"A conflict occurred. Please refresh and try again.\",\n\n\t// Table\n\t\"table.rowsPerPage\": \"Rows per page\",\n\t\"table.of\": \"of\",\n\t\"table.noResults\": \"No results\",\n\t\"table.selectAll\": \"Select all\",\n\t\"table.selectRow\": \"Select row\",\n\t\"table.showing\": \"Showing {{from}} to {{to}} of {{total}}\",\n\t\"table.page\": \"Page {{page}}\",\n\t\"table.firstPage\": \"First page\",\n\t\"table.lastPage\": \"Last page\",\n\t\"table.nextPage\": \"Next page\",\n\t\"table.previousPage\": \"Previous page\",\n\t\"table.sortAsc\": \"Sort ascending\",\n\t\"table.sortDesc\": \"Sort descending\",\n\t\"table.columns\": \"Columns\",\n\t\"table.hideColumn\": \"Hide column\",\n\t\"table.showColumn\": \"Show column\",\n\n\t// Upload\n\t\"upload.dropzone\": \"Drop files here or click to upload\",\n\t\"upload.browse\": \"Browse files\",\n\t\"upload.uploading\": \"Uploading...\",\n\t\"upload.complete\": \"Upload complete\",\n\t\"upload.error\": \"Upload failed\",\n\t\"upload.maxSize\": \"File must be smaller than {{size}}\",\n\t\"upload.invalidType\": \"Invalid file type. Allowed: {{types}}\",\n\t\"upload.remove\": \"Remove file\",\n\t\"upload.replace\": \"Replace file\",\n\t\"upload.preview\": \"Preview\",\n\t\"upload.noFile\": \"No file selected\",\n\t\"upload.dragDrop\": \"Drag and drop files here\",\n\t\"upload.bulkTitle\": \"Upload Files\",\n\t\"upload.bulkDescription\": \"Add multiple files to your media library\",\n\t\"upload.bulkHint\": \"Upload multiple files at once\",\n\t\"upload.bulkSuccess\": {\n\t\tone: \"{{count}} file uploaded successfully\",\n\t\tother: \"{{count}} files uploaded successfully\",\n\t},\n\t\"upload.bulkError\": {\n\t\tone: \"{{count}} file failed to upload\",\n\t\tother: \"{{count}} files failed to upload\",\n\t},\n\t\"upload.waitForComplete\": \"Please wait for uploads to complete\",\n\t\"upload.filesCount\": { one: \"{{count}} file\", other: \"{{count}} files\" },\n\t\"upload.uploadedCount\": {\n\t\tone: \"{{count}} uploaded\",\n\t\tother: \"{{count}} uploaded\",\n\t},\n\t\"upload.failedCount\": { one: \"{{count}} failed\", other: \"{{count}} failed\" },\n\t\"upload.browseLibrary\": \"Browse Library\",\n\n\t// Editor\n\t\"editor.bold\": \"Bold\",\n\t\"editor.italic\": \"Italic\",\n\t\"editor.underline\": \"Underline\",\n\t\"editor.strikethrough\": \"Strikethrough\",\n\t\"editor.heading\": \"Heading {{level}}\",\n\t\"editor.link\": \"Insert link\",\n\t\"editor.image\": \"Insert image\",\n\t\"editor.list\": \"List\",\n\t\"editor.orderedList\": \"Numbered list\",\n\t\"editor.unorderedList\": \"Bullet list\",\n\t\"editor.quote\": \"Quote\",\n\t\"editor.code\": \"Code\",\n\t\"editor.codeBlock\": \"Code block\",\n\t\"editor.table\": \"Insert table\",\n\t\"editor.undo\": \"Undo\",\n\t\"editor.redo\": \"Redo\",\n\t\"editor.alignLeft\": \"Align left\",\n\t\"editor.alignCenter\": \"Align center\",\n\t\"editor.alignRight\": \"Align right\",\n\t\"editor.alignJustify\": \"Justify\",\n\t\"editor.horizontalRule\": \"Horizontal rule\",\n\t\"editor.addRowBefore\": \"Add row before\",\n\t\"editor.addRowAfter\": \"Add row after\",\n\t\"editor.addColumnBefore\": \"Add column before\",\n\t\"editor.addColumnAfter\": \"Add column after\",\n\t\"editor.deleteRow\": \"Delete row\",\n\t\"editor.deleteColumn\": \"Delete column\",\n\t\"editor.deleteTable\": \"Delete table\",\n\t\"editor.toggleHeaderRow\": \"Toggle header row\",\n\t\"editor.toggleHeaderColumn\": \"Toggle header column\",\n\t\"editor.mergeCells\": \"Merge cells\",\n\t\"editor.splitCell\": \"Split cell\",\n\t\"editor.insertUrl\": \"Insert URL\",\n\t\"editor.altText\": \"Alt text (optional)\",\n\t\"editor.uploadFile\": \"Upload file\",\n\t\"editor.chooseFile\": \"Choose file\",\n\t\"editor.uploading\": \"Uploading...\",\n\t\"editor.browseLibrary\": \"Browse library\",\n\n\t// Toasts\n\t\"toast.success\": \"Success\",\n\t\"toast.error\": \"Error\",\n\t\"toast.warning\": \"Warning\",\n\t\"toast.info\": \"Info\",\n\t\"toast.saving\": \"Saving...\",\n\t\"toast.saveFailed\": \"Failed to save changes\",\n\t\"toast.saveSuccess\": \"Changes saved successfully\",\n\t\"toast.creating\": \"Creating...\",\n\t\"toast.createSuccess\": \"Created successfully\",\n\t\"toast.createFailed\": \"Failed to create\",\n\t\"toast.deleting\": \"Deleting...\",\n\t\"toast.deleteFailed\": \"Failed to delete\",\n\t\"toast.deleteSuccess\": \"Deleted successfully\",\n\t\"toast.loadFailed\": \"Failed to load data\",\n\t\"toast.uploadFailed\": \"Failed to upload file\",\n\t\"toast.uploadSuccess\": \"File uploaded successfully\",\n\t\"toast.copySuccess\": \"Copied to clipboard\",\n\t\"toast.copyFailed\": \"Failed to copy to clipboard\",\n\t\"toast.idCopied\": \"ID copied to clipboard\",\n\t\"toast.validationFailed\": \"Validation failed\",\n\t\"toast.validationDescription\": \"Please check the form for errors\",\n\t\"toast.created\": \"{{name}} created\",\n\t\"toast.updated\": \"{{name}} updated\",\n\t\"toast.resourceSaveFailed\": \"Failed to save {{name}}\",\n\t\"toast.editComingSoon\": \"Edit functionality coming soon\",\n\t\"toast.maxFilesWarning\":\n\t\t\"Only {{remaining}} more file(s) can be added (max {{max}})\",\n\t\"toast.settingsSaveFailed\": \"Failed to save settings\",\n\t\"toast.actionSuccess\": \"Action completed successfully\",\n\t\"toast.actionFailed\": \"Action failed\",\n\t\"toast.localeChangedUnsaved\": \"Content language changed\",\n\t\"toast.localeChangedUnsavedDescription\":\n\t\t\"Your unsaved changes were replaced with content from the new language.\",\n\n\t// Confirm\n\t\"confirm.delete\":\n\t\t\"Are you sure you want to delete this? This action cannot be undone.\",\n\t\"confirm.discard\":\n\t\t\"Are you sure you want to discard your changes? This action cannot be undone.\",\n\t\"confirm.unsavedChanges\":\n\t\t\"You have unsaved changes. Are you sure you want to leave?\",\n\t\"confirm.action\": \"Are you sure you want to continue?\",\n\t\"confirm.irreversible\": \"This action cannot be undone.\",\n\t\"confirm.localeChange\": \"Discard unsaved changes?\",\n\t\"confirm.localeChangeDescription\":\n\t\t\"You have unsaved changes. Switching content language will discard your changes and load the content in the new language.\",\n\t\"confirm.localeChangeStay\": \"Stay\",\n\t\"confirm.localeChangeDiscard\": \"Discard & switch\",\n\n\t// Status\n\t\"status.draft\": \"Draft\",\n\t\"status.published\": \"Published\",\n\t\"status.archived\": \"Archived\",\n\t\"status.pending\": \"Pending\",\n\t\"status.active\": \"Active\",\n\t\"status.inactive\": \"Inactive\",\n\n\t// Dates\n\t\"date.today\": \"Today\",\n\t\"date.yesterday\": \"Yesterday\",\n\t\"date.tomorrow\": \"Tomorrow\",\n\t\"date.selectDate\": \"Select date\",\n\t\"date.selectTime\": \"Select time\",\n\t\"date.clear\": \"Clear date\",\n\n\t// Accessibility\n\t\"a11y.openMenu\": \"Open menu\",\n\t\"a11y.closeMenu\": \"Close menu\",\n\t\"a11y.expand\": \"Expand\",\n\t\"a11y.collapse\": \"Collapse\",\n\t\"a11y.loading\": \"Loading\",\n\t\"a11y.required\": \"Required\",\n\t\"a11y.optional\": \"Optional\",\n\t\"a11y.selected\": \"Selected\",\n\t\"a11y.notSelected\": \"Not selected\",\n\n\t// Locale\n\t\"locale.language\": \"Language\",\n\t\"locale.switchLanguage\": \"Switch language\",\n\t\"locale.contentLanguage\": \"Content language\",\n\t\"locale.uiLanguage\": \"Interface language\",\n\n\t// ===========================================\n\t// Default Collections\n\t// ===========================================\n\n\t// Users Collection\n\t\"defaults.users.label\": \"Users\",\n\t\"defaults.users.description\": \"Manage admin users and their roles\",\n\t\"defaults.users.fields.name.label\": \"Name\",\n\t\"defaults.users.fields.name.placeholder\": \"Enter user name\",\n\t\"defaults.users.fields.email.label\": \"Email\",\n\t\"defaults.users.fields.email.description\": \"Email address (read-only)\",\n\t\"defaults.users.fields.role.label\": \"Role\",\n\t\"defaults.users.fields.role.options.admin\": \"Admin\",\n\t\"defaults.users.fields.role.options.user\": \"User\",\n\t\"defaults.users.fields.emailVerified.label\": \"Email Verified\",\n\t\"defaults.users.fields.emailVerified.description\":\n\t\t\"Whether the user has verified their email address\",\n\t\"defaults.users.fields.banned.label\": \"Banned\",\n\t\"defaults.users.fields.banned.description\":\n\t\t\"Prevent user from accessing the system\",\n\t\"defaults.users.fields.banReason.label\": \"Ban Reason\",\n\t\"defaults.users.fields.banReason.placeholder\": \"Enter reason for banning...\",\n\t\"defaults.users.sections.basicInfo\": \"Basic Information\",\n\t\"defaults.users.sections.permissions\": \"Permissions\",\n\t\"defaults.users.sections.accessControl\": \"Access Control\",\n\t\"defaults.users.tabs.profile\": \"Profile\",\n\t\"defaults.users.tabs.security\": \"Security\",\n\t\"defaults.users.actions.createUser.label\": \"Create User\",\n\t\"defaults.users.actions.createUser.title\": \"Create User\",\n\t\"defaults.users.actions.createUser.description\":\n\t\t\"Create a new user account with login credentials.\",\n\t\"defaults.users.actions.createUser.fields.password.label\": \"Password\",\n\t\"defaults.users.actions.createUser.fields.password.placeholder\":\n\t\t\"Enter password\",\n\t\"defaults.users.actions.createUser.submit\": \"Create User\",\n\t\"defaults.users.actions.createUser.success\":\n\t\t\"User {{email}} created successfully. Share the credentials with the user.\",\n\t\"defaults.users.actions.createUser.errorNoAuth\":\n\t\t\"Auth client not configured. Cannot create user.\",\n\t\"defaults.users.actions.resetPassword.label\": \"Reset Password\",\n\t\"defaults.users.actions.resetPassword.title\": \"Reset Password\",\n\t\"defaults.users.actions.resetPassword.description\":\n\t\t\"Set a new password for this user.\",\n\t\"defaults.users.actions.resetPassword.fields.newPassword.label\":\n\t\t\"New Password\",\n\t\"defaults.users.actions.resetPassword.fields.newPassword.placeholder\":\n\t\t\"Enter new password\",\n\t\"defaults.users.actions.resetPassword.fields.confirmPassword.label\":\n\t\t\"Confirm Password\",\n\t\"defaults.users.actions.resetPassword.fields.confirmPassword.placeholder\":\n\t\t\"Confirm new password\",\n\t\"defaults.users.actions.resetPassword.submit\": \"Reset Password\",\n\t\"defaults.users.actions.resetPassword.success\":\n\t\t\"Password reset successfully!\",\n\t\"defaults.users.actions.resetPassword.errorMismatch\":\n\t\t\"Passwords do not match\",\n\t\"defaults.users.actions.delete.label\": \"Delete User\",\n\n\t// Assets Collection\n\t\"defaults.assets.label\": \"Media\",\n\t\"defaults.assets.description\": \"Manage uploaded files and images\",\n\t\"defaults.assets.fields.preview.label\": \"Preview\",\n\t\"defaults.assets.fields.filename.label\": \"Filename\",\n\t\"defaults.assets.fields.filename.description\":\n\t\t\"Original filename of the uploaded file\",\n\t\"defaults.assets.fields.mimeType.label\": \"Type\",\n\t\"defaults.assets.fields.mimeType.description\": \"MIME type of the file\",\n\t\"defaults.assets.fields.size.label\": \"Size (bytes)\",\n\t\"defaults.assets.fields.size.description\": \"File size in bytes\",\n\t\"defaults.assets.fields.alt.label\": \"Alt Text\",\n\t\"defaults.assets.fields.alt.placeholder\":\n\t\t\"Describe the image for accessibility\",\n\t\"defaults.assets.fields.alt.description\":\n\t\t\"Alternative text for screen readers\",\n\t\"defaults.assets.fields.caption.label\": \"Caption\",\n\t\"defaults.assets.fields.caption.placeholder\": \"Add a caption...\",\n\t\"defaults.assets.fields.visibility.label\": \"Visibility\",\n\t\"defaults.assets.fields.visibility.options.public\": \"Public\",\n\t\"defaults.assets.fields.visibility.options.private\": \"Private\",\n\t\"defaults.assets.fields.visibility.description\":\n\t\t\"Public files are accessible without authentication. Private files require a signed URL.\",\n\t\"defaults.assets.sections.fileInfo\": \"File Information\",\n\t\"defaults.assets.sections.dimensions\": \"Dimensions\",\n\t\"defaults.assets.sections.metadata\": \"Metadata\",\n\t\"defaults.assets.sections.metadata.description\":\n\t\t\"Add descriptive information for accessibility and SEO\",\n\t\"defaults.assets.actions.upload.label\": \"Upload Files\",\n\n\t// Default Sidebar\n\t\"defaults.sidebar.administration\": \"Administration\",\n\n\t// View Options (Filter Builder)\n\t\"viewOptions.title\": \"View Options\",\n\t\"viewOptions.columns\": \"Columns\",\n\t\"viewOptions.filters\": \"Filters\",\n\t\"viewOptions.savedViews\": \"Saved Views\",\n\t\"viewOptions.apply\": \"Apply\",\n\t\"viewOptions.reset\": \"Reset\",\n\n\t// Saved Views Tab\n\t\"viewOptions.saveCurrentConfig\": \"Save Current Configuration\",\n\t\"viewOptions.viewNamePlaceholder\": \"View Name...\",\n\t\"viewOptions.saveDescription\":\n\t\t\"Saves current columns, filters, and sort order.\",\n\t\"viewOptions.noChangesToSave\": \"No filters or column changes to save.\",\n\t\"viewOptions.noSavedViews\": \"No saved views yet.\",\n\t\"viewOptions.filtersCount\": {\n\t\tone: \"{{count}} filter\",\n\t\tother: \"{{count}} filters\",\n\t},\n\t\"viewOptions.columnsCount\": { one: \"{{count}} col\", other: \"{{count}} cols\" },\n\t\"viewOptions.defaultView\": \"Default\",\n\n\t// Columns Tab\n\t\"viewOptions.columnsDragHint\":\n\t\t\"Drag to reorder, toggle to show/hide columns.\",\n\t\"viewOptions.noFieldsAvailable\": \"No fields available.\",\n\n\t// Filters Tab\n\t\"viewOptions.filtersDescription\":\n\t\t\"Narrow down your results with custom rules.\",\n\t\"viewOptions.filterNumber\": \"Filter #{{number}}\",\n\t\"viewOptions.selectField\": \"Select field\",\n\t\"viewOptions.selectOperator\": \"Select operator\",\n\t\"viewOptions.valuePlaceholder\": \"Value...\",\n\t\"viewOptions.noActiveFilters\": \"No active filters.\",\n\t\"viewOptions.addFilter\": \"Add Filter\",\n\t\"viewOptions.clearAll\": \"Clear All\",\n\t\"viewOptions.activeFilters\": {\n\t\tone: \"{{count}} filter active\",\n\t\tother: \"{{count}} filters active\",\n\t},\n\t\"viewOptions.clearFilters\": \"Clear filters\",\n\n\t// Filter Operators\n\t\"filter.contains\": \"Contains\",\n\t\"filter.notContains\": \"Does not contain\",\n\t\"filter.equals\": \"Equals\",\n\t\"filter.notEquals\": \"Does not equal\",\n\t\"filter.startsWith\": \"Starts with\",\n\t\"filter.endsWith\": \"Ends with\",\n\t\"filter.greaterThan\": \"Greater than\",\n\t\"filter.greaterThanOrEqual\": \"Greater than or equal\",\n\t\"filter.lessThan\": \"Less than\",\n\t\"filter.lessThanOrEqual\": \"Less than or equal\",\n\t\"filter.in\": \"Is any of\",\n\t\"filter.notIn\": \"Is none of\",\n\t\"filter.some\": \"Has any\",\n\t\"filter.every\": \"Has all\",\n\t\"filter.none\": \"Has none\",\n\t\"filter.isEmpty\": \"Is empty\",\n\t\"filter.isNotEmpty\": \"Is not empty\",\n\n\t// Preview\n\t\"preview.show\": \"Preview\",\n\t\"preview.hide\": \"Hide Preview\",\n\t\"preview.title\": \"Preview\",\n\t\"preview.livePreview\": \"Live Preview\",\n\t\"preview.fullscreen\": \"Fullscreen\",\n\t\"preview.close\": \"Close preview\",\n\t\"preview.loading\": \"Loading preview...\",\n\n\t// Autosave\n\t\"autosave.saving\": \"Saving...\",\n\t\"autosave.saved\": \"Saved\",\n\t\"autosave.unsavedChanges\": \"Unsaved changes\",\n\t\"autosave.justNow\": \"just now\",\n\t\"autosave.secondsAgo\": { one: \"{{count}}s ago\", other: \"{{count}}s ago\" },\n\t\"autosave.minutesAgo\": { one: \"{{count}}m ago\", other: \"{{count}}m ago\" },\n\t\"autosave.hoursAgo\": { one: \"{{count}}h ago\", other: \"{{count}}h ago\" },\n\n\t// Global Search\n\t\"globalSearch.placeholder\":\n\t\t\"Search collections, globals, actions, records...\",\n\t\"globalSearch.collections\": \"Collections\",\n\t\"globalSearch.globals\": \"Globals\",\n\t\"globalSearch.quickActions\": \"Quick Actions\",\n\t\"globalSearch.records\": \"Records\",\n\t\"globalSearch.createNew\": \"Create new {{name}}\",\n\t\"globalSearch.noResults\": \"No results found\",\n\t\"globalSearch.searching\": \"Searching...\",\n\t\"globalSearch.navigate\": \"to navigate\",\n\t\"globalSearch.select\": \"to select\",\n\n\t// Collection Search\n\t\"collectionSearch.placeholder\": \"Search records...\",\n\t\"collectionSearch.noResults\": \"No matching records found\",\n\t\"collectionSearch.searching\": \"Searching...\",\n\n\t// Document Locking\n\t\"lock.blockedTitle\": \"{{name}} is currently editing\",\n\t\"lock.blockedDescription\":\n\t\t\"This document is locked. You can view it but cannot make changes until the lock expires.\",\n\t\"lock.openElsewhere\":\n\t\t\"You have this document open in another tab. Changes will sync automatically.\",\n\t\"lock.cannotSave\": \"Cannot save - document is locked by another user\",\n} as const;\n"],"mappings":"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"}