@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 @@
1
+ {"version":3,"file":"use-global-schema.mjs","names":[],"sources":["../../../src/client/hooks/use-global-schema.ts"],"sourcesContent":["/**\n * Hook for fetching global schema from the backend\n *\n * Returns introspection data including fields, access, and validation.\n */\n\nimport { type UseQueryOptions, useQuery } from \"@tanstack/react-query\";\nimport type { GlobalSchema, Questpie } from \"questpie\";\nimport type { RegisteredCMS, RegisteredGlobalNames } from \"../builder/registry\";\nimport { selectClient, useAdminStore } from \"../runtime\";\n\n// ==========================================================================\n// Type Helpers\n// ==========================================================================\n\n/**\n * Resolved global names (string if not registered)\n */\ntype ResolvedGlobalNames =\n RegisteredCMS extends Questpie<any> ? RegisteredGlobalNames : string;\n\n// ==========================================================================\n// Hook\n// ==========================================================================\n\nexport function useGlobalSchema<K extends ResolvedGlobalNames>(\n global: K,\n queryOptions?: Omit<UseQueryOptions<GlobalSchema>, \"queryKey\" | \"queryFn\">,\n) {\n const client = useAdminStore(selectClient);\n\n return useQuery<GlobalSchema>({\n queryKey: getGlobalSchemaQueryKey(global),\n queryFn: async () => {\n return (client as any).globals[global].schema();\n },\n staleTime: 5 * 60 * 1000,\n gcTime: 30 * 60 * 1000,\n ...queryOptions,\n });\n}\n\nexport function getGlobalSchemaQueryKey(global: string) {\n return [\"questpie\", \"globals\", global, \"schema\"] as const;\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAgB,gBACd,QACA,cACA;CACA,MAAM,SAAS,cAAc,aAAa;AAE1C,QAAO,SAAuB;EAC5B,UAAU,wBAAwB,OAAO;EACzC,SAAS,YAAY;AACnB,UAAQ,OAAe,QAAQ,QAAQ,QAAQ;;EAEjD,WAAW,MAAS;EACpB,QAAQ,OAAU;EAClB,GAAG;EACJ,CAAC;;AAGJ,SAAgB,wBAAwB,QAAgB;AACtD,QAAO;EAAC;EAAY;EAAW;EAAQ;EAAS"}
@@ -0,0 +1,40 @@
1
+ import { RegisteredCMS, RegisteredGlobalNames } from "../builder/registry.mjs";
2
+ import { UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
3
+ import { Questpie } from "questpie";
4
+
5
+ //#region src/client/hooks/use-global.d.ts
6
+ type GlobalRealtimeOptions = {
7
+ realtime?: boolean;
8
+ };
9
+ /**
10
+ * Resolved global names (string if not registered)
11
+ */
12
+ type ResolvedGlobalNames = RegisteredCMS extends Questpie<any> ? RegisteredGlobalNames : string;
13
+ /**
14
+ * Hook to fetch global settings
15
+ *
16
+ * Uses RegisteredCMS from module augmentation for automatic type inference.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * // Types inferred from module augmentation!
21
+ * const { data } = useGlobal("siteSettings");
22
+ * ```
23
+ */
24
+ declare function useGlobal<K extends ResolvedGlobalNames>(globalName: K, options?: any, queryOptions?: Omit<UseQueryOptions, "queryKey" | "queryFn">, realtimeOptions?: GlobalRealtimeOptions): any;
25
+ /**
26
+ * Hook to update global settings
27
+ *
28
+ * Uses RegisteredCMS from module augmentation for automatic type inference.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * // Types inferred from module augmentation!
33
+ * const { mutate } = useGlobalUpdate("siteSettings");
34
+ * mutate({ data: { siteName: "New Name" } });
35
+ * ```
36
+ */
37
+ declare function useGlobalUpdate<K extends ResolvedGlobalNames>(globalName: K, mutationOptions?: Omit<UseMutationOptions, "mutationFn">): any;
38
+ //#endregion
39
+ export { useGlobal, useGlobalUpdate };
40
+ //# sourceMappingURL=use-global.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-global.d.mts","names":[],"sources":["../../../src/client/hooks/use-global.ts"],"sourcesContent":[],"mappings":";;;;;KAiBK,qBAAA;;AAP2E,CAAA;AAOtD;;;KAiBrB,mBAAA,GACJ,aAAsC,SAAhB,QAAgB,CAAA,GAAA,CAAA,GAAA,qBAAA,GAAA,MAAA;;AAiBvC;;;;;;;AA0CA;;;AAEwB,iBA5CR,SA4CQ,CAAA,UA5CY,mBA4CZ,CAAA,CAAA,UAAA,EA3CX,CA2CW,EAAA,OAAA,CAAA,EAAA,GAAA,EAAA,YAAA,CAAA,EAzCR,IAyCQ,CAzCH,eAyCG,EAAA,UAAA,GAAA,SAAA,CAAA,EAAA,eAAA,CAAA,EAxCL,qBAwCK,CAAA,EAAA,GAAA;;;;;;;;;;;;;iBAFR,0BAA0B,iCAC7B,qBACM,KAAK"}
@@ -0,0 +1,74 @@
1
+ import { selectClient, selectContentLocale, useAdminStore } from "../runtime/provider.mjs";
2
+ import { createQuestpieQueryOptions } from "@questpie/tanstack-query";
3
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
+
5
+ //#region src/client/hooks/use-global.ts
6
+ /**
7
+ * Hook to fetch global settings
8
+ *
9
+ * Uses RegisteredCMS from module augmentation for automatic type inference.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * // Types inferred from module augmentation!
14
+ * const { data } = useGlobal("siteSettings");
15
+ * ```
16
+ */
17
+ function useGlobal(globalName, options, queryOptions, realtimeOptions) {
18
+ const client = useAdminStore(selectClient);
19
+ const contentLocale = useAdminStore(selectContentLocale);
20
+ const queryOpts = createQuestpieQueryOptions(client, {
21
+ keyPrefix: ["questpie", "globals"],
22
+ locale: contentLocale
23
+ });
24
+ const globalOptions = {
25
+ ...options,
26
+ locale: contentLocale
27
+ };
28
+ return useQuery({
29
+ ...queryOpts.globals[globalName].get(globalOptions, { realtime: realtimeOptions?.realtime }),
30
+ ...queryOptions
31
+ });
32
+ }
33
+ /**
34
+ * Hook to update global settings
35
+ *
36
+ * Uses RegisteredCMS from module augmentation for automatic type inference.
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * // Types inferred from module augmentation!
41
+ * const { mutate } = useGlobalUpdate("siteSettings");
42
+ * mutate({ data: { siteName: "New Name" } });
43
+ * ```
44
+ */
45
+ function useGlobalUpdate(globalName, mutationOptions) {
46
+ const client = useAdminStore(selectClient);
47
+ const contentLocale = useAdminStore(selectContentLocale);
48
+ const queryClient = useQueryClient();
49
+ const queryOpts = createQuestpieQueryOptions(client, {
50
+ keyPrefix: ["questpie", "globals"],
51
+ locale: contentLocale
52
+ });
53
+ const globalQueryKey = queryOpts.key([
54
+ "globals",
55
+ globalName,
56
+ "get",
57
+ contentLocale
58
+ ]);
59
+ return useMutation({
60
+ ...queryOpts.globals[globalName].update(),
61
+ onSuccess: (data, variables, context) => {
62
+ (mutationOptions?.onSuccess)?.(data, variables, context);
63
+ },
64
+ onSettled: (data, error, variables, context) => {
65
+ queryClient.invalidateQueries({ queryKey: globalQueryKey });
66
+ (mutationOptions?.onSettled)?.(data, error, variables, context);
67
+ },
68
+ ...mutationOptions
69
+ });
70
+ }
71
+
72
+ //#endregion
73
+ export { useGlobal, useGlobalUpdate };
74
+ //# sourceMappingURL=use-global.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-global.mjs","names":[],"sources":["../../../src/client/hooks/use-global.ts"],"sourcesContent":["import { createQuestpieQueryOptions } from \"@questpie/tanstack-query\";\nimport {\n\ttype UseMutationOptions,\n\ttype UseQueryOptions,\n\tuseMutation,\n\tuseQuery,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport type { Questpie } from \"questpie\";\nimport type { QuestpieClient } from \"questpie/client\";\nimport type { RegisteredCMS, RegisteredGlobalNames } from \"../builder/registry\";\nimport {\n\tselectClient,\n\tselectContentLocale,\n\tuseAdminStore,\n} from \"../runtime\";\n\ntype GlobalRealtimeOptions = {\n\trealtime?: boolean;\n};\n\n// ============================================================================\n// Type Helpers\n// ============================================================================\n\n/**\n * Resolved CMS type (Questpie<any> if not registered)\n */\ntype ResolvedCMS =\n\tRegisteredCMS extends Questpie<any> ? RegisteredCMS : Questpie<any>;\n\n/**\n * Resolved global names (string if not registered)\n */\ntype ResolvedGlobalNames =\n\tRegisteredCMS extends Questpie<any> ? RegisteredGlobalNames : string;\n\n// ============================================================================\n// Global Hooks\n// ============================================================================\n\n/**\n * Hook to fetch global settings\n *\n * Uses RegisteredCMS from module augmentation for automatic type inference.\n *\n * @example\n * ```tsx\n * // Types inferred from module augmentation!\n * const { data } = useGlobal(\"siteSettings\");\n * ```\n */\nexport function useGlobal<K extends ResolvedGlobalNames>(\n\tglobalName: K,\n\toptions?: any,\n\tqueryOptions?: Omit<UseQueryOptions, \"queryKey\" | \"queryFn\">,\n\trealtimeOptions?: GlobalRealtimeOptions,\n): any {\n\tconst client = useAdminStore(selectClient);\n\tconst contentLocale = useAdminStore(selectContentLocale);\n\tconst queryOpts = createQuestpieQueryOptions(client as any, {\n\t\tkeyPrefix: [\"questpie\", \"globals\"],\n\t\tlocale: contentLocale,\n\t});\n\n\tconst globalOptions = {\n\t\t...options,\n\t\tlocale: contentLocale,\n\t};\n\n\t// Pass realtime option to query options builder - this uses streamedQuery internally\n\tconst baseQuery = (queryOpts as any).globals[globalName as string].get(\n\t\tglobalOptions as any,\n\t\t{ realtime: realtimeOptions?.realtime },\n\t);\n\n\treturn useQuery({\n\t\t...baseQuery,\n\t\t...queryOptions,\n\t});\n}\n\n/**\n * Hook to update global settings\n *\n * Uses RegisteredCMS from module augmentation for automatic type inference.\n *\n * @example\n * ```tsx\n * // Types inferred from module augmentation!\n * const { mutate } = useGlobalUpdate(\"siteSettings\");\n * mutate({ data: { siteName: \"New Name\" } });\n * ```\n */\nexport function useGlobalUpdate<K extends ResolvedGlobalNames>(\n\tglobalName: K,\n\tmutationOptions?: Omit<UseMutationOptions, \"mutationFn\">,\n): any {\n\tconst client = useAdminStore(selectClient);\n\tconst contentLocale = useAdminStore(selectContentLocale);\n\tconst queryClient = useQueryClient();\n\tconst queryOpts = createQuestpieQueryOptions(client as any, {\n\t\tkeyPrefix: [\"questpie\", \"globals\"],\n\t\tlocale: contentLocale,\n\t});\n\n\tconst globalQueryKey = queryOpts.key([\n\t\t\"globals\",\n\t\tglobalName as string,\n\t\t\"get\",\n\t\tcontentLocale,\n\t]);\n\n\treturn useMutation({\n\t\t...(queryOpts as any).globals[globalName as string].update(),\n\t\tonSuccess: (data: any, variables: any, context: any) => {\n\t\t\t(mutationOptions?.onSuccess as any)?.(data, variables, context);\n\t\t},\n\t\tonSettled: (data: any, error: any, variables: any, context: any) => {\n\t\t\tqueryClient.invalidateQueries({\n\t\t\t\tqueryKey: globalQueryKey,\n\t\t\t});\n\t\t\t(mutationOptions?.onSettled as any)?.(data, error, variables, context);\n\t\t},\n\t\t...mutationOptions,\n\t} as any);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoDA,SAAgB,UACf,YACA,SACA,cACA,iBACM;CACN,MAAM,SAAS,cAAc,aAAa;CAC1C,MAAM,gBAAgB,cAAc,oBAAoB;CACxD,MAAM,YAAY,2BAA2B,QAAe;EAC3D,WAAW,CAAC,YAAY,UAAU;EAClC,QAAQ;EACR,CAAC;CAEF,MAAM,gBAAgB;EACrB,GAAG;EACH,QAAQ;EACR;AAQD,QAAO,SAAS;EACf,GANkB,UAAkB,QAAQ,YAAsB,IAClE,eACA,EAAE,UAAU,iBAAiB,UAAU,CACvC;EAIA,GAAG;EACH,CAAC;;;;;;;;;;;;;;AAeH,SAAgB,gBACf,YACA,iBACM;CACN,MAAM,SAAS,cAAc,aAAa;CAC1C,MAAM,gBAAgB,cAAc,oBAAoB;CACxD,MAAM,cAAc,gBAAgB;CACpC,MAAM,YAAY,2BAA2B,QAAe;EAC3D,WAAW,CAAC,YAAY,UAAU;EAClC,QAAQ;EACR,CAAC;CAEF,MAAM,iBAAiB,UAAU,IAAI;EACpC;EACA;EACA;EACA;EACA,CAAC;AAEF,QAAO,YAAY;EAClB,GAAI,UAAkB,QAAQ,YAAsB,QAAQ;EAC5D,YAAY,MAAW,WAAgB,YAAiB;AACvD,IAAC,iBAAiB,aAAoB,MAAM,WAAW,QAAQ;;EAEhE,YAAY,MAAW,OAAY,WAAgB,YAAiB;AACnE,eAAY,kBAAkB,EAC7B,UAAU,gBACV,CAAC;AACF,IAAC,iBAAiB,aAAoB,MAAM,OAAO,WAAW,QAAQ;;EAEvE,GAAG;EACH,CAAQ"}
@@ -0,0 +1,245 @@
1
+ import { useCurrentUser } from "./use-current-user.mjs";
2
+ import { useQuestpieQueryOptions } from "./use-questpie-query-options.mjs";
3
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
+ import { useCallback, useEffect, useRef } from "react";
5
+
6
+ //#region src/client/hooks/use-locks.ts
7
+ /**
8
+ * Hooks for document locking (collaborative editing awareness)
9
+ *
10
+ * Provides realtime tracking of who is editing which documents.
11
+ * Used in table view to show lock indicators and in form view to manage locks.
12
+ */
13
+ /**
14
+ * Default lock duration in milliseconds (60 seconds)
15
+ * Lock expires if not refreshed within this time.
16
+ * Form should call refresh() on user activity (typing, clicking).
17
+ */
18
+ const LOCK_DURATION_MS = 6e4;
19
+ /** Helper to get user info from lock (handles both expanded and non-expanded) */
20
+ function getLockUser(lock) {
21
+ if (typeof lock.user === "string") return null;
22
+ return lock.user;
23
+ }
24
+ /** Helper to get user ID from lock */
25
+ function getLockUserId(lock) {
26
+ if (typeof lock.user === "string") return lock.user;
27
+ return lock.user.id;
28
+ }
29
+ /**
30
+ * Generate a unique session ID for this browser tab.
31
+ * Persisted in sessionStorage so it survives page refreshes but not tab close.
32
+ */
33
+ function getSessionId() {
34
+ if (typeof window === "undefined") return "server";
35
+ const key = "__questpie_lock_session_id__";
36
+ let sessionId = sessionStorage.getItem(key);
37
+ if (!sessionId) {
38
+ sessionId = crypto.randomUUID();
39
+ sessionStorage.setItem(key, sessionId);
40
+ }
41
+ return sessionId;
42
+ }
43
+ /**
44
+ * Track all active locks for a collection/global.
45
+ *
46
+ * Used in table views to show who is editing which rows.
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * const { locks, isLocked, getLock } = useLocks({
51
+ * resourceType: "collection",
52
+ * resource: "posts",
53
+ * realtime: true,
54
+ * });
55
+ *
56
+ * // In table row
57
+ * {isLocked(row.id) && (
58
+ * <LockIndicator user={getLock(row.id)?.userName} />
59
+ * )}
60
+ * ```
61
+ */
62
+ function useLocks(options) {
63
+ const { resourceType, resource, realtime = true } = options;
64
+ const { queryOpts } = useQuestpieQueryOptions();
65
+ const currentUser = useCurrentUser();
66
+ const { data: rawData, isLoading } = useQuery({ ...queryOpts.collections.adminLocks.find({
67
+ where: {
68
+ resourceType,
69
+ resource,
70
+ expiresAt: { gt: /* @__PURE__ */ new Date() }
71
+ },
72
+ with: { user: true }
73
+ }, { realtime }) });
74
+ const data = rawData;
75
+ const locks = /* @__PURE__ */ new Map();
76
+ if (data?.docs) for (const lock of data.docs) locks.set(lock.resourceId, lock);
77
+ return {
78
+ locks,
79
+ isLocked: useCallback((resourceId) => locks.has(resourceId), [locks]),
80
+ getLock: useCallback((resourceId) => locks.get(resourceId), [locks]),
81
+ isOwnLock: useCallback((resourceId) => {
82
+ const lock = locks.get(resourceId);
83
+ if (!lock) return false;
84
+ return getLockUserId(lock) === currentUser?.id;
85
+ }, [locks, currentUser?.id]),
86
+ isLoading
87
+ };
88
+ }
89
+ /**
90
+ * Manage a document lock for editing.
91
+ *
92
+ * Automatically acquires lock on mount, sends heartbeats, and releases on unmount.
93
+ *
94
+ * @example
95
+ * ```tsx
96
+ * function EditForm({ collection, id }) {
97
+ * const { isLocked, isBlocked, blockedBy } = useLock({
98
+ * resourceType: "collection",
99
+ * resource: collection,
100
+ * resourceId: id,
101
+ * });
102
+ *
103
+ * if (isBlocked) {
104
+ * return <LockedBanner user={blockedBy?.userName} />;
105
+ * }
106
+ *
107
+ * return <Form disabled={!isLocked} />;
108
+ * }
109
+ * ```
110
+ */
111
+ function useLock(options) {
112
+ const { resourceType, resource, resourceId, autoAcquire = true, onAcquired, onBlocked, onReleased } = options;
113
+ const { queryOpts } = useQuestpieQueryOptions();
114
+ const queryClient = useQueryClient();
115
+ const currentUser = useCurrentUser();
116
+ const lockIdRef = useRef(null);
117
+ const { data: rawExistingLockData, isLoading: isCheckingLock } = useQuery({
118
+ ...queryOpts.collections.adminLocks.find({
119
+ where: {
120
+ resourceType,
121
+ resource,
122
+ resourceId,
123
+ expiresAt: { gt: /* @__PURE__ */ new Date() }
124
+ },
125
+ with: { user: true },
126
+ limit: 1
127
+ }),
128
+ enabled: !!resourceId
129
+ });
130
+ const existingLock = rawExistingLockData?.docs?.[0] ?? null;
131
+ const sessionId = getSessionId();
132
+ const isOwnSession = existingLock?.sessionId === sessionId;
133
+ const isOwnUser = existingLock ? getLockUserId(existingLock) === currentUser?.id : false;
134
+ const blockedBy = existingLock && !isOwnUser ? existingLock : null;
135
+ const ownLockElsewhere = existingLock && isOwnUser && !isOwnSession;
136
+ const createMutation = useMutation({
137
+ mutationFn: async () => {
138
+ if (!currentUser) throw new Error("Not authenticated");
139
+ const expiresAt = new Date(Date.now() + LOCK_DURATION_MS);
140
+ return await queryOpts.collections.adminLocks.create({
141
+ resourceType,
142
+ resource,
143
+ resourceId,
144
+ user: currentUser.id,
145
+ sessionId,
146
+ expiresAt
147
+ });
148
+ },
149
+ onSuccess: (lock) => {
150
+ lockIdRef.current = lock.id;
151
+ onAcquired?.(lock);
152
+ queryClient.invalidateQueries({ queryKey: ["collections", "adminLocks"] });
153
+ }
154
+ });
155
+ const updateMutation = useMutation({ mutationFn: async () => {
156
+ if (!lockIdRef.current) return;
157
+ const expiresAt = new Date(Date.now() + LOCK_DURATION_MS);
158
+ await queryOpts.collections.adminLocks.update({
159
+ id: lockIdRef.current,
160
+ data: { expiresAt }
161
+ });
162
+ } });
163
+ const deleteMutation = useMutation({
164
+ mutationFn: async () => {
165
+ if (!lockIdRef.current) return;
166
+ await queryOpts.collections.adminLocks.delete({ id: lockIdRef.current });
167
+ },
168
+ onSuccess: () => {
169
+ lockIdRef.current = null;
170
+ onReleased?.();
171
+ queryClient.invalidateQueries({ queryKey: ["collections", "adminLocks"] });
172
+ }
173
+ });
174
+ const acquire = useCallback(async () => {
175
+ if (existingLock && !isOwnUser) {
176
+ onBlocked?.(existingLock);
177
+ return null;
178
+ }
179
+ if (isOwnSession && existingLock) {
180
+ lockIdRef.current = existingLock.id;
181
+ return existingLock;
182
+ }
183
+ try {
184
+ return await createMutation.mutateAsync();
185
+ } catch (error) {
186
+ console.error("Failed to acquire lock:", error);
187
+ return null;
188
+ }
189
+ }, [
190
+ existingLock,
191
+ isOwnUser,
192
+ isOwnSession,
193
+ createMutation,
194
+ onBlocked
195
+ ]);
196
+ const release = useCallback(async () => {
197
+ if (lockIdRef.current) try {
198
+ await deleteMutation.mutateAsync();
199
+ } catch (error) {
200
+ console.error("Failed to release lock:", error);
201
+ }
202
+ }, [deleteMutation]);
203
+ const refresh = useCallback(async () => {
204
+ if (lockIdRef.current) try {
205
+ await updateMutation.mutateAsync();
206
+ } catch (error) {
207
+ console.error("Failed to refresh lock:", error);
208
+ }
209
+ }, [updateMutation]);
210
+ useEffect(() => {
211
+ if (!autoAcquire || !resourceId || !currentUser || isCheckingLock) return;
212
+ if (existingLock !== void 0) if (blockedBy) onBlocked?.(blockedBy);
213
+ else acquire();
214
+ }, [
215
+ autoAcquire,
216
+ resourceId,
217
+ currentUser,
218
+ isCheckingLock,
219
+ existingLock,
220
+ blockedBy,
221
+ acquire,
222
+ onBlocked
223
+ ]);
224
+ useEffect(() => {
225
+ const mutate = deleteMutation.mutate;
226
+ return () => {
227
+ if (lockIdRef.current) mutate();
228
+ };
229
+ }, [deleteMutation.mutate]);
230
+ return {
231
+ lock: isOwnSession ? existingLock : null,
232
+ blockedBy,
233
+ isLocked: isOwnSession && !!existingLock,
234
+ isBlocked: !!blockedBy,
235
+ isOpenElsewhere: !!ownLockElsewhere,
236
+ isPending: isCheckingLock || createMutation.isPending || updateMutation.isPending || deleteMutation.isPending,
237
+ acquire,
238
+ release,
239
+ refresh
240
+ };
241
+ }
242
+
243
+ //#endregion
244
+ export { getLockUser, useLock, useLocks };
245
+ //# sourceMappingURL=use-locks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-locks.mjs","names":[],"sources":["../../../src/client/hooks/use-locks.ts"],"sourcesContent":["/**\n * Hooks for document locking (collaborative editing awareness)\n *\n * Provides realtime tracking of who is editing which documents.\n * Used in table view to show lock indicators and in form view to manage locks.\n */\n\nimport {\n\ttype UseMutationOptions,\n\tuseMutation,\n\tuseQuery,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { useCurrentUser } from \"./use-current-user\";\nimport { useQuestpieQueryOptions } from \"./use-questpie-query-options\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default lock duration in milliseconds (60 seconds)\n * Lock expires if not refreshed within this time.\n * Form should call refresh() on user activity (typing, clicking).\n */\nexport const LOCK_DURATION_MS = 60_000;\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface LockUser {\n\tid: string;\n\tname?: string | null;\n\temail: string;\n\timage?: string | null;\n}\n\nexport interface LockInfo {\n\tid: string;\n\tresourceType: \"collection\" | \"global\";\n\tresource: string;\n\tresourceId: string;\n\tuser: LockUser | string;\n\tsessionId: string;\n\texpiresAt: Date | string;\n\tcreatedAt?: Date | string;\n\tupdatedAt?: Date | string;\n}\n\n/** Helper to get user info from lock (handles both expanded and non-expanded) */\nexport function getLockUser(lock: LockInfo): LockUser | null {\n\tif (typeof lock.user === \"string\") return null;\n\treturn lock.user;\n}\n\n/** Helper to get user ID from lock */\nexport function getLockUserId(lock: LockInfo): string {\n\tif (typeof lock.user === \"string\") return lock.user;\n\treturn lock.user.id;\n}\n\n/**\n * Generate a unique session ID for this browser tab.\n * Persisted in sessionStorage so it survives page refreshes but not tab close.\n */\nfunction getSessionId(): string {\n\tif (typeof window === \"undefined\") return \"server\";\n\n\tconst key = \"__questpie_lock_session_id__\";\n\tlet sessionId = sessionStorage.getItem(key);\n\n\tif (!sessionId) {\n\t\tsessionId = crypto.randomUUID();\n\t\tsessionStorage.setItem(key, sessionId);\n\t}\n\n\treturn sessionId;\n}\n\nexport interface UseLockOptions {\n\t/** Resource type: collection or global */\n\tresourceType: \"collection\" | \"global\";\n\t/** Resource name (collection slug or global slug) */\n\tresource: string;\n\t/** Document ID to lock */\n\tresourceId: string;\n\t/** Whether to auto-acquire lock on mount (default: true) */\n\tautoAcquire?: boolean;\n\t/** Callback when lock is acquired */\n\tonAcquired?: (lock: LockInfo) => void;\n\t/** Callback when lock acquisition fails (someone else has it) */\n\tonBlocked?: (lock: LockInfo) => void;\n\t/** Callback when lock is released */\n\tonReleased?: () => void;\n}\n\nexport interface UseLockResult {\n\t/** Current lock info if we have the lock */\n\tlock: LockInfo | null;\n\t/** Lock info if someone else has the lock */\n\tblockedBy: LockInfo | null;\n\t/** Whether we currently hold the lock */\n\tisLocked: boolean;\n\t/** Whether someone else holds the lock */\n\tisBlocked: boolean;\n\t/** Whether same user has it open in another tab */\n\tisOpenElsewhere: boolean;\n\t/** Whether lock operations are in progress */\n\tisPending: boolean;\n\t/** Acquire the lock manually */\n\tacquire: () => Promise<LockInfo | null>;\n\t/** Release the lock manually */\n\trelease: () => Promise<void>;\n\t/** Refresh the lock (extend expiration) */\n\trefresh: () => Promise<void>;\n}\n\nexport interface UseLocksOptions {\n\t/** Resource type: collection or global */\n\tresourceType: \"collection\" | \"global\";\n\t/** Resource name (collection slug or global slug) */\n\tresource: string;\n\t/** Whether realtime updates are enabled */\n\trealtime?: boolean;\n}\n\nexport interface UseLocksResult {\n\t/** Map of resourceId -> lock info */\n\tlocks: Map<string, LockInfo>;\n\t/** Check if a specific resource is locked */\n\tisLocked: (resourceId: string) => boolean;\n\t/** Get lock info for a specific resource */\n\tgetLock: (resourceId: string) => LockInfo | undefined;\n\t/** Check if current user owns the lock */\n\tisOwnLock: (resourceId: string) => boolean;\n\t/** Whether data is loading */\n\tisLoading: boolean;\n}\n\n// ============================================================================\n// useLocks - Track all locks for a resource (for table view)\n// ============================================================================\n\n/**\n * Track all active locks for a collection/global.\n *\n * Used in table views to show who is editing which rows.\n *\n * @example\n * ```tsx\n * const { locks, isLocked, getLock } = useLocks({\n * resourceType: \"collection\",\n * resource: \"posts\",\n * realtime: true,\n * });\n *\n * // In table row\n * {isLocked(row.id) && (\n * <LockIndicator user={getLock(row.id)?.userName} />\n * )}\n * ```\n */\nexport function useLocks(options: UseLocksOptions): UseLocksResult {\n\tconst { resourceType, resource, realtime = true } = options;\n\tconst { queryOpts } = useQuestpieQueryOptions();\n\tconst currentUser = useCurrentUser();\n\n\t// Query active locks for this resource (with user data expanded)\n\tconst { data: rawData, isLoading } = useQuery({\n\t\t...(queryOpts as any).collections.adminLocks.find(\n\t\t\t{\n\t\t\t\twhere: {\n\t\t\t\t\tresourceType,\n\t\t\t\t\tresource,\n\t\t\t\t\t// Only get non-expired locks\n\t\t\t\t\texpiresAt: { gt: new Date() },\n\t\t\t\t},\n\t\t\t\twith: { user: true },\n\t\t\t},\n\t\t\t{ realtime },\n\t\t),\n\t});\n\n\tconst data = rawData as { docs?: LockInfo[] } | undefined;\n\n\t// Build lock map\n\tconst locks = new Map<string, LockInfo>();\n\tif (data?.docs) {\n\t\tfor (const lock of data.docs) {\n\t\t\tlocks.set(lock.resourceId, lock);\n\t\t}\n\t}\n\n\tconst isLocked = useCallback(\n\t\t(resourceId: string) => locks.has(resourceId),\n\t\t[locks],\n\t);\n\n\tconst getLock = useCallback(\n\t\t(resourceId: string) => locks.get(resourceId),\n\t\t[locks],\n\t);\n\n\tconst isOwnLock = useCallback(\n\t\t(resourceId: string) => {\n\t\t\tconst lock = locks.get(resourceId);\n\t\t\tif (!lock) return false;\n\t\t\treturn getLockUserId(lock) === currentUser?.id;\n\t\t},\n\t\t[locks, currentUser?.id],\n\t);\n\n\treturn {\n\t\tlocks,\n\t\tisLocked,\n\t\tgetLock,\n\t\tisOwnLock,\n\t\tisLoading,\n\t};\n}\n\n// ============================================================================\n// useLock - Manage a single document lock (for form view)\n// ============================================================================\n\n/**\n * Manage a document lock for editing.\n *\n * Automatically acquires lock on mount, sends heartbeats, and releases on unmount.\n *\n * @example\n * ```tsx\n * function EditForm({ collection, id }) {\n * const { isLocked, isBlocked, blockedBy } = useLock({\n * resourceType: \"collection\",\n * resource: collection,\n * resourceId: id,\n * });\n *\n * if (isBlocked) {\n * return <LockedBanner user={blockedBy?.userName} />;\n * }\n *\n * return <Form disabled={!isLocked} />;\n * }\n * ```\n */\nexport function useLock(options: UseLockOptions): UseLockResult {\n\tconst {\n\t\tresourceType,\n\t\tresource,\n\t\tresourceId,\n\t\tautoAcquire = true,\n\t\tonAcquired,\n\t\tonBlocked,\n\t\tonReleased,\n\t} = options;\n\n\tconst { queryOpts } = useQuestpieQueryOptions();\n\tconst queryClient = useQueryClient();\n\tconst currentUser = useCurrentUser();\n\n\tconst lockIdRef = useRef<string | null>(null);\n\n\t// Query existing lock for this resource (with user data expanded)\n\tconst { data: rawExistingLockData, isLoading: isCheckingLock } = useQuery({\n\t\t...(queryOpts as any).collections.adminLocks.find({\n\t\t\twhere: {\n\t\t\t\tresourceType,\n\t\t\t\tresource,\n\t\t\t\tresourceId,\n\t\t\t\texpiresAt: { gt: new Date() },\n\t\t\t},\n\t\t\twith: { user: true },\n\t\t\tlimit: 1,\n\t\t}),\n\t\tenabled: !!resourceId,\n\t});\n\n\tconst existingLockData = rawExistingLockData as\n\t\t| { docs?: LockInfo[] }\n\t\t| undefined;\n\tconst existingLock = existingLockData?.docs?.[0] ?? null;\n\n\t// Lock is \"own\" only if it's from this exact browser tab (same sessionId)\n\tconst sessionId = getSessionId();\n\tconst isOwnSession = existingLock?.sessionId === sessionId;\n\tconst isOwnUser = existingLock\n\t\t? getLockUserId(existingLock) === currentUser?.id\n\t\t: false;\n\n\t// For UI: show as blocked only if different user has the lock\n\t// Same user in different tab can see they have it open elsewhere\n\tconst blockedBy = existingLock && !isOwnUser ? existingLock : null;\n\tconst ownLockElsewhere = existingLock && isOwnUser && !isOwnSession;\n\n\t// Create lock mutation\n\tconst createMutation = useMutation({\n\t\tmutationFn: async () => {\n\t\t\tif (!currentUser) throw new Error(\"Not authenticated\");\n\n\t\t\tconst expiresAt = new Date(Date.now() + LOCK_DURATION_MS);\n\n\t\t\tconst result = await (queryOpts as any).collections.adminLocks.create({\n\t\t\t\tresourceType,\n\t\t\t\tresource,\n\t\t\t\tresourceId,\n\t\t\t\tuser: currentUser.id,\n\t\t\t\tsessionId,\n\t\t\t\texpiresAt,\n\t\t\t});\n\n\t\t\treturn result as LockInfo;\n\t\t},\n\t\tonSuccess: (lock) => {\n\t\t\tlockIdRef.current = lock.id;\n\t\t\tonAcquired?.(lock);\n\n\t\t\t// Invalidate locks query\n\t\t\tqueryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\"collections\", \"adminLocks\"],\n\t\t\t});\n\t\t},\n\t});\n\n\t// Update lock mutation (for heartbeat)\n\tconst updateMutation = useMutation({\n\t\tmutationFn: async () => {\n\t\t\tif (!lockIdRef.current) return;\n\n\t\t\tconst expiresAt = new Date(Date.now() + LOCK_DURATION_MS);\n\n\t\t\tawait (queryOpts as any).collections.adminLocks.update({\n\t\t\t\tid: lockIdRef.current,\n\t\t\t\tdata: { expiresAt },\n\t\t\t});\n\t\t},\n\t});\n\n\t// Delete lock mutation\n\tconst deleteMutation = useMutation({\n\t\tmutationFn: async () => {\n\t\t\tif (!lockIdRef.current) return;\n\n\t\t\tawait (queryOpts as any).collections.adminLocks.delete({\n\t\t\t\tid: lockIdRef.current,\n\t\t\t});\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tlockIdRef.current = null;\n\t\t\tonReleased?.();\n\n\t\t\t// Invalidate locks query\n\t\t\tqueryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\"collections\", \"adminLocks\"],\n\t\t\t});\n\t\t},\n\t});\n\n\t// Acquire lock\n\tconst acquire = useCallback(async () => {\n\t\t// Check if already locked by someone else (different user)\n\t\tif (existingLock && !isOwnUser) {\n\t\t\tonBlocked?.(existingLock);\n\t\t\treturn null;\n\t\t}\n\n\t\t// If we already have the lock in this session, just use it\n\t\tif (isOwnSession && existingLock) {\n\t\t\tlockIdRef.current = existingLock.id;\n\t\t\treturn existingLock;\n\t\t}\n\n\t\t// Same user but different tab - they can open, but need own lock\n\t\t// Or no existing lock - acquire new one\n\t\ttry {\n\t\t\tconst lock = await createMutation.mutateAsync();\n\t\t\treturn lock;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to acquire lock:\", error);\n\t\t\treturn null;\n\t\t}\n\t}, [existingLock, isOwnUser, isOwnSession, createMutation, onBlocked]);\n\n\t// Release lock\n\tconst release = useCallback(async () => {\n\t\tif (lockIdRef.current) {\n\t\t\ttry {\n\t\t\t\tawait deleteMutation.mutateAsync();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to release lock:\", error);\n\t\t\t}\n\t\t}\n\t}, [deleteMutation]);\n\n\t// Refresh lock (extend expiration)\n\tconst refresh = useCallback(async () => {\n\t\tif (lockIdRef.current) {\n\t\t\ttry {\n\t\t\t\tawait updateMutation.mutateAsync();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to refresh lock:\", error);\n\t\t\t}\n\t\t}\n\t}, [updateMutation]);\n\n\t// Auto-acquire on mount\n\tuseEffect(() => {\n\t\tif (!autoAcquire || !resourceId || !currentUser || isCheckingLock) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for existing lock check to complete\n\t\tif (existingLock !== undefined) {\n\t\t\tif (blockedBy) {\n\t\t\t\tonBlocked?.(blockedBy);\n\t\t\t} else {\n\t\t\t\tacquire();\n\t\t\t}\n\t\t}\n\t}, [\n\t\tautoAcquire,\n\t\tresourceId,\n\t\tcurrentUser,\n\t\tisCheckingLock,\n\t\texistingLock,\n\t\tblockedBy,\n\t\tacquire,\n\t\tonBlocked,\n\t]);\n\n\t// No automatic heartbeat - form will call refresh() on user activity\n\n\t// Release on unmount\n\tuseEffect(() => {\n\t\tconst mutate = deleteMutation.mutate;\n\t\treturn () => {\n\t\t\tif (lockIdRef.current) {\n\t\t\t\t// Fire and forget - component is unmounting\n\t\t\t\tmutate();\n\t\t\t}\n\t\t};\n\t}, [deleteMutation.mutate]);\n\n\treturn {\n\t\t// Lock info if we own it in this session\n\t\tlock: isOwnSession ? existingLock : null,\n\t\t// Who is blocking us (different user)\n\t\tblockedBy,\n\t\t// True if we have the lock in this session\n\t\tisLocked: isOwnSession && !!existingLock,\n\t\t// True if different user has the lock\n\t\tisBlocked: !!blockedBy,\n\t\t// True if same user has it open in another tab\n\t\tisOpenElsewhere: !!ownLockElsewhere,\n\t\tisPending:\n\t\t\tisCheckingLock ||\n\t\t\tcreateMutation.isPending ||\n\t\t\tupdateMutation.isPending ||\n\t\t\tdeleteMutation.isPending,\n\t\tacquire,\n\t\trelease,\n\t\trefresh,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA0BA,MAAa,mBAAmB;;AA0BhC,SAAgB,YAAY,MAAiC;AAC5D,KAAI,OAAO,KAAK,SAAS,SAAU,QAAO;AAC1C,QAAO,KAAK;;;AAIb,SAAgB,cAAc,MAAwB;AACrD,KAAI,OAAO,KAAK,SAAS,SAAU,QAAO,KAAK;AAC/C,QAAO,KAAK,KAAK;;;;;;AAOlB,SAAS,eAAuB;AAC/B,KAAI,OAAO,WAAW,YAAa,QAAO;CAE1C,MAAM,MAAM;CACZ,IAAI,YAAY,eAAe,QAAQ,IAAI;AAE3C,KAAI,CAAC,WAAW;AACf,cAAY,OAAO,YAAY;AAC/B,iBAAe,QAAQ,KAAK,UAAU;;AAGvC,QAAO;;;;;;;;;;;;;;;;;;;;;AAsFR,SAAgB,SAAS,SAA0C;CAClE,MAAM,EAAE,cAAc,UAAU,WAAW,SAAS;CACpD,MAAM,EAAE,cAAc,yBAAyB;CAC/C,MAAM,cAAc,gBAAgB;CAGpC,MAAM,EAAE,MAAM,SAAS,cAAc,SAAS,EAC7C,GAAI,UAAkB,YAAY,WAAW,KAC5C;EACC,OAAO;GACN;GACA;GAEA,WAAW,EAAE,oBAAI,IAAI,MAAM,EAAE;GAC7B;EACD,MAAM,EAAE,MAAM,MAAM;EACpB,EACD,EAAE,UAAU,CACZ,EACD,CAAC;CAEF,MAAM,OAAO;CAGb,MAAM,wBAAQ,IAAI,KAAuB;AACzC,KAAI,MAAM,KACT,MAAK,MAAM,QAAQ,KAAK,KACvB,OAAM,IAAI,KAAK,YAAY,KAAK;AAuBlC,QAAO;EACN;EACA,UArBgB,aACf,eAAuB,MAAM,IAAI,WAAW,EAC7C,CAAC,MAAM,CACP;EAmBA,SAjBe,aACd,eAAuB,MAAM,IAAI,WAAW,EAC7C,CAAC,MAAM,CACP;EAeA,WAbiB,aAChB,eAAuB;GACvB,MAAM,OAAO,MAAM,IAAI,WAAW;AAClC,OAAI,CAAC,KAAM,QAAO;AAClB,UAAO,cAAc,KAAK,KAAK,aAAa;KAE7C,CAAC,OAAO,aAAa,GAAG,CACxB;EAOA;EACA;;;;;;;;;;;;;;;;;;;;;;;;AA6BF,SAAgB,QAAQ,SAAwC;CAC/D,MAAM,EACL,cACA,UACA,YACA,cAAc,MACd,YACA,WACA,eACG;CAEJ,MAAM,EAAE,cAAc,yBAAyB;CAC/C,MAAM,cAAc,gBAAgB;CACpC,MAAM,cAAc,gBAAgB;CAEpC,MAAM,YAAY,OAAsB,KAAK;CAG7C,MAAM,EAAE,MAAM,qBAAqB,WAAW,mBAAmB,SAAS;EACzE,GAAI,UAAkB,YAAY,WAAW,KAAK;GACjD,OAAO;IACN;IACA;IACA;IACA,WAAW,EAAE,oBAAI,IAAI,MAAM,EAAE;IAC7B;GACD,MAAM,EAAE,MAAM,MAAM;GACpB,OAAO;GACP,CAAC;EACF,SAAS,CAAC,CAAC;EACX,CAAC;CAKF,MAAM,eAHmB,qBAGc,OAAO,MAAM;CAGpD,MAAM,YAAY,cAAc;CAChC,MAAM,eAAe,cAAc,cAAc;CACjD,MAAM,YAAY,eACf,cAAc,aAAa,KAAK,aAAa,KAC7C;CAIH,MAAM,YAAY,gBAAgB,CAAC,YAAY,eAAe;CAC9D,MAAM,mBAAmB,gBAAgB,aAAa,CAAC;CAGvD,MAAM,iBAAiB,YAAY;EAClC,YAAY,YAAY;AACvB,OAAI,CAAC,YAAa,OAAM,IAAI,MAAM,oBAAoB;GAEtD,MAAM,YAAY,IAAI,KAAK,KAAK,KAAK,GAAG,iBAAiB;AAWzD,UATe,MAAO,UAAkB,YAAY,WAAW,OAAO;IACrE;IACA;IACA;IACA,MAAM,YAAY;IAClB;IACA;IACA,CAAC;;EAIH,YAAY,SAAS;AACpB,aAAU,UAAU,KAAK;AACzB,gBAAa,KAAK;AAGlB,eAAY,kBAAkB,EAC7B,UAAU,CAAC,eAAe,aAAa,EACvC,CAAC;;EAEH,CAAC;CAGF,MAAM,iBAAiB,YAAY,EAClC,YAAY,YAAY;AACvB,MAAI,CAAC,UAAU,QAAS;EAExB,MAAM,YAAY,IAAI,KAAK,KAAK,KAAK,GAAG,iBAAiB;AAEzD,QAAO,UAAkB,YAAY,WAAW,OAAO;GACtD,IAAI,UAAU;GACd,MAAM,EAAE,WAAW;GACnB,CAAC;IAEH,CAAC;CAGF,MAAM,iBAAiB,YAAY;EAClC,YAAY,YAAY;AACvB,OAAI,CAAC,UAAU,QAAS;AAExB,SAAO,UAAkB,YAAY,WAAW,OAAO,EACtD,IAAI,UAAU,SACd,CAAC;;EAEH,iBAAiB;AAChB,aAAU,UAAU;AACpB,iBAAc;AAGd,eAAY,kBAAkB,EAC7B,UAAU,CAAC,eAAe,aAAa,EACvC,CAAC;;EAEH,CAAC;CAGF,MAAM,UAAU,YAAY,YAAY;AAEvC,MAAI,gBAAgB,CAAC,WAAW;AAC/B,eAAY,aAAa;AACzB,UAAO;;AAIR,MAAI,gBAAgB,cAAc;AACjC,aAAU,UAAU,aAAa;AACjC,UAAO;;AAKR,MAAI;AAEH,UADa,MAAM,eAAe,aAAa;WAEvC,OAAO;AACf,WAAQ,MAAM,2BAA2B,MAAM;AAC/C,UAAO;;IAEN;EAAC;EAAc;EAAW;EAAc;EAAgB;EAAU,CAAC;CAGtE,MAAM,UAAU,YAAY,YAAY;AACvC,MAAI,UAAU,QACb,KAAI;AACH,SAAM,eAAe,aAAa;WAC1B,OAAO;AACf,WAAQ,MAAM,2BAA2B,MAAM;;IAG/C,CAAC,eAAe,CAAC;CAGpB,MAAM,UAAU,YAAY,YAAY;AACvC,MAAI,UAAU,QACb,KAAI;AACH,SAAM,eAAe,aAAa;WAC1B,OAAO;AACf,WAAQ,MAAM,2BAA2B,MAAM;;IAG/C,CAAC,eAAe,CAAC;AAGpB,iBAAgB;AACf,MAAI,CAAC,eAAe,CAAC,cAAc,CAAC,eAAe,eAClD;AAID,MAAI,iBAAiB,OACpB,KAAI,UACH,aAAY,UAAU;MAEtB,UAAS;IAGT;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;AAKF,iBAAgB;EACf,MAAM,SAAS,eAAe;AAC9B,eAAa;AACZ,OAAI,UAAU,QAEb,SAAQ;;IAGR,CAAC,eAAe,OAAO,CAAC;AAE3B,QAAO;EAEN,MAAM,eAAe,eAAe;EAEpC;EAEA,UAAU,gBAAgB,CAAC,CAAC;EAE5B,WAAW,CAAC,CAAC;EAEb,iBAAiB,CAAC,CAAC;EACnB,WACC,kBACA,eAAe,aACf,eAAe,aACf,eAAe;EAChB;EACA;EACA;EACA"}
@@ -0,0 +1,23 @@
1
+ //#region src/client/hooks/use-media-query.d.ts
2
+ /**
3
+ * Hook to detect media query matches
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * const isMobile = useMediaQuery("(max-width: 768px)");
8
+ * const isDesktop = useMediaQuery("(min-width: 769px)");
9
+ * const prefersDark = useMediaQuery("(prefers-color-scheme: dark)");
10
+ * ```
11
+ */
12
+ declare function useMediaQuery(query: string): boolean;
13
+ /**
14
+ * Hook to check if viewport is mobile (below md breakpoint)
15
+ */
16
+ declare function useIsMobile(): boolean;
17
+ /**
18
+ * Hook to check if viewport is desktop (md breakpoint and above)
19
+ */
20
+ declare function useIsDesktop(): boolean;
21
+ //#endregion
22
+ export { useIsDesktop, useIsMobile, useMediaQuery };
23
+ //# sourceMappingURL=use-media-query.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-query.d.mts","names":[],"sources":["../../../src/client/hooks/use-media-query.ts"],"sourcesContent":[],"mappings":";;AAcA;AA2DA;AAOA;;;;;;;iBAlEgB,aAAA;;;;iBA2DA,WAAA,CAAA;;;;iBAOA,YAAA,CAAA"}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+
3
+ import * as React$1 from "react";
4
+
5
+ //#region src/client/hooks/use-media-query.ts
6
+ /**
7
+ * Hook to detect media query matches
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * const isMobile = useMediaQuery("(max-width: 768px)");
12
+ * const isDesktop = useMediaQuery("(min-width: 769px)");
13
+ * const prefersDark = useMediaQuery("(prefers-color-scheme: dark)");
14
+ * ```
15
+ */
16
+ function useMediaQuery(query) {
17
+ const [matches, setMatches] = React$1.useState(() => {
18
+ if (typeof window === "undefined") return false;
19
+ return window.matchMedia(query).matches;
20
+ });
21
+ React$1.useEffect(() => {
22
+ if (typeof window === "undefined") return;
23
+ const mediaQuery = window.matchMedia(query);
24
+ setMatches(mediaQuery.matches);
25
+ const listener = (event) => {
26
+ setMatches(event.matches);
27
+ };
28
+ if (mediaQuery.addEventListener) mediaQuery.addEventListener("change", listener);
29
+ else mediaQuery.addListener(listener);
30
+ return () => {
31
+ if (mediaQuery.removeEventListener) mediaQuery.removeEventListener("change", listener);
32
+ else mediaQuery.removeListener(listener);
33
+ };
34
+ }, [query]);
35
+ return matches;
36
+ }
37
+ /**
38
+ * Predefined breakpoints matching Tailwind CSS defaults
39
+ */
40
+ const breakpoints = {
41
+ sm: "(min-width: 640px)",
42
+ md: "(min-width: 768px)",
43
+ lg: "(min-width: 1024px)",
44
+ xl: "(min-width: 1280px)",
45
+ "2xl": "(min-width: 1536px)"
46
+ };
47
+ /**
48
+ * Hook to check if viewport is mobile (below md breakpoint)
49
+ */
50
+ function useIsMobile() {
51
+ return !useMediaQuery(breakpoints.md);
52
+ }
53
+ /**
54
+ * Hook to check if viewport is desktop (md breakpoint and above)
55
+ */
56
+ function useIsDesktop() {
57
+ return useMediaQuery(breakpoints.md);
58
+ }
59
+
60
+ //#endregion
61
+ export { useIsDesktop, useIsMobile, useMediaQuery };
62
+ //# sourceMappingURL=use-media-query.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-query.mjs","names":["React"],"sources":["../../../src/client/hooks/use-media-query.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Hook to detect media query matches\n *\n * @example\n * ```tsx\n * const isMobile = useMediaQuery(\"(max-width: 768px)\");\n * const isDesktop = useMediaQuery(\"(min-width: 769px)\");\n * const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\");\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState<boolean>(() => {\n // Check if we're on the server\n if (typeof window === \"undefined\") {\n return false;\n }\n return window.matchMedia(query).matches;\n });\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Create listener\n const listener = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Add listener (using modern API with fallback)\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener(\"change\", listener);\n } else {\n // Fallback for older browsers\n mediaQuery.addListener(listener);\n }\n\n // Cleanup\n return () => {\n if (mediaQuery.removeEventListener) {\n mediaQuery.removeEventListener(\"change\", listener);\n } else {\n mediaQuery.removeListener(listener);\n }\n };\n }, [query]);\n\n return matches;\n}\n\n/**\n * Predefined breakpoints matching Tailwind CSS defaults\n */\nexport const breakpoints = {\n sm: \"(min-width: 640px)\",\n md: \"(min-width: 768px)\",\n lg: \"(min-width: 1024px)\",\n xl: \"(min-width: 1280px)\",\n \"2xl\": \"(min-width: 1536px)\",\n} as const;\n\n/**\n * Hook to check if viewport is mobile (below md breakpoint)\n */\nexport function useIsMobile(): boolean {\n return !useMediaQuery(breakpoints.md);\n}\n\n/**\n * Hook to check if viewport is desktop (md breakpoint and above)\n */\nexport function useIsDesktop(): boolean {\n return useMediaQuery(breakpoints.md);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAcA,SAAgB,cAAc,OAAwB;CACpD,MAAM,CAAC,SAAS,cAAcA,QAAM,eAAwB;AAE1D,MAAI,OAAO,WAAW,YACpB,QAAO;AAET,SAAO,OAAO,WAAW,MAAM,CAAC;GAChC;AAEF,SAAM,gBAAgB;AACpB,MAAI,OAAO,WAAW,YACpB;EAGF,MAAM,aAAa,OAAO,WAAW,MAAM;AAG3C,aAAW,WAAW,QAAQ;EAG9B,MAAM,YAAY,UAA+B;AAC/C,cAAW,MAAM,QAAQ;;AAI3B,MAAI,WAAW,iBACb,YAAW,iBAAiB,UAAU,SAAS;MAG/C,YAAW,YAAY,SAAS;AAIlC,eAAa;AACX,OAAI,WAAW,oBACb,YAAW,oBAAoB,UAAU,SAAS;OAElD,YAAW,eAAe,SAAS;;IAGtC,CAAC,MAAM,CAAC;AAEX,QAAO;;;;;AAMT,MAAa,cAAc;CACzB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACR;;;;AAKD,SAAgB,cAAuB;AACrC,QAAO,CAAC,cAAc,YAAY,GAAG;;;;;AAMvC,SAAgB,eAAwB;AACtC,QAAO,cAAc,YAAY,GAAG"}
@@ -0,0 +1,47 @@
1
+ import "react";
2
+
3
+ //#region src/client/hooks/use-prefill-params.ts
4
+ /**
5
+ * Parse prefill parameters from a URLSearchParams object
6
+ */
7
+ function parsePrefillParams(searchParams) {
8
+ const prefill = {};
9
+ for (const [key, value] of searchParams.entries()) if (key.startsWith("prefill.")) {
10
+ const fieldName = key.slice(8);
11
+ if (fieldName) try {
12
+ if (value.startsWith("[") || value.startsWith("{") || value === "true" || value === "false" || value === "null" || !isNaN(Number(value))) prefill[fieldName] = JSON.parse(value);
13
+ else prefill[fieldName] = value;
14
+ } catch {
15
+ prefill[fieldName] = value;
16
+ }
17
+ }
18
+ return prefill;
19
+ }
20
+ /**
21
+ * Build URL with prefill parameters
22
+ *
23
+ * @param baseUrl - Base URL to add params to
24
+ * @param prefillData - Object with field names and values to prefill
25
+ * @returns URL with prefill query params
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * buildPrefillUrl("/admin/collections/barbers/create", { services: "123" })
30
+ * // Returns: "/admin/collections/barbers/create?prefill.services=123"
31
+ *
32
+ * buildPrefillUrl("/admin/collections/posts/create", { tags: ["a", "b"] })
33
+ * // Returns: "/admin/collections/posts/create?prefill.tags=%5B%22a%22%2C%22b%22%5D"
34
+ * ```
35
+ */
36
+ function buildPrefillUrl(baseUrl, prefillData) {
37
+ const url = new URL(baseUrl, "http://localhost");
38
+ for (const [key, value] of Object.entries(prefillData)) if (value !== void 0 && value !== null) {
39
+ const stringValue = typeof value === "object" ? JSON.stringify(value) : String(value);
40
+ url.searchParams.set(`prefill.${key}`, stringValue);
41
+ }
42
+ return url.pathname + url.search;
43
+ }
44
+
45
+ //#endregion
46
+ export { buildPrefillUrl, parsePrefillParams };
47
+ //# sourceMappingURL=use-prefill-params.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-prefill-params.mjs","names":["prefill: Record<string, unknown>"],"sources":["../../../src/client/hooks/use-prefill-params.ts"],"sourcesContent":["/**\n * usePrefillParams Hook\n *\n * Reads prefill parameters from URL query string for pre-populating form fields.\n * Supports the pattern: ?prefill.fieldName=value\n *\n * @example\n * ```tsx\n * // URL: /admin/collections/barbers/create?prefill.services=123\n *\n * const prefill = usePrefillParams();\n * // prefill = { services: \"123\" }\n *\n * <CollectionForm defaultValues={prefill} ... />\n * ```\n */\n\nimport * as React from \"react\";\n\n/**\n * Parse prefill parameters from a URLSearchParams object\n */\nexport function parsePrefillParams(\n searchParams: URLSearchParams,\n): Record<string, unknown> {\n const prefill: Record<string, unknown> = {};\n\n for (const [key, value] of searchParams.entries()) {\n if (key.startsWith(\"prefill.\")) {\n const fieldName = key.slice(\"prefill.\".length);\n if (fieldName) {\n // Try to parse JSON for complex values (arrays, objects)\n try {\n // Check if value looks like JSON\n if (\n value.startsWith(\"[\") ||\n value.startsWith(\"{\") ||\n value === \"true\" ||\n value === \"false\" ||\n value === \"null\" ||\n !isNaN(Number(value))\n ) {\n prefill[fieldName] = JSON.parse(value);\n } else {\n prefill[fieldName] = value;\n }\n } catch {\n // If parsing fails, use as string\n prefill[fieldName] = value;\n }\n }\n }\n }\n\n return prefill;\n}\n\n/**\n * Parse prefill parameters from URL string\n */\nexport function parsePrefillParamsFromUrl(\n url: string,\n): Record<string, unknown> {\n try {\n const urlObj = new URL(url, \"http://localhost\");\n return parsePrefillParams(urlObj.searchParams);\n } catch {\n return {};\n }\n}\n\n/**\n * Hook to read prefill parameters from current URL\n *\n * @returns Object with field names as keys and prefill values\n */\nexport function usePrefillParams(): Record<string, unknown> {\n const [prefill, setPrefill] = React.useState<Record<string, unknown>>({});\n\n React.useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // Parse initial URL\n const searchParams = new URLSearchParams(window.location.search);\n setPrefill(parsePrefillParams(searchParams));\n\n // Listen for URL changes (for SPA navigation)\n const handlePopState = () => {\n const params = new URLSearchParams(window.location.search);\n setPrefill(parsePrefillParams(params));\n };\n\n window.addEventListener(\"popstate\", handlePopState);\n return () => window.removeEventListener(\"popstate\", handlePopState);\n }, []);\n\n return prefill;\n}\n\n/**\n * Build URL with prefill parameters\n *\n * @param baseUrl - Base URL to add params to\n * @param prefillData - Object with field names and values to prefill\n * @returns URL with prefill query params\n *\n * @example\n * ```ts\n * buildPrefillUrl(\"/admin/collections/barbers/create\", { services: \"123\" })\n * // Returns: \"/admin/collections/barbers/create?prefill.services=123\"\n *\n * buildPrefillUrl(\"/admin/collections/posts/create\", { tags: [\"a\", \"b\"] })\n * // Returns: \"/admin/collections/posts/create?prefill.tags=%5B%22a%22%2C%22b%22%5D\"\n * ```\n */\nexport function buildPrefillUrl(\n baseUrl: string,\n prefillData: Record<string, unknown>,\n): string {\n const url = new URL(baseUrl, \"http://localhost\");\n\n for (const [key, value] of Object.entries(prefillData)) {\n if (value !== undefined && value !== null) {\n const stringValue =\n typeof value === \"object\" ? JSON.stringify(value) : String(value);\n url.searchParams.set(`prefill.${key}`, stringValue);\n }\n }\n\n // Return path + search (without origin for relative URLs)\n return url.pathname + url.search;\n}\n\nexport default usePrefillParams;\n"],"mappings":";;;;;;AAsBA,SAAgB,mBACd,cACyB;CACzB,MAAMA,UAAmC,EAAE;AAE3C,MAAK,MAAM,CAAC,KAAK,UAAU,aAAa,SAAS,CAC/C,KAAI,IAAI,WAAW,WAAW,EAAE;EAC9B,MAAM,YAAY,IAAI,MAAM,EAAkB;AAC9C,MAAI,UAEF,KAAI;AAEF,OACE,MAAM,WAAW,IAAI,IACrB,MAAM,WAAW,IAAI,IACrB,UAAU,UACV,UAAU,WACV,UAAU,UACV,CAAC,MAAM,OAAO,MAAM,CAAC,CAErB,SAAQ,aAAa,KAAK,MAAM,MAAM;OAEtC,SAAQ,aAAa;UAEjB;AAEN,WAAQ,aAAa;;;AAM7B,QAAO;;;;;;;;;;;;;;;;;;AA6DT,SAAgB,gBACd,SACA,aACQ;CACR,MAAM,MAAM,IAAI,IAAI,SAAS,mBAAmB;AAEhD,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,YAAY,CACpD,KAAI,UAAU,UAAa,UAAU,MAAM;EACzC,MAAM,cACJ,OAAO,UAAU,WAAW,KAAK,UAAU,MAAM,GAAG,OAAO,MAAM;AACnE,MAAI,aAAa,IAAI,WAAW,OAAO,YAAY;;AAKvD,QAAO,IAAI,WAAW,IAAI"}
@@ -0,0 +1,28 @@
1
+ import { selectClient, useAdminStore } from "../runtime/provider.mjs";
2
+ import { useScopedLocale } from "../runtime/locale-scope.mjs";
3
+ import { createQuestpieQueryOptions } from "@questpie/tanstack-query";
4
+ import { useQueryClient } from "@tanstack/react-query";
5
+
6
+ //#region src/client/hooks/use-questpie-query-options.ts
7
+ /**
8
+ * Shared hook that creates questpie query options with the current client and scoped locale.
9
+ * Deduplicates the common pattern used across collection/global hooks.
10
+ */
11
+ function useQuestpieQueryOptions(keyPrefix = ["questpie", "collections"]) {
12
+ const client = useAdminStore(selectClient);
13
+ const { locale } = useScopedLocale();
14
+ const queryClient = useQueryClient();
15
+ return {
16
+ queryOpts: createQuestpieQueryOptions(client, {
17
+ keyPrefix,
18
+ locale
19
+ }),
20
+ queryClient,
21
+ locale,
22
+ client
23
+ };
24
+ }
25
+
26
+ //#endregion
27
+ export { useQuestpieQueryOptions };
28
+ //# sourceMappingURL=use-questpie-query-options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-questpie-query-options.mjs","names":[],"sources":["../../../src/client/hooks/use-questpie-query-options.ts"],"sourcesContent":["import { createQuestpieQueryOptions } from \"@questpie/tanstack-query\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n\tselectClient,\n\tuseAdminStore,\n\tuseScopedLocale,\n} from \"../runtime\";\n\n/**\n * Shared hook that creates questpie query options with the current client and scoped locale.\n * Deduplicates the common pattern used across collection/global hooks.\n */\nexport function useQuestpieQueryOptions(\n\tkeyPrefix: readonly string[] = [\"questpie\", \"collections\"],\n) {\n\tconst client = useAdminStore(selectClient);\n\tconst { locale } = useScopedLocale();\n\tconst queryClient = useQueryClient();\n\tconst queryOpts = createQuestpieQueryOptions(client as any, {\n\t\tkeyPrefix,\n\t\tlocale,\n\t});\n\n\treturn { queryOpts, queryClient, locale, client } as const;\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,wBACf,YAA+B,CAAC,YAAY,cAAc,EACzD;CACD,MAAM,SAAS,cAAc,aAAa;CAC1C,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,cAAc,gBAAgB;AAMpC,QAAO;EAAE,WALS,2BAA2B,QAAe;GAC3D;GACA;GACA,CAAC;EAEkB;EAAa;EAAQ;EAAQ"}