@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,191 @@
1
+ import * as React$1 from "react";
2
+ import { useFormContext, useWatch } from "react-hook-form";
3
+
4
+ //#region src/client/hooks/use-field-hooks.ts
5
+ /**
6
+ * Field Hooks
7
+ *
8
+ * React hooks for field-level compute, onChange handlers, and async options.
9
+ * Uses Proxy-based dependency tracking for automatic reactivity.
10
+ *
11
+ * Best Practices:
12
+ * - useWatch() hook for reactive form values (React pattern)
13
+ * - form.getValues() only inside callbacks/effects (one-time reads)
14
+ * - useMemo for computed values to avoid unnecessary recalculations
15
+ */
16
+ function createHookContext(form, fieldName, locale) {
17
+ return {
18
+ fieldName,
19
+ locale,
20
+ setValue: (name, value) => {
21
+ form.setValue(name, value, {
22
+ shouldDirty: true,
23
+ shouldTouch: true,
24
+ shouldValidate: false
25
+ });
26
+ },
27
+ getValues: () => form.getValues(),
28
+ getValue: (name) => form.getValues(name)
29
+ };
30
+ }
31
+ /**
32
+ * Hook for implementing field-level hooks (compute, onChange, loadOptions).
33
+ * Uses Proxy-based dependency tracking for automatic reactivity.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * const { handleChange, computedValue, isComputed, options, optionsLoading } = useFieldHooks({
38
+ * fieldName: 'pricePerMinute',
39
+ * fullFieldName: 'pricePerMinute',
40
+ * compute: (values) => values.price / values.duration,
41
+ * });
42
+ * ```
43
+ */
44
+ function useFieldHooks({ fieldName, fullFieldName, locale, compute, onChange, defaultValue, loadOptions, staticOptions }) {
45
+ const form = useFormContext();
46
+ const [asyncOptions, setAsyncOptions] = React$1.useState(void 0);
47
+ const [optionsLoading, setOptionsLoading] = React$1.useState(false);
48
+ const [loadOptionsDeps, setLoadOptionsDeps] = React$1.useState([]);
49
+ const hookCtx = React$1.useMemo(() => createHookContext(form, fieldName, locale), [
50
+ form,
51
+ fieldName,
52
+ locale
53
+ ]);
54
+ const watchedValues = useWatch({ control: form.control });
55
+ const allValues = React$1.useMemo(() => watchedValues ?? {}, [watchedValues]);
56
+ React$1.useEffect(() => {
57
+ if (!loadOptions) return;
58
+ const values = form.getValues();
59
+ const deps = [];
60
+ const proxy = new Proxy(values, { get(target, prop) {
61
+ if (typeof prop === "string" && !prop.startsWith("_")) deps.push(prop);
62
+ return target[prop];
63
+ } });
64
+ try {
65
+ loadOptions(proxy);
66
+ } catch {}
67
+ setLoadOptionsDeps([...new Set(deps)]);
68
+ }, [loadOptions, form]);
69
+ const computedValue = React$1.useMemo(() => {
70
+ if (!compute) return void 0;
71
+ try {
72
+ return compute(allValues);
73
+ } catch (error) {
74
+ console.error(`Compute error for ${fieldName}:`, error);
75
+ return;
76
+ }
77
+ }, [
78
+ compute,
79
+ allValues,
80
+ fieldName
81
+ ]);
82
+ const defaultValueInitialized = React$1.useRef(false);
83
+ React$1.useEffect(() => {
84
+ if (defaultValueInitialized.current) return;
85
+ if (defaultValue === void 0) return;
86
+ if (compute) {
87
+ defaultValueInitialized.current = true;
88
+ return;
89
+ }
90
+ const currentValue = form.getValues(fullFieldName);
91
+ if (currentValue !== void 0 && currentValue !== null) {
92
+ defaultValueInitialized.current = true;
93
+ return;
94
+ }
95
+ const initDefaultValue = async () => {
96
+ let resolvedValue;
97
+ if (typeof defaultValue === "function") {
98
+ const values = form.getValues();
99
+ resolvedValue = await Promise.resolve(defaultValue(values));
100
+ } else resolvedValue = defaultValue;
101
+ const currentVal = form.getValues(fullFieldName);
102
+ if (currentVal === void 0 || currentVal === null) form.setValue(fullFieldName, resolvedValue, {
103
+ shouldDirty: false,
104
+ shouldTouch: false
105
+ });
106
+ defaultValueInitialized.current = true;
107
+ };
108
+ initDefaultValue();
109
+ }, [
110
+ defaultValue,
111
+ fullFieldName,
112
+ form,
113
+ compute
114
+ ]);
115
+ const trackedDepValues = React$1.useMemo(() => {
116
+ if (!loadOptionsDeps.length) return [];
117
+ return loadOptionsDeps.map((dep) => allValues[dep]);
118
+ }, [loadOptionsDeps, allValues]);
119
+ const trackedDepKey = React$1.useMemo(() => JSON.stringify(trackedDepValues), [trackedDepValues]);
120
+ const initialOptionsLoadDone = React$1.useRef(false);
121
+ const prevDepKeyRef = React$1.useRef("");
122
+ React$1.useEffect(() => {
123
+ if (!loadOptions) return;
124
+ if (loadOptionsDeps.length === 0 && !initialOptionsLoadDone.current) return;
125
+ if (!(!initialOptionsLoadDone.current || prevDepKeyRef.current !== trackedDepKey)) return;
126
+ prevDepKeyRef.current = trackedDepKey;
127
+ initialOptionsLoadDone.current = true;
128
+ const fetchOptions = async () => {
129
+ setOptionsLoading(true);
130
+ try {
131
+ setAsyncOptions(await loadOptions(allValues));
132
+ } catch (error) {
133
+ console.error(`Failed to load options for ${fieldName}:`, error);
134
+ setAsyncOptions([]);
135
+ } finally {
136
+ setOptionsLoading(false);
137
+ }
138
+ };
139
+ fetchOptions();
140
+ }, [
141
+ loadOptions,
142
+ loadOptionsDeps,
143
+ trackedDepKey,
144
+ allValues,
145
+ fieldName
146
+ ]);
147
+ const handleChange = React$1.useCallback((value) => {
148
+ if (compute) return;
149
+ form.setValue(fullFieldName, value, {
150
+ shouldDirty: true,
151
+ shouldTouch: true,
152
+ shouldValidate: false
153
+ });
154
+ if (onChange) {
155
+ const runOnChange = async () => {
156
+ try {
157
+ await Promise.resolve(onChange(value, hookCtx));
158
+ } catch (error) {
159
+ console.error(`onChange error for ${fieldName}:`, error);
160
+ }
161
+ };
162
+ runOnChange();
163
+ }
164
+ }, [
165
+ form,
166
+ fullFieldName,
167
+ onChange,
168
+ hookCtx,
169
+ fieldName,
170
+ compute
171
+ ]);
172
+ const options = React$1.useMemo(() => {
173
+ if (loadOptions) return asyncOptions;
174
+ return staticOptions;
175
+ }, [
176
+ loadOptions,
177
+ asyncOptions,
178
+ staticOptions
179
+ ]);
180
+ return {
181
+ handleChange,
182
+ computedValue,
183
+ isComputed: !!compute,
184
+ options,
185
+ optionsLoading
186
+ };
187
+ }
188
+
189
+ //#endregion
190
+ export { useFieldHooks };
191
+ //# sourceMappingURL=use-field-hooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field-hooks.mjs","names":["React","deps: string[]","resolvedValue: any"],"sources":["../../../src/client/hooks/use-field-hooks.ts"],"sourcesContent":["/**\n * Field Hooks\n *\n * React hooks for field-level compute, onChange handlers, and async options.\n * Uses Proxy-based dependency tracking for automatic reactivity.\n *\n * Best Practices:\n * - useWatch() hook for reactive form values (React pattern)\n * - form.getValues() only inside callbacks/effects (one-time reads)\n * - useMemo for computed values to avoid unnecessary recalculations\n */\n\nimport * as React from \"react\";\nimport { useFormContext, useWatch } from \"react-hook-form\";\nimport type {\n\tFieldHookContext,\n\tSelectOption,\n} from \"../builder/types/field-types\";\n\n// ============================================================================\n// Proxy Tracking Utilities\n// ============================================================================\n\n/**\n * Result of tracking dependencies via Proxy\n */\ninterface TrackingResult<T> {\n\tresult: T;\n\tdeps: string[];\n}\n\n/**\n * Track which fields are accessed during a function call using Proxy.\n * Returns the result and the list of accessed field names.\n */\nfunction trackDependencies<T>(\n\tvalues: Record<string, any>,\n\tfn: (values: Record<string, any>) => T,\n): TrackingResult<T> {\n\tconst deps: string[] = [];\n\n\tconst proxy = new Proxy(values, {\n\t\tget(target, prop: string) {\n\t\t\tif (typeof prop === \"string\" && !prop.startsWith(\"_\")) {\n\t\t\t\tdeps.push(prop);\n\t\t\t}\n\t\t\treturn target[prop];\n\t\t},\n\t});\n\n\tconst result = fn(proxy);\n\treturn { result, deps: [...new Set(deps)] }; // dedupe\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseFieldHooksOptions {\n\t/**\n\t * Field name\n\t */\n\tfieldName: string;\n\n\t/**\n\t * Field name with prefix (for nested fields)\n\t */\n\tfullFieldName: string;\n\n\t/**\n\t * Current locale\n\t */\n\tlocale?: string;\n\n\t/**\n\t * Compute function (proxy-tracked)\n\t */\n\tcompute?: (values: Record<string, any>) => any;\n\n\t/**\n\t * onChange callback from field config\n\t */\n\tonChange?: (value: any, ctx: FieldHookContext) => void | Promise<void>;\n\n\t/**\n\t * Default value (static, sync function, or async function)\n\t */\n\tdefaultValue?:\n\t\t| any\n\t\t| ((values: Record<string, any>) => any)\n\t\t| ((values: Record<string, any>) => Promise<any>);\n\n\t/**\n\t * Async options loader (proxy-tracked)\n\t */\n\tloadOptions?: (values: Record<string, any>) => Promise<SelectOption[]>;\n\n\t/**\n\t * Static options (from config)\n\t */\n\tstaticOptions?: SelectOption[];\n}\n\nexport interface UseFieldHooksResult {\n\t/**\n\t * Wrapped onChange handler that calls user's onChange hook\n\t */\n\thandleChange: (value: any) => void;\n\n\t/**\n\t * Computed value (if compute is provided)\n\t */\n\tcomputedValue: any;\n\n\t/**\n\t * Whether this field has a compute function (implies readonly)\n\t */\n\tisComputed: boolean;\n\n\t/**\n\t * Resolved options (from static, sync function, or async loader)\n\t */\n\toptions: SelectOption[] | undefined;\n\n\t/**\n\t * Whether options are loading\n\t */\n\toptionsLoading: boolean;\n}\n\n// ============================================================================\n// Hook Context Factory\n// ============================================================================\n\nfunction createHookContext(\n\tform: ReturnType<typeof useFormContext>,\n\tfieldName: string,\n\tlocale?: string,\n): FieldHookContext {\n\treturn {\n\t\tfieldName,\n\t\tlocale,\n\t\tsetValue: (name: string, value: any) => {\n\t\t\tform.setValue(name, value, {\n\t\t\t\tshouldDirty: true,\n\t\t\t\tshouldTouch: true,\n\t\t\t\tshouldValidate: false,\n\t\t\t});\n\t\t},\n\t\tgetValues: () => form.getValues(),\n\t\tgetValue: (name: string) => form.getValues(name),\n\t};\n}\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\n/**\n * Hook for implementing field-level hooks (compute, onChange, loadOptions).\n * Uses Proxy-based dependency tracking for automatic reactivity.\n *\n * @example\n * ```tsx\n * const { handleChange, computedValue, isComputed, options, optionsLoading } = useFieldHooks({\n * fieldName: 'pricePerMinute',\n * fullFieldName: 'pricePerMinute',\n * compute: (values) => values.price / values.duration,\n * });\n * ```\n */\nexport function useFieldHooks({\n\tfieldName,\n\tfullFieldName,\n\tlocale,\n\tcompute,\n\tonChange,\n\tdefaultValue,\n\tloadOptions,\n\tstaticOptions,\n}: UseFieldHooksOptions): UseFieldHooksResult {\n\tconst form = useFormContext();\n\tconst [asyncOptions, setAsyncOptions] = React.useState<\n\t\tSelectOption[] | undefined\n\t>(undefined);\n\tconst [optionsLoading, setOptionsLoading] = React.useState(false);\n\n\t// Track dependencies for loadOptions (stored in state to trigger re-render when detected)\n\tconst [loadOptionsDeps, setLoadOptionsDeps] = React.useState<string[]>([]);\n\n\t// Create stable hook context\n\tconst hookCtx = React.useMemo(\n\t\t() => createHookContext(form, fieldName, locale),\n\t\t[form, fieldName, locale],\n\t);\n\n\t// ========================================================================\n\t// Watch form values reactively (React best practice: useWatch hook)\n\t// ========================================================================\n\n\t// Watch all form values for compute reactivity\n\t// useWatch properly integrates with React's lifecycle\n\tconst watchedValues = useWatch({ control: form.control });\n\tconst allValues = React.useMemo(\n\t\t() => (watchedValues ?? {}) as Record<string, any>,\n\t\t[watchedValues],\n\t);\n\n\t// ========================================================================\n\t// Detect loadOptions dependencies (run once)\n\t// ========================================================================\n\n\tReact.useEffect(() => {\n\t\tif (!loadOptions) return;\n\n\t\t// Run loadOptions once with a tracking proxy to detect deps\n\t\tconst values = form.getValues();\n\t\tconst deps: string[] = [];\n\t\tconst proxy = new Proxy(values, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tif (typeof prop === \"string\" && !prop.startsWith(\"_\")) {\n\t\t\t\t\tdeps.push(prop);\n\t\t\t\t}\n\t\t\t\treturn target[prop];\n\t\t\t},\n\t\t});\n\n\t\t// Call loadOptions to track deps, catch and ignore errors\n\t\ttry {\n\t\t\tloadOptions(proxy);\n\t\t} catch {\n\t\t\t// Ignore - we just wanted to track access\n\t\t}\n\n\t\tconst uniqueDeps = [...new Set(deps)];\n\t\tsetLoadOptionsDeps(uniqueDeps);\n\t}, [loadOptions, form]);\n\n\t// ========================================================================\n\t// Computed Value (reactive via useWatch + useMemo)\n\t// ========================================================================\n\n\t// Use useMemo for computed value - recomputes when allValues change\n\t// This is the proper React pattern: derived state via useMemo\n\tconst computedValue = React.useMemo(() => {\n\t\tif (!compute) return undefined;\n\t\ttry {\n\t\t\treturn compute(allValues);\n\t\t} catch (error) {\n\t\t\tconsole.error(`Compute error for ${fieldName}:`, error);\n\t\t\treturn undefined;\n\t\t}\n\t}, [compute, allValues, fieldName]);\n\n\t// ========================================================================\n\t// Default Value Effect\n\t// ========================================================================\n\n\tconst defaultValueInitialized = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tif (defaultValueInitialized.current) return;\n\t\tif (defaultValue === undefined) return;\n\t\t// Don't set default for computed fields\n\t\tif (compute) {\n\t\t\tdefaultValueInitialized.current = true;\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = form.getValues(fullFieldName);\n\t\tif (currentValue !== undefined && currentValue !== null) {\n\t\t\tdefaultValueInitialized.current = true;\n\t\t\treturn;\n\t\t}\n\n\t\tconst initDefaultValue = async () => {\n\t\t\tlet resolvedValue: any;\n\n\t\t\tif (typeof defaultValue === \"function\") {\n\t\t\t\tconst values = form.getValues();\n\t\t\t\tresolvedValue = await Promise.resolve(defaultValue(values));\n\t\t\t} else {\n\t\t\t\tresolvedValue = defaultValue;\n\t\t\t}\n\n\t\t\t// Double-check value hasn't been set while we were resolving\n\t\t\tconst currentVal = form.getValues(fullFieldName);\n\t\t\tif (currentVal === undefined || currentVal === null) {\n\t\t\t\tform.setValue(fullFieldName, resolvedValue, {\n\t\t\t\t\tshouldDirty: false,\n\t\t\t\t\tshouldTouch: false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefaultValueInitialized.current = true;\n\t\t};\n\n\t\tinitDefaultValue();\n\t}, [defaultValue, fullFieldName, form, compute]);\n\n\t// ========================================================================\n\t// Async Options Loader (reactive via tracked deps)\n\t// ========================================================================\n\n\t// Extract only the tracked dependency values for comparison\n\tconst trackedDepValues = React.useMemo(() => {\n\t\tif (!loadOptionsDeps.length) return [];\n\t\treturn loadOptionsDeps.map((dep) => allValues[dep]);\n\t}, [loadOptionsDeps, allValues]);\n\n\t// Stable serialization for deep comparison\n\tconst trackedDepKey = React.useMemo(\n\t\t() => JSON.stringify(trackedDepValues),\n\t\t[trackedDepValues],\n\t);\n\n\tconst initialOptionsLoadDone = React.useRef(false);\n\tconst prevDepKeyRef = React.useRef<string>(\"\");\n\n\tReact.useEffect(() => {\n\t\tif (!loadOptions) return;\n\n\t\t// Skip if deps haven't been detected yet\n\t\tif (loadOptionsDeps.length === 0 && !initialOptionsLoadDone.current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if this is initial load or deps changed\n\t\tconst depsChanged =\n\t\t\t!initialOptionsLoadDone.current ||\n\t\t\tprevDepKeyRef.current !== trackedDepKey;\n\n\t\tif (!depsChanged) return;\n\n\t\tprevDepKeyRef.current = trackedDepKey;\n\t\tinitialOptionsLoadDone.current = true;\n\n\t\tconst fetchOptions = async () => {\n\t\t\tsetOptionsLoading(true);\n\t\t\ttry {\n\t\t\t\t// Use allValues (from useWatch) for the loadOptions call\n\t\t\t\tconst options = await loadOptions(allValues);\n\t\t\t\tsetAsyncOptions(options);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`Failed to load options for ${fieldName}:`, error);\n\t\t\t\tsetAsyncOptions([]);\n\t\t\t} finally {\n\t\t\t\tsetOptionsLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tfetchOptions();\n\t}, [loadOptions, loadOptionsDeps, trackedDepKey, allValues, fieldName]);\n\n\t// ========================================================================\n\t// onChange Handler\n\t// ========================================================================\n\n\tconst handleChange = React.useCallback(\n\t\t(value: any) => {\n\t\t\t// Don't allow changes for computed fields\n\t\t\tif (compute) return;\n\n\t\t\t// Set the value first\n\t\t\t// Note: shouldValidate is false to avoid blocking on complex fields like richText\n\t\t\t// Validation will still happen on form submit\n\t\t\tform.setValue(fullFieldName, value, {\n\t\t\t\tshouldDirty: true,\n\t\t\t\tshouldTouch: true,\n\t\t\t\tshouldValidate: false,\n\t\t\t});\n\n\t\t\t// Then call user's onChange if provided\n\t\t\tif (onChange) {\n\t\t\t\tconst runOnChange = async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait Promise.resolve(onChange(value, hookCtx));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(`onChange error for ${fieldName}:`, error);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\trunOnChange();\n\t\t\t}\n\t\t},\n\t\t[form, fullFieldName, onChange, hookCtx, fieldName, compute],\n\t);\n\n\t// ========================================================================\n\t// Resolve Options\n\t// ========================================================================\n\n\tconst options = React.useMemo(() => {\n\t\t// Async options take priority\n\t\tif (loadOptions) {\n\t\t\treturn asyncOptions;\n\t\t}\n\t\t// Static options\n\t\treturn staticOptions;\n\t}, [loadOptions, asyncOptions, staticOptions]);\n\n\treturn {\n\t\thandleChange,\n\t\tcomputedValue,\n\t\tisComputed: !!compute,\n\t\toptions,\n\t\toptionsLoading,\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { SerializedOptionsConfig } from "questpie";
2
+
3
+ //#region src/client/hooks/use-field-options.d.ts
4
+
5
+ /**
6
+ * Option item
7
+ */
8
+ interface OptionItem {
9
+ value: string | number;
10
+ label: string | Record<string, string>;
11
+ }
12
+ /**
13
+ * Options for useFieldOptions hook
14
+ */
15
+ interface UseFieldOptionsOptions {
16
+ /** Collection or global name */
17
+ collection: string;
18
+ /** Entity type - collection or global */
19
+ mode?: "collection" | "global";
20
+ /** Field path */
21
+ field: string;
22
+ /** Options config from introspection */
23
+ optionsConfig?: SerializedOptionsConfig;
24
+ /** Static options (fallback if no dynamic config) */
25
+ staticOptions?: OptionItem[];
26
+ /** Initial search query */
27
+ initialSearch?: string;
28
+ /** Items per page */
29
+ limit?: number;
30
+ /** Whether to enable fetching */
31
+ enabled?: boolean;
32
+ }
33
+ /**
34
+ * Result from useFieldOptions hook
35
+ */
36
+ interface UseFieldOptionsResult {
37
+ /** Current options */
38
+ options: OptionItem[];
39
+ /** Whether options are loading */
40
+ isLoading: boolean;
41
+ /** Whether more options are available */
42
+ hasMore: boolean;
43
+ /** Total count (if available) */
44
+ total?: number;
45
+ /** Current search query */
46
+ search: string;
47
+ /** Set search query */
48
+ setSearch: (search: string) => void;
49
+ /** Load more options (pagination) */
50
+ loadMore: () => void;
51
+ /** Refresh options */
52
+ refresh: () => void;
53
+ /** Error */
54
+ error: Error | null;
55
+ }
56
+ /**
57
+ * Hook to fetch dynamic options for select/relation fields.
58
+ * Supports search, pagination, and dependency-based refetching.
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * const { options, isLoading, search, setSearch, loadMore } = useFieldOptions({
63
+ * collection: "orders",
64
+ * field: "items.0.city",
65
+ * optionsConfig: schema.fields.city.reactive?.options,
66
+ * });
67
+ *
68
+ * return (
69
+ * <Select
70
+ * options={options}
71
+ * isLoading={isLoading}
72
+ * onInputChange={setSearch}
73
+ * onMenuScrollToBottom={loadMore}
74
+ * />
75
+ * );
76
+ * ```
77
+ */
78
+ declare function useFieldOptions({
79
+ collection,
80
+ mode,
81
+ field,
82
+ optionsConfig,
83
+ staticOptions,
84
+ initialSearch,
85
+ limit,
86
+ enabled
87
+ }: UseFieldOptionsOptions): UseFieldOptionsResult;
88
+ //#endregion
89
+ export { OptionItem, UseFieldOptionsOptions, UseFieldOptionsResult, useFieldOptions };
90
+ //# sourceMappingURL=use-field-options.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field-options.d.mts","names":[],"sources":["../../../src/client/hooks/use-field-options.ts"],"sourcesContent":[],"mappings":";;;;;;;AAyKC,UAtJgB,UAAA,CAsJhB;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAtJgB,MAsJhB,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;AAGgD,UAnJhC,sBAAA,CAmJgC;;;;;;;;kBAxIhC;;kBAGA;;;;;;;;;;;UAeA,qBAAA;;WAEP;;;;;;;;;;;;;;;;SAwBF;;;;;;;;;;;;;;;;;;;;;;;;iBAmFQ,eAAA;;;;;;;;;GASb,yBAAyB"}
@@ -0,0 +1,184 @@
1
+ import { useAdminStore } from "../runtime/provider.mjs";
2
+ import * as React$1 from "react";
3
+ import { useFormContext, useWatch } from "react-hook-form";
4
+
5
+ //#region src/client/hooks/use-field-options.ts
6
+ /**
7
+ * Get sibling data for a field path (for fields inside arrays)
8
+ */
9
+ function getSiblingData(values, fieldPath) {
10
+ const parts = fieldPath.split(".");
11
+ const numericIndex = parts.findIndex((p) => /^\d+$/.test(p));
12
+ if (numericIndex === -1) return null;
13
+ const arrayItemPath = parts.slice(0, numericIndex + 1).join(".");
14
+ let sibling = values;
15
+ for (const part of arrayItemPath.split(".")) if (sibling && typeof sibling === "object") sibling = sibling[part];
16
+ else return null;
17
+ return typeof sibling === "object" ? sibling : null;
18
+ }
19
+ /**
20
+ * Get watched dependency values
21
+ */
22
+ function getWatchedValues(allValues, siblingData, watchDeps) {
23
+ const result = {};
24
+ for (const dep of watchDeps) if (dep.startsWith("$sibling.")) {
25
+ const siblingKey = dep.slice(9);
26
+ result[dep] = siblingData?.[siblingKey];
27
+ } else if (!dep.startsWith("$")) result[dep] = allValues[dep];
28
+ return result;
29
+ }
30
+ /**
31
+ * Hook to fetch dynamic options for select/relation fields.
32
+ * Supports search, pagination, and dependency-based refetching.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * const { options, isLoading, search, setSearch, loadMore } = useFieldOptions({
37
+ * collection: "orders",
38
+ * field: "items.0.city",
39
+ * optionsConfig: schema.fields.city.reactive?.options,
40
+ * });
41
+ *
42
+ * return (
43
+ * <Select
44
+ * options={options}
45
+ * isLoading={isLoading}
46
+ * onInputChange={setSearch}
47
+ * onMenuScrollToBottom={loadMore}
48
+ * />
49
+ * );
50
+ * ```
51
+ */
52
+ function useFieldOptions({ collection, mode = "collection", field, optionsConfig, staticOptions, initialSearch = "", limit = 20, enabled = true }) {
53
+ const client = useAdminStore((s) => s.client);
54
+ const form = useFormContext();
55
+ const [options, setOptions] = React$1.useState([]);
56
+ const [isLoading, setIsLoading] = React$1.useState(false);
57
+ const [hasMore, setHasMore] = React$1.useState(false);
58
+ const [total, setTotal] = React$1.useState();
59
+ const [search, setSearch] = React$1.useState(initialSearch);
60
+ const [page, setPage] = React$1.useState(0);
61
+ const [error, setError] = React$1.useState(null);
62
+ const watchedValues = useWatch({ control: form.control });
63
+ const formValues = React$1.useMemo(() => watchedValues ?? {}, [watchedValues]);
64
+ const siblingData = React$1.useMemo(() => getSiblingData(formValues, field), [formValues, field]);
65
+ const watchDeps = optionsConfig?.watch ?? [];
66
+ const depValues = React$1.useMemo(() => getWatchedValues(formValues, siblingData, watchDeps), [
67
+ formValues,
68
+ siblingData,
69
+ watchDeps
70
+ ]);
71
+ const depKey = JSON.stringify(depValues);
72
+ const prevDepKeyRef = React$1.useRef(depKey);
73
+ const fetchOptions = React$1.useCallback(async (currentPage, append = false) => {
74
+ if (!optionsConfig || !client) {
75
+ if (staticOptions) {
76
+ let filtered = staticOptions;
77
+ if (search) {
78
+ const searchLower = search.toLowerCase();
79
+ filtered = staticOptions.filter((opt) => {
80
+ return (typeof opt.label === "string" ? opt.label : Object.values(opt.label).join(" ")).toLowerCase().includes(searchLower);
81
+ });
82
+ }
83
+ setOptions(filtered);
84
+ setHasMore(false);
85
+ setTotal(filtered.length);
86
+ }
87
+ return;
88
+ }
89
+ setIsLoading(true);
90
+ setError(null);
91
+ try {
92
+ const response = await client.rpc.fieldOptions({
93
+ collection,
94
+ type: mode,
95
+ field,
96
+ formData: formValues,
97
+ siblingData,
98
+ search,
99
+ page: currentPage,
100
+ limit
101
+ });
102
+ const newOptions = response.options;
103
+ if (append) setOptions((prev) => [...prev, ...newOptions]);
104
+ else setOptions(newOptions);
105
+ setHasMore(response.hasMore ?? false);
106
+ setTotal(response.total);
107
+ } catch (err) {
108
+ console.error("Field options error:", err);
109
+ setError(err instanceof Error ? err : new Error(String(err)));
110
+ } finally {
111
+ setIsLoading(false);
112
+ }
113
+ }, [
114
+ client,
115
+ collection,
116
+ mode,
117
+ field,
118
+ formValues,
119
+ siblingData,
120
+ search,
121
+ limit,
122
+ optionsConfig,
123
+ staticOptions
124
+ ]);
125
+ React$1.useEffect(() => {
126
+ if (!enabled) return;
127
+ if (prevDepKeyRef.current !== depKey) {
128
+ prevDepKeyRef.current = depKey;
129
+ setPage(0);
130
+ fetchOptions(0, false);
131
+ }
132
+ }, [
133
+ enabled,
134
+ depKey,
135
+ fetchOptions
136
+ ]);
137
+ const searchDebounceRef = React$1.useRef(null);
138
+ React$1.useEffect(() => {
139
+ if (!enabled) return;
140
+ if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);
141
+ searchDebounceRef.current = setTimeout(() => {
142
+ setPage(0);
143
+ fetchOptions(0, false);
144
+ }, 300);
145
+ return () => {
146
+ if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);
147
+ };
148
+ }, [
149
+ enabled,
150
+ search,
151
+ fetchOptions
152
+ ]);
153
+ React$1.useEffect(() => {
154
+ if (enabled) fetchOptions(0, false);
155
+ }, []);
156
+ return {
157
+ options,
158
+ isLoading,
159
+ hasMore,
160
+ total,
161
+ search,
162
+ setSearch,
163
+ loadMore: React$1.useCallback(() => {
164
+ if (isLoading || !hasMore) return;
165
+ const nextPage = page + 1;
166
+ setPage(nextPage);
167
+ fetchOptions(nextPage, true);
168
+ }, [
169
+ isLoading,
170
+ hasMore,
171
+ page,
172
+ fetchOptions
173
+ ]),
174
+ refresh: React$1.useCallback(() => {
175
+ setPage(0);
176
+ fetchOptions(0, false);
177
+ }, [fetchOptions]),
178
+ error
179
+ };
180
+ }
181
+
182
+ //#endregion
183
+ export { useFieldOptions };
184
+ //# sourceMappingURL=use-field-options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field-options.mjs","names":["result: Record<string, any>","React"],"sources":["../../../src/client/hooks/use-field-options.ts"],"sourcesContent":["/**\n * Field Options Hook\n *\n * Fetches dynamic options for select/relation fields from the server.\n * Supports search, pagination, and dependency-based refetching.\n */\n\nimport type { SerializedOptionsConfig } from \"questpie\";\nimport * as React from \"react\";\nimport { useFormContext, useWatch } from \"react-hook-form\";\nimport { useAdminStore } from \"../runtime/provider.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Option item\n */\nexport interface OptionItem {\n\tvalue: string | number;\n\tlabel: string | Record<string, string>;\n}\n\n/**\n * Options for useFieldOptions hook\n */\nexport interface UseFieldOptionsOptions {\n\t/** Collection or global name */\n\tcollection: string;\n\n\t/** Entity type - collection or global */\n\tmode?: \"collection\" | \"global\";\n\n\t/** Field path */\n\tfield: string;\n\n\t/** Options config from introspection */\n\toptionsConfig?: SerializedOptionsConfig;\n\n\t/** Static options (fallback if no dynamic config) */\n\tstaticOptions?: OptionItem[];\n\n\t/** Initial search query */\n\tinitialSearch?: string;\n\n\t/** Items per page */\n\tlimit?: number;\n\n\t/** Whether to enable fetching */\n\tenabled?: boolean;\n}\n\n/**\n * Result from useFieldOptions hook\n */\nexport interface UseFieldOptionsResult {\n\t/** Current options */\n\toptions: OptionItem[];\n\n\t/** Whether options are loading */\n\tisLoading: boolean;\n\n\t/** Whether more options are available */\n\thasMore: boolean;\n\n\t/** Total count (if available) */\n\ttotal?: number;\n\n\t/** Current search query */\n\tsearch: string;\n\n\t/** Set search query */\n\tsetSearch: (search: string) => void;\n\n\t/** Load more options (pagination) */\n\tloadMore: () => void;\n\n\t/** Refresh options */\n\trefresh: () => void;\n\n\t/** Error */\n\terror: Error | null;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get sibling data for a field path (for fields inside arrays)\n */\nfunction getSiblingData(\n\tvalues: Record<string, any>,\n\tfieldPath: string,\n): Record<string, any> | null {\n\tconst parts = fieldPath.split(\".\");\n\tconst numericIndex = parts.findIndex((p) => /^\\d+$/.test(p));\n\n\tif (numericIndex === -1) {\n\t\treturn null;\n\t}\n\n\tconst arrayItemPath = parts.slice(0, numericIndex + 1).join(\".\");\n\n\tlet sibling = values;\n\tfor (const part of arrayItemPath.split(\".\")) {\n\t\tif (sibling && typeof sibling === \"object\") {\n\t\t\tsibling = sibling[part];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn typeof sibling === \"object\" ? sibling : null;\n}\n\n/**\n * Get watched dependency values\n */\nfunction getWatchedValues(\n\tallValues: Record<string, any>,\n\tsiblingData: Record<string, any> | null,\n\twatchDeps: string[],\n): Record<string, any> {\n\tconst result: Record<string, any> = {};\n\n\tfor (const dep of watchDeps) {\n\t\tif (dep.startsWith(\"$sibling.\")) {\n\t\t\tconst siblingKey = dep.slice(\"$sibling.\".length);\n\t\t\tresult[dep] = siblingData?.[siblingKey];\n\t\t} else if (!dep.startsWith(\"$\")) {\n\t\t\tresult[dep] = allValues[dep];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * Hook to fetch dynamic options for select/relation fields.\n * Supports search, pagination, and dependency-based refetching.\n *\n * @example\n * ```tsx\n * const { options, isLoading, search, setSearch, loadMore } = useFieldOptions({\n * collection: \"orders\",\n * field: \"items.0.city\",\n * optionsConfig: schema.fields.city.reactive?.options,\n * });\n *\n * return (\n * <Select\n * options={options}\n * isLoading={isLoading}\n * onInputChange={setSearch}\n * onMenuScrollToBottom={loadMore}\n * />\n * );\n * ```\n */\nexport function useFieldOptions({\n\tcollection,\n\tmode = \"collection\",\n\tfield,\n\toptionsConfig,\n\tstaticOptions,\n\tinitialSearch = \"\",\n\tlimit = 20,\n\tenabled = true,\n}: UseFieldOptionsOptions): UseFieldOptionsResult {\n\tconst client = useAdminStore((s) => s.client);\n\tconst form = useFormContext();\n\n\t// State\n\tconst [options, setOptions] = React.useState<OptionItem[]>([]);\n\tconst [isLoading, setIsLoading] = React.useState(false);\n\tconst [hasMore, setHasMore] = React.useState(false);\n\tconst [total, setTotal] = React.useState<number | undefined>();\n\tconst [search, setSearch] = React.useState(initialSearch);\n\tconst [page, setPage] = React.useState(0);\n\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t// Watch form values for deps\n\tconst watchedValues = useWatch({ control: form.control });\n\tconst formValues = React.useMemo(\n\t\t() => (watchedValues ?? {}) as Record<string, any>,\n\t\t[watchedValues],\n\t);\n\n\t// Get sibling data\n\tconst siblingData = React.useMemo(\n\t\t() => getSiblingData(formValues, field),\n\t\t[formValues, field],\n\t);\n\n\t// Get watched dep values for comparison\n\tconst watchDeps = optionsConfig?.watch ?? [];\n\tconst depValues = React.useMemo(\n\t\t() => getWatchedValues(formValues, siblingData, watchDeps),\n\t\t[formValues, siblingData, watchDeps],\n\t);\n\tconst depKey = JSON.stringify(depValues);\n\n\t// Previous dep key for change detection\n\tconst prevDepKeyRef = React.useRef(depKey);\n\n\t// Fetch options from server\n\tconst fetchOptions = React.useCallback(\n\t\tasync (currentPage: number, append: boolean = false) => {\n\t\t\t// If no dynamic config, use static options\n\t\t\tif (!optionsConfig || !client) {\n\t\t\t\tif (staticOptions) {\n\t\t\t\t\tlet filtered = staticOptions;\n\t\t\t\t\tif (search) {\n\t\t\t\t\t\tconst searchLower = search.toLowerCase();\n\t\t\t\t\t\tfiltered = staticOptions.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\t\t\t\t\tsetOptions(filtered);\n\t\t\t\t\tsetHasMore(false);\n\t\t\t\t\tsetTotal(filtered.length);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst response = await (client.rpc as any).fieldOptions({\n\t\t\t\t\tcollection,\n\t\t\t\t\ttype: mode,\n\t\t\t\t\tfield,\n\t\t\t\t\tformData: formValues,\n\t\t\t\t\tsiblingData,\n\t\t\t\t\tsearch,\n\t\t\t\t\tpage: currentPage,\n\t\t\t\t\tlimit,\n\t\t\t\t});\n\n\t\t\t\tconst newOptions = response.options as OptionItem[];\n\n\t\t\t\tif (append) {\n\t\t\t\t\tsetOptions((prev) => [...prev, ...newOptions]);\n\t\t\t\t} else {\n\t\t\t\t\tsetOptions(newOptions);\n\t\t\t\t}\n\n\t\t\t\tsetHasMore(response.hasMore ?? false);\n\t\t\t\tsetTotal(response.total);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"Field options error:\", err);\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tclient,\n\t\t\tcollection,\n\t\t\tmode,\n\t\t\tfield,\n\t\t\tformValues,\n\t\t\tsiblingData,\n\t\t\tsearch,\n\t\t\tlimit,\n\t\t\toptionsConfig,\n\t\t\tstaticOptions,\n\t\t],\n\t);\n\n\t// Effect to fetch options when deps change\n\tReact.useEffect(() => {\n\t\tif (!enabled) return;\n\n\t\t// Check if deps changed\n\t\tif (prevDepKeyRef.current !== depKey) {\n\t\t\tprevDepKeyRef.current = depKey;\n\t\t\tsetPage(0);\n\t\t\tfetchOptions(0, false);\n\t\t}\n\t}, [enabled, depKey, fetchOptions]);\n\n\t// Effect to fetch options when search changes\n\tconst searchDebounceRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n\t\tnull,\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled) return;\n\n\t\tif (searchDebounceRef.current) {\n\t\t\tclearTimeout(searchDebounceRef.current);\n\t\t}\n\n\t\tsearchDebounceRef.current = setTimeout(() => {\n\t\t\tsetPage(0);\n\t\t\tfetchOptions(0, false);\n\t\t}, 300); // Debounce search\n\n\t\treturn () => {\n\t\t\tif (searchDebounceRef.current) {\n\t\t\t\tclearTimeout(searchDebounceRef.current);\n\t\t\t}\n\t\t};\n\t}, [enabled, search, fetchOptions]);\n\n\t// Initial fetch\n\tReact.useEffect(() => {\n\t\tif (enabled) {\n\t\t\tfetchOptions(0, false);\n\t\t}\n\t\t// Only run on mount\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Load more handler\n\tconst loadMore = React.useCallback(() => {\n\t\tif (isLoading || !hasMore) return;\n\t\tconst nextPage = page + 1;\n\t\tsetPage(nextPage);\n\t\tfetchOptions(nextPage, true);\n\t}, [isLoading, hasMore, page, fetchOptions]);\n\n\t// Refresh handler\n\tconst refresh = React.useCallback(() => {\n\t\tsetPage(0);\n\t\tfetchOptions(0, false);\n\t}, [fetchOptions]);\n\n\treturn {\n\t\toptions,\n\t\tisLoading,\n\t\thasMore,\n\t\ttotal,\n\t\tsearch,\n\t\tsetSearch,\n\t\tloadMore,\n\t\trefresh,\n\t\terror,\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { selectAdmin, useAdminStore } from "../runtime/provider.mjs";
2
+ import { buildFieldDefinitionsFromSchema } from "../utils/build-field-definitions-from-schema.mjs";
3
+ import { useGlobalSchema } from "./use-global-schema.mjs";
4
+ import { useMemo } from "react";
5
+
6
+ //#region src/client/hooks/use-global-fields.ts
7
+ function useGlobalFields(globalName, options = {}) {
8
+ const admin = useAdminStore(selectAdmin);
9
+ const { data: schema, isLoading, error } = useGlobalSchema(globalName, options.schemaQueryOptions);
10
+ return {
11
+ fields: useMemo(() => {
12
+ if (!schema || !admin) return {};
13
+ return buildFieldDefinitionsFromSchema(schema, admin.getFields(), options.buildOptions);
14
+ }, [
15
+ schema,
16
+ admin,
17
+ options.buildOptions
18
+ ]),
19
+ schema,
20
+ isLoading,
21
+ error
22
+ };
23
+ }
24
+
25
+ //#endregion
26
+ export { useGlobalFields };
27
+ //# sourceMappingURL=use-global-fields.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-global-fields.mjs","names":[],"sources":["../../../src/client/hooks/use-global-fields.ts"],"sourcesContent":["/**\n * Hook for resolving field definitions from global schema\n *\n * Builds FieldDefinition objects from server introspection schema.\n */\n\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport type { GlobalSchema } from \"questpie\";\nimport { useMemo } from \"react\";\nimport type { FieldDefinition } from \"../builder/field/field\";\nimport { selectAdmin, useAdminStore } from \"../runtime\";\nimport {\n type BuildFieldDefinitionsOptions,\n buildFieldDefinitionsFromSchema,\n} from \"../utils/build-field-definitions-from-schema\";\nimport { useGlobalSchema } from \"./use-global-schema\";\n\nexport interface UseGlobalFieldsOptions {\n /**\n * React Query options for schema fetching\n */\n schemaQueryOptions?: Omit<\n UseQueryOptions<GlobalSchema>,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * Options for building field definitions from schema\n */\n buildOptions?: BuildFieldDefinitionsOptions;\n}\n\nexport function useGlobalFields(\n globalName: string,\n options: UseGlobalFieldsOptions = {},\n) {\n const admin = useAdminStore(selectAdmin);\n const {\n data: schema,\n isLoading,\n error,\n } = useGlobalSchema(globalName, options.schemaQueryOptions);\n\n const fields = useMemo(() => {\n if (!schema || !admin) return {};\n const registry = admin.getFields() as Record<string, any>;\n return buildFieldDefinitionsFromSchema(\n schema,\n registry,\n options.buildOptions,\n );\n }, [schema, admin, options.buildOptions]);\n\n return { fields, schema, isLoading, error };\n}\n"],"mappings":";;;;;;AA+BA,SAAgB,gBACd,YACA,UAAkC,EAAE,EACpC;CACA,MAAM,QAAQ,cAAc,YAAY;CACxC,MAAM,EACJ,MAAM,QACN,WACA,UACE,gBAAgB,YAAY,QAAQ,mBAAmB;AAY3D,QAAO;EAAE,QAVM,cAAc;AAC3B,OAAI,CAAC,UAAU,CAAC,MAAO,QAAO,EAAE;AAEhC,UAAO,gCACL,QAFe,MAAM,WAAW,EAIhC,QAAQ,aACT;KACA;GAAC;GAAQ;GAAO,QAAQ;GAAa,CAAC;EAExB;EAAQ;EAAW;EAAO"}
@@ -0,0 +1,59 @@
1
+ import { selectClient, useAdminStore } from "../runtime/provider.mjs";
2
+ import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
3
+
4
+ //#region src/client/hooks/use-global-meta.ts
5
+ /**
6
+ * Hook for fetching global metadata from the backend
7
+ *
8
+ * Used to get introspection info about globals like:
9
+ * - Whether timestamps are enabled
10
+ * - Whether versioning is enabled
11
+ * - Localized fields
12
+ * - Virtual fields
13
+ */
14
+ /**
15
+ * Hook to fetch global metadata from the backend
16
+ *
17
+ * Returns metadata useful for building dynamic UIs:
18
+ * - timestamps: Whether createdAt/updatedAt are enabled
19
+ * - versioning: Whether versioning is enabled
20
+ * - localizedFields: Fields that support i18n
21
+ * - virtualFields: Fields that are computed
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * const { data: meta } = useGlobalMeta("siteSettings");
26
+ *
27
+ * if (meta?.timestamps) {
28
+ * console.log("Timestamps enabled for this global");
29
+ * }
30
+ * ```
31
+ */
32
+ function useGlobalMeta(global, queryOptions) {
33
+ const client = useAdminStore(selectClient);
34
+ return useQuery({
35
+ queryKey: getGlobalMetaQueryKey(global),
36
+ queryFn: async () => {
37
+ return client.globals[global].meta();
38
+ },
39
+ staleTime: 300 * 1e3,
40
+ gcTime: 1800 * 1e3,
41
+ ...queryOptions
42
+ });
43
+ }
44
+ /**
45
+ * Query key for global meta
46
+ * Useful for prefetching or invalidation
47
+ */
48
+ function getGlobalMetaQueryKey(global) {
49
+ return [
50
+ "questpie",
51
+ "globals",
52
+ global,
53
+ "meta"
54
+ ];
55
+ }
56
+
57
+ //#endregion
58
+ export { useGlobalMeta };
59
+ //# sourceMappingURL=use-global-meta.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-global-meta.mjs","names":[],"sources":["../../../src/client/hooks/use-global-meta.ts"],"sourcesContent":["/**\n * Hook for fetching global metadata from the backend\n *\n * Used to get introspection info about globals like:\n * - Whether timestamps are enabled\n * - Whether versioning is enabled\n * - Localized fields\n * - Virtual fields\n */\n\nimport {\n\ttype UseQueryOptions,\n\tuseQuery,\n\tuseSuspenseQuery,\n} from \"@tanstack/react-query\";\nimport type { Questpie } from \"questpie\";\nimport type { GlobalMeta } from \"questpie/client\";\nimport type { RegisteredCMS, RegisteredGlobalNames } from \"../builder/registry\";\nimport { selectClient, useAdminStore } from \"../runtime\";\n\ntype ResolvedGlobalNames =\n\tRegisteredCMS extends Questpie<any> ? RegisteredGlobalNames : string;\n\n/**\n * Hook to fetch global metadata from the backend\n *\n * Returns metadata useful for building dynamic UIs:\n * - timestamps: Whether createdAt/updatedAt are enabled\n * - versioning: Whether versioning is enabled\n * - localizedFields: Fields that support i18n\n * - virtualFields: Fields that are computed\n *\n * @example\n * ```tsx\n * const { data: meta } = useGlobalMeta(\"siteSettings\");\n *\n * if (meta?.timestamps) {\n * console.log(\"Timestamps enabled for this global\");\n * }\n * ```\n */\nexport function useGlobalMeta<K extends ResolvedGlobalNames>(\n\tglobal: K,\n\tqueryOptions?: Omit<UseQueryOptions<GlobalMeta>, \"queryKey\" | \"queryFn\">,\n) {\n\tconst client = useAdminStore(selectClient);\n\n\treturn useQuery<GlobalMeta>({\n\t\tqueryKey: getGlobalMetaQueryKey(global),\n\t\tqueryFn: async () => {\n\t\t\treturn (client as any).globals[global].meta();\n\t\t},\n\t\tstaleTime: 5 * 60 * 1000,\n\t\tgcTime: 30 * 60 * 1000,\n\t\t...queryOptions,\n\t});\n}\n\n/**\n * Query key for global meta\n * Useful for prefetching or invalidation\n */\nexport function getGlobalMetaQueryKey(global: string) {\n\treturn [\"questpie\", \"globals\", global, \"meta\"] as const;\n}\n\n/**\n * Query options factory for global metadata\n * Can be used with TanStack Query's prefetching in loaders or with useSuspenseQuery\n *\n * @example\n * ```ts\n * // In TanStack Start loader\n * export const Route = createFileRoute(\"/admin/globals/:name\")({\n * loader: async ({ context, params }) => {\n * await context.queryClient.ensureQueryData(\n * getGlobalMetaQueryOptions(params.name, context.client)\n * );\n * },\n * });\n * ```\n */\nexport function getGlobalMetaQueryOptions(global: string, client: any) {\n\treturn {\n\t\tqueryKey: getGlobalMetaQueryKey(global),\n\t\tqueryFn: async (): Promise<GlobalMeta> => {\n\t\t\treturn client.globals[global].meta();\n\t\t},\n\t\tstaleTime: 5 * 60 * 1000,\n\t\tgcTime: 30 * 60 * 1000,\n\t};\n}\n\n/**\n * Suspense-enabled hook to fetch global metadata\n *\n * Uses useSuspenseQuery so the component will suspend until data is loaded\n * Must be used within a Suspense boundary\n *\n * @example\n * ```tsx\n * function GlobalFormViewInner({ global }: Props) {\n * const { data: meta } = useSuspenseGlobalMeta(global);\n * // meta is guaranteed to be defined here\n * console.log(meta.localizedFields);\n * }\n *\n * // Wrap with Suspense\n * <Suspense fallback={<Loading />}>\n * <GlobalFormViewInner global=\"siteSettings\" />\n * </Suspense>\n * ```\n */\nexport function useSuspenseGlobalMeta<K extends ResolvedGlobalNames>(\n\tglobal: K,\n) {\n\tconst client = useAdminStore(selectClient);\n\n\treturn useSuspenseQuery<GlobalMeta>(\n\t\tgetGlobalMetaQueryOptions(global, client),\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,cACf,QACA,cACC;CACD,MAAM,SAAS,cAAc,aAAa;AAE1C,QAAO,SAAqB;EAC3B,UAAU,sBAAsB,OAAO;EACvC,SAAS,YAAY;AACpB,UAAQ,OAAe,QAAQ,QAAQ,MAAM;;EAE9C,WAAW,MAAS;EACpB,QAAQ,OAAU;EAClB,GAAG;EACH,CAAC;;;;;;AAOH,SAAgB,sBAAsB,QAAgB;AACrD,QAAO;EAAC;EAAY;EAAW;EAAQ;EAAO"}
@@ -0,0 +1,33 @@
1
+ import { selectClient, useAdminStore } from "../runtime/provider.mjs";
2
+ import { useQuery } from "@tanstack/react-query";
3
+
4
+ //#region src/client/hooks/use-global-schema.ts
5
+ /**
6
+ * Hook for fetching global schema from the backend
7
+ *
8
+ * Returns introspection data including fields, access, and validation.
9
+ */
10
+ function useGlobalSchema(global, queryOptions) {
11
+ const client = useAdminStore(selectClient);
12
+ return useQuery({
13
+ queryKey: getGlobalSchemaQueryKey(global),
14
+ queryFn: async () => {
15
+ return client.globals[global].schema();
16
+ },
17
+ staleTime: 300 * 1e3,
18
+ gcTime: 1800 * 1e3,
19
+ ...queryOptions
20
+ });
21
+ }
22
+ function getGlobalSchemaQueryKey(global) {
23
+ return [
24
+ "questpie",
25
+ "globals",
26
+ global,
27
+ "schema"
28
+ ];
29
+ }
30
+
31
+ //#endregion
32
+ export { useGlobalSchema };
33
+ //# sourceMappingURL=use-global-schema.mjs.map