@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,53 @@
1
+ import { useSafeI18n } from "../i18n/hooks.mjs";
2
+ import { createZodErrorMap } from "questpie/shared";
3
+ import { useMemo } from "react";
4
+
5
+ //#region src/client/hooks/use-validation-error-map.ts
6
+ /**
7
+ * useValidationErrorMap Hook
8
+ *
9
+ * Creates a Zod error map that uses the admin i18n system
10
+ * for localized validation error messages.
11
+ */
12
+ /**
13
+ * Create a Zod error map with i18n support
14
+ *
15
+ * Uses the admin's i18n adapter for translations.
16
+ * Falls back to English messages if no adapter is available.
17
+ *
18
+ * @returns Zod error map function
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * import { zodResolver } from "@hookform/resolvers/zod";
23
+ *
24
+ * function MyForm() {
25
+ * const errorMap = useValidationErrorMap();
26
+ * const schema = useCollectionValidation("posts");
27
+ *
28
+ * const form = useForm({
29
+ * resolver: schema
30
+ * ? zodResolver(schema, { errorMap })
31
+ * : undefined,
32
+ * });
33
+ * }
34
+ * ```
35
+ */
36
+ function useValidationErrorMap() {
37
+ const i18n = useSafeI18n();
38
+ return useMemo(() => {
39
+ const translate = (key, params) => {
40
+ if (i18n) return i18n.t(key, params);
41
+ if (!params) return key;
42
+ return key.replace(/\{\{(\w+)\}\}/g, (_, paramKey) => {
43
+ const value = params[paramKey];
44
+ return value !== void 0 ? String(value) : `{{${paramKey}}}`;
45
+ });
46
+ };
47
+ return createZodErrorMap(translate);
48
+ }, [i18n]);
49
+ }
50
+
51
+ //#endregion
52
+ export { useValidationErrorMap };
53
+ //# sourceMappingURL=use-validation-error-map.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-validation-error-map.mjs","names":[],"sources":["../../../src/client/hooks/use-validation-error-map.ts"],"sourcesContent":["/**\n * useValidationErrorMap Hook\n *\n * Creates a Zod error map that uses the admin i18n system\n * for localized validation error messages.\n */\n\nimport { useMemo } from \"react\";\nimport { createZodErrorMap, type ZodErrorMapFn } from \"questpie/shared\";\nimport { useSafeI18n } from \"../i18n/hooks\";\n\n/**\n * Create a Zod error map with i18n support\n *\n * Uses the admin's i18n adapter for translations.\n * Falls back to English messages if no adapter is available.\n *\n * @returns Zod error map function\n *\n * @example\n * ```tsx\n * import { zodResolver } from \"@hookform/resolvers/zod\";\n *\n * function MyForm() {\n * const errorMap = useValidationErrorMap();\n * const schema = useCollectionValidation(\"posts\");\n *\n * const form = useForm({\n * resolver: schema\n * ? zodResolver(schema, { errorMap })\n * : undefined,\n * });\n * }\n * ```\n */\nexport function useValidationErrorMap(): ZodErrorMapFn {\n const i18n = useSafeI18n();\n\n return useMemo(() => {\n // Create translate function that uses admin i18n\n const translate = (\n key: string,\n params?: Record<string, unknown>,\n ): string => {\n if (i18n) {\n return i18n.t(key, params);\n }\n\n // Fallback: return key with interpolated params\n if (!params) return key;\n\n return key.replace(/\\{\\{(\\w+)\\}\\}/g, (_, paramKey) => {\n const value = params[paramKey];\n return value !== undefined ? String(value) : `{{${paramKey}}}`;\n });\n };\n\n return createZodErrorMap(translate);\n }, [i18n]);\n}\n\n/**\n * Create a static error map (for use outside of React components)\n *\n * @param t - Translate function\n * @returns Zod error map function\n */\nexport function createAdminZodErrorMap(\n t: (key: string, params?: Record<string, unknown>) => string,\n): ZodErrorMapFn {\n return createZodErrorMap(t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,wBAAuC;CACrD,MAAM,OAAO,aAAa;AAE1B,QAAO,cAAc;EAEnB,MAAM,aACJ,KACA,WACW;AACX,OAAI,KACF,QAAO,KAAK,EAAE,KAAK,OAAO;AAI5B,OAAI,CAAC,OAAQ,QAAO;AAEpB,UAAO,IAAI,QAAQ,mBAAmB,GAAG,aAAa;IACpD,MAAM,QAAQ,OAAO;AACrB,WAAO,UAAU,SAAY,OAAO,MAAM,GAAG,KAAK,SAAS;KAC3D;;AAGJ,SAAO,kBAAkB,UAAU;IAClC,CAAC,KAAK,CAAC"}
@@ -0,0 +1,261 @@
1
+ import { useAdminStore } from "../runtime/provider.mjs";
2
+ import { getAdminPreferenceQueryKey, useSetAdminPreference } from "./use-admin-preferences.mjs";
3
+ import { useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
4
+ import { useCallback, useEffect, useMemo, useRef } from "react";
5
+
6
+ //#region src/client/hooks/use-view-state.ts
7
+ const EMPTY_CONFIG = {
8
+ filters: [],
9
+ sortConfig: null,
10
+ visibleColumns: [],
11
+ realtime: void 0,
12
+ pagination: {
13
+ page: 1,
14
+ pageSize: 25
15
+ }
16
+ };
17
+ /**
18
+ * Get the preference key for a collection's view state
19
+ */
20
+ function getPreferenceKey(collectionName) {
21
+ return `viewState:${collectionName}`;
22
+ }
23
+ /**
24
+ * Merge stored visible columns with default columns to include new fields
25
+ *
26
+ * When a new field is added to the collection, it should appear in the column picker
27
+ * but not automatically become visible (preserving user's existing preference).
28
+ *
29
+ * The merge logic:
30
+ * 1. Start with stored visible columns (in user's preferred order)
31
+ * 2. New columns that weren't in the previous default set are NOT auto-added to visible
32
+ * (they appear in column picker but hidden by default)
33
+ */
34
+ function mergeVisibleColumns(storedColumns, defaultColumns) {
35
+ if (!storedColumns?.length) return defaultColumns;
36
+ return storedColumns;
37
+ }
38
+ /**
39
+ * Hook to manage view configuration state with database persistence.
40
+ *
41
+ * Uses Suspense for loading and queryClient for optimistic updates.
42
+ * Must be used within a Suspense boundary.
43
+ *
44
+ * Architecture:
45
+ * - Query data is the single source of truth
46
+ * - Config is derived (useMemo) from query data + defaults
47
+ * - Updates use optimistic mutations via queryClient.setQueryData
48
+ * - Changes are debounced and persisted to DB
49
+ *
50
+ * @param defaultColumns - Default columns to show when no config is set
51
+ * @param initialConfig - Optional initial configuration to start with
52
+ * @param collectionName - Collection name for preference key
53
+ * @param userId - User ID (required - must be available, use inside Suspense after auth)
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * // Inside Suspense boundary, after user is loaded
58
+ * function TableViewInner({ collection, userId }) {
59
+ * const viewState = useViewState(
60
+ * ["_title", "status", "createdAt"],
61
+ * undefined,
62
+ * collection,
63
+ * userId
64
+ * );
65
+ *
66
+ * // config is guaranteed to be ready
67
+ * const { config, setVisibleColumns, toggleSort } = viewState;
68
+ * }
69
+ * ```
70
+ */
71
+ function useViewState(defaultColumns, initialConfig, collectionName, userId) {
72
+ const queryClient = useQueryClient();
73
+ const client = useAdminStore((s) => s.client);
74
+ const preferenceKey = collectionName ? getPreferenceKey(collectionName) : null;
75
+ const queryKey = getAdminPreferenceQueryKey(userId, preferenceKey ?? "");
76
+ const { data: storedConfig } = useSuspenseQuery({
77
+ queryKey,
78
+ queryFn: async () => {
79
+ if (!userId || !preferenceKey) return null;
80
+ return (await client.collections.adminPreferences.findOne({ where: {
81
+ userId,
82
+ key: preferenceKey
83
+ } }))?.value ?? null;
84
+ }
85
+ });
86
+ const { mutate: savePreference } = useSetAdminPreference(preferenceKey ?? "");
87
+ const config = useMemo(() => {
88
+ if (storedConfig) return {
89
+ filters: storedConfig.filters ?? [],
90
+ sortConfig: storedConfig.sortConfig ?? null,
91
+ visibleColumns: mergeVisibleColumns(storedConfig.visibleColumns, defaultColumns),
92
+ realtime: storedConfig.realtime !== void 0 ? storedConfig.realtime : initialConfig?.realtime,
93
+ pagination: storedConfig.pagination ?? {
94
+ page: 1,
95
+ pageSize: 25
96
+ }
97
+ };
98
+ return {
99
+ filters: initialConfig?.filters ?? [],
100
+ sortConfig: initialConfig?.sortConfig ?? null,
101
+ visibleColumns: defaultColumns,
102
+ realtime: initialConfig?.realtime,
103
+ pagination: initialConfig?.pagination ?? {
104
+ page: 1,
105
+ pageSize: 25
106
+ }
107
+ };
108
+ }, [
109
+ storedConfig,
110
+ defaultColumns,
111
+ initialConfig
112
+ ]);
113
+ const saveTimeoutRef = useRef(null);
114
+ useEffect(() => {
115
+ return () => {
116
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
117
+ };
118
+ }, []);
119
+ const setConfig = useCallback((newConfig) => {
120
+ const next = typeof newConfig === "function" ? newConfig(config) : newConfig;
121
+ if (preferenceKey && userId) queryClient.setQueryData(queryKey, next);
122
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
123
+ saveTimeoutRef.current = setTimeout(() => {
124
+ if (preferenceKey) savePreference(next);
125
+ }, 500);
126
+ }, [
127
+ config,
128
+ preferenceKey,
129
+ userId,
130
+ queryClient,
131
+ queryKey,
132
+ savePreference
133
+ ]);
134
+ const addFilter = useCallback((filter) => {
135
+ setConfig((prev) => ({
136
+ ...prev,
137
+ filters: [...prev.filters, filter]
138
+ }));
139
+ }, [setConfig]);
140
+ const removeFilter = useCallback((filterId) => {
141
+ setConfig((prev) => ({
142
+ ...prev,
143
+ filters: prev.filters.filter((f) => f.id !== filterId)
144
+ }));
145
+ }, [setConfig]);
146
+ const updateFilter = useCallback((filterId, updates) => {
147
+ setConfig((prev) => ({
148
+ ...prev,
149
+ filters: prev.filters.map((f) => f.id === filterId ? {
150
+ ...f,
151
+ ...updates
152
+ } : f)
153
+ }));
154
+ }, [setConfig]);
155
+ const clearFilters = useCallback(() => {
156
+ setConfig((prev) => ({
157
+ ...prev,
158
+ filters: []
159
+ }));
160
+ }, [setConfig]);
161
+ const setSort = useCallback((sortConfig) => {
162
+ setConfig((prev) => ({
163
+ ...prev,
164
+ sortConfig
165
+ }));
166
+ }, [setConfig]);
167
+ const toggleSort = useCallback((field) => {
168
+ setConfig((prev) => {
169
+ if (prev.sortConfig?.field === field) {
170
+ if (prev.sortConfig.direction === "asc") return {
171
+ ...prev,
172
+ sortConfig: {
173
+ field,
174
+ direction: "desc"
175
+ }
176
+ };
177
+ return {
178
+ ...prev,
179
+ sortConfig: null
180
+ };
181
+ }
182
+ return {
183
+ ...prev,
184
+ sortConfig: {
185
+ field,
186
+ direction: "asc"
187
+ }
188
+ };
189
+ });
190
+ }, [setConfig]);
191
+ const setVisibleColumns = useCallback((columns) => {
192
+ setConfig((prev) => ({
193
+ ...prev,
194
+ visibleColumns: columns
195
+ }));
196
+ }, [setConfig]);
197
+ const setPage = useCallback((page) => {
198
+ setConfig((prev) => ({
199
+ ...prev,
200
+ pagination: {
201
+ ...prev.pagination,
202
+ page
203
+ }
204
+ }));
205
+ }, [setConfig]);
206
+ const setPageSize = useCallback((pageSize) => {
207
+ setConfig((prev) => ({
208
+ ...prev,
209
+ pagination: {
210
+ page: 1,
211
+ pageSize
212
+ }
213
+ }));
214
+ }, [setConfig]);
215
+ return {
216
+ config,
217
+ setConfig,
218
+ addFilter,
219
+ removeFilter,
220
+ updateFilter,
221
+ clearFilters,
222
+ setSort,
223
+ toggleSort,
224
+ setVisibleColumns,
225
+ toggleColumn: useCallback((column) => {
226
+ setConfig((prev) => {
227
+ if (prev.visibleColumns.includes(column)) return {
228
+ ...prev,
229
+ visibleColumns: prev.visibleColumns.filter((c) => c !== column)
230
+ };
231
+ return {
232
+ ...prev,
233
+ visibleColumns: [...prev.visibleColumns, column]
234
+ };
235
+ });
236
+ }, [setConfig]),
237
+ setPage,
238
+ setPageSize,
239
+ loadConfig: useCallback((newConfig) => {
240
+ setConfig(newConfig);
241
+ }, [setConfig]),
242
+ resetConfig: useCallback(() => {
243
+ setConfig({
244
+ ...EMPTY_CONFIG,
245
+ visibleColumns: defaultColumns
246
+ });
247
+ }, [setConfig, defaultColumns]),
248
+ hasChanges: useMemo(() => {
249
+ return config.filters.length > 0 || config.sortConfig !== null || config.realtime !== initialConfig?.realtime || config.pagination?.page !== 1 || config.pagination?.pageSize !== 25 || JSON.stringify([...config.visibleColumns].sort()) !== JSON.stringify([...defaultColumns].sort());
250
+ }, [
251
+ config,
252
+ defaultColumns,
253
+ initialConfig?.realtime
254
+ ]),
255
+ isLoading: false
256
+ };
257
+ }
258
+
259
+ //#endregion
260
+ export { useViewState };
261
+ //# sourceMappingURL=use-view-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-view-state.mjs","names":["EMPTY_CONFIG: ViewConfiguration"],"sources":["../../../src/client/hooks/use-view-state.ts"],"sourcesContent":["import { useQueryClient, useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport type {\n\tFilterRule,\n\tSortConfig,\n\tViewConfiguration,\n} from \"../components/filter-builder/types.js\";\nimport { useAdminStore } from \"../runtime/provider.js\";\nimport {\n\tgetAdminPreferenceQueryKey,\n\tuseSetAdminPreference,\n} from \"./use-admin-preferences.js\";\n\nconst EMPTY_CONFIG: ViewConfiguration = {\n\tfilters: [],\n\tsortConfig: null,\n\tvisibleColumns: [],\n\trealtime: undefined,\n\tpagination: { page: 1, pageSize: 25 },\n};\n\n/**\n * Get the preference key for a collection's view state\n */\nfunction getPreferenceKey(collectionName: string): string {\n\treturn `viewState:${collectionName}`;\n}\n\n/**\n * Merge stored visible columns with default columns to include new fields\n *\n * When a new field is added to the collection, it should appear in the column picker\n * but not automatically become visible (preserving user's existing preference).\n *\n * The merge logic:\n * 1. Start with stored visible columns (in user's preferred order)\n * 2. New columns that weren't in the previous default set are NOT auto-added to visible\n * (they appear in column picker but hidden by default)\n */\nfunction mergeVisibleColumns(\n\tstoredColumns: string[] | undefined,\n\tdefaultColumns: string[],\n): string[] {\n\t// If no stored columns, use defaults\n\tif (!storedColumns?.length) {\n\t\treturn defaultColumns;\n\t}\n\n\t// Return stored columns as-is\n\t// New columns are available in the column picker but not auto-visible\n\treturn storedColumns;\n}\n\n/**\n * Hook to manage view configuration state with database persistence.\n *\n * Uses Suspense for loading and queryClient for optimistic updates.\n * Must be used within a Suspense boundary.\n *\n * Architecture:\n * - Query data is the single source of truth\n * - Config is derived (useMemo) from query data + defaults\n * - Updates use optimistic mutations via queryClient.setQueryData\n * - Changes are debounced and persisted to DB\n *\n * @param defaultColumns - Default columns to show when no config is set\n * @param initialConfig - Optional initial configuration to start with\n * @param collectionName - Collection name for preference key\n * @param userId - User ID (required - must be available, use inside Suspense after auth)\n *\n * @example\n * ```tsx\n * // Inside Suspense boundary, after user is loaded\n * function TableViewInner({ collection, userId }) {\n * const viewState = useViewState(\n * [\"_title\", \"status\", \"createdAt\"],\n * undefined,\n * collection,\n * userId\n * );\n *\n * // config is guaranteed to be ready\n * const { config, setVisibleColumns, toggleSort } = viewState;\n * }\n * ```\n */\nexport function useViewState(\n\tdefaultColumns: string[],\n\tinitialConfig?: Partial<ViewConfiguration>,\n\tcollectionName?: string,\n\tuserId?: string,\n) {\n\tconst queryClient = useQueryClient();\n\tconst client = useAdminStore((s) => s.client);\n\n\t// Preference key for this collection\n\tconst preferenceKey = collectionName\n\t\t? getPreferenceKey(collectionName)\n\t\t: null;\n\n\t// Query key for cache operations\n\tconst queryKey = getAdminPreferenceQueryKey(userId, preferenceKey ?? \"\");\n\n\t// Fetch stored preference from DB using Suspense\n\t// This will suspend until data is loaded\n\tconst { data: storedConfig } = useSuspenseQuery<ViewConfiguration | null>({\n\t\tqueryKey,\n\t\tqueryFn: async (): Promise<ViewConfiguration | null> => {\n\t\t\tif (!userId || !preferenceKey) return null;\n\n\t\t\tconst result = await client.collections.adminPreferences.findOne({\n\t\t\t\twhere: { userId, key: preferenceKey },\n\t\t\t});\n\n\t\t\treturn (result?.value as unknown as ViewConfiguration) ?? null;\n\t\t},\n\t});\n\n\t// Mutation to save preference\n\tconst { mutate: savePreference } = useSetAdminPreference<ViewConfiguration>(\n\t\tpreferenceKey ?? \"\",\n\t);\n\n\t// DERIVED state from query - no useState needed!\n\t// This is the single source of truth pattern\n\tconst config = useMemo<ViewConfiguration>(() => {\n\t\tif (storedConfig) {\n\t\t\treturn {\n\t\t\t\tfilters: storedConfig.filters ?? [],\n\t\t\t\tsortConfig: storedConfig.sortConfig ?? null,\n\t\t\t\tvisibleColumns: mergeVisibleColumns(\n\t\t\t\t\tstoredConfig.visibleColumns,\n\t\t\t\t\tdefaultColumns,\n\t\t\t\t),\n\t\t\t\trealtime:\n\t\t\t\t\tstoredConfig.realtime !== undefined\n\t\t\t\t\t\t? storedConfig.realtime\n\t\t\t\t\t\t: initialConfig?.realtime,\n\t\t\t\tpagination: storedConfig.pagination ?? { page: 1, pageSize: 25 },\n\t\t\t};\n\t\t}\n\n\t\t// No stored config - use defaults\n\t\treturn {\n\t\t\tfilters: initialConfig?.filters ?? [],\n\t\t\tsortConfig: initialConfig?.sortConfig ?? null,\n\t\t\tvisibleColumns: defaultColumns,\n\t\t\trealtime: initialConfig?.realtime,\n\t\t\tpagination: initialConfig?.pagination ?? { page: 1, pageSize: 25 },\n\t\t};\n\t}, [storedConfig, defaultColumns, initialConfig]);\n\n\t// Debounce ref for save\n\tconst saveTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n\t// Cleanup timeout on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (saveTimeoutRef.current) {\n\t\t\t\tclearTimeout(saveTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Update config with optimistic update + debounced persist\n\tconst setConfig = useCallback(\n\t\t(\n\t\t\tnewConfig:\n\t\t\t\t| ViewConfiguration\n\t\t\t\t| ((prev: ViewConfiguration) => ViewConfiguration),\n\t\t) => {\n\t\t\tconst next =\n\t\t\t\ttypeof newConfig === \"function\" ? newConfig(config) : newConfig;\n\n\t\t\t// OPTIMISTIC UPDATE - immediately update query cache\n\t\t\t// This makes UI instantly responsive\n\t\t\tif (preferenceKey && userId) {\n\t\t\t\tqueryClient.setQueryData<ViewConfiguration | null>(queryKey, next);\n\t\t\t}\n\n\t\t\t// Debounced persist to DB\n\t\t\tif (saveTimeoutRef.current) {\n\t\t\t\tclearTimeout(saveTimeoutRef.current);\n\t\t\t}\n\n\t\t\tsaveTimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (preferenceKey) {\n\t\t\t\t\tsavePreference(next);\n\t\t\t\t}\n\t\t\t}, 500);\n\t\t},\n\t\t[config, preferenceKey, userId, queryClient, queryKey, savePreference],\n\t);\n\n\t// Add a filter\n\tconst addFilter = useCallback(\n\t\t(filter: FilterRule) => {\n\t\t\tsetConfig((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tfilters: [...prev.filters, filter],\n\t\t\t}));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Remove a filter by ID\n\tconst removeFilter = useCallback(\n\t\t(filterId: string) => {\n\t\t\tsetConfig((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tfilters: prev.filters.filter((f) => f.id !== filterId),\n\t\t\t}));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Update a filter by ID\n\tconst updateFilter = useCallback(\n\t\t(filterId: string, updates: Partial<FilterRule>) => {\n\t\t\tsetConfig((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tfilters: prev.filters.map((f) =>\n\t\t\t\t\tf.id === filterId ? { ...f, ...updates } : f,\n\t\t\t\t),\n\t\t\t}));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Clear all filters\n\tconst clearFilters = useCallback(() => {\n\t\tsetConfig((prev) => ({\n\t\t\t...prev,\n\t\t\tfilters: [],\n\t\t}));\n\t}, [setConfig]);\n\n\t// Set sort configuration\n\tconst setSort = useCallback(\n\t\t(sortConfig: SortConfig | null) => {\n\t\t\tsetConfig((prev) => ({ ...prev, sortConfig }));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Toggle sort on a field\n\tconst toggleSort = useCallback(\n\t\t(field: string) => {\n\t\t\tsetConfig((prev) => {\n\t\t\t\tif (prev.sortConfig?.field === field) {\n\t\t\t\t\tif (prev.sortConfig.direction === \"asc\") {\n\t\t\t\t\t\treturn { ...prev, sortConfig: { field, direction: \"desc\" } };\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...prev, sortConfig: null };\n\t\t\t\t}\n\t\t\t\treturn { ...prev, sortConfig: { field, direction: \"asc\" } };\n\t\t\t});\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Set visible columns\n\tconst setVisibleColumns = useCallback(\n\t\t(columns: string[]) => {\n\t\t\tsetConfig((prev) => ({ ...prev, visibleColumns: columns }));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Set page number\n\tconst setPage = useCallback(\n\t\t(page: number) => {\n\t\t\tsetConfig((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tpagination: { ...prev.pagination!, page },\n\t\t\t}));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Set page size and reset to page 1\n\tconst setPageSize = useCallback(\n\t\t(pageSize: number) => {\n\t\t\tsetConfig((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tpagination: { page: 1, pageSize },\n\t\t\t}));\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Toggle column visibility\n\tconst toggleColumn = useCallback(\n\t\t(column: string) => {\n\t\t\tsetConfig((prev) => {\n\t\t\t\tif (prev.visibleColumns.includes(column)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tvisibleColumns: prev.visibleColumns.filter((c) => c !== column),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...prev,\n\t\t\t\t\tvisibleColumns: [...prev.visibleColumns, column],\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Load a complete configuration\n\tconst loadConfig = useCallback(\n\t\t(newConfig: ViewConfiguration) => {\n\t\t\tsetConfig(newConfig);\n\t\t},\n\t\t[setConfig],\n\t);\n\n\t// Reset to default configuration\n\tconst resetConfig = useCallback(() => {\n\t\tsetConfig({\n\t\t\t...EMPTY_CONFIG,\n\t\t\tvisibleColumns: defaultColumns,\n\t\t});\n\t}, [setConfig, defaultColumns]);\n\n\t// Check if config has any changes from default\n\tconst hasChanges = useMemo(() => {\n\t\treturn (\n\t\t\tconfig.filters.length > 0 ||\n\t\t\tconfig.sortConfig !== null ||\n\t\t\tconfig.realtime !== initialConfig?.realtime ||\n\t\t\tconfig.pagination?.page !== 1 ||\n\t\t\tconfig.pagination?.pageSize !== 25 ||\n\t\t\tJSON.stringify([...config.visibleColumns].sort()) !==\n\t\t\t\tJSON.stringify([...defaultColumns].sort())\n\t\t);\n\t}, [config, defaultColumns, initialConfig?.realtime]);\n\n\treturn {\n\t\tconfig,\n\t\tsetConfig,\n\t\taddFilter,\n\t\tremoveFilter,\n\t\tupdateFilter,\n\t\tclearFilters,\n\t\tsetSort,\n\t\ttoggleSort,\n\t\tsetVisibleColumns,\n\t\ttoggleColumn,\n\t\tsetPage,\n\t\tsetPageSize,\n\t\tloadConfig,\n\t\tresetConfig,\n\t\thasChanges,\n\t\t// No loading state needed - Suspense handles it\n\t\tisLoading: false,\n\t};\n}\n"],"mappings":";;;;;;AAaA,MAAMA,eAAkC;CACvC,SAAS,EAAE;CACX,YAAY;CACZ,gBAAgB,EAAE;CAClB,UAAU;CACV,YAAY;EAAE,MAAM;EAAG,UAAU;EAAI;CACrC;;;;AAKD,SAAS,iBAAiB,gBAAgC;AACzD,QAAO,aAAa;;;;;;;;;;;;;AAcrB,SAAS,oBACR,eACA,gBACW;AAEX,KAAI,CAAC,eAAe,OACnB,QAAO;AAKR,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCR,SAAgB,aACf,gBACA,eACA,gBACA,QACC;CACD,MAAM,cAAc,gBAAgB;CACpC,MAAM,SAAS,eAAe,MAAM,EAAE,OAAO;CAG7C,MAAM,gBAAgB,iBACnB,iBAAiB,eAAe,GAChC;CAGH,MAAM,WAAW,2BAA2B,QAAQ,iBAAiB,GAAG;CAIxE,MAAM,EAAE,MAAM,iBAAiB,iBAA2C;EACzE;EACA,SAAS,YAA+C;AACvD,OAAI,CAAC,UAAU,CAAC,cAAe,QAAO;AAMtC,WAJe,MAAM,OAAO,YAAY,iBAAiB,QAAQ,EAChE,OAAO;IAAE;IAAQ,KAAK;IAAe,EACrC,CAAC,GAEc,SAA0C;;EAE3D,CAAC;CAGF,MAAM,EAAE,QAAQ,mBAAmB,sBAClC,iBAAiB,GACjB;CAID,MAAM,SAAS,cAAiC;AAC/C,MAAI,aACH,QAAO;GACN,SAAS,aAAa,WAAW,EAAE;GACnC,YAAY,aAAa,cAAc;GACvC,gBAAgB,oBACf,aAAa,gBACb,eACA;GACD,UACC,aAAa,aAAa,SACvB,aAAa,WACb,eAAe;GACnB,YAAY,aAAa,cAAc;IAAE,MAAM;IAAG,UAAU;IAAI;GAChE;AAIF,SAAO;GACN,SAAS,eAAe,WAAW,EAAE;GACrC,YAAY,eAAe,cAAc;GACzC,gBAAgB;GAChB,UAAU,eAAe;GACzB,YAAY,eAAe,cAAc;IAAE,MAAM;IAAG,UAAU;IAAI;GAClE;IACC;EAAC;EAAc;EAAgB;EAAc,CAAC;CAGjD,MAAM,iBAAiB,OAA8B,KAAK;AAG1D,iBAAgB;AACf,eAAa;AACZ,OAAI,eAAe,QAClB,cAAa,eAAe,QAAQ;;IAGpC,EAAE,CAAC;CAGN,MAAM,YAAY,aAEhB,cAGI;EACJ,MAAM,OACL,OAAO,cAAc,aAAa,UAAU,OAAO,GAAG;AAIvD,MAAI,iBAAiB,OACpB,aAAY,aAAuC,UAAU,KAAK;AAInE,MAAI,eAAe,QAClB,cAAa,eAAe,QAAQ;AAGrC,iBAAe,UAAU,iBAAiB;AACzC,OAAI,cACH,gBAAe,KAAK;KAEnB,IAAI;IAER;EAAC;EAAQ;EAAe;EAAQ;EAAa;EAAU;EAAe,CACtE;CAGD,MAAM,YAAY,aAChB,WAAuB;AACvB,aAAW,UAAU;GACpB,GAAG;GACH,SAAS,CAAC,GAAG,KAAK,SAAS,OAAO;GAClC,EAAE;IAEJ,CAAC,UAAU,CACX;CAGD,MAAM,eAAe,aACnB,aAAqB;AACrB,aAAW,UAAU;GACpB,GAAG;GACH,SAAS,KAAK,QAAQ,QAAQ,MAAM,EAAE,OAAO,SAAS;GACtD,EAAE;IAEJ,CAAC,UAAU,CACX;CAGD,MAAM,eAAe,aACnB,UAAkB,YAAiC;AACnD,aAAW,UAAU;GACpB,GAAG;GACH,SAAS,KAAK,QAAQ,KAAK,MAC1B,EAAE,OAAO,WAAW;IAAE,GAAG;IAAG,GAAG;IAAS,GAAG,EAC3C;GACD,EAAE;IAEJ,CAAC,UAAU,CACX;CAGD,MAAM,eAAe,kBAAkB;AACtC,aAAW,UAAU;GACpB,GAAG;GACH,SAAS,EAAE;GACX,EAAE;IACD,CAAC,UAAU,CAAC;CAGf,MAAM,UAAU,aACd,eAAkC;AAClC,aAAW,UAAU;GAAE,GAAG;GAAM;GAAY,EAAE;IAE/C,CAAC,UAAU,CACX;CAGD,MAAM,aAAa,aACjB,UAAkB;AAClB,aAAW,SAAS;AACnB,OAAI,KAAK,YAAY,UAAU,OAAO;AACrC,QAAI,KAAK,WAAW,cAAc,MACjC,QAAO;KAAE,GAAG;KAAM,YAAY;MAAE;MAAO,WAAW;MAAQ;KAAE;AAE7D,WAAO;KAAE,GAAG;KAAM,YAAY;KAAM;;AAErC,UAAO;IAAE,GAAG;IAAM,YAAY;KAAE;KAAO,WAAW;KAAO;IAAE;IAC1D;IAEH,CAAC,UAAU,CACX;CAGD,MAAM,oBAAoB,aACxB,YAAsB;AACtB,aAAW,UAAU;GAAE,GAAG;GAAM,gBAAgB;GAAS,EAAE;IAE5D,CAAC,UAAU,CACX;CAGD,MAAM,UAAU,aACd,SAAiB;AACjB,aAAW,UAAU;GACpB,GAAG;GACH,YAAY;IAAE,GAAG,KAAK;IAAa;IAAM;GACzC,EAAE;IAEJ,CAAC,UAAU,CACX;CAGD,MAAM,cAAc,aAClB,aAAqB;AACrB,aAAW,UAAU;GACpB,GAAG;GACH,YAAY;IAAE,MAAM;IAAG;IAAU;GACjC,EAAE;IAEJ,CAAC,UAAU,CACX;AAkDD,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAzDoB,aACnB,WAAmB;AACnB,cAAW,SAAS;AACnB,QAAI,KAAK,eAAe,SAAS,OAAO,CACvC,QAAO;KACN,GAAG;KACH,gBAAgB,KAAK,eAAe,QAAQ,MAAM,MAAM,OAAO;KAC/D;AAEF,WAAO;KACN,GAAG;KACH,gBAAgB,CAAC,GAAG,KAAK,gBAAgB,OAAO;KAChD;KACA;KAEH,CAAC,UAAU,CACX;EA0CA;EACA;EACA,YAzCkB,aACjB,cAAiC;AACjC,aAAU,UAAU;KAErB,CAAC,UAAU,CACX;EAqCA,aAlCmB,kBAAkB;AACrC,aAAU;IACT,GAAG;IACH,gBAAgB;IAChB,CAAC;KACA,CAAC,WAAW,eAAe,CAAC;EA8B9B,YA3BkB,cAAc;AAChC,UACC,OAAO,QAAQ,SAAS,KACxB,OAAO,eAAe,QACtB,OAAO,aAAa,eAAe,YACnC,OAAO,YAAY,SAAS,KAC5B,OAAO,YAAY,aAAa,MAChC,KAAK,UAAU,CAAC,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,KAChD,KAAK,UAAU,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;KAE1C;GAAC;GAAQ;GAAgB,eAAe;GAAS,CAAC;EAmBpD,WAAW;EACX"}
@@ -0,0 +1,160 @@
1
+ import { DEFAULT_LOCALE } from "questpie/shared";
2
+ import * as React$1 from "react";
3
+ import { createContext, useCallback, useContext } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/client/i18n/hooks.tsx
7
+ /**
8
+ * I18n React Hooks
9
+ *
10
+ * React context and hooks for i18n in the admin UI.
11
+ */
12
+ const I18nContext = createContext(null);
13
+ /**
14
+ * I18n Provider Component
15
+ *
16
+ * Provides i18n to all child components.
17
+ * The adapter is the source of truth for UI locale.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * import { I18nProvider, createSimpleI18n } from "@questpie/admin/i18n";
22
+ *
23
+ * const i18n = createSimpleI18n({ ... });
24
+ *
25
+ * <I18nProvider adapter={i18n}>
26
+ * <App />
27
+ * </I18nProvider>
28
+ * ```
29
+ */
30
+ function I18nProvider({ adapter, children }) {
31
+ const [, forceUpdate] = React$1.useReducer((x) => x + 1, 0);
32
+ React$1.useEffect(() => {
33
+ return adapter.onLocaleChange(() => {
34
+ forceUpdate();
35
+ });
36
+ }, [adapter]);
37
+ const contextValue = React$1.useMemo(() => ({
38
+ locale: adapter.locale,
39
+ locales: adapter.locales,
40
+ t: adapter.t.bind(adapter),
41
+ setLocale: adapter.setLocale.bind(adapter),
42
+ onLocaleChange: adapter.onLocaleChange.bind(adapter),
43
+ formatDate: adapter.formatDate.bind(adapter),
44
+ formatNumber: adapter.formatNumber.bind(adapter),
45
+ formatRelative: adapter.formatRelative?.bind(adapter),
46
+ getLocaleName: adapter.getLocaleName.bind(adapter),
47
+ isRTL: adapter.isRTL.bind(adapter)
48
+ }), [adapter, adapter.locale]);
49
+ return /* @__PURE__ */ jsx(I18nContext.Provider, {
50
+ value: contextValue,
51
+ children
52
+ });
53
+ }
54
+ /**
55
+ * Get the i18n adapter (throws if not in provider)
56
+ */
57
+ function useI18n() {
58
+ const adapter = useContext(I18nContext);
59
+ if (!adapter) throw new Error("useI18n must be used within I18nProvider");
60
+ return adapter;
61
+ }
62
+ /**
63
+ * Get i18n adapter or null (safe version)
64
+ */
65
+ function useSafeI18n() {
66
+ return useContext(I18nContext);
67
+ }
68
+ /**
69
+ * Main translation hook
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * function MyComponent() {
74
+ * const { t, locale, formatDate } = useTranslation();
75
+ * return <h1>{t("dashboard.title")}</h1>;
76
+ * }
77
+ * ```
78
+ */
79
+ function useTranslation() {
80
+ const adapter = useI18n();
81
+ return {
82
+ locale: adapter.locale,
83
+ locales: adapter.locales,
84
+ t: adapter.t,
85
+ setLocale: adapter.setLocale,
86
+ formatDate: adapter.formatDate,
87
+ formatNumber: adapter.formatNumber,
88
+ getLocaleName: adapter.getLocaleName,
89
+ isRTL: adapter.isRTL()
90
+ };
91
+ }
92
+ /**
93
+ * Check if an object is a locale map (has locale codes as keys)
94
+ */
95
+ function isLocaleMap(obj) {
96
+ if ("key" in obj) return false;
97
+ return Object.values(obj).every((v) => typeof v === "string");
98
+ }
99
+ /**
100
+ * Resolve locale map to string for given locale
101
+ */
102
+ function resolveLocaleMap(map, locale, fallback) {
103
+ if (map[locale]) return map[locale];
104
+ const lang = locale.split("-")[0];
105
+ if (lang && map[lang]) return map[lang];
106
+ if (map[DEFAULT_LOCALE]) return map[DEFAULT_LOCALE];
107
+ return Object.values(map)[0] ?? fallback;
108
+ }
109
+ /**
110
+ * Resolve I18nText to string
111
+ *
112
+ * @example
113
+ * ```tsx
114
+ * function Label({ text }: { text: I18nText }) {
115
+ * const resolve = useResolveText();
116
+ * return <span>{resolve(text)}</span>;
117
+ * }
118
+ * ```
119
+ */
120
+ function useResolveText() {
121
+ const adapter = useSafeI18n();
122
+ return useCallback((text, fallback = "", contextValues) => {
123
+ const resolveValue = (value) => {
124
+ if (value === void 0 || value === null) return fallback;
125
+ if (typeof value === "string") return value;
126
+ if (typeof value === "function") {
127
+ if (!adapter && !contextValues) return fallback;
128
+ const i18nCtx = adapter ? {
129
+ locale: adapter.locale,
130
+ t: adapter.t,
131
+ formatDate: adapter.formatDate,
132
+ formatNumber: adapter.formatNumber
133
+ } : void 0;
134
+ const ctx = {
135
+ ...contextValues ?? {},
136
+ ...i18nCtx ?? {}
137
+ };
138
+ try {
139
+ return resolveValue(value(ctx));
140
+ } catch (error) {
141
+ console.error("Failed to resolve dynamic text:", error);
142
+ return fallback;
143
+ }
144
+ }
145
+ if (typeof value === "object" && "key" in value && typeof value.key === "string") {
146
+ const keyObj = value;
147
+ if (!adapter) return keyObj.fallback ?? fallback;
148
+ const result = adapter.t(keyObj.key, keyObj.params);
149
+ return result === keyObj.key ? keyObj.fallback ?? result : result;
150
+ }
151
+ if (typeof value === "object" && isLocaleMap(value)) return resolveLocaleMap(value, adapter?.locale ?? DEFAULT_LOCALE, fallback);
152
+ return fallback;
153
+ };
154
+ return resolveValue(text);
155
+ }, [adapter]);
156
+ }
157
+
158
+ //#endregion
159
+ export { I18nProvider, useResolveText, useSafeI18n, useTranslation };
160
+ //# sourceMappingURL=hooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.mjs","names":["React"],"sources":["../../../src/client/i18n/hooks.tsx"],"sourcesContent":["/**\n * I18n React Hooks\n *\n * React context and hooks for i18n in the admin UI.\n */\n\nimport { DEFAULT_LOCALE } from \"questpie/shared\";\nimport * as React from \"react\";\nimport { createContext, useCallback, useContext } from \"react\";\nimport type {\n I18nAdapter,\n I18nContext as I18nContextType,\n I18nProviderProps,\n I18nText,\n UseTranslationResult,\n} from \"./types\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst I18nContext = createContext<I18nAdapter | null>(null);\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * I18n Provider Component\n *\n * Provides i18n to all child components.\n * The adapter is the source of truth for UI locale.\n *\n * @example\n * ```tsx\n * import { I18nProvider, createSimpleI18n } from \"@questpie/admin/i18n\";\n *\n * const i18n = createSimpleI18n({ ... });\n *\n * <I18nProvider adapter={i18n}>\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({\n adapter,\n children,\n}: I18nProviderProps): React.ReactElement {\n // Force re-render when locale changes in adapter\n const [, forceUpdate] = React.useReducer((x) => x + 1, 0);\n\n // Subscribe to locale changes from adapter\n React.useEffect(() => {\n return adapter.onLocaleChange(() => {\n forceUpdate();\n });\n }, [adapter]);\n\n // Context value - adapter is source of truth\n // useMemo depends on adapter.locale to create new reference when locale changes\n const contextValue = React.useMemo<I18nAdapter>(\n () => ({\n locale: adapter.locale,\n locales: adapter.locales,\n t: adapter.t.bind(adapter),\n setLocale: adapter.setLocale.bind(adapter),\n onLocaleChange: adapter.onLocaleChange.bind(adapter),\n formatDate: adapter.formatDate.bind(adapter),\n formatNumber: adapter.formatNumber.bind(adapter),\n formatRelative: adapter.formatRelative?.bind(adapter),\n getLocaleName: adapter.getLocaleName.bind(adapter),\n isRTL: adapter.isRTL.bind(adapter),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [adapter, adapter.locale],\n );\n\n return (\n <I18nContext.Provider value={contextValue}>{children}</I18nContext.Provider>\n );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Get the i18n adapter (throws if not in provider)\n */\nexport function useI18n(): I18nAdapter {\n const adapter = useContext(I18nContext);\n if (!adapter) {\n throw new Error(\"useI18n must be used within I18nProvider\");\n }\n return adapter;\n}\n\n/**\n * Get i18n adapter or null (safe version)\n */\nexport function useSafeI18n(): I18nAdapter | null {\n return useContext(I18nContext);\n}\n\n/**\n * Main translation hook\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { t, locale, formatDate } = useTranslation();\n * return <h1>{t(\"dashboard.title\")}</h1>;\n * }\n * ```\n */\nexport function useTranslation(): UseTranslationResult {\n const adapter = useI18n();\n\n return {\n locale: adapter.locale,\n locales: adapter.locales,\n t: adapter.t,\n setLocale: adapter.setLocale,\n formatDate: adapter.formatDate,\n formatNumber: adapter.formatNumber,\n getLocaleName: adapter.getLocaleName,\n isRTL: adapter.isRTL(),\n };\n}\n\n/**\n * Get just the translate function\n */\nexport function useT(): I18nAdapter[\"t\"] {\n return useI18n().t;\n}\n\n/**\n * Get current locale\n */\nexport function useLocale(): string {\n return useI18n().locale;\n}\n\n/**\n * Get locale setter\n */\nexport function useSetLocale(): I18nAdapter[\"setLocale\"] {\n return useI18n().setLocale;\n}\n\n// ============================================================================\n// I18nText Resolver\n// ============================================================================\n\n/**\n * Check if an object is a locale map (has locale codes as keys)\n */\nfunction isLocaleMap(obj: object): obj is Record<string, string> {\n // If it has a \"key\" property, it's a translation key lookup\n if (\"key\" in obj) return false;\n // Check if all values are strings (locale map)\n return Object.values(obj).every((v) => typeof v === \"string\");\n}\n\n/**\n * Resolve locale map to string for given locale\n */\nfunction resolveLocaleMap(\n map: Record<string, string>,\n locale: string,\n fallback: string,\n): string {\n // Try exact locale match\n if (map[locale]) return map[locale];\n // Try language code only (e.g., \"en\" from \"en-US\")\n const lang = locale.split(\"-\")[0];\n if (lang && map[lang]) return map[lang];\n // Try default locale as fallback\n if (map[DEFAULT_LOCALE]) return map[DEFAULT_LOCALE];\n // Return first available value\n const firstValue = Object.values(map)[0];\n return firstValue ?? fallback;\n}\n\n/**\n * Resolve I18nText to string\n *\n * @example\n * ```tsx\n * function Label({ text }: { text: I18nText }) {\n * const resolve = useResolveText();\n * return <span>{resolve(text)}</span>;\n * }\n * ```\n */\nexport function useResolveText(): (\n text: I18nText | ((values: Record<string, any>) => I18nText) | undefined,\n fallback?: string,\n contextValues?: Record<string, any>,\n) => string {\n const adapter = useSafeI18n();\n\n return useCallback(\n (\n text: I18nText | ((values: Record<string, any>) => I18nText) | undefined,\n fallback = \"\",\n contextValues?: Record<string, any>,\n ): string => {\n const resolveValue = (value: I18nText | undefined): string => {\n if (value === undefined || value === null) return fallback;\n\n // Plain string\n if (typeof value === \"string\") return value;\n\n // Function\n if (typeof value === \"function\") {\n if (!adapter && !contextValues) return fallback;\n const i18nCtx = adapter\n ? {\n locale: adapter.locale,\n t: adapter.t,\n formatDate: adapter.formatDate,\n formatNumber: adapter.formatNumber,\n }\n : undefined;\n const ctx = {\n ...(contextValues ?? {}),\n ...(i18nCtx ?? {}),\n } as I18nContextType & Record<string, any>;\n try {\n const result = value(ctx);\n return resolveValue(result as I18nText);\n } catch (error) {\n console.error(\"Failed to resolve dynamic text:\", error);\n return fallback;\n }\n }\n\n // Object with key (translation key lookup)\n if (\n typeof value === \"object\" &&\n \"key\" in value &&\n typeof value.key === \"string\"\n ) {\n const keyObj = value as {\n key: string;\n fallback?: string;\n params?: Record<string, unknown>;\n };\n if (!adapter) return keyObj.fallback ?? fallback;\n const result = adapter.t(keyObj.key, keyObj.params);\n // If t() returns the key (not found), use fallback\n return result === keyObj.key ? (keyObj.fallback ?? result) : result;\n }\n\n // Locale map (inline translations)\n if (typeof value === \"object\" && isLocaleMap(value)) {\n const locale = adapter?.locale ?? DEFAULT_LOCALE;\n return resolveLocaleMap(value, locale, fallback);\n }\n\n return fallback;\n };\n\n return resolveValue(text as I18nText | undefined);\n },\n [adapter],\n );\n}\n\n/**\n * Resolve I18nText synchronously (without adapter)\n * Only works with string and object types, not functions\n *\n * @param locale - Optional locale to use for locale maps (defaults to \"en\")\n */\nexport function resolveTextSync(\n text: I18nText | undefined,\n fallback = \"\",\n locale = DEFAULT_LOCALE,\n): string {\n if (text === undefined || text === null) return fallback;\n if (typeof text === \"string\") return text;\n if (typeof text === \"function\") return fallback;\n if (typeof text === \"object\" && \"key\" in text) {\n return text.fallback ?? fallback;\n }\n // Locale map (inline translations)\n if (typeof text === \"object\" && isLocaleMap(text)) {\n return resolveLocaleMap(text, locale, fallback);\n }\n return fallback;\n}\n\n// ============================================================================\n// Text Component\n// ============================================================================\n\n/**\n * Text component that resolves I18nText to a string\n *\n * Use this when you need to render I18nText in JSX.\n *\n * @example\n * ```tsx\n * <Text text={{ en: \"Hello\", sk: \"Ahoj\" }} />\n * <Text text=\"Static text\" />\n * <Text text={{ key: \"common.save\" }} />\n * ```\n */\nexport function Text({\n text,\n fallback = \"\",\n as: Component = \"span\",\n className,\n}: {\n text: I18nText | undefined;\n fallback?: string;\n as?: React.ElementType;\n className?: string;\n}): React.ReactElement | null {\n const resolve = useResolveText();\n const resolved = resolve(text, fallback);\n if (!resolved) return null;\n return <Component className={className}>{resolved}</Component>;\n}\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ //#region src/client/i18n/intl-cache.ts
2
+ /**
3
+ * Intl Formatters Cache
4
+ *
5
+ * Caches Intl formatter instances to avoid creating new ones on every call.
6
+ * Intl formatters are expensive to create but cheap to reuse.
7
+ */
8
+ function getCacheKey(locale, options) {
9
+ if (!options || Object.keys(options).length === 0) return locale;
10
+ return `${locale}:${JSON.stringify(options)}`;
11
+ }
12
+ const dateTimeFormatCache = /* @__PURE__ */ new Map();
13
+ function getDateTimeFormat(locale, options) {
14
+ const key = getCacheKey(locale, options);
15
+ let formatter = dateTimeFormatCache.get(key);
16
+ if (!formatter) {
17
+ formatter = new Intl.DateTimeFormat(locale, options);
18
+ dateTimeFormatCache.set(key, formatter);
19
+ }
20
+ return formatter;
21
+ }
22
+ const numberFormatCache = /* @__PURE__ */ new Map();
23
+ function getNumberFormat(locale, options) {
24
+ const key = getCacheKey(locale, options);
25
+ let formatter = numberFormatCache.get(key);
26
+ if (!formatter) {
27
+ formatter = new Intl.NumberFormat(locale, options);
28
+ numberFormatCache.set(key, formatter);
29
+ }
30
+ return formatter;
31
+ }
32
+ const pluralRulesCache = /* @__PURE__ */ new Map();
33
+ function getPluralRules(locale, options) {
34
+ const key = getCacheKey(locale, options);
35
+ let rules = pluralRulesCache.get(key);
36
+ if (!rules) {
37
+ rules = new Intl.PluralRules(locale, options);
38
+ pluralRulesCache.set(key, rules);
39
+ }
40
+ return rules;
41
+ }
42
+ const relativeTimeFormatCache = /* @__PURE__ */ new Map();
43
+ function getRelativeTimeFormat(locale, options) {
44
+ const key = getCacheKey(locale, options);
45
+ let formatter = relativeTimeFormatCache.get(key);
46
+ if (!formatter) {
47
+ formatter = new Intl.RelativeTimeFormat(locale, options);
48
+ relativeTimeFormatCache.set(key, formatter);
49
+ }
50
+ return formatter;
51
+ }
52
+ const displayNamesCache = /* @__PURE__ */ new Map();
53
+ function getDisplayNames(locale, options) {
54
+ const key = getCacheKey(locale, options);
55
+ let displayNames = displayNamesCache.get(key);
56
+ if (!displayNames) {
57
+ displayNames = new Intl.DisplayNames([locale], options);
58
+ displayNamesCache.set(key, displayNames);
59
+ }
60
+ return displayNames;
61
+ }
62
+
63
+ //#endregion
64
+ export { getDateTimeFormat, getDisplayNames, getNumberFormat, getPluralRules, getRelativeTimeFormat };
65
+ //# sourceMappingURL=intl-cache.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intl-cache.mjs","names":[],"sources":["../../../src/client/i18n/intl-cache.ts"],"sourcesContent":["/**\n * Intl Formatters Cache\n *\n * Caches Intl formatter instances to avoid creating new ones on every call.\n * Intl formatters are expensive to create but cheap to reuse.\n */\n\n// Cache key generator - serializes locale + options\nfunction getCacheKey(locale: string, options?: object): string {\n if (!options || Object.keys(options).length === 0) {\n return locale;\n }\n return `${locale}:${JSON.stringify(options)}`;\n}\n\n// DateTimeFormat cache\nconst dateTimeFormatCache = new Map<string, Intl.DateTimeFormat>();\n\nexport function getDateTimeFormat(\n locale: string,\n options?: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const key = getCacheKey(locale, options);\n let formatter = dateTimeFormatCache.get(key);\n if (!formatter) {\n formatter = new Intl.DateTimeFormat(locale, options);\n dateTimeFormatCache.set(key, formatter);\n }\n return formatter;\n}\n\n// NumberFormat cache\nconst numberFormatCache = new Map<string, Intl.NumberFormat>();\n\nexport function getNumberFormat(\n locale: string,\n options?: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = getCacheKey(locale, options);\n let formatter = numberFormatCache.get(key);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n numberFormatCache.set(key, formatter);\n }\n return formatter;\n}\n\n// PluralRules cache\nconst pluralRulesCache = new Map<string, Intl.PluralRules>();\n\nexport function getPluralRules(\n locale: string,\n options?: Intl.PluralRulesOptions,\n): Intl.PluralRules {\n const key = getCacheKey(locale, options);\n let rules = pluralRulesCache.get(key);\n if (!rules) {\n rules = new Intl.PluralRules(locale, options);\n pluralRulesCache.set(key, rules);\n }\n return rules;\n}\n\n// RelativeTimeFormat cache\nconst relativeTimeFormatCache = new Map<string, Intl.RelativeTimeFormat>();\n\nexport function getRelativeTimeFormat(\n locale: string,\n options?: Intl.RelativeTimeFormatOptions,\n): Intl.RelativeTimeFormat {\n const key = getCacheKey(locale, options);\n let formatter = relativeTimeFormatCache.get(key);\n if (!formatter) {\n formatter = new Intl.RelativeTimeFormat(locale, options);\n relativeTimeFormatCache.set(key, formatter);\n }\n return formatter;\n}\n\n// DisplayNames cache\nconst displayNamesCache = new Map<string, Intl.DisplayNames>();\n\nexport function getDisplayNames(\n locale: string,\n options: Intl.DisplayNamesOptions,\n): Intl.DisplayNames {\n const key = getCacheKey(locale, options);\n let displayNames = displayNamesCache.get(key);\n if (!displayNames) {\n displayNames = new Intl.DisplayNames([locale], options);\n displayNamesCache.set(key, displayNames);\n }\n return displayNames;\n}\n\n/**\n * Clear all caches - useful for testing or when locale changes significantly\n */\nexport function clearIntlCache(): void {\n dateTimeFormatCache.clear();\n numberFormatCache.clear();\n pluralRulesCache.clear();\n relativeTimeFormatCache.clear();\n displayNamesCache.clear();\n}\n"],"mappings":";;;;;;;AAQA,SAAS,YAAY,QAAgB,SAA0B;AAC7D,KAAI,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,WAAW,EAC9C,QAAO;AAET,QAAO,GAAG,OAAO,GAAG,KAAK,UAAU,QAAQ;;AAI7C,MAAM,sCAAsB,IAAI,KAAkC;AAElE,SAAgB,kBACd,QACA,SACqB;CACrB,MAAM,MAAM,YAAY,QAAQ,QAAQ;CACxC,IAAI,YAAY,oBAAoB,IAAI,IAAI;AAC5C,KAAI,CAAC,WAAW;AACd,cAAY,IAAI,KAAK,eAAe,QAAQ,QAAQ;AACpD,sBAAoB,IAAI,KAAK,UAAU;;AAEzC,QAAO;;AAIT,MAAM,oCAAoB,IAAI,KAAgC;AAE9D,SAAgB,gBACd,QACA,SACmB;CACnB,MAAM,MAAM,YAAY,QAAQ,QAAQ;CACxC,IAAI,YAAY,kBAAkB,IAAI,IAAI;AAC1C,KAAI,CAAC,WAAW;AACd,cAAY,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAClD,oBAAkB,IAAI,KAAK,UAAU;;AAEvC,QAAO;;AAIT,MAAM,mCAAmB,IAAI,KAA+B;AAE5D,SAAgB,eACd,QACA,SACkB;CAClB,MAAM,MAAM,YAAY,QAAQ,QAAQ;CACxC,IAAI,QAAQ,iBAAiB,IAAI,IAAI;AACrC,KAAI,CAAC,OAAO;AACV,UAAQ,IAAI,KAAK,YAAY,QAAQ,QAAQ;AAC7C,mBAAiB,IAAI,KAAK,MAAM;;AAElC,QAAO;;AAIT,MAAM,0CAA0B,IAAI,KAAsC;AAE1E,SAAgB,sBACd,QACA,SACyB;CACzB,MAAM,MAAM,YAAY,QAAQ,QAAQ;CACxC,IAAI,YAAY,wBAAwB,IAAI,IAAI;AAChD,KAAI,CAAC,WAAW;AACd,cAAY,IAAI,KAAK,mBAAmB,QAAQ,QAAQ;AACxD,0BAAwB,IAAI,KAAK,UAAU;;AAE7C,QAAO;;AAIT,MAAM,oCAAoB,IAAI,KAAgC;AAE9D,SAAgB,gBACd,QACA,SACmB;CACnB,MAAM,MAAM,YAAY,QAAQ,QAAQ;CACxC,IAAI,eAAe,kBAAkB,IAAI,IAAI;AAC7C,KAAI,CAAC,cAAc;AACjB,iBAAe,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,QAAQ;AACvD,oBAAkB,IAAI,KAAK,aAAa;;AAE1C,QAAO"}
@@ -0,0 +1,7 @@
1
+ //#region src/client/i18n/messages.ts
2
+ /** @deprecated Bundled messages removed. Use server-fetched translations. */
3
+ const adminMessages = {};
4
+
5
+ //#endregion
6
+ export { adminMessages };
7
+ //# sourceMappingURL=messages.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.mjs","names":["adminMessages: SimpleMessages"],"sources":["../../../src/client/i18n/messages.ts"],"sourcesContent":["import type { SimpleMessages } from \"./simple\";\n\n/** @deprecated Bundled messages removed. Use server-fetched translations. */\nexport const adminMessages: SimpleMessages = {};\n"],"mappings":";;AAGA,MAAaA,gBAAgC,EAAE"}
@@ -0,0 +1,22 @@
1
+ import "./types.mjs";
2
+
3
+ //#region src/client/i18n/simple.d.ts
4
+
5
+ /**
6
+ * Simple messages format
7
+ */
8
+ type SimpleMessages = Record<string, string | PluralMessages>;
9
+ /**
10
+ * Plural messages (using Intl.PluralRules categories)
11
+ */
12
+ type PluralMessages = {
13
+ zero?: string;
14
+ one: string;
15
+ two?: string;
16
+ few?: string;
17
+ many?: string;
18
+ other: string;
19
+ };
20
+ //#endregion
21
+ export { SimpleMessages };
22
+ //# sourceMappingURL=simple.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.d.mts","names":[],"sources":["../../../src/client/i18n/simple.ts"],"sourcesContent":[],"mappings":";;;;;;;KA6BY,cAAA,GAAiB,wBAAwB;;;;KAKzC,cAAA"}