@questpie/admin 1.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/README.md +245 -474
  2. package/dist/_virtual/rolldown_runtime.mjs +18 -0
  3. package/dist/augmentation.d.mts +315 -0
  4. package/dist/augmentation.d.mts.map +1 -0
  5. package/dist/client/blocks/block-registry.d.mts +199 -0
  6. package/dist/client/blocks/block-registry.d.mts.map +1 -0
  7. package/dist/client/blocks/block-registry.mjs +88 -0
  8. package/dist/client/blocks/block-registry.mjs.map +1 -0
  9. package/dist/client/blocks/block-renderer.d.mts +52 -0
  10. package/dist/client/blocks/block-renderer.d.mts.map +1 -0
  11. package/dist/client/blocks/block-renderer.mjs +71 -0
  12. package/dist/client/blocks/block-renderer.mjs.map +1 -0
  13. package/dist/client/blocks/index.d.mts +4 -0
  14. package/dist/client/blocks/prefetch.d.mts +45 -0
  15. package/dist/client/blocks/prefetch.d.mts.map +1 -0
  16. package/dist/client/blocks/prefetch.mjs +26 -0
  17. package/dist/client/blocks/prefetch.mjs.map +1 -0
  18. package/dist/client/blocks/types.d.mts +69 -0
  19. package/dist/client/blocks/types.d.mts.map +1 -0
  20. package/dist/client/blocks/types.mjs +20 -0
  21. package/dist/client/blocks/types.mjs.map +1 -0
  22. package/dist/client/builder/admin-builder.d.mts +112 -0
  23. package/dist/client/builder/admin-builder.d.mts.map +1 -0
  24. package/dist/client/builder/admin-builder.mjs +185 -0
  25. package/dist/client/builder/admin-builder.mjs.map +1 -0
  26. package/dist/client/builder/admin-types.d.mts +73 -0
  27. package/dist/client/builder/admin-types.d.mts.map +1 -0
  28. package/dist/client/builder/admin.d.mts +121 -0
  29. package/dist/client/builder/admin.d.mts.map +1 -0
  30. package/dist/client/builder/admin.mjs +160 -0
  31. package/dist/client/builder/admin.mjs.map +1 -0
  32. package/dist/client/builder/defaults/components.mjs +20 -0
  33. package/dist/client/builder/defaults/components.mjs.map +1 -0
  34. package/dist/client/builder/defaults/core.d.mts +354 -0
  35. package/dist/client/builder/defaults/core.d.mts.map +1 -0
  36. package/dist/client/builder/defaults/core.mjs +49 -0
  37. package/dist/client/builder/defaults/core.mjs.map +1 -0
  38. package/dist/client/builder/defaults/fields.mjs +328 -0
  39. package/dist/client/builder/defaults/fields.mjs.map +1 -0
  40. package/dist/client/builder/defaults/pages.mjs +58 -0
  41. package/dist/client/builder/defaults/pages.mjs.map +1 -0
  42. package/dist/client/builder/defaults/starter.d.mts +351 -0
  43. package/dist/client/builder/defaults/starter.d.mts.map +1 -0
  44. package/dist/client/builder/defaults/starter.mjs +28 -0
  45. package/dist/client/builder/defaults/starter.mjs.map +1 -0
  46. package/dist/client/builder/defaults/views.mjs +27 -0
  47. package/dist/client/builder/defaults/views.mjs.map +1 -0
  48. package/dist/client/builder/defaults/widgets.mjs +31 -0
  49. package/dist/client/builder/defaults/widgets.mjs.map +1 -0
  50. package/dist/client/builder/field/field.d.mts +229 -0
  51. package/dist/client/builder/field/field.d.mts.map +1 -0
  52. package/dist/client/builder/field/field.mjs +83 -0
  53. package/dist/client/builder/field/field.mjs.map +1 -0
  54. package/dist/client/builder/index.d.mts +36 -0
  55. package/dist/client/builder/index.d.mts.map +1 -0
  56. package/dist/client/builder/page/page.d.mts +36 -0
  57. package/dist/client/builder/page/page.d.mts.map +1 -0
  58. package/dist/client/builder/page/page.mjs +27 -0
  59. package/dist/client/builder/page/page.mjs.map +1 -0
  60. package/dist/client/builder/proxies.d.mts +2 -0
  61. package/dist/client/builder/proxies.mjs +24 -0
  62. package/dist/client/builder/proxies.mjs.map +1 -0
  63. package/dist/client/builder/qa.d.mts +50 -0
  64. package/dist/client/builder/qa.d.mts.map +1 -0
  65. package/dist/client/builder/qa.mjs +42 -0
  66. package/dist/client/builder/qa.mjs.map +1 -0
  67. package/dist/client/builder/registry.d.mts +70 -0
  68. package/dist/client/builder/registry.d.mts.map +1 -0
  69. package/dist/client/builder/types/action-registry.d.mts +2 -0
  70. package/dist/client/builder/types/action-registry.mjs +142 -0
  71. package/dist/client/builder/types/action-registry.mjs.map +1 -0
  72. package/dist/client/builder/types/action-types.d.mts +253 -0
  73. package/dist/client/builder/types/action-types.d.mts.map +1 -0
  74. package/dist/client/builder/types/collection-types.d.mts +199 -0
  75. package/dist/client/builder/types/collection-types.d.mts.map +1 -0
  76. package/dist/client/builder/types/collection-types.mjs +11 -0
  77. package/dist/client/builder/types/collection-types.mjs.map +1 -0
  78. package/dist/client/builder/types/common.d.mts +60 -0
  79. package/dist/client/builder/types/common.d.mts.map +1 -0
  80. package/dist/client/builder/types/field-types.d.mts +593 -0
  81. package/dist/client/builder/types/field-types.d.mts.map +1 -0
  82. package/dist/client/builder/types/field-types.mjs +19 -0
  83. package/dist/client/builder/types/field-types.mjs.map +1 -0
  84. package/dist/client/builder/types/global-types.d.mts +22 -0
  85. package/dist/client/builder/types/global-types.d.mts.map +1 -0
  86. package/dist/client/builder/types/ui-config.d.mts +160 -0
  87. package/dist/client/builder/types/ui-config.d.mts.map +1 -0
  88. package/dist/client/builder/types/views.d.mts +89 -0
  89. package/dist/client/builder/types/views.d.mts.map +1 -0
  90. package/dist/client/builder/types/widget-types.d.mts +563 -0
  91. package/dist/client/builder/types/widget-types.d.mts.map +1 -0
  92. package/dist/client/builder/validation.d.mts +3 -0
  93. package/dist/client/builder/validation.mjs +208 -0
  94. package/dist/client/builder/validation.mjs.map +1 -0
  95. package/dist/client/builder/view/view.d.mts +129 -0
  96. package/dist/client/builder/view/view.d.mts.map +1 -0
  97. package/dist/client/builder/view/view.mjs +109 -0
  98. package/dist/client/builder/view/view.mjs.map +1 -0
  99. package/dist/client/builder/widget/widget.d.mts +33 -0
  100. package/dist/client/builder/widget/widget.d.mts.map +1 -0
  101. package/dist/client/builder/widget/widget.mjs +26 -0
  102. package/dist/client/builder/widget/widget.mjs.map +1 -0
  103. package/dist/client/components/actions/action-button.d.mts +2 -0
  104. package/dist/client/components/actions/action-button.mjs +135 -0
  105. package/dist/client/components/actions/action-button.mjs.map +1 -0
  106. package/dist/client/components/actions/action-dialog.d.mts +2 -0
  107. package/dist/client/components/actions/action-dialog.mjs +264 -0
  108. package/dist/client/components/actions/action-dialog.mjs.map +1 -0
  109. package/dist/client/components/actions/confirmation-dialog.d.mts +2 -0
  110. package/dist/client/components/actions/confirmation-dialog.mjs +82 -0
  111. package/dist/client/components/actions/confirmation-dialog.mjs.map +1 -0
  112. package/dist/client/components/actions/header-actions.d.mts +2 -0
  113. package/dist/client/components/actions/header-actions.mjs +117 -0
  114. package/dist/client/components/actions/header-actions.mjs.map +1 -0
  115. package/dist/client/components/actions/index.d.mts +4 -0
  116. package/dist/client/components/admin-link.d.mts +67 -0
  117. package/dist/client/components/admin-link.d.mts.map +1 -0
  118. package/dist/client/components/admin-link.mjs +92 -0
  119. package/dist/client/components/admin-link.mjs.map +1 -0
  120. package/dist/client/components/auth/auth-guard.d.mts +51 -0
  121. package/dist/client/components/auth/auth-guard.d.mts.map +1 -0
  122. package/dist/client/components/auth/auth-guard.mjs +60 -0
  123. package/dist/client/components/auth/auth-guard.mjs.map +1 -0
  124. package/dist/client/components/auth/auth-loading.d.mts +36 -0
  125. package/dist/client/components/auth/auth-loading.d.mts.map +1 -0
  126. package/dist/client/components/auth/auth-loading.mjs +27 -0
  127. package/dist/client/components/auth/auth-loading.mjs.map +1 -0
  128. package/dist/client/components/auth/index.d.mts +2 -0
  129. package/dist/client/components/blocks/block-canvas.mjs +90 -0
  130. package/dist/client/components/blocks/block-canvas.mjs.map +1 -0
  131. package/dist/client/components/blocks/block-editor-context.mjs +58 -0
  132. package/dist/client/components/blocks/block-editor-context.mjs.map +1 -0
  133. package/dist/client/components/blocks/block-editor-layout.mjs +82 -0
  134. package/dist/client/components/blocks/block-editor-layout.mjs.map +1 -0
  135. package/dist/client/components/blocks/block-editor-provider.mjs +155 -0
  136. package/dist/client/components/blocks/block-editor-provider.mjs.map +1 -0
  137. package/dist/client/components/blocks/block-fields-renderer.mjs +70 -0
  138. package/dist/client/components/blocks/block-fields-renderer.mjs.map +1 -0
  139. package/dist/client/components/blocks/block-insert-button.mjs +72 -0
  140. package/dist/client/components/blocks/block-insert-button.mjs.map +1 -0
  141. package/dist/client/components/blocks/block-item-menu.mjs +161 -0
  142. package/dist/client/components/blocks/block-item-menu.mjs.map +1 -0
  143. package/dist/client/components/blocks/block-item.mjs +187 -0
  144. package/dist/client/components/blocks/block-item.mjs.map +1 -0
  145. package/dist/client/components/blocks/block-library-sidebar.mjs +190 -0
  146. package/dist/client/components/blocks/block-library-sidebar.mjs.map +1 -0
  147. package/dist/client/components/blocks/block-tree.mjs +45 -0
  148. package/dist/client/components/blocks/block-tree.mjs.map +1 -0
  149. package/dist/client/components/blocks/block-type-icon.mjs +50 -0
  150. package/dist/client/components/blocks/block-type-icon.mjs.map +1 -0
  151. package/dist/client/components/blocks/utils/tree-utils.mjs +186 -0
  152. package/dist/client/components/blocks/utils/tree-utils.mjs.map +1 -0
  153. package/dist/client/components/component-renderer.d.mts +125 -0
  154. package/dist/client/components/component-renderer.d.mts.map +1 -0
  155. package/dist/client/components/component-renderer.mjs +145 -0
  156. package/dist/client/components/component-renderer.mjs.map +1 -0
  157. package/dist/client/components/error-boundary.mjs +92 -0
  158. package/dist/client/components/error-boundary.mjs.map +1 -0
  159. package/dist/client/components/fields/array-field.d.mts +44 -0
  160. package/dist/client/components/fields/array-field.d.mts.map +1 -0
  161. package/dist/client/components/fields/array-field.mjs +231 -0
  162. package/dist/client/components/fields/array-field.mjs.map +1 -0
  163. package/dist/client/components/fields/asset-preview-field.d.mts +52 -0
  164. package/dist/client/components/fields/asset-preview-field.d.mts.map +1 -0
  165. package/dist/client/components/fields/asset-preview-field.mjs +60 -0
  166. package/dist/client/components/fields/asset-preview-field.mjs.map +1 -0
  167. package/dist/client/components/fields/blocks-field/blocks-field.d.mts +41 -0
  168. package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +1 -0
  169. package/dist/client/components/fields/blocks-field/blocks-field.mjs +101 -0
  170. package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +1 -0
  171. package/dist/client/components/fields/blocks-field/index.d.mts +1 -0
  172. package/dist/client/components/fields/boolean-field.d.mts +30 -0
  173. package/dist/client/components/fields/boolean-field.d.mts.map +1 -0
  174. package/dist/client/components/fields/boolean-field.mjs +47 -0
  175. package/dist/client/components/fields/boolean-field.mjs.map +1 -0
  176. package/dist/client/components/fields/custom-field.d.mts +3 -0
  177. package/dist/client/components/fields/date-field.d.mts +22 -0
  178. package/dist/client/components/fields/date-field.d.mts.map +1 -0
  179. package/dist/client/components/fields/date-field.mjs +42 -0
  180. package/dist/client/components/fields/date-field.mjs.map +1 -0
  181. package/dist/client/components/fields/datetime-field.d.mts +23 -0
  182. package/dist/client/components/fields/datetime-field.d.mts.map +1 -0
  183. package/dist/client/components/fields/datetime-field.mjs +43 -0
  184. package/dist/client/components/fields/datetime-field.mjs.map +1 -0
  185. package/dist/client/components/fields/email-field.d.mts +19 -0
  186. package/dist/client/components/fields/email-field.d.mts.map +1 -0
  187. package/dist/client/components/fields/email-field.mjs +38 -0
  188. package/dist/client/components/fields/email-field.mjs.map +1 -0
  189. package/dist/client/components/fields/embedded-collection.d.mts +3 -0
  190. package/dist/client/components/fields/field-types.d.mts +571 -0
  191. package/dist/client/components/fields/field-types.d.mts.map +1 -0
  192. package/dist/client/components/fields/field-utils.d.mts +1 -0
  193. package/dist/client/components/fields/field-utils.mjs +65 -0
  194. package/dist/client/components/fields/field-utils.mjs.map +1 -0
  195. package/dist/client/components/fields/field-wrapper.d.mts +3 -0
  196. package/dist/client/components/fields/field-wrapper.mjs +49 -0
  197. package/dist/client/components/fields/field-wrapper.mjs.map +1 -0
  198. package/dist/client/components/fields/index.d.mts +33 -0
  199. package/dist/client/components/fields/json-field.d.mts +84 -0
  200. package/dist/client/components/fields/json-field.d.mts.map +1 -0
  201. package/dist/client/components/fields/json-field.mjs +248 -0
  202. package/dist/client/components/fields/json-field.mjs.map +1 -0
  203. package/dist/client/components/fields/locale-badge.d.mts +1 -0
  204. package/dist/client/components/fields/locale-badge.mjs +17 -0
  205. package/dist/client/components/fields/locale-badge.mjs.map +1 -0
  206. package/dist/client/components/fields/number-field.d.mts +23 -0
  207. package/dist/client/components/fields/number-field.d.mts.map +1 -0
  208. package/dist/client/components/fields/number-field.mjs +40 -0
  209. package/dist/client/components/fields/number-field.mjs.map +1 -0
  210. package/dist/client/components/fields/object-array-field.d.mts +2 -0
  211. package/dist/client/components/fields/object-array-field.mjs +313 -0
  212. package/dist/client/components/fields/object-array-field.mjs.map +1 -0
  213. package/dist/client/components/fields/object-field.d.mts +32 -0
  214. package/dist/client/components/fields/object-field.d.mts.map +1 -0
  215. package/dist/client/components/fields/object-field.mjs +128 -0
  216. package/dist/client/components/fields/object-field.mjs.map +1 -0
  217. package/dist/client/components/fields/relation/displays/cards-display.d.mts +2 -0
  218. package/dist/client/components/fields/relation/displays/cards-display.mjs +140 -0
  219. package/dist/client/components/fields/relation/displays/cards-display.mjs.map +1 -0
  220. package/dist/client/components/fields/relation/displays/chips-display.d.mts +2 -0
  221. package/dist/client/components/fields/relation/displays/chips-display.mjs +100 -0
  222. package/dist/client/components/fields/relation/displays/chips-display.mjs.map +1 -0
  223. package/dist/client/components/fields/relation/displays/grid-display.d.mts +2 -0
  224. package/dist/client/components/fields/relation/displays/grid-display.mjs +114 -0
  225. package/dist/client/components/fields/relation/displays/grid-display.mjs.map +1 -0
  226. package/dist/client/components/fields/relation/displays/index.d.mts +6 -0
  227. package/dist/client/components/fields/relation/displays/list-display.d.mts +2 -0
  228. package/dist/client/components/fields/relation/displays/list-display.mjs +128 -0
  229. package/dist/client/components/fields/relation/displays/list-display.mjs.map +1 -0
  230. package/dist/client/components/fields/relation/displays/table-display.d.mts +2 -0
  231. package/dist/client/components/fields/relation/displays/table-display.mjs +134 -0
  232. package/dist/client/components/fields/relation/displays/table-display.mjs.map +1 -0
  233. package/dist/client/components/fields/relation/displays/types.d.mts +22 -0
  234. package/dist/client/components/fields/relation/displays/types.d.mts.map +1 -0
  235. package/dist/client/components/fields/relation/displays/types.mjs +73 -0
  236. package/dist/client/components/fields/relation/displays/types.mjs.map +1 -0
  237. package/dist/client/components/fields/relation/index.d.mts +3 -0
  238. package/dist/client/components/fields/relation/relation-items-display.d.mts +5 -0
  239. package/dist/client/components/fields/relation/relation-items-display.mjs +47 -0
  240. package/dist/client/components/fields/relation/relation-items-display.mjs.map +1 -0
  241. package/dist/client/components/fields/relation-field.d.mts +134 -0
  242. package/dist/client/components/fields/relation-field.d.mts.map +1 -0
  243. package/dist/client/components/fields/relation-field.mjs +106 -0
  244. package/dist/client/components/fields/relation-field.mjs.map +1 -0
  245. package/dist/client/components/fields/relation-picker.d.mts +4 -0
  246. package/dist/client/components/fields/relation-picker.mjs +301 -0
  247. package/dist/client/components/fields/relation-picker.mjs.map +1 -0
  248. package/dist/client/components/fields/relation-select.d.mts +3 -0
  249. package/dist/client/components/fields/relation-select.mjs +219 -0
  250. package/dist/client/components/fields/relation-select.mjs.map +1 -0
  251. package/dist/client/components/fields/reverse-relation-field.d.mts +2 -0
  252. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +56 -0
  253. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +1 -0
  254. package/dist/client/components/fields/rich-text-editor/extensions.mjs +118 -0
  255. package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +1 -0
  256. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +196 -0
  257. package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +1 -0
  258. package/dist/client/components/fields/rich-text-editor/index.d.mts +4 -0
  259. package/dist/client/components/fields/rich-text-editor/index.mjs +187 -0
  260. package/dist/client/components/fields/rich-text-editor/index.mjs.map +1 -0
  261. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +86 -0
  262. package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +1 -0
  263. package/dist/client/components/fields/rich-text-editor/presets.d.mts +11 -0
  264. package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +1 -0
  265. package/dist/client/components/fields/rich-text-editor/presets.mjs +124 -0
  266. package/dist/client/components/fields/rich-text-editor/presets.mjs.map +1 -0
  267. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +145 -0
  268. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +1 -0
  269. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +124 -0
  270. package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +1 -0
  271. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +280 -0
  272. package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +1 -0
  273. package/dist/client/components/fields/rich-text-editor/types.d.mts +78 -0
  274. package/dist/client/components/fields/rich-text-editor/types.d.mts.map +1 -0
  275. package/dist/client/components/fields/rich-text-editor/types.mjs +31 -0
  276. package/dist/client/components/fields/rich-text-editor/types.mjs.map +1 -0
  277. package/dist/client/components/fields/rich-text-editor/utils.mjs +51 -0
  278. package/dist/client/components/fields/rich-text-editor/utils.mjs.map +1 -0
  279. package/dist/client/components/fields/rich-text-editor/variants.d.mts +2 -0
  280. package/dist/client/components/fields/rich-text-field.d.mts +14 -0
  281. package/dist/client/components/fields/rich-text-field.d.mts.map +1 -0
  282. package/dist/client/components/fields/rich-text-field.mjs +26 -0
  283. package/dist/client/components/fields/rich-text-field.mjs.map +1 -0
  284. package/dist/client/components/fields/select-field.d.mts +25 -0
  285. package/dist/client/components/fields/select-field.d.mts.map +1 -0
  286. package/dist/client/components/fields/select-field.mjs +53 -0
  287. package/dist/client/components/fields/select-field.mjs.map +1 -0
  288. package/dist/client/components/fields/status-field.d.mts +2 -0
  289. package/dist/client/components/fields/text-field.d.mts +22 -0
  290. package/dist/client/components/fields/text-field.d.mts.map +1 -0
  291. package/dist/client/components/fields/text-field.mjs +39 -0
  292. package/dist/client/components/fields/text-field.mjs.map +1 -0
  293. package/dist/client/components/fields/textarea-field.d.mts +22 -0
  294. package/dist/client/components/fields/textarea-field.d.mts.map +1 -0
  295. package/dist/client/components/fields/textarea-field.mjs +39 -0
  296. package/dist/client/components/fields/textarea-field.mjs.map +1 -0
  297. package/dist/client/components/fields/time-field.d.mts +20 -0
  298. package/dist/client/components/fields/time-field.d.mts.map +1 -0
  299. package/dist/client/components/fields/time-field.mjs +39 -0
  300. package/dist/client/components/fields/time-field.mjs.map +1 -0
  301. package/dist/client/components/fields/upload-field.d.mts +97 -0
  302. package/dist/client/components/fields/upload-field.d.mts.map +1 -0
  303. package/dist/client/components/fields/upload-field.mjs +497 -0
  304. package/dist/client/components/fields/upload-field.mjs.map +1 -0
  305. package/dist/client/components/filter-builder/columns-tab.d.mts +1 -0
  306. package/dist/client/components/filter-builder/columns-tab.mjs +131 -0
  307. package/dist/client/components/filter-builder/columns-tab.mjs.map +1 -0
  308. package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +1 -0
  309. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +157 -0
  310. package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +1 -0
  311. package/dist/client/components/filter-builder/filters-tab.d.mts +1 -0
  312. package/dist/client/components/filter-builder/filters-tab.mjs +380 -0
  313. package/dist/client/components/filter-builder/filters-tab.mjs.map +1 -0
  314. package/dist/client/components/filter-builder/index.d.mts +5 -0
  315. package/dist/client/components/filter-builder/saved-views-tab.d.mts +1 -0
  316. package/dist/client/components/filter-builder/saved-views-tab.mjs +125 -0
  317. package/dist/client/components/filter-builder/saved-views-tab.mjs.map +1 -0
  318. package/dist/client/components/index.d.mts +80 -0
  319. package/dist/client/components/locale-switcher.d.mts +2 -0
  320. package/dist/client/components/locale-switcher.mjs +128 -0
  321. package/dist/client/components/locale-switcher.mjs.map +1 -0
  322. package/dist/client/components/media/media-grid.mjs +139 -0
  323. package/dist/client/components/media/media-grid.mjs.map +1 -0
  324. package/dist/client/components/media/media-picker-dialog.mjs +255 -0
  325. package/dist/client/components/media/media-picker-dialog.mjs.map +1 -0
  326. package/dist/client/components/preview/live-preview-mode.mjs +211 -0
  327. package/dist/client/components/preview/live-preview-mode.mjs.map +1 -0
  328. package/dist/client/components/preview/preview-pane.mjs +179 -0
  329. package/dist/client/components/preview/preview-pane.mjs.map +1 -0
  330. package/dist/client/components/primitives/asset-preview.mjs +363 -0
  331. package/dist/client/components/primitives/asset-preview.mjs.map +1 -0
  332. package/dist/client/components/primitives/checkbox-input.mjs +33 -0
  333. package/dist/client/components/primitives/checkbox-input.mjs.map +1 -0
  334. package/dist/client/components/primitives/date-input.mjs +218 -0
  335. package/dist/client/components/primitives/date-input.mjs.map +1 -0
  336. package/dist/client/components/primitives/dropzone.mjs +239 -0
  337. package/dist/client/components/primitives/dropzone.mjs.map +1 -0
  338. package/dist/client/components/primitives/number-input.mjs +113 -0
  339. package/dist/client/components/primitives/number-input.mjs.map +1 -0
  340. package/dist/client/components/primitives/select-multi.mjs +256 -0
  341. package/dist/client/components/primitives/select-multi.mjs.map +1 -0
  342. package/dist/client/components/primitives/select-single.mjs +183 -0
  343. package/dist/client/components/primitives/select-single.mjs.map +1 -0
  344. package/dist/client/components/primitives/text-input.mjs +40 -0
  345. package/dist/client/components/primitives/text-input.mjs.map +1 -0
  346. package/dist/client/components/primitives/textarea-input.mjs +38 -0
  347. package/dist/client/components/primitives/textarea-input.mjs.map +1 -0
  348. package/dist/client/components/primitives/time-input.mjs +72 -0
  349. package/dist/client/components/primitives/time-input.mjs.map +1 -0
  350. package/dist/client/components/primitives/toggle-input.mjs +31 -0
  351. package/dist/client/components/primitives/toggle-input.mjs.map +1 -0
  352. package/dist/client/components/primitives/types.d.mts +14 -0
  353. package/dist/client/components/primitives/types.d.mts.map +1 -0
  354. package/dist/client/components/primitives/types.mjs +13 -0
  355. package/dist/client/components/primitives/types.mjs.map +1 -0
  356. package/dist/client/components/sheets/index.d.mts +1 -0
  357. package/dist/client/components/sheets/resource-sheet.d.mts +1 -0
  358. package/dist/client/components/sheets/resource-sheet.mjs +78 -0
  359. package/dist/client/components/sheets/resource-sheet.mjs.map +1 -0
  360. package/dist/client/components/ui/accordion.d.mts +2 -0
  361. package/dist/client/components/ui/accordion.mjs +50 -0
  362. package/dist/client/components/ui/accordion.mjs.map +1 -0
  363. package/dist/client/components/ui/alert.mjs +32 -0
  364. package/dist/client/components/ui/alert.mjs.map +1 -0
  365. package/dist/client/components/ui/avatar.d.mts +3 -0
  366. package/dist/client/components/ui/badge.d.mts +3 -0
  367. package/dist/client/components/ui/badge.mjs +35 -0
  368. package/dist/client/components/ui/badge.mjs.map +1 -0
  369. package/dist/client/components/ui/button.d.mts +3 -0
  370. package/dist/client/components/ui/button.mjs +49 -0
  371. package/dist/client/components/ui/button.mjs.map +1 -0
  372. package/dist/client/components/ui/card.d.mts +2 -0
  373. package/dist/{card-BKHjBQfw.mjs → client/components/ui/card.mjs} +3 -10
  374. package/dist/{card-BKHjBQfw.mjs.map → client/components/ui/card.mjs.map} +1 -1
  375. package/dist/client/components/ui/checkbox.d.mts +2 -0
  376. package/dist/client/components/ui/checkbox.mjs +27 -0
  377. package/dist/client/components/ui/checkbox.mjs.map +1 -0
  378. package/dist/client/components/ui/combobox.d.mts +3 -0
  379. package/dist/client/components/ui/command.mjs +69 -0
  380. package/dist/client/components/ui/command.mjs.map +1 -0
  381. package/dist/client/components/ui/dialog.d.mts +3 -0
  382. package/dist/client/components/ui/dialog.mjs +83 -0
  383. package/dist/client/components/ui/dialog.mjs.map +1 -0
  384. package/dist/client/components/ui/drawer.mjs +75 -0
  385. package/dist/client/components/ui/drawer.mjs.map +1 -0
  386. package/dist/client/components/ui/dropdown-menu.d.mts +3 -0
  387. package/dist/client/components/ui/dropdown-menu.mjs +89 -0
  388. package/dist/client/components/ui/dropdown-menu.mjs.map +1 -0
  389. package/dist/client/components/ui/empty-state.mjs +53 -0
  390. package/dist/client/components/ui/empty-state.mjs.map +1 -0
  391. package/dist/client/components/ui/field.d.mts +3 -0
  392. package/dist/client/components/ui/field.mjs +78 -0
  393. package/dist/client/components/ui/field.mjs.map +1 -0
  394. package/dist/client/components/ui/input-group.d.mts +4 -0
  395. package/dist/client/components/ui/input-group.mjs +68 -0
  396. package/dist/client/components/ui/input-group.mjs.map +1 -0
  397. package/dist/client/components/ui/input.d.mts +2 -0
  398. package/dist/client/components/ui/input.mjs +17 -0
  399. package/dist/client/components/ui/input.mjs.map +1 -0
  400. package/dist/client/components/ui/kbd.mjs +24 -0
  401. package/dist/client/components/ui/kbd.mjs.map +1 -0
  402. package/dist/client/components/ui/label.d.mts +2 -0
  403. package/dist/client/components/ui/label.mjs +15 -0
  404. package/dist/client/components/ui/label.mjs.map +1 -0
  405. package/dist/client/components/ui/popover.d.mts +3 -0
  406. package/dist/client/components/ui/popover.mjs +49 -0
  407. package/dist/client/components/ui/popover.mjs.map +1 -0
  408. package/dist/client/components/ui/responsive-dialog.mjs +102 -0
  409. package/dist/client/components/ui/responsive-dialog.mjs.map +1 -0
  410. package/dist/client/components/ui/scroll-area.d.mts +2 -0
  411. package/dist/client/components/ui/search-input.mjs +74 -0
  412. package/dist/client/components/ui/search-input.mjs.map +1 -0
  413. package/dist/client/components/ui/select.d.mts +3 -0
  414. package/dist/client/components/ui/select.mjs +85 -0
  415. package/dist/client/components/ui/select.mjs.map +1 -0
  416. package/dist/client/components/ui/separator.d.mts +2 -0
  417. package/dist/client/components/ui/separator.mjs +17 -0
  418. package/dist/client/components/ui/separator.mjs.map +1 -0
  419. package/dist/client/components/ui/sheet.d.mts +3 -0
  420. package/dist/client/components/ui/sheet.mjs +78 -0
  421. package/dist/client/components/ui/sheet.mjs.map +1 -0
  422. package/dist/client/components/ui/sidebar.d.mts +8 -0
  423. package/dist/client/components/ui/sidebar.mjs +256 -0
  424. package/dist/client/components/ui/sidebar.mjs.map +1 -0
  425. package/dist/client/components/ui/skeleton.d.mts +1 -0
  426. package/dist/client/components/ui/skeleton.mjs +15 -0
  427. package/dist/client/components/ui/skeleton.mjs.map +1 -0
  428. package/dist/client/components/ui/sonner.d.mts +14 -0
  429. package/dist/client/components/ui/sonner.d.mts.map +1 -0
  430. package/dist/client/components/ui/sonner.mjs +55 -0
  431. package/dist/client/components/ui/sonner.mjs.map +1 -0
  432. package/dist/client/components/ui/spinner.d.mts +1 -0
  433. package/dist/client/components/ui/spinner.mjs +18 -0
  434. package/dist/client/components/ui/spinner.mjs.map +1 -0
  435. package/dist/client/components/ui/switch.d.mts +2 -0
  436. package/dist/client/components/ui/switch.mjs +23 -0
  437. package/dist/client/components/ui/switch.mjs.map +1 -0
  438. package/dist/client/components/ui/table.d.mts +2 -0
  439. package/dist/client/components/ui/table.mjs +66 -0
  440. package/dist/client/components/ui/table.mjs.map +1 -0
  441. package/dist/client/components/ui/tabs.d.mts +3 -0
  442. package/dist/client/components/ui/tabs.mjs +49 -0
  443. package/dist/client/components/ui/tabs.mjs.map +1 -0
  444. package/dist/client/components/ui/textarea.d.mts +2 -0
  445. package/dist/client/components/ui/textarea.mjs +15 -0
  446. package/dist/client/components/ui/textarea.mjs.map +1 -0
  447. package/dist/client/components/ui/toolbar.mjs +54 -0
  448. package/dist/client/components/ui/toolbar.mjs.map +1 -0
  449. package/dist/client/components/ui/tooltip.d.mts +2 -0
  450. package/dist/client/components/ui/tooltip.mjs +45 -0
  451. package/dist/client/components/ui/tooltip.mjs.map +1 -0
  452. package/dist/client/components/widgets/chart-widget.d.mts +57 -0
  453. package/dist/client/components/widgets/chart-widget.d.mts.map +1 -0
  454. package/dist/client/components/widgets/chart-widget.mjs +282 -0
  455. package/dist/client/components/widgets/chart-widget.mjs.map +1 -0
  456. package/dist/client/components/widgets/progress-widget.d.mts +41 -0
  457. package/dist/client/components/widgets/progress-widget.d.mts.map +1 -0
  458. package/dist/client/components/widgets/progress-widget.mjs +110 -0
  459. package/dist/client/components/widgets/progress-widget.mjs.map +1 -0
  460. package/dist/client/components/widgets/quick-actions-widget.d.mts +29 -0
  461. package/dist/client/components/widgets/quick-actions-widget.d.mts.map +1 -0
  462. package/dist/client/components/widgets/quick-actions-widget.mjs +121 -0
  463. package/dist/client/components/widgets/quick-actions-widget.mjs.map +1 -0
  464. package/dist/client/components/widgets/recent-items-widget.d.mts +51 -0
  465. package/dist/client/components/widgets/recent-items-widget.d.mts.map +1 -0
  466. package/dist/client/components/widgets/recent-items-widget.mjs +101 -0
  467. package/dist/client/components/widgets/recent-items-widget.mjs.map +1 -0
  468. package/dist/client/components/widgets/stats-widget.d.mts +55 -0
  469. package/dist/client/components/widgets/stats-widget.d.mts.map +1 -0
  470. package/dist/client/components/widgets/stats-widget.mjs +150 -0
  471. package/dist/client/components/widgets/stats-widget.mjs.map +1 -0
  472. package/dist/client/components/widgets/table-widget.d.mts +31 -0
  473. package/dist/client/components/widgets/table-widget.d.mts.map +1 -0
  474. package/dist/client/components/widgets/table-widget.mjs +139 -0
  475. package/dist/client/components/widgets/table-widget.mjs.map +1 -0
  476. package/dist/client/components/widgets/timeline-widget.d.mts +51 -0
  477. package/dist/client/components/widgets/timeline-widget.d.mts.map +1 -0
  478. package/dist/client/components/widgets/timeline-widget.mjs +168 -0
  479. package/dist/client/components/widgets/timeline-widget.mjs.map +1 -0
  480. package/dist/client/components/widgets/value-widget.d.mts +39 -0
  481. package/dist/client/components/widgets/value-widget.d.mts.map +1 -0
  482. package/dist/client/components/widgets/value-widget.mjs +111 -0
  483. package/dist/client/components/widgets/value-widget.mjs.map +1 -0
  484. package/dist/client/components/widgets/widget-skeletons.mjs +145 -0
  485. package/dist/client/components/widgets/widget-skeletons.mjs.map +1 -0
  486. package/dist/client/context/focus-context.d.mts +88 -0
  487. package/dist/client/context/focus-context.d.mts.map +1 -0
  488. package/dist/client/context/focus-context.mjs +178 -0
  489. package/dist/client/context/focus-context.mjs.map +1 -0
  490. package/dist/client/contexts/breadcrumb-context.mjs +32 -0
  491. package/dist/client/contexts/breadcrumb-context.mjs.map +1 -0
  492. package/dist/client/hooks/typed-hooks.d.mts +84 -0
  493. package/dist/client/hooks/typed-hooks.d.mts.map +1 -0
  494. package/dist/client/hooks/typed-hooks.mjs +272 -0
  495. package/dist/client/hooks/typed-hooks.mjs.map +1 -0
  496. package/dist/client/hooks/use-action.mjs +201 -0
  497. package/dist/client/hooks/use-action.mjs.map +1 -0
  498. package/dist/client/hooks/use-admin-config.mjs +40 -0
  499. package/dist/client/hooks/use-admin-config.mjs.map +1 -0
  500. package/dist/client/hooks/use-admin-preferences.mjs +68 -0
  501. package/dist/client/hooks/use-admin-preferences.mjs.map +1 -0
  502. package/dist/client/hooks/use-admin-routes.mjs +97 -0
  503. package/dist/client/hooks/use-admin-routes.mjs.map +1 -0
  504. package/dist/client/hooks/use-auth.d.mts +98 -0
  505. package/dist/client/hooks/use-auth.d.mts.map +1 -0
  506. package/dist/{use-auth-BoLmWtmU.mjs → client/hooks/use-auth.mjs} +3 -3
  507. package/dist/client/hooks/use-auth.mjs.map +1 -0
  508. package/dist/client/hooks/use-collection-fields.mjs +32 -0
  509. package/dist/client/hooks/use-collection-fields.mjs.map +1 -0
  510. package/dist/client/hooks/use-collection-meta.mjs +121 -0
  511. package/dist/client/hooks/use-collection-meta.mjs.map +1 -0
  512. package/dist/client/hooks/use-collection-schema.mjs +67 -0
  513. package/dist/client/hooks/use-collection-schema.mjs.map +1 -0
  514. package/dist/client/hooks/use-collection-validation.mjs +74 -0
  515. package/dist/client/hooks/use-collection-validation.mjs.map +1 -0
  516. package/dist/client/hooks/use-collection.d.mts +86 -0
  517. package/dist/client/hooks/use-collection.d.mts.map +1 -0
  518. package/dist/client/hooks/use-collection.mjs +214 -0
  519. package/dist/client/hooks/use-collection.mjs.map +1 -0
  520. package/dist/client/hooks/use-current-user.d.mts +57 -0
  521. package/dist/client/hooks/use-current-user.d.mts.map +1 -0
  522. package/dist/client/hooks/use-current-user.mjs +79 -0
  523. package/dist/client/hooks/use-current-user.mjs.map +1 -0
  524. package/dist/client/hooks/use-field-hooks.mjs +191 -0
  525. package/dist/client/hooks/use-field-hooks.mjs.map +1 -0
  526. package/dist/client/hooks/use-field-options.d.mts +90 -0
  527. package/dist/client/hooks/use-field-options.d.mts.map +1 -0
  528. package/dist/client/hooks/use-field-options.mjs +184 -0
  529. package/dist/client/hooks/use-field-options.mjs.map +1 -0
  530. package/dist/client/hooks/use-global-fields.mjs +27 -0
  531. package/dist/client/hooks/use-global-fields.mjs.map +1 -0
  532. package/dist/client/hooks/use-global-meta.mjs +59 -0
  533. package/dist/client/hooks/use-global-meta.mjs.map +1 -0
  534. package/dist/client/hooks/use-global-schema.mjs +33 -0
  535. package/dist/client/hooks/use-global-schema.mjs.map +1 -0
  536. package/dist/client/hooks/use-global.d.mts +40 -0
  537. package/dist/client/hooks/use-global.d.mts.map +1 -0
  538. package/dist/client/hooks/use-global.mjs +74 -0
  539. package/dist/client/hooks/use-global.mjs.map +1 -0
  540. package/dist/client/hooks/use-locks.mjs +245 -0
  541. package/dist/client/hooks/use-locks.mjs.map +1 -0
  542. package/dist/client/hooks/use-media-query.d.mts +23 -0
  543. package/dist/client/hooks/use-media-query.d.mts.map +1 -0
  544. package/dist/client/hooks/use-media-query.mjs +62 -0
  545. package/dist/client/hooks/use-media-query.mjs.map +1 -0
  546. package/dist/client/hooks/use-prefill-params.mjs +47 -0
  547. package/dist/client/hooks/use-prefill-params.mjs.map +1 -0
  548. package/dist/client/hooks/use-questpie-query-options.mjs +28 -0
  549. package/dist/client/hooks/use-questpie-query-options.mjs.map +1 -0
  550. package/dist/client/hooks/use-reactive-fields.d.mts +75 -0
  551. package/dist/client/hooks/use-reactive-fields.d.mts.map +1 -0
  552. package/dist/client/hooks/use-reactive-fields.mjs +164 -0
  553. package/dist/client/hooks/use-reactive-fields.mjs.map +1 -0
  554. package/dist/client/hooks/use-realtime-highlight.mjs +96 -0
  555. package/dist/client/hooks/use-realtime-highlight.mjs.map +1 -0
  556. package/dist/client/hooks/use-saved-views.mjs +65 -0
  557. package/dist/client/hooks/use-saved-views.mjs.map +1 -0
  558. package/dist/client/hooks/use-search.mjs +147 -0
  559. package/dist/client/hooks/use-search.mjs.map +1 -0
  560. package/dist/client/hooks/use-server-validation.mjs +199 -0
  561. package/dist/client/hooks/use-server-validation.mjs.map +1 -0
  562. package/dist/client/hooks/use-server-widget-data.d.mts +26 -0
  563. package/dist/client/hooks/use-server-widget-data.d.mts.map +1 -0
  564. package/dist/client/hooks/use-server-widget-data.mjs +40 -0
  565. package/dist/client/hooks/use-server-widget-data.mjs.map +1 -0
  566. package/dist/client/hooks/use-setup-status.d.mts +39 -0
  567. package/dist/client/hooks/use-setup-status.d.mts.map +1 -0
  568. package/dist/client/hooks/use-setup-status.mjs +50 -0
  569. package/dist/client/hooks/use-setup-status.mjs.map +1 -0
  570. package/dist/client/hooks/use-upload-collection.mjs +32 -0
  571. package/dist/client/hooks/use-upload-collection.mjs.map +1 -0
  572. package/dist/client/hooks/use-upload.d.mts +23 -0
  573. package/dist/client/hooks/use-upload.d.mts.map +1 -0
  574. package/dist/client/hooks/use-upload.mjs +145 -0
  575. package/dist/client/hooks/use-upload.mjs.map +1 -0
  576. package/dist/client/hooks/use-validation-error-map.mjs +53 -0
  577. package/dist/client/hooks/use-validation-error-map.mjs.map +1 -0
  578. package/dist/client/hooks/use-view-state.mjs +261 -0
  579. package/dist/client/hooks/use-view-state.mjs.map +1 -0
  580. package/dist/client/i18n/hooks.mjs +160 -0
  581. package/dist/client/i18n/hooks.mjs.map +1 -0
  582. package/dist/client/i18n/intl-cache.mjs +65 -0
  583. package/dist/client/i18n/intl-cache.mjs.map +1 -0
  584. package/dist/client/i18n/messages.mjs +7 -0
  585. package/dist/client/i18n/messages.mjs.map +1 -0
  586. package/dist/client/i18n/simple.d.mts +22 -0
  587. package/dist/client/i18n/simple.d.mts.map +1 -0
  588. package/dist/client/i18n/simple.mjs +157 -0
  589. package/dist/client/i18n/simple.mjs.map +1 -0
  590. package/dist/client/i18n/types.d.mts +110 -0
  591. package/dist/client/i18n/types.d.mts.map +1 -0
  592. package/dist/client/lib/utils.d.mts +1 -0
  593. package/dist/client/lib/utils.mjs +28 -0
  594. package/dist/client/lib/utils.mjs.map +1 -0
  595. package/dist/client/preview/block-scope-context.d.mts +74 -0
  596. package/dist/client/preview/block-scope-context.d.mts.map +1 -0
  597. package/dist/client/preview/block-scope-context.mjs +93 -0
  598. package/dist/client/preview/block-scope-context.mjs.map +1 -0
  599. package/dist/client/preview/index.d.mts +5 -0
  600. package/dist/client/preview/preview-banner.d.mts +46 -0
  601. package/dist/client/preview/preview-banner.d.mts.map +1 -0
  602. package/dist/client/preview/preview-banner.mjs +95 -0
  603. package/dist/client/preview/preview-banner.mjs.map +1 -0
  604. package/dist/client/preview/preview-field.d.mts +108 -0
  605. package/dist/client/preview/preview-field.d.mts.map +1 -0
  606. package/dist/client/preview/preview-field.mjs +125 -0
  607. package/dist/client/preview/preview-field.mjs.map +1 -0
  608. package/dist/client/preview/types.d.mts +115 -0
  609. package/dist/client/preview/types.d.mts.map +1 -0
  610. package/dist/client/preview/types.mjs +21 -0
  611. package/dist/client/preview/types.mjs.map +1 -0
  612. package/dist/client/preview/use-collection-preview.d.mts +71 -0
  613. package/dist/client/preview/use-collection-preview.d.mts.map +1 -0
  614. package/dist/client/preview/use-collection-preview.mjs +114 -0
  615. package/dist/client/preview/use-collection-preview.mjs.map +1 -0
  616. package/dist/client/runtime/content-locales-provider.d.mts +1 -0
  617. package/dist/client/runtime/content-locales-provider.mjs +85 -0
  618. package/dist/client/runtime/content-locales-provider.mjs.map +1 -0
  619. package/dist/client/runtime/index.d.mts +7 -0
  620. package/dist/client/runtime/index.mjs +8 -0
  621. package/dist/client/runtime/locale-scope.d.mts +2 -0
  622. package/dist/{runtime-6VZM878K.mjs → client/runtime/locale-scope.mjs} +3 -4
  623. package/dist/client/runtime/locale-scope.mjs.map +1 -0
  624. package/dist/client/runtime/provider.d.mts +10107 -0
  625. package/dist/client/runtime/provider.d.mts.map +1 -0
  626. package/dist/client/runtime/provider.mjs +229 -0
  627. package/dist/client/runtime/provider.mjs.map +1 -0
  628. package/dist/client/runtime/routes.d.mts +49 -0
  629. package/dist/client/runtime/routes.d.mts.map +1 -0
  630. package/dist/client/runtime/routes.mjs +107 -0
  631. package/dist/client/runtime/routes.mjs.map +1 -0
  632. package/dist/client/runtime/translations-provider.d.mts +2 -0
  633. package/dist/client/runtime/translations-provider.mjs +181 -0
  634. package/dist/client/runtime/translations-provider.mjs.map +1 -0
  635. package/dist/client/scope/index.d.mts +3 -0
  636. package/dist/client/scope/picker.d.mts +54 -0
  637. package/dist/client/scope/picker.d.mts.map +1 -0
  638. package/dist/client/scope/picker.mjs +161 -0
  639. package/dist/client/scope/picker.mjs.map +1 -0
  640. package/dist/client/scope/provider.d.mts +104 -0
  641. package/dist/client/scope/provider.d.mts.map +1 -0
  642. package/dist/client/scope/provider.mjs +159 -0
  643. package/dist/client/scope/provider.mjs.map +1 -0
  644. package/dist/client/scope/types.d.mts +112 -0
  645. package/dist/client/scope/types.d.mts.map +1 -0
  646. package/dist/client/styles/index.css +80 -0
  647. package/dist/client/utils/auto-expand-fields.mjs +65 -0
  648. package/dist/client/utils/auto-expand-fields.mjs.map +1 -0
  649. package/dist/client/utils/build-field-definitions-from-schema.mjs +256 -0
  650. package/dist/client/utils/build-field-definitions-from-schema.mjs.map +1 -0
  651. package/dist/client/utils/detect-relations.mjs +46 -0
  652. package/dist/client/utils/detect-relations.mjs.map +1 -0
  653. package/dist/client/utils/locale-to-flag.d.mts +118 -0
  654. package/dist/client/utils/locale-to-flag.d.mts.map +1 -0
  655. package/dist/client/utils/locale-to-flag.mjs +130 -0
  656. package/dist/client/utils/locale-to-flag.mjs.map +1 -0
  657. package/dist/client/utils/routes.mjs +196 -0
  658. package/dist/client/utils/routes.mjs.map +1 -0
  659. package/dist/client/views/auth/accept-invite-form.d.mts +73 -0
  660. package/dist/client/views/auth/accept-invite-form.d.mts.map +1 -0
  661. package/dist/client/views/auth/accept-invite-form.mjs +180 -0
  662. package/dist/client/views/auth/accept-invite-form.mjs.map +1 -0
  663. package/dist/client/views/auth/auth-layout.d.mts +44 -0
  664. package/dist/client/views/auth/auth-layout.d.mts.map +1 -0
  665. package/dist/client/views/auth/auth-layout.mjs +53 -0
  666. package/dist/client/views/auth/auth-layout.mjs.map +1 -0
  667. package/dist/client/views/auth/forgot-password-form.d.mts +59 -0
  668. package/dist/client/views/auth/forgot-password-form.d.mts.map +1 -0
  669. package/dist/{forgot-password-page-Bcp-An4Y.mjs → client/views/auth/forgot-password-form.mjs} +22 -89
  670. package/dist/client/views/auth/forgot-password-form.mjs.map +1 -0
  671. package/dist/client/views/auth/index.d.mts +7 -0
  672. package/dist/client/views/auth/invite-form.d.mts +1 -0
  673. package/dist/client/views/auth/invite-form.mjs +155 -0
  674. package/dist/client/views/auth/invite-form.mjs.map +1 -0
  675. package/dist/client/views/auth/login-form.d.mts +76 -0
  676. package/dist/client/views/auth/login-form.d.mts.map +1 -0
  677. package/dist/client/views/auth/login-form.mjs +167 -0
  678. package/dist/client/views/auth/login-form.mjs.map +1 -0
  679. package/dist/client/views/auth/reset-password-form.d.mts +66 -0
  680. package/dist/client/views/auth/reset-password-form.d.mts.map +1 -0
  681. package/dist/client/views/auth/reset-password-form.mjs +188 -0
  682. package/dist/client/views/auth/reset-password-form.mjs.map +1 -0
  683. package/dist/client/views/auth/setup-form.d.mts +61 -0
  684. package/dist/client/views/auth/setup-form.d.mts.map +1 -0
  685. package/dist/{setup-page-YAP_fzqh.mjs → client/views/auth/setup-form.mjs} +46 -124
  686. package/dist/client/views/auth/setup-form.mjs.map +1 -0
  687. package/dist/client/views/collection/auto-form-fields.d.mts +4 -0
  688. package/dist/client/views/collection/auto-form-fields.mjs +453 -0
  689. package/dist/client/views/collection/auto-form-fields.mjs.map +1 -0
  690. package/dist/client/views/collection/bulk-action-toolbar.mjs +291 -0
  691. package/dist/client/views/collection/bulk-action-toolbar.mjs.map +1 -0
  692. package/dist/client/views/collection/cells/complex-cells.d.mts +46 -0
  693. package/dist/client/views/collection/cells/complex-cells.d.mts.map +1 -0
  694. package/dist/client/views/collection/cells/complex-cells.mjs +327 -0
  695. package/dist/client/views/collection/cells/complex-cells.mjs.map +1 -0
  696. package/dist/client/views/collection/cells/index.d.mts +7 -0
  697. package/dist/client/views/collection/cells/primitive-cells.d.mts +76 -0
  698. package/dist/client/views/collection/cells/primitive-cells.d.mts.map +1 -0
  699. package/dist/client/views/collection/cells/primitive-cells.mjs +165 -0
  700. package/dist/client/views/collection/cells/primitive-cells.mjs.map +1 -0
  701. package/dist/client/views/collection/cells/relation-cells.d.mts +21 -0
  702. package/dist/client/views/collection/cells/relation-cells.d.mts.map +1 -0
  703. package/dist/client/views/collection/cells/relation-cells.mjs +105 -0
  704. package/dist/client/views/collection/cells/relation-cells.mjs.map +1 -0
  705. package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +1 -0
  706. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +189 -0
  707. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +1 -0
  708. package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +2 -0
  709. package/dist/client/views/collection/cells/shared/cell-helpers.mjs +78 -0
  710. package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +1 -0
  711. package/dist/client/views/collection/cells/shared/relation-chip.d.mts +1 -0
  712. package/dist/client/views/collection/cells/shared/relation-chip.mjs +37 -0
  713. package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +1 -0
  714. package/dist/client/views/collection/cells/upload-cells.d.mts +25 -0
  715. package/dist/client/views/collection/cells/upload-cells.d.mts.map +1 -0
  716. package/dist/client/views/collection/cells/upload-cells.mjs +20 -0
  717. package/dist/client/views/collection/cells/upload-cells.mjs.map +1 -0
  718. package/dist/client/views/collection/columns/build-columns.d.mts +2 -0
  719. package/dist/client/views/collection/columns/build-columns.mjs +156 -0
  720. package/dist/client/views/collection/columns/build-columns.mjs.map +1 -0
  721. package/dist/client/views/collection/columns/column-defaults.d.mts +2 -0
  722. package/dist/client/views/collection/columns/column-defaults.mjs +108 -0
  723. package/dist/client/views/collection/columns/column-defaults.mjs.map +1 -0
  724. package/dist/client/views/collection/columns/index.d.mts +3 -0
  725. package/dist/client/views/collection/columns/types.d.mts +2 -0
  726. package/dist/client/views/collection/field-context.mjs +127 -0
  727. package/dist/client/views/collection/field-context.mjs.map +1 -0
  728. package/dist/client/views/collection/field-renderer.mjs +171 -0
  729. package/dist/client/views/collection/field-renderer.mjs.map +1 -0
  730. package/dist/client/views/collection/form-view.d.mts +112 -0
  731. package/dist/client/views/collection/form-view.d.mts.map +1 -0
  732. package/dist/client/views/collection/form-view.mjs +903 -0
  733. package/dist/client/views/collection/form-view.mjs.map +1 -0
  734. package/dist/client/views/collection/index.d.mts +9 -0
  735. package/dist/client/views/collection/table-view.d.mts +102 -0
  736. package/dist/client/views/collection/table-view.d.mts.map +1 -0
  737. package/dist/client/views/collection/table-view.mjs +695 -0
  738. package/dist/client/views/collection/table-view.mjs.map +1 -0
  739. package/dist/client/views/collection/view-skeletons.mjs +121 -0
  740. package/dist/client/views/collection/view-skeletons.mjs.map +1 -0
  741. package/dist/client/views/common/global-search.d.mts +1 -0
  742. package/dist/client/views/common/global-search.mjs +376 -0
  743. package/dist/client/views/common/global-search.mjs.map +1 -0
  744. package/dist/client/views/common/index.d.mts +1 -0
  745. package/dist/client/views/dashboard/dashboard-grid.mjs +385 -0
  746. package/dist/client/views/dashboard/dashboard-grid.mjs.map +1 -0
  747. package/dist/client/views/dashboard/dashboard-widget.mjs +178 -0
  748. package/dist/client/views/dashboard/dashboard-widget.mjs.map +1 -0
  749. package/dist/client/views/dashboard/widget-card.mjs +159 -0
  750. package/dist/client/views/dashboard/widget-card.mjs.map +1 -0
  751. package/dist/client/views/globals/global-form-view.d.mts +74 -0
  752. package/dist/client/views/globals/global-form-view.d.mts.map +1 -0
  753. package/dist/client/views/globals/global-form-view.mjs +181 -0
  754. package/dist/client/views/globals/global-form-view.mjs.map +1 -0
  755. package/dist/client/views/index.d.mts +28 -0
  756. package/dist/client/views/layout/admin-layout-provider.d.mts +140 -0
  757. package/dist/client/views/layout/admin-layout-provider.d.mts.map +1 -0
  758. package/dist/client/views/layout/admin-layout-provider.mjs +90 -0
  759. package/dist/client/views/layout/admin-layout-provider.mjs.map +1 -0
  760. package/dist/client/views/layout/admin-layout.d.mts +151 -0
  761. package/dist/client/views/layout/admin-layout.d.mts.map +1 -0
  762. package/dist/client/views/layout/admin-layout.mjs +144 -0
  763. package/dist/client/views/layout/admin-layout.mjs.map +1 -0
  764. package/dist/client/views/layout/admin-root.d.mts +7 -0
  765. package/dist/client/views/layout/admin-router.d.mts +125 -0
  766. package/dist/client/views/layout/admin-router.d.mts.map +1 -0
  767. package/dist/client/views/layout/admin-router.mjs +594 -0
  768. package/dist/client/views/layout/admin-router.mjs.map +1 -0
  769. package/dist/client/views/layout/admin-sidebar.d.mts +105 -0
  770. package/dist/client/views/layout/admin-sidebar.d.mts.map +1 -0
  771. package/dist/client/views/layout/admin-sidebar.mjs +550 -0
  772. package/dist/client/views/layout/admin-sidebar.mjs.map +1 -0
  773. package/dist/client/views/layout/admin-topbar.mjs +128 -0
  774. package/dist/client/views/layout/admin-topbar.mjs.map +1 -0
  775. package/dist/client/views/layout/index.d.mts +5 -0
  776. package/dist/client/views/pages/accept-invite-page.d.mts +67 -0
  777. package/dist/client/views/pages/accept-invite-page.d.mts.map +1 -0
  778. package/dist/client/views/pages/accept-invite-page.mjs +143 -0
  779. package/dist/client/views/pages/accept-invite-page.mjs.map +1 -0
  780. package/dist/client/views/pages/dashboard-page.d.mts +52 -0
  781. package/dist/client/views/pages/dashboard-page.d.mts.map +1 -0
  782. package/dist/client/views/pages/dashboard-page.mjs +45 -0
  783. package/dist/client/views/pages/dashboard-page.mjs.map +1 -0
  784. package/dist/client/views/pages/forgot-password-page.d.mts +59 -0
  785. package/dist/client/views/pages/forgot-password-page.d.mts.map +1 -0
  786. package/dist/client/views/pages/forgot-password-page.mjs +80 -0
  787. package/dist/client/views/pages/forgot-password-page.mjs.map +1 -0
  788. package/dist/client/views/pages/index.d.mts +7 -0
  789. package/dist/client/views/pages/invite-page.d.mts +71 -0
  790. package/dist/client/views/pages/invite-page.d.mts.map +1 -0
  791. package/dist/client/views/pages/invite-page.mjs +86 -0
  792. package/dist/client/views/pages/invite-page.mjs.map +1 -0
  793. package/dist/client/views/pages/login-page.d.mts +76 -0
  794. package/dist/client/views/pages/login-page.d.mts.map +1 -0
  795. package/dist/client/views/pages/login-page.mjs +98 -0
  796. package/dist/client/views/pages/login-page.mjs.map +1 -0
  797. package/dist/client/views/pages/reset-password-page.d.mts +66 -0
  798. package/dist/client/views/pages/reset-password-page.d.mts.map +1 -0
  799. package/dist/client/views/pages/reset-password-page.mjs +105 -0
  800. package/dist/client/views/pages/reset-password-page.mjs.map +1 -0
  801. package/dist/client/views/pages/setup-page.d.mts +64 -0
  802. package/dist/client/views/pages/setup-page.d.mts.map +1 -0
  803. package/dist/client/views/pages/setup-page.mjs +91 -0
  804. package/dist/client/views/pages/setup-page.mjs.map +1 -0
  805. package/dist/client.d.mts +92 -3
  806. package/dist/client.d.mts.map +1 -0
  807. package/dist/client.mjs +54 -12
  808. package/dist/components/rich-text/index.d.mts +1 -0
  809. package/dist/components/rich-text/rich-text-renderer.d.mts +104 -0
  810. package/dist/components/rich-text/rich-text-renderer.d.mts.map +1 -0
  811. package/dist/components/rich-text/rich-text-renderer.mjs +210 -0
  812. package/dist/components/rich-text/rich-text-renderer.mjs.map +1 -0
  813. package/dist/index.d.mts +62 -3
  814. package/dist/index.mjs +54 -12
  815. package/dist/server/adapters/nextjs.d.mts +121 -0
  816. package/dist/server/adapters/nextjs.d.mts.map +1 -0
  817. package/dist/server/adapters/nextjs.mjs +111 -0
  818. package/dist/server/adapters/nextjs.mjs.map +1 -0
  819. package/dist/server/adapters/tanstack.d.mts +133 -0
  820. package/dist/server/adapters/tanstack.d.mts.map +1 -0
  821. package/dist/server/adapters/tanstack.mjs +90 -0
  822. package/dist/server/adapters/tanstack.mjs.map +1 -0
  823. package/dist/server/augmentation.d.mts +1523 -0
  824. package/dist/server/augmentation.d.mts.map +1 -0
  825. package/dist/server/auth-helpers.d.mts +143 -0
  826. package/dist/server/auth-helpers.d.mts.map +1 -0
  827. package/dist/server/auth-helpers.mjs +108 -0
  828. package/dist/server/auth-helpers.mjs.map +1 -0
  829. package/dist/server/block/block-builder.d.mts +319 -0
  830. package/dist/server/block/block-builder.d.mts.map +1 -0
  831. package/dist/server/block/block-builder.mjs +217 -0
  832. package/dist/server/block/block-builder.mjs.map +1 -0
  833. package/dist/server/block/index.d.mts +3 -0
  834. package/dist/server/block/introspection.d.mts +84 -0
  835. package/dist/server/block/introspection.d.mts.map +1 -0
  836. package/dist/server/block/introspection.mjs +89 -0
  837. package/dist/server/block/introspection.mjs.map +1 -0
  838. package/dist/server/block/prefetch.d.mts +78 -0
  839. package/dist/server/block/prefetch.d.mts.map +1 -0
  840. package/dist/server/block/prefetch.mjs +240 -0
  841. package/dist/server/block/prefetch.mjs.map +1 -0
  842. package/dist/server/fields/blocks.d.mts +139 -0
  843. package/dist/server/fields/blocks.d.mts.map +1 -0
  844. package/dist/server/fields/blocks.mjs +192 -0
  845. package/dist/server/fields/blocks.mjs.map +1 -0
  846. package/dist/server/fields/index.d.mts +48 -0
  847. package/dist/server/fields/index.d.mts.map +1 -0
  848. package/dist/server/fields/index.mjs +16 -0
  849. package/dist/server/fields/index.mjs.map +1 -0
  850. package/dist/server/fields/rich-text.d.mts +135 -0
  851. package/dist/server/fields/rich-text.d.mts.map +1 -0
  852. package/dist/server/fields/rich-text.mjs +188 -0
  853. package/dist/server/fields/rich-text.mjs.map +1 -0
  854. package/dist/server/i18n/index.d.mts +16 -0
  855. package/dist/server/i18n/index.d.mts.map +1 -0
  856. package/dist/server/i18n/index.mjs +44 -0
  857. package/dist/server/i18n/index.mjs.map +1 -0
  858. package/dist/server/i18n/messages/cs.mjs +461 -0
  859. package/dist/server/i18n/messages/cs.mjs.map +1 -0
  860. package/dist/server/i18n/messages/de.mjs +461 -0
  861. package/dist/server/i18n/messages/de.mjs.map +1 -0
  862. package/dist/server/i18n/messages/en.mjs +493 -0
  863. package/dist/server/i18n/messages/en.mjs.map +1 -0
  864. package/dist/server/i18n/messages/es.mjs +461 -0
  865. package/dist/server/i18n/messages/es.mjs.map +1 -0
  866. package/dist/server/i18n/messages/fr.mjs +461 -0
  867. package/dist/server/i18n/messages/fr.mjs.map +1 -0
  868. package/dist/server/i18n/messages/index.mjs +24 -0
  869. package/dist/server/i18n/messages/index.mjs.map +1 -0
  870. package/dist/server/i18n/messages/pl.mjs +461 -0
  871. package/dist/server/i18n/messages/pl.mjs.map +1 -0
  872. package/dist/server/i18n/messages/pt.mjs +464 -0
  873. package/dist/server/i18n/messages/pt.mjs.map +1 -0
  874. package/dist/server/i18n/messages/sk.mjs +490 -0
  875. package/dist/server/i18n/messages/sk.mjs.map +1 -0
  876. package/dist/server/index.d.mts +20 -0
  877. package/dist/server/modules/admin/functions/admin-config.mjs +348 -0
  878. package/dist/server/modules/admin/functions/admin-config.mjs.map +1 -0
  879. package/dist/server/modules/admin/functions/execute-action.d.mts +107 -0
  880. package/dist/server/modules/admin/functions/execute-action.d.mts.map +1 -0
  881. package/dist/server/modules/admin/functions/execute-action.mjs +331 -0
  882. package/dist/server/modules/admin/functions/execute-action.mjs.map +1 -0
  883. package/dist/server/modules/admin/functions/locales.mjs +80 -0
  884. package/dist/server/modules/admin/functions/locales.mjs.map +1 -0
  885. package/dist/server/modules/admin/functions/preview.d.mts +70 -0
  886. package/dist/server/modules/admin/functions/preview.d.mts.map +1 -0
  887. package/dist/server/modules/admin/functions/preview.mjs +243 -0
  888. package/dist/server/modules/admin/functions/preview.mjs.map +1 -0
  889. package/dist/server/modules/admin/functions/reactive.d.mts +99 -0
  890. package/dist/server/modules/admin/functions/reactive.d.mts.map +1 -0
  891. package/dist/server/modules/admin/functions/reactive.mjs +378 -0
  892. package/dist/server/modules/admin/functions/reactive.mjs.map +1 -0
  893. package/dist/server/modules/admin/functions/setup.d.mts +84 -0
  894. package/dist/server/modules/admin/functions/setup.d.mts.map +1 -0
  895. package/dist/server/modules/admin/functions/setup.mjs +131 -0
  896. package/dist/server/modules/admin/functions/setup.mjs.map +1 -0
  897. package/dist/server/modules/admin/functions/translations.mjs +125 -0
  898. package/dist/server/modules/admin/functions/translations.mjs.map +1 -0
  899. package/dist/server/modules/admin/functions/widget-data.d.mts +33 -0
  900. package/dist/server/modules/admin/functions/widget-data.d.mts.map +1 -0
  901. package/dist/server/modules/admin/functions/widget-data.mjs +70 -0
  902. package/dist/server/modules/admin/functions/widget-data.mjs.map +1 -0
  903. package/dist/server/modules/admin/index.d.mts +16879 -0
  904. package/dist/server/modules/admin/index.d.mts.map +1 -0
  905. package/dist/server/modules/admin/index.mjs +249 -0
  906. package/dist/server/modules/admin/index.mjs.map +1 -0
  907. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +3 -0
  908. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs +48 -0
  909. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +1 -0
  910. package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +3 -0
  911. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +79 -0
  912. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +1 -0
  913. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +1490 -0
  914. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +1 -0
  915. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +57 -0
  916. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +1 -0
  917. package/dist/server/patch.d.mts +100 -0
  918. package/dist/server/patch.d.mts.map +1 -0
  919. package/dist/server/patch.mjs +1062 -0
  920. package/dist/server/patch.mjs.map +1 -0
  921. package/dist/server.d.mts +21 -250
  922. package/dist/server.mjs +19 -832
  923. package/dist/shared/preview-utils.d.mts +54 -0
  924. package/dist/shared/preview-utils.d.mts.map +1 -0
  925. package/dist/{preview-utils-BKQ9-TMa.mjs → shared/preview-utils.mjs} +2 -2
  926. package/dist/shared/preview-utils.mjs.map +1 -0
  927. package/dist/{saved-views.types-BMsz5mCy.d.mts → shared/types/saved-views.types.d.mts} +7 -2
  928. package/dist/shared/types/saved-views.types.d.mts.map +1 -0
  929. package/dist/shared.d.mts +3 -57
  930. package/dist/shared.mjs +1 -1
  931. package/package.json +12 -17
  932. package/dist/auth-layout-M8K8_q5R.mjs +0 -181
  933. package/dist/auth-layout-M8K8_q5R.mjs.map +0 -1
  934. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs +0 -273
  935. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs.map +0 -1
  936. package/dist/client-D1DqawtP.d.mts +0 -13403
  937. package/dist/client-D1DqawtP.d.mts.map +0 -1
  938. package/dist/client-njX1rZmi.mjs +0 -22612
  939. package/dist/client-njX1rZmi.mjs.map +0 -1
  940. package/dist/content-locales-provider-BXvuIgfg.mjs +0 -1650
  941. package/dist/content-locales-provider-BXvuIgfg.mjs.map +0 -1
  942. package/dist/dashboard-page-B4PGEdc2.mjs +0 -2500
  943. package/dist/dashboard-page-B4PGEdc2.mjs.map +0 -1
  944. package/dist/dashboard-page-mCY0pgZv.mjs +0 -3
  945. package/dist/dropzone-Do3awXKd.mjs +0 -634
  946. package/dist/dropzone-Do3awXKd.mjs.map +0 -1
  947. package/dist/forgot-password-page-Bcp-An4Y.mjs.map +0 -1
  948. package/dist/forgot-password-page-CEwsdLwn.mjs +0 -3
  949. package/dist/index-B4H3amCD.d.mts +0 -2753
  950. package/dist/index-B4H3amCD.d.mts.map +0 -1
  951. package/dist/login-page-BUnpCbCa.mjs +0 -3
  952. package/dist/login-page-CP4gA-dl.mjs +0 -298
  953. package/dist/login-page-CP4gA-dl.mjs.map +0 -1
  954. package/dist/preview-utils-BKQ9-TMa.mjs.map +0 -1
  955. package/dist/reset-password-page-BqfDmLxA.mjs +0 -281
  956. package/dist/reset-password-page-BqfDmLxA.mjs.map +0 -1
  957. package/dist/reset-password-page-CufHz3h3.mjs +0 -3
  958. package/dist/runtime-6VZM878K.mjs.map +0 -1
  959. package/dist/saved-views.types-BMsz5mCy.d.mts.map +0 -1
  960. package/dist/server.d.mts.map +0 -1
  961. package/dist/server.mjs.map +0 -1
  962. package/dist/setup-page-BNNzt_Z6.mjs +0 -3
  963. package/dist/setup-page-YAP_fzqh.mjs.map +0 -1
  964. package/dist/shared.d.mts.map +0 -1
  965. package/dist/use-auth-BoLmWtmU.mjs.map +0 -1
@@ -0,0 +1,378 @@
1
+ import { z } from "zod";
2
+ import { fn } from "questpie";
3
+
4
+ //#region src/server/modules/admin/functions/reactive.ts
5
+ /**
6
+ * Get typed CMS app from context.
7
+ */
8
+ function getApp(ctx) {
9
+ return ctx.app;
10
+ }
11
+ /**
12
+ * Build ReactiveContext from request data.
13
+ */
14
+ function buildReactiveContext(formData, siblingData, prevData, prevSiblingData, serverCtx) {
15
+ return {
16
+ data: formData,
17
+ sibling: siblingData || {},
18
+ prev: {
19
+ data: prevData || formData,
20
+ sibling: prevSiblingData || siblingData || {}
21
+ },
22
+ ctx: serverCtx
23
+ };
24
+ }
25
+ /**
26
+ * Build OptionsContext from request data.
27
+ */
28
+ function buildOptionsContext(formData, siblingData, search, page, limit, serverCtx) {
29
+ return {
30
+ data: formData,
31
+ sibling: siblingData || {},
32
+ search,
33
+ page,
34
+ limit,
35
+ ctx: serverCtx
36
+ };
37
+ }
38
+ /**
39
+ * Get collection builder by name.
40
+ */
41
+ function getCollection(cms, collectionName) {
42
+ const collection = cms.getCollections()[collectionName];
43
+ if (!collection) throw new Error(`Collection '${collectionName}' not found`);
44
+ return collection;
45
+ }
46
+ /**
47
+ * Get global builder by name.
48
+ */
49
+ function getGlobal(cms, globalName) {
50
+ const global = cms.getGlobals()[globalName];
51
+ if (!global) throw new Error(`Global '${globalName}' not found`);
52
+ return global;
53
+ }
54
+ /**
55
+ * Get entity (collection or global) builder by name and type.
56
+ */
57
+ function getEntity(cms, entityName, type) {
58
+ if (type === "global") return getGlobal(cms, entityName);
59
+ return getCollection(cms, entityName);
60
+ }
61
+ /**
62
+ * Get field definition from collection or global.
63
+ */
64
+ function getFieldDefinition(cms, entityName, fieldPath, type = "collection") {
65
+ const fieldDefinitions = getEntity(cms, entityName, type).state.fieldDefinitions || {};
66
+ const parts = fieldPath.split(".");
67
+ let currentDefs = fieldDefinitions;
68
+ let fieldDef = null;
69
+ for (let i = 0; i < parts.length; i++) {
70
+ const part = parts[i];
71
+ if (/^\d+$/.test(part)) continue;
72
+ if (currentDefs[part]) {
73
+ fieldDef = currentDefs[part];
74
+ if (fieldDef.getNestedFields) currentDefs = fieldDef.getNestedFields();
75
+ else if (fieldDef.state?.config?.of) {
76
+ const ofField = fieldDef.state.config.of;
77
+ if (ofField?.getNestedFields) currentDefs = ofField.getNestedFields();
78
+ }
79
+ } else throw new Error(`Field '${part}' not found in path '${fieldPath}'`);
80
+ }
81
+ if (!fieldDef) {
82
+ const entityType = type === "global" ? "global" : "collection";
83
+ throw new Error(`Field '${fieldPath}' not found in ${entityType} '${entityName}'`);
84
+ }
85
+ return fieldDef;
86
+ }
87
+ /**
88
+ * Remove numeric indices from nested field paths.
89
+ */
90
+ function normalizeFieldPath(fieldPath) {
91
+ return fieldPath.split(".").filter((part) => !/^\d+$/.test(part)).join(".");
92
+ }
93
+ /**
94
+ * Generate candidate field paths for matching form entries.
95
+ */
96
+ function getFieldPathCandidates(fieldPath) {
97
+ const normalized = normalizeFieldPath(fieldPath);
98
+ const candidates = new Set([normalized]);
99
+ const parts = normalized.split(".");
100
+ if (parts.length > 1) {
101
+ const leaf = parts[parts.length - 1];
102
+ if (leaf) candidates.add(leaf);
103
+ }
104
+ return candidates;
105
+ }
106
+ /**
107
+ * Find a reactive field entry in form layout items recursively.
108
+ */
109
+ function findReactiveFieldEntryInLayoutItems(items, fieldCandidates) {
110
+ if (!Array.isArray(items)) return null;
111
+ for (const item of items) {
112
+ if (!item || typeof item !== "object") continue;
113
+ const entry = item;
114
+ if (typeof entry.field === "string" && fieldCandidates.has(entry.field)) return entry;
115
+ if (entry.type === "section") {
116
+ const found = findReactiveFieldEntryInLayoutItems(entry.fields, fieldCandidates);
117
+ if (found) return found;
118
+ continue;
119
+ }
120
+ if (entry.type === "tabs") {
121
+ const found = findReactiveFieldEntryInTabs(entry.tabs, fieldCandidates);
122
+ if (found) return found;
123
+ }
124
+ }
125
+ return null;
126
+ }
127
+ /**
128
+ * Find a reactive field entry in form sections.
129
+ */
130
+ function findReactiveFieldEntryInSections(sections, fieldCandidates) {
131
+ if (!Array.isArray(sections)) return null;
132
+ for (const section of sections) {
133
+ if (!section || typeof section !== "object") continue;
134
+ const found = findReactiveFieldEntryInLayoutItems(section.fields, fieldCandidates);
135
+ if (found) return found;
136
+ }
137
+ return null;
138
+ }
139
+ /**
140
+ * Find a reactive field entry in form tabs.
141
+ */
142
+ function findReactiveFieldEntryInTabs(tabs, fieldCandidates) {
143
+ if (!Array.isArray(tabs)) return null;
144
+ for (const tab of tabs) {
145
+ if (!tab || typeof tab !== "object") continue;
146
+ const tabConfig = tab;
147
+ const fromFields = findReactiveFieldEntryInLayoutItems(tabConfig.fields, fieldCandidates);
148
+ if (fromFields) return fromFields;
149
+ const fromSections = findReactiveFieldEntryInSections(tabConfig.sections, fieldCandidates);
150
+ if (fromSections) return fromSections;
151
+ }
152
+ return null;
153
+ }
154
+ /**
155
+ * Find field entry config from collection form configuration.
156
+ */
157
+ function findReactiveFieldEntry(formConfig, fieldPath) {
158
+ if (!formConfig || typeof formConfig !== "object") return null;
159
+ const fieldCandidates = getFieldPathCandidates(fieldPath);
160
+ const form = formConfig;
161
+ const fromFields = findReactiveFieldEntryInLayoutItems(form.fields, fieldCandidates);
162
+ if (fromFields) return fromFields;
163
+ const fromSections = findReactiveFieldEntryInSections(form.sections, fieldCandidates);
164
+ if (fromSections) return fromSections;
165
+ const fromTabs = findReactiveFieldEntryInTabs(form.tabs, fieldCandidates);
166
+ if (fromTabs) return fromTabs;
167
+ if (form.sidebar && typeof form.sidebar === "object") {
168
+ const sidebar = form.sidebar;
169
+ return findReactiveFieldEntryInLayoutItems(sidebar.fields, fieldCandidates);
170
+ }
171
+ return null;
172
+ }
173
+ /**
174
+ * Get reactive handler from collection/global form config.
175
+ */
176
+ function getReactiveHandler(cms, entityName, fieldPath, handlerType, type = "collection") {
177
+ const formConfig = getEntity(cms, entityName, type).state.adminForm;
178
+ const fieldEntry = findReactiveFieldEntry(formConfig, fieldPath);
179
+ if (!fieldEntry) return null;
180
+ const handlerConfig = fieldEntry[handlerType];
181
+ if (!handlerConfig || typeof handlerConfig === "boolean") return null;
182
+ if (typeof handlerConfig === "function") return handlerConfig;
183
+ if (typeof handlerConfig === "object" && handlerConfig !== null && "handler" in handlerConfig && typeof handlerConfig.handler === "function") return handlerConfig.handler;
184
+ return null;
185
+ }
186
+ /**
187
+ * Get options handler from field config.
188
+ */
189
+ function getOptionsHandler(fieldDef) {
190
+ const options = (fieldDef.state?.config)?.options;
191
+ if (!options) return null;
192
+ if (typeof options === "object" && "handler" in options) return options.handler;
193
+ return null;
194
+ }
195
+ /**
196
+ * Single reactive request in a batch.
197
+ */
198
+ const reactiveRequestSchema = z.object({
199
+ field: z.string(),
200
+ type: z.enum([
201
+ "hidden",
202
+ "readOnly",
203
+ "disabled",
204
+ "compute"
205
+ ]),
206
+ formData: z.record(z.string(), z.unknown()),
207
+ siblingData: z.record(z.string(), z.unknown()).nullable().optional(),
208
+ prevData: z.record(z.string(), z.unknown()).nullable().optional(),
209
+ prevSiblingData: z.record(z.string(), z.unknown()).nullable().optional()
210
+ });
211
+ /**
212
+ * Batch reactive request.
213
+ */
214
+ const batchReactiveInputSchema = z.object({
215
+ collection: z.string(),
216
+ type: z.enum(["collection", "global"]).default("collection"),
217
+ requests: z.array(reactiveRequestSchema)
218
+ });
219
+ /**
220
+ * Single reactive result.
221
+ */
222
+ const reactiveResultSchema = z.object({
223
+ field: z.string(),
224
+ type: z.enum([
225
+ "hidden",
226
+ "readOnly",
227
+ "disabled",
228
+ "compute"
229
+ ]),
230
+ value: z.unknown(),
231
+ error: z.string().optional()
232
+ });
233
+ /**
234
+ * Batch reactive response.
235
+ */
236
+ const batchReactiveOutputSchema = z.object({ results: z.array(reactiveResultSchema) });
237
+ /**
238
+ * Options request.
239
+ */
240
+ const optionsInputSchema = z.object({
241
+ collection: z.string(),
242
+ type: z.enum(["collection", "global"]).default("collection"),
243
+ field: z.string(),
244
+ formData: z.record(z.string(), z.unknown()),
245
+ siblingData: z.record(z.string(), z.unknown()).nullable().optional(),
246
+ search: z.string().default(""),
247
+ page: z.number().int().min(0).default(0),
248
+ limit: z.number().int().min(1).max(100).default(20)
249
+ });
250
+ /**
251
+ * Options response.
252
+ */
253
+ const optionsOutputSchema = z.object({
254
+ options: z.array(z.object({
255
+ value: z.union([z.string(), z.number()]),
256
+ label: z.union([z.string(), z.record(z.string(), z.string())])
257
+ })),
258
+ hasMore: z.boolean().optional(),
259
+ total: z.number().optional()
260
+ });
261
+ /**
262
+ * Batch reactive endpoint.
263
+ * Executes multiple reactive handlers in a single request.
264
+ */
265
+ const batchReactive = fn({
266
+ type: "query",
267
+ schema: batchReactiveInputSchema,
268
+ outputSchema: batchReactiveOutputSchema,
269
+ handler: async (ctx) => {
270
+ const cms = getApp(ctx);
271
+ const { collection: entityName, type: entityType, requests } = ctx.input;
272
+ const serverCtx = {
273
+ db: ctx.db,
274
+ user: ctx.session?.user ?? null,
275
+ req: new Request("http://localhost"),
276
+ locale: ctx.locale ?? "en"
277
+ };
278
+ const results = [];
279
+ for (const request of requests) {
280
+ const { field: field$1, type, formData, siblingData, prevData, prevSiblingData } = request;
281
+ try {
282
+ getFieldDefinition(cms, entityName, field$1, entityType);
283
+ const handler = getReactiveHandler(cms, entityName, field$1, type, entityType);
284
+ if (!handler) {
285
+ results.push({
286
+ field: field$1,
287
+ type,
288
+ value: void 0,
289
+ error: `No ${type} handler found for field '${field$1}'`
290
+ });
291
+ continue;
292
+ }
293
+ const value = await handler(buildReactiveContext(formData, siblingData, prevData, prevSiblingData, serverCtx));
294
+ results.push({
295
+ field: field$1,
296
+ type,
297
+ value
298
+ });
299
+ } catch (error) {
300
+ results.push({
301
+ field: field$1,
302
+ type,
303
+ value: void 0,
304
+ error: error instanceof Error ? error.message : String(error)
305
+ });
306
+ }
307
+ }
308
+ return { results };
309
+ }
310
+ });
311
+ /**
312
+ * Dynamic options endpoint.
313
+ * Fetches options for select/relation fields with search and pagination.
314
+ */
315
+ const fieldOptions = fn({
316
+ type: "query",
317
+ schema: optionsInputSchema,
318
+ outputSchema: optionsOutputSchema,
319
+ handler: async (ctx) => {
320
+ const cms = getApp(ctx);
321
+ const { collection: entityName, type: entityType, field: field$1, formData, siblingData, search, page, limit } = ctx.input;
322
+ const serverCtx = {
323
+ db: ctx.db,
324
+ user: ctx.session?.user ?? null,
325
+ req: new Request("http://localhost"),
326
+ locale: ctx.locale ?? "en"
327
+ };
328
+ try {
329
+ const fieldDef = getFieldDefinition(cms, entityName, field$1, entityType);
330
+ const handler = getOptionsHandler(fieldDef);
331
+ if (!handler) {
332
+ const config = fieldDef.state?.config;
333
+ if (Array.isArray(config?.options)) {
334
+ let options = config.options;
335
+ if (search) {
336
+ const searchLower = search.toLowerCase();
337
+ options = options.filter((opt) => {
338
+ return (typeof opt.label === "string" ? opt.label : Object.values(opt.label).join(" ")).toLowerCase().includes(searchLower);
339
+ });
340
+ }
341
+ const start = page * limit;
342
+ return {
343
+ options: options.slice(start, start + limit),
344
+ hasMore: start + limit < options.length,
345
+ total: options.length
346
+ };
347
+ }
348
+ return {
349
+ options: [],
350
+ hasMore: false
351
+ };
352
+ }
353
+ const result = await handler(buildOptionsContext(formData, siblingData, search, page, limit, serverCtx));
354
+ return {
355
+ options: result.options || [],
356
+ hasMore: result.hasMore,
357
+ total: result.total
358
+ };
359
+ } catch (error) {
360
+ console.error(`Error fetching options for ${entityName}.${field$1}:`, error);
361
+ return {
362
+ options: [],
363
+ hasMore: false
364
+ };
365
+ }
366
+ }
367
+ });
368
+ /**
369
+ * Reactive functions bundle.
370
+ */
371
+ const reactiveFunctions = {
372
+ batchReactive,
373
+ fieldOptions
374
+ };
375
+
376
+ //#endregion
377
+ export { batchReactive, fieldOptions, reactiveFunctions };
378
+ //# sourceMappingURL=reactive.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.mjs","names":["currentDefs: Record<string, any>","fieldDef: any","serverCtx: ReactiveServerContext","results: z.infer<typeof reactiveResultSchema>[]","field"],"sources":["../../../../../src/server/modules/admin/functions/reactive.ts"],"sourcesContent":["/**\n * Reactive Field RPC Endpoints\n *\n * Provides server-side execution of reactive field handlers:\n * - /reactive: Batch endpoint for compute, hidden, readOnly, disabled\n * - /options: Dynamic options for select/relation fields\n */\n\nimport type {\n\tOptionsContext,\n\tReactiveContext,\n\tReactiveServerContext,\n} from \"questpie\";\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Get typed CMS app from context.\n */\nfunction getApp(ctx: { app: unknown }): Questpie<any> {\n\treturn ctx.app as Questpie<any>;\n}\n\n/**\n * Build ReactiveContext from request data.\n */\nfunction buildReactiveContext(\n\tformData: Record<string, any>,\n\tsiblingData: Record<string, any> | null,\n\tprevData: Record<string, any> | null,\n\tprevSiblingData: Record<string, any> | null,\n\tserverCtx: ReactiveServerContext,\n): ReactiveContext {\n\treturn {\n\t\tdata: formData,\n\t\tsibling: siblingData || {},\n\t\tprev: {\n\t\t\tdata: prevData || formData,\n\t\t\tsibling: prevSiblingData || siblingData || {},\n\t\t},\n\t\tctx: serverCtx,\n\t};\n}\n\n/**\n * Build OptionsContext from request data.\n */\nfunction buildOptionsContext(\n\tformData: Record<string, any>,\n\tsiblingData: Record<string, any> | null,\n\tsearch: string,\n\tpage: number,\n\tlimit: number,\n\tserverCtx: ReactiveServerContext,\n): OptionsContext {\n\treturn {\n\t\tdata: formData,\n\t\tsibling: siblingData || {},\n\t\tsearch,\n\t\tpage,\n\t\tlimit,\n\t\tctx: serverCtx,\n\t};\n}\n\n/**\n * Get collection builder by name.\n */\nfunction getCollection(cms: Questpie<any>, collectionName: string) {\n\tconst collections = cms.getCollections();\n\tconst collection = collections[collectionName];\n\tif (!collection) {\n\t\tthrow new Error(`Collection '${collectionName}' not found`);\n\t}\n\n\treturn collection;\n}\n\n/**\n * Get global builder by name.\n */\nfunction getGlobal(cms: Questpie<any>, globalName: string) {\n\tconst globals = cms.getGlobals();\n\tconst global = globals[globalName];\n\tif (!global) {\n\t\tthrow new Error(`Global '${globalName}' not found`);\n\t}\n\n\treturn global;\n}\n\n/**\n * Get entity (collection or global) builder by name and type.\n */\nfunction getEntity(\n\tcms: Questpie<any>,\n\tentityName: string,\n\ttype: \"collection\" | \"global\",\n) {\n\tif (type === \"global\") {\n\t\treturn getGlobal(cms, entityName);\n\t}\n\treturn getCollection(cms, entityName);\n}\n\n/**\n * Get field definition from collection or global.\n */\nfunction getFieldDefinition(\n\tcms: Questpie<any>,\n\tentityName: string,\n\tfieldPath: string,\n\ttype: \"collection\" | \"global\" = \"collection\",\n) {\n\tconst entity = getEntity(cms, entityName, type);\n\n\tconst fieldDefinitions = entity.state.fieldDefinitions || {};\n\n\t// Handle nested field paths (e.g., \"items.0.variant\" -> \"items.variant\")\n\tconst parts = fieldPath.split(\".\");\n\tlet currentDefs: Record<string, any> = fieldDefinitions;\n\tlet fieldDef: any = null;\n\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tconst part = parts[i];\n\n\t\t// Skip numeric indices (array positions)\n\t\tif (/^\\d+$/.test(part)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (currentDefs[part]) {\n\t\t\tfieldDef = currentDefs[part];\n\n\t\t\t// Check for nested fields (object/array)\n\t\t\tif (fieldDef.getNestedFields) {\n\t\t\t\tcurrentDefs = fieldDef.getNestedFields();\n\t\t\t} else if (fieldDef.state?.config?.of) {\n\t\t\t\t// Array field - get the \"of\" field's nested fields\n\t\t\t\tconst ofField = fieldDef.state.config.of;\n\t\t\t\tif (ofField?.getNestedFields) {\n\t\t\t\t\tcurrentDefs = ofField.getNestedFields();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Field '${part}' not found in path '${fieldPath}'`);\n\t\t}\n\t}\n\n\tif (!fieldDef) {\n\t\tconst entityType = type === \"global\" ? \"global\" : \"collection\";\n\t\tthrow new Error(\n\t\t\t`Field '${fieldPath}' not found in ${entityType} '${entityName}'`,\n\t\t);\n\t}\n\n\treturn fieldDef;\n}\n\n/**\n * Remove numeric indices from nested field paths.\n */\nfunction normalizeFieldPath(fieldPath: string): string {\n\treturn fieldPath\n\t\t.split(\".\")\n\t\t.filter((part) => !/^\\d+$/.test(part))\n\t\t.join(\".\");\n}\n\n/**\n * Generate candidate field paths for matching form entries.\n */\nfunction getFieldPathCandidates(fieldPath: string): Set<string> {\n\tconst normalized = normalizeFieldPath(fieldPath);\n\tconst candidates = new Set<string>([normalized]);\n\n\tconst parts = normalized.split(\".\");\n\tif (parts.length > 1) {\n\t\tconst leaf = parts[parts.length - 1];\n\t\tif (leaf) {\n\t\t\tcandidates.add(leaf);\n\t\t}\n\t}\n\n\treturn candidates;\n}\n\n/**\n * Find a reactive field entry in form layout items recursively.\n */\nfunction findReactiveFieldEntryInLayoutItems(\n\titems: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(items)) {\n\t\treturn null;\n\t}\n\n\tfor (const item of items) {\n\t\tif (!item || typeof item !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst entry = item as Record<string, unknown>;\n\n\t\tif (typeof entry.field === \"string\" && fieldCandidates.has(entry.field)) {\n\t\t\treturn entry;\n\t\t}\n\n\t\tif (entry.type === \"section\") {\n\t\t\tconst found = findReactiveFieldEntryInLayoutItems(\n\t\t\t\tentry.fields,\n\t\t\t\tfieldCandidates,\n\t\t\t);\n\t\t\tif (found) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (entry.type === \"tabs\") {\n\t\t\tconst found = findReactiveFieldEntryInTabs(entry.tabs, fieldCandidates);\n\t\t\tif (found) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find a reactive field entry in form sections.\n */\nfunction findReactiveFieldEntryInSections(\n\tsections: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(sections)) {\n\t\treturn null;\n\t}\n\n\tfor (const section of sections) {\n\t\tif (!section || typeof section !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst sectionConfig = section as Record<string, unknown>;\n\t\tconst found = findReactiveFieldEntryInLayoutItems(\n\t\t\tsectionConfig.fields,\n\t\t\tfieldCandidates,\n\t\t);\n\n\t\tif (found) {\n\t\t\treturn found;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find a reactive field entry in form tabs.\n */\nfunction findReactiveFieldEntryInTabs(\n\ttabs: unknown,\n\tfieldCandidates: Set<string>,\n): Record<string, unknown> | null {\n\tif (!Array.isArray(tabs)) {\n\t\treturn null;\n\t}\n\n\tfor (const tab of tabs) {\n\t\tif (!tab || typeof tab !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tabConfig = tab as Record<string, unknown>;\n\n\t\tconst fromFields = findReactiveFieldEntryInLayoutItems(\n\t\t\ttabConfig.fields,\n\t\t\tfieldCandidates,\n\t\t);\n\t\tif (fromFields) {\n\t\t\treturn fromFields;\n\t\t}\n\n\t\tconst fromSections = findReactiveFieldEntryInSections(\n\t\t\ttabConfig.sections,\n\t\t\tfieldCandidates,\n\t\t);\n\t\tif (fromSections) {\n\t\t\treturn fromSections;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Find field entry config from collection form configuration.\n */\nfunction findReactiveFieldEntry(\n\tformConfig: unknown,\n\tfieldPath: string,\n): Record<string, unknown> | null {\n\tif (!formConfig || typeof formConfig !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst fieldCandidates = getFieldPathCandidates(fieldPath);\n\tconst form = formConfig as Record<string, unknown>;\n\n\tconst fromFields = findReactiveFieldEntryInLayoutItems(\n\t\tform.fields,\n\t\tfieldCandidates,\n\t);\n\tif (fromFields) {\n\t\treturn fromFields;\n\t}\n\n\tconst fromSections = findReactiveFieldEntryInSections(\n\t\tform.sections,\n\t\tfieldCandidates,\n\t);\n\tif (fromSections) {\n\t\treturn fromSections;\n\t}\n\n\tconst fromTabs = findReactiveFieldEntryInTabs(form.tabs, fieldCandidates);\n\tif (fromTabs) {\n\t\treturn fromTabs;\n\t}\n\n\tif (form.sidebar && typeof form.sidebar === \"object\") {\n\t\tconst sidebar = form.sidebar as Record<string, unknown>;\n\t\treturn findReactiveFieldEntryInLayoutItems(sidebar.fields, fieldCandidates);\n\t}\n\n\treturn null;\n}\n\n/**\n * Get reactive handler from collection/global form config.\n */\nfunction getReactiveHandler(\n\tcms: Questpie<any>,\n\tentityName: string,\n\tfieldPath: string,\n\thandlerType: \"hidden\" | \"readOnly\" | \"disabled\" | \"compute\",\n\ttype: \"collection\" | \"global\" = \"collection\",\n): ((ctx: ReactiveContext) => any) | null {\n\tconst entity = getEntity(cms, entityName, type);\n\tconst formConfig = (entity.state as any).adminForm;\n\n\tconst fieldEntry = findReactiveFieldEntry(formConfig, fieldPath);\n\tif (!fieldEntry) {\n\t\treturn null;\n\t}\n\n\tconst handlerConfig = fieldEntry[handlerType];\n\tif (!handlerConfig || typeof handlerConfig === \"boolean\") {\n\t\treturn null;\n\t}\n\n\tif (typeof handlerConfig === \"function\") {\n\t\treturn handlerConfig as (ctx: ReactiveContext) => any;\n\t}\n\n\tif (\n\t\ttypeof handlerConfig === \"object\" &&\n\t\thandlerConfig !== null &&\n\t\t\"handler\" in handlerConfig &&\n\t\ttypeof (handlerConfig as { handler?: unknown }).handler === \"function\"\n\t) {\n\t\treturn (handlerConfig as { handler: (ctx: ReactiveContext) => any })\n\t\t\t.handler;\n\t}\n\n\treturn null;\n}\n\n/**\n * Get options handler from field config.\n */\nfunction getOptionsHandler(\n\tfieldDef: any,\n): ((ctx: OptionsContext) => any) | null {\n\tconst config = fieldDef.state?.config;\n\tconst options = config?.options;\n\n\tif (!options) return null;\n\n\t// Check if it's a dynamic options config\n\tif (typeof options === \"object\" && \"handler\" in options) {\n\t\treturn options.handler;\n\t}\n\n\treturn null;\n}\n\n// ============================================================================\n// Schemas\n// ============================================================================\n\n/**\n * Single reactive request in a batch.\n */\nconst reactiveRequestSchema = z.object({\n\t/** Field path (supports nested paths like \"items.0.variant\") */\n\tfield: z.string(),\n\n\t/** Type of reactive operation */\n\ttype: z.enum([\"hidden\", \"readOnly\", \"disabled\", \"compute\"]),\n\n\t/** Current form data */\n\tformData: z.record(z.string(), z.unknown()),\n\n\t/** Sibling data (for array items) */\n\tsiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Previous form data (for change detection) */\n\tprevData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Previous sibling data */\n\tprevSiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\n/**\n * Batch reactive request.\n */\nconst batchReactiveInputSchema = z.object({\n\t/** Collection or global name */\n\tcollection: z.string(),\n\n\t/** Entity type - collection or global */\n\ttype: z.enum([\"collection\", \"global\"]).default(\"collection\"),\n\n\t/** Array of reactive requests */\n\trequests: z.array(reactiveRequestSchema),\n});\n\n/**\n * Single reactive result.\n */\nconst reactiveResultSchema = z.object({\n\t/** Field path */\n\tfield: z.string(),\n\n\t/** Type of reactive operation */\n\ttype: z.enum([\"hidden\", \"readOnly\", \"disabled\", \"compute\"]),\n\n\t/** Computed value */\n\tvalue: z.unknown(),\n\n\t/** Error message if handler failed */\n\terror: z.string().optional(),\n});\n\n/**\n * Batch reactive response.\n */\nconst batchReactiveOutputSchema = z.object({\n\tresults: z.array(reactiveResultSchema),\n});\n\n/**\n * Options request.\n */\nconst optionsInputSchema = z.object({\n\t/** Collection or global name */\n\tcollection: z.string(),\n\n\t/** Entity type - collection or global */\n\ttype: z.enum([\"collection\", \"global\"]).default(\"collection\"),\n\n\t/** Field path */\n\tfield: z.string(),\n\n\t/** Current form data */\n\tformData: z.record(z.string(), z.unknown()),\n\n\t/** Sibling data (for array items) */\n\tsiblingData: z.record(z.string(), z.unknown()).nullable().optional(),\n\n\t/** Search query */\n\tsearch: z.string().default(\"\"),\n\n\t/** Page number (0-based) */\n\tpage: z.number().int().min(0).default(0),\n\n\t/** Items per page */\n\tlimit: z.number().int().min(1).max(100).default(20),\n});\n\n/**\n * Options response.\n */\nconst optionsOutputSchema = z.object({\n\toptions: z.array(\n\t\tz.object({\n\t\t\tvalue: z.union([z.string(), z.number()]),\n\t\t\tlabel: z.union([z.string(), z.record(z.string(), z.string())]),\n\t\t}),\n\t),\n\thasMore: z.boolean().optional(),\n\ttotal: z.number().optional(),\n});\n\n// ============================================================================\n// RPC Functions\n// ============================================================================\n\n/**\n * Batch reactive endpoint.\n * Executes multiple reactive handlers in a single request.\n */\nexport const batchReactive = fn({\n\ttype: \"query\",\n\tschema: batchReactiveInputSchema,\n\toutputSchema: batchReactiveOutputSchema,\n\n\thandler: async (ctx) => {\n\t\tconst cms = getApp(ctx);\n\t\tconst { collection: entityName, type: entityType, requests } = ctx.input;\n\n\t\t// Build server context (req is not available in function handlers)\n\t\tconst serverCtx: ReactiveServerContext = {\n\t\t\tdb: ctx.db,\n\t\t\tuser: ctx.session?.user ?? null,\n\t\t\treq: new Request(\"http://localhost\"), // Placeholder - not used in handlers\n\t\t\tlocale: ctx.locale ?? \"en\",\n\t\t};\n\n\t\tconst results: z.infer<typeof reactiveResultSchema>[] = [];\n\n\t\tfor (const request of requests) {\n\t\t\tconst { field, type, formData, siblingData, prevData, prevSiblingData } =\n\t\t\t\trequest;\n\n\t\t\ttry {\n\t\t\t\t// Get field definition\n\t\t\t\tgetFieldDefinition(cms, entityName, field, entityType);\n\n\t\t\t\t// Get reactive handler\n\t\t\t\tconst handler = getReactiveHandler(\n\t\t\t\t\tcms,\n\t\t\t\t\tentityName,\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tentityType,\n\t\t\t\t);\n\n\t\t\t\tif (!handler) {\n\t\t\t\t\t// No handler found - skip\n\t\t\t\t\tresults.push({\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t\terror: `No ${type} handler found for field '${field}'`,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Build context\n\t\t\t\tconst reactiveCtx = buildReactiveContext(\n\t\t\t\t\tformData as Record<string, any>,\n\t\t\t\t\tsiblingData as Record<string, any> | null,\n\t\t\t\t\tprevData as Record<string, any> | null,\n\t\t\t\t\tprevSiblingData as Record<string, any> | null,\n\t\t\t\t\tserverCtx,\n\t\t\t\t);\n\n\t\t\t\t// Execute handler\n\t\t\t\tconst value = await handler(reactiveCtx);\n\n\t\t\t\tresults.push({\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Handler error - return error message\n\t\t\t\tresults.push({\n\t\t\t\t\tfield,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue: undefined,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn { results };\n\t},\n});\n\n/**\n * Dynamic options endpoint.\n * Fetches options for select/relation fields with search and pagination.\n */\nexport const fieldOptions = fn({\n\ttype: \"query\",\n\tschema: optionsInputSchema,\n\toutputSchema: optionsOutputSchema,\n\n\thandler: async (ctx) => {\n\t\tconst cms = getApp(ctx);\n\t\tconst {\n\t\t\tcollection: entityName,\n\t\t\ttype: entityType,\n\t\t\tfield,\n\t\t\tformData,\n\t\t\tsiblingData,\n\t\t\tsearch,\n\t\t\tpage,\n\t\t\tlimit,\n\t\t} = ctx.input;\n\n\t\t// Build server context (req is not available in function handlers)\n\t\tconst serverCtx: ReactiveServerContext = {\n\t\t\tdb: ctx.db,\n\t\t\tuser: ctx.session?.user ?? null,\n\t\t\treq: new Request(\"http://localhost\"), // Placeholder - not used in handlers\n\t\t\tlocale: ctx.locale ?? \"en\",\n\t\t};\n\n\t\ttry {\n\t\t\t// Get field definition\n\t\t\tconst fieldDef = getFieldDefinition(cms, entityName, field, entityType);\n\n\t\t\t// Get options handler\n\t\t\tconst handler = getOptionsHandler(fieldDef);\n\n\t\t\tif (!handler) {\n\t\t\t\t// No dynamic handler - check for static options\n\t\t\t\tconst config = fieldDef.state?.config;\n\t\t\t\tif (Array.isArray(config?.options)) {\n\t\t\t\t\t// Static options - filter by search\n\t\t\t\t\tlet options = config.options as Array<{\n\t\t\t\t\t\tvalue: string | number;\n\t\t\t\t\t\tlabel: string | Record<string, string>;\n\t\t\t\t\t}>;\n\n\t\t\t\t\tif (search) {\n\t\t\t\t\t\tconst searchLower = search.toLowerCase();\n\t\t\t\t\t\toptions = options.filter((opt) => {\n\t\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\t\ttypeof opt.label === \"string\"\n\t\t\t\t\t\t\t\t\t? opt.label\n\t\t\t\t\t\t\t\t\t: Object.values(opt.label).join(\" \");\n\t\t\t\t\t\t\treturn label.toLowerCase().includes(searchLower);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Paginate\n\t\t\t\t\tconst start = page * limit;\n\t\t\t\t\tconst paginatedOptions = options.slice(start, start + limit);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toptions: paginatedOptions,\n\t\t\t\t\t\thasMore: start + limit < options.length,\n\t\t\t\t\t\ttotal: options.length,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// No options at all\n\t\t\t\treturn {\n\t\t\t\t\toptions: [],\n\t\t\t\t\thasMore: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Build context\n\t\t\tconst optionsCtx = buildOptionsContext(\n\t\t\t\tformData as Record<string, any>,\n\t\t\t\tsiblingData as Record<string, any> | null,\n\t\t\t\tsearch,\n\t\t\t\tpage,\n\t\t\t\tlimit,\n\t\t\t\tserverCtx,\n\t\t\t);\n\n\t\t\t// Execute handler\n\t\t\tconst result = await handler(optionsCtx);\n\n\t\t\treturn {\n\t\t\t\toptions: result.options || [],\n\t\t\t\thasMore: result.hasMore,\n\t\t\t\ttotal: result.total,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`Error fetching options for ${entityName}.${field}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\toptions: [],\n\t\t\t\thasMore: false,\n\t\t\t};\n\t\t}\n\t},\n});\n\n/**\n * Reactive functions bundle.\n */\nexport const reactiveFunctions = {\n\tbatchReactive,\n\tfieldOptions,\n} as const;\n"],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import * as questpie18960 from "questpie";
2
+
3
+ //#region src/server/modules/admin/functions/setup.d.ts
4
+
5
+ /**
6
+ * Setup Functions
7
+ *
8
+ * Built-in functions for bootstrapping the first admin user.
9
+ * Solves the chicken-and-egg problem where invitation-based systems
10
+ * need an existing admin to create the first invitation.
11
+ */
12
+ /**
13
+ * Check if setup is required (no users exist in the system).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = await client.rpc.isSetupRequired({});
18
+ * if (result.required) {
19
+ * // Redirect to setup page
20
+ * }
21
+ * ```
22
+ */
23
+ declare const isSetupRequired: questpie18960.JsonFunctionDefinition<Record<string, never>, {
24
+ required: boolean;
25
+ }>;
26
+ /**
27
+ * Create the first admin user in the system.
28
+ * This function only works when no users exist (setup mode).
29
+ *
30
+ * Security: Once any user exists, this function will refuse to create more users.
31
+ * This prevents unauthorized admin creation after initial setup.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const result = await client.rpc.createFirstAdmin({
36
+ * email: "admin@example.com",
37
+ * password: "securepassword123",
38
+ * name: "Admin User",
39
+ * });
40
+ *
41
+ * if (result.success) {
42
+ * // Redirect to login page
43
+ * } else {
44
+ * console.error(result.error);
45
+ * }
46
+ * ```
47
+ */
48
+ declare const createFirstAdmin: questpie18960.JsonFunctionDefinition<{
49
+ email: string;
50
+ password: string;
51
+ name: string;
52
+ }, {
53
+ success: boolean;
54
+ user?: {
55
+ id: string;
56
+ email: string;
57
+ name: string;
58
+ } | undefined;
59
+ error?: string | undefined;
60
+ }>;
61
+ /**
62
+ * Bundle of setup-related functions.
63
+ */
64
+ declare const setupFunctions: {
65
+ readonly isSetupRequired: questpie18960.JsonFunctionDefinition<Record<string, never>, {
66
+ required: boolean;
67
+ }>;
68
+ readonly createFirstAdmin: questpie18960.JsonFunctionDefinition<{
69
+ email: string;
70
+ password: string;
71
+ name: string;
72
+ }, {
73
+ success: boolean;
74
+ user?: {
75
+ id: string;
76
+ email: string;
77
+ name: string;
78
+ } | undefined;
79
+ error?: string | undefined;
80
+ }>;
81
+ };
82
+ //#endregion
83
+ export { createFirstAdmin, isSetupRequired, setupFunctions };
84
+ //# sourceMappingURL=setup.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.mts","names":[],"sources":["../../../../../src/server/modules/admin/functions/setup.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmEA;AAoCA;AA4EA;;;;;;;;;;;;;cAhHa,iBAAe,aAAA,CAAA,uBAAA;;;;;;;;;;;;;;;;;;;;;;;;;cAoCf,kBAmEX,aAAA,CAnE2B;;;;;;;;;;;;;;;;cA4EhB"}
@@ -0,0 +1,131 @@
1
+ import { z } from "zod";
2
+ import { fn } from "questpie";
3
+ import { eq, sql as sql$1 } from "drizzle-orm";
4
+
5
+ //#region src/server/modules/admin/functions/setup.ts
6
+ /**
7
+ * Setup Functions
8
+ *
9
+ * Built-in functions for bootstrapping the first admin user.
10
+ * Solves the chicken-and-egg problem where invitation-based systems
11
+ * need an existing admin to create the first invitation.
12
+ */
13
+ /**
14
+ * Helper to get typed CMS app from handler context.
15
+ * Used internally for better IDE support without affecting the public API.
16
+ */
17
+ function getApp(ctx) {
18
+ return ctx.app;
19
+ }
20
+ const isSetupRequiredSchema = z.object({});
21
+ const isSetupRequiredOutputSchema = z.object({ required: z.boolean() });
22
+ const createFirstAdminSchema = z.object({
23
+ email: z.string().email("Invalid email address"),
24
+ password: z.string().min(8, "Password must be at least 8 characters"),
25
+ name: z.string().min(2, "Name must be at least 2 characters")
26
+ });
27
+ const createFirstAdminOutputSchema = z.object({
28
+ success: z.boolean(),
29
+ user: z.object({
30
+ id: z.string(),
31
+ email: z.string(),
32
+ name: z.string()
33
+ }).optional(),
34
+ error: z.string().optional()
35
+ });
36
+ /**
37
+ * Check if setup is required (no users exist in the system).
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const result = await client.rpc.isSetupRequired({});
42
+ * if (result.required) {
43
+ * // Redirect to setup page
44
+ * }
45
+ * ```
46
+ */
47
+ const isSetupRequired = fn({
48
+ type: "query",
49
+ schema: isSetupRequiredSchema,
50
+ outputSchema: isSetupRequiredOutputSchema,
51
+ handler: async (ctx) => {
52
+ const app = getApp(ctx);
53
+ const userCollection = app.getCollectionConfig("user");
54
+ return { required: (await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count === 0 };
55
+ }
56
+ });
57
+ /**
58
+ * Create the first admin user in the system.
59
+ * This function only works when no users exist (setup mode).
60
+ *
61
+ * Security: Once any user exists, this function will refuse to create more users.
62
+ * This prevents unauthorized admin creation after initial setup.
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * const result = await client.rpc.createFirstAdmin({
67
+ * email: "admin@example.com",
68
+ * password: "securepassword123",
69
+ * name: "Admin User",
70
+ * });
71
+ *
72
+ * if (result.success) {
73
+ * // Redirect to login page
74
+ * } else {
75
+ * console.error(result.error);
76
+ * }
77
+ * ```
78
+ */
79
+ const createFirstAdmin = fn({
80
+ type: "mutation",
81
+ schema: createFirstAdminSchema,
82
+ outputSchema: createFirstAdminOutputSchema,
83
+ handler: async (ctx) => {
84
+ const app = getApp(ctx);
85
+ const input = ctx.input;
86
+ const userCollection = app.getCollectionConfig("user");
87
+ if ((await app.db.select({ count: sql$1`count(*)::int` }).from(userCollection.table))[0].count > 0) return {
88
+ success: false,
89
+ error: "Setup already completed - users exist in the system"
90
+ };
91
+ try {
92
+ const signUpResult = await app.auth.api.signUpEmail({ body: {
93
+ email: input.email,
94
+ password: input.password,
95
+ name: input.name
96
+ } });
97
+ if (!signUpResult.user) return {
98
+ success: false,
99
+ error: "Failed to create user account"
100
+ };
101
+ await app.db.update(userCollection.table).set({
102
+ role: "admin",
103
+ emailVerified: true
104
+ }).where(eq(userCollection.table.id, signUpResult.user.id));
105
+ return {
106
+ success: true,
107
+ user: {
108
+ id: signUpResult.user.id,
109
+ email: signUpResult.user.email,
110
+ name: signUpResult.user.name
111
+ }
112
+ };
113
+ } catch (error) {
114
+ return {
115
+ success: false,
116
+ error: error instanceof Error ? error.message : "An unexpected error occurred"
117
+ };
118
+ }
119
+ }
120
+ });
121
+ /**
122
+ * Bundle of setup-related functions.
123
+ */
124
+ const setupFunctions = {
125
+ isSetupRequired,
126
+ createFirstAdmin
127
+ };
128
+
129
+ //#endregion
130
+ export { createFirstAdmin, isSetupRequired, setupFunctions };
131
+ //# sourceMappingURL=setup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.mjs","names":[],"sources":["../../../../../src/server/modules/admin/functions/setup.ts"],"sourcesContent":["/**\n * Setup Functions\n *\n * Built-in functions for bootstrapping the first admin user.\n * Solves the chicken-and-egg problem where invitation-based systems\n * need an existing admin to create the first invitation.\n */\n\nimport { eq, sql } from \"drizzle-orm\";\nimport { fn, type Questpie } from \"questpie\";\nimport { z } from \"zod\";\n\n// ============================================================================\n// Type Helpers\n// ============================================================================\n\n/**\n * Helper to get typed CMS app from handler context.\n * Used internally for better IDE support without affecting the public API.\n */\nfunction getApp(ctx: { app: unknown }): Questpie<any> {\n return ctx.app as Questpie<any>;\n}\n\n// ============================================================================\n// Schema Definitions\n// ============================================================================\n\nconst isSetupRequiredSchema = z.object({});\n\nconst isSetupRequiredOutputSchema = z.object({\n required: z.boolean(),\n});\n\nconst createFirstAdminSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n name: z.string().min(2, \"Name must be at least 2 characters\"),\n});\n\nconst createFirstAdminOutputSchema = z.object({\n success: z.boolean(),\n user: z\n .object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n })\n .optional(),\n error: z.string().optional(),\n});\n\n// ============================================================================\n// Functions\n// ============================================================================\n\n/**\n * Check if setup is required (no users exist in the system).\n *\n * @example\n * ```ts\n * const result = await client.rpc.isSetupRequired({});\n * if (result.required) {\n * // Redirect to setup page\n * }\n * ```\n */\nexport const isSetupRequired = fn({\n type: \"query\",\n schema: isSetupRequiredSchema,\n outputSchema: isSetupRequiredOutputSchema,\n handler: async (ctx) => {\n const app = getApp(ctx);\n const userCollection = app.getCollectionConfig(\"user\");\n const result = await app.db\n .select({ count: sql`count(*)::int` as any })\n .from(userCollection.table);\n return { required: (result[0] as { count: number }).count === 0 };\n },\n});\n\n/**\n * Create the first admin user in the system.\n * This function only works when no users exist (setup mode).\n *\n * Security: Once any user exists, this function will refuse to create more users.\n * This prevents unauthorized admin creation after initial setup.\n *\n * @example\n * ```ts\n * const result = await client.rpc.createFirstAdmin({\n * email: \"admin@example.com\",\n * password: \"securepassword123\",\n * name: \"Admin User\",\n * });\n *\n * if (result.success) {\n * // Redirect to login page\n * } else {\n * console.error(result.error);\n * }\n * ```\n */\nexport const createFirstAdmin = fn({\n type: \"mutation\",\n schema: createFirstAdminSchema,\n outputSchema: createFirstAdminOutputSchema,\n handler: async (ctx) => {\n const app = getApp(ctx);\n const input = ctx.input as z.infer<typeof createFirstAdminSchema>;\n const userCollection = app.getCollectionConfig(\"user\");\n\n // Check if setup already completed (any users exist)\n const checkResult = await app.db\n .select({ count: sql`count(*)::int` as any })\n .from(userCollection.table);\n\n if ((checkResult[0] as { count: number }).count > 0) {\n return {\n success: false,\n error: \"Setup already completed - users exist in the system\",\n };\n }\n\n try {\n // Create user via Better Auth signUp\n const signUpResult = await app.auth.api.signUpEmail({\n body: {\n email: input.email,\n password: input.password,\n name: input.name,\n },\n });\n\n if (!signUpResult.user) {\n return {\n success: false,\n error: \"Failed to create user account\",\n };\n }\n\n // Update role to admin and verify email (first user is always admin)\n // TODO: we can also use our builder pattern for admin functions for proper typesafety here !\n // Note: Type assertion needed due to drizzle-orm duplicate dependency resolution\n await (app.db as any)\n .update(userCollection.table)\n .set({\n role: \"admin\",\n emailVerified: true,\n })\n .where(eq(userCollection.table.id as any, signUpResult.user.id));\n\n return {\n success: true,\n user: {\n id: signUpResult.user.id,\n email: signUpResult.user.email,\n name: signUpResult.user.name,\n },\n };\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : \"An unexpected error occurred\",\n };\n }\n },\n});\n\n// ============================================================================\n// Export Bundle\n// ============================================================================\n\n/**\n * Bundle of setup-related functions.\n */\nexport const setupFunctions = {\n isSetupRequired,\n createFirstAdmin,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,SAAS,OAAO,KAAsC;AACpD,QAAO,IAAI;;AAOb,MAAM,wBAAwB,EAAE,OAAO,EAAE,CAAC;AAE1C,MAAM,8BAA8B,EAAE,OAAO,EAC3C,UAAU,EAAE,SAAS,EACtB,CAAC;AAEF,MAAM,yBAAyB,EAAE,OAAO;CACtC,OAAO,EAAE,QAAQ,CAAC,MAAM,wBAAwB;CAChD,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,yCAAyC;CACrE,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,qCAAqC;CAC9D,CAAC;AAEF,MAAM,+BAA+B,EAAE,OAAO;CAC5C,SAAS,EAAE,SAAS;CACpB,MAAM,EACH,OAAO;EACN,IAAI,EAAE,QAAQ;EACd,OAAO,EAAE,QAAQ;EACjB,MAAM,EAAE,QAAQ;EACjB,CAAC,CACD,UAAU;CACb,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC7B,CAAC;;;;;;;;;;;;AAiBF,MAAa,kBAAkB,GAAG;CAChC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,OAAO,IAAI;EACvB,MAAM,iBAAiB,IAAI,oBAAoB,OAAO;AAItD,SAAO,EAAE,WAHM,MAAM,IAAI,GACtB,OAAO,EAAE,OAAO,KAAG,iBAAwB,CAAC,CAC5C,KAAK,eAAe,MAAM,EACF,GAAyB,UAAU,GAAG;;CAEpE,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAwBF,MAAa,mBAAmB,GAAG;CACjC,MAAM;CACN,QAAQ;CACR,cAAc;CACd,SAAS,OAAO,QAAQ;EACtB,MAAM,MAAM,OAAO,IAAI;EACvB,MAAM,QAAQ,IAAI;EAClB,MAAM,iBAAiB,IAAI,oBAAoB,OAAO;AAOtD,OAJoB,MAAM,IAAI,GAC3B,OAAO,EAAE,OAAO,KAAG,iBAAwB,CAAC,CAC5C,KAAK,eAAe,MAAM,EAEZ,GAAyB,QAAQ,EAChD,QAAO;GACL,SAAS;GACT,OAAO;GACR;AAGH,MAAI;GAEF,MAAM,eAAe,MAAM,IAAI,KAAK,IAAI,YAAY,EAClD,MAAM;IACJ,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,MAAM,MAAM;IACb,EACF,CAAC;AAEF,OAAI,CAAC,aAAa,KAChB,QAAO;IACL,SAAS;IACT,OAAO;IACR;AAMH,SAAO,IAAI,GACR,OAAO,eAAe,MAAM,CAC5B,IAAI;IACH,MAAM;IACN,eAAe;IAChB,CAAC,CACD,MAAM,GAAG,eAAe,MAAM,IAAW,aAAa,KAAK,GAAG,CAAC;AAElE,UAAO;IACL,SAAS;IACT,MAAM;KACJ,IAAI,aAAa,KAAK;KACtB,OAAO,aAAa,KAAK;KACzB,MAAM,aAAa,KAAK;KACzB;IACF;WACM,OAAO;AACd,UAAO;IACL,SAAS;IACT,OACE,iBAAiB,QACb,MAAM,UACN;IACP;;;CAGN,CAAC;;;;AASF,MAAa,iBAAiB;CAC5B;CACA;CACD"}