@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,256 @@
1
+ import { formatLabel } from "../lib/utils.mjs";
2
+
3
+ //#region src/client/utils/build-field-definitions-from-schema.ts
4
+ /**
5
+ * Build admin field definitions from server collection schema.
6
+ *
7
+ * Maps server field metadata to admin FieldDefinition objects:
8
+ * - Uses `metadata.type` to look up field in registry
9
+ * - Applies `metadata.meta.admin` overrides
10
+ * - Handles relation type mapping (belongsTo -> single, hasMany -> multiple)
11
+ *
12
+ * @param schema - Collection schema from server introspection
13
+ * @param registry - Field registry from admin config (admin.getFields())
14
+ * @param options - Optional configuration
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * // In a component with admin context
19
+ * const admin = useAdminStore(selectAdmin);
20
+ * const { data: schema } = useCollectionSchema("posts");
21
+ * const fields = buildFieldDefinitionsFromSchema(
22
+ * schema,
23
+ * admin.getFields(),
24
+ * );
25
+ * ```
26
+ */
27
+ /**
28
+ * Build field definitions from raw field metadata.
29
+ * Works with metadata from any source (collection schema, global schema, block fields).
30
+ *
31
+ * @param fields - Record of field name to field metadata
32
+ * @param registry - Field registry from admin config
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * const admin = useAdminStore(selectAdmin);
37
+ * const fields = buildFieldDefinitionsFromMetadata(
38
+ * blockDef.fields,
39
+ * admin.getFields(),
40
+ * );
41
+ * ```
42
+ */
43
+ function buildFieldDefinitionsFromMetadata(fields, registry) {
44
+ if (!fields) return {};
45
+ const result = {};
46
+ for (const [fieldName, fieldSchema] of Object.entries(fields)) {
47
+ const metadata = fieldSchema.metadata ?? fieldSchema;
48
+ const fieldType = resolveFieldType(metadata);
49
+ const fieldBuilder = registry[fieldType];
50
+ if (!fieldBuilder) continue;
51
+ const config = buildFieldConfig(fieldSchema.name ?? fieldName, metadata, {}, registry, fieldType);
52
+ result[fieldName] = fieldBuilder.$options(config);
53
+ }
54
+ return result;
55
+ }
56
+ function buildFieldDefinitionsFromSchema(schema, registry, options = {}) {
57
+ if (!schema) return {};
58
+ const relations = "relations" in schema ? schema.relations : {};
59
+ const result = {};
60
+ for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {
61
+ if (options.exclude?.includes(fieldName)) continue;
62
+ if (options.include && !options.include.includes(fieldName)) continue;
63
+ if (isSystemField(fieldName)) continue;
64
+ const fieldDef = buildFieldDefinition(fieldName, fieldSchema, relations, registry, options.overrides?.[fieldName]);
65
+ if (fieldDef) result[fieldName] = fieldDef;
66
+ }
67
+ return result;
68
+ }
69
+ /**
70
+ * Build a single field definition from schema
71
+ */
72
+ function buildFieldDefinition(fieldName, fieldSchema, relations, registry, overrides) {
73
+ const { metadata } = fieldSchema;
74
+ const fieldType = resolveFieldType(metadata);
75
+ const fieldBuilder = registry[fieldType];
76
+ if (!fieldBuilder) return null;
77
+ const config = buildFieldConfig(fieldName, metadata, relations, registry, fieldType);
78
+ const adminConfig = metadata.meta?.admin;
79
+ if (adminConfig) applyAdminConfig(config, adminConfig);
80
+ if (overrides) Object.assign(config, overrides);
81
+ return fieldBuilder.$options(config);
82
+ }
83
+ /**
84
+ * Build field config from metadata
85
+ */
86
+ function buildFieldConfig(fieldName, metadata, relations, registry, fieldType) {
87
+ const config = {
88
+ label: metadata.label ?? formatLabel(fieldName),
89
+ description: metadata.description,
90
+ required: metadata.required,
91
+ localized: metadata.localized,
92
+ readOnly: metadata.readOnly
93
+ };
94
+ if (metadata.validation) Object.assign(config, metadata.validation);
95
+ if (isSelectMetadata(metadata)) applySelectConfig(config, metadata);
96
+ else if (isRelationMetadata(metadata)) if (fieldType === "upload") applyUploadConfig(config, metadata, relations[fieldName]);
97
+ else applyRelationConfig(config, metadata, relations[fieldName]);
98
+ else if (isNestedMetadata(metadata)) applyNestedConfig(config, metadata, relations, registry);
99
+ else if (metadata.type === "richText") applyRichTextConfig(config, metadata);
100
+ applyExtraMetadata(config, metadata);
101
+ return config;
102
+ }
103
+ function isSelectMetadata(m) {
104
+ return m.type === "select";
105
+ }
106
+ function isRelationMetadata(m) {
107
+ return m.type === "relation";
108
+ }
109
+ function isNestedMetadata(m) {
110
+ return m.type === "object" || m.type === "array" || m.type === "blocks";
111
+ }
112
+ /**
113
+ * Apply select field config
114
+ */
115
+ function applySelectConfig(config, metadata) {
116
+ config.options = metadata.options.map((opt) => ({
117
+ value: opt.value,
118
+ label: opt.label ?? String(opt.value)
119
+ }));
120
+ if (metadata.multiple !== void 0) config.multiple = metadata.multiple;
121
+ }
122
+ /**
123
+ * Apply relation field config
124
+ */
125
+ function applyRelationConfig(config, metadata, relationSchema) {
126
+ const isSingle = ["belongsTo", "morphTo"].includes(metadata.relationType);
127
+ config.targetCollection = metadata.targetCollection;
128
+ config.type = isSingle ? "single" : "multiple";
129
+ config.relationType = metadata.relationType;
130
+ if (metadata.through ?? relationSchema?.through) config.through = metadata.through ?? relationSchema?.through;
131
+ if (metadata.foreignKey ?? relationSchema?.foreignKey) config.foreignKey = metadata.foreignKey ?? relationSchema?.foreignKey;
132
+ }
133
+ function applyUploadConfig(config, metadata, relationSchema) {
134
+ const isMultiple = [
135
+ "hasMany",
136
+ "manyToMany",
137
+ "multiple",
138
+ "morphMany"
139
+ ].includes(metadata.relationType);
140
+ config.to = metadata.targetCollection;
141
+ config.multiple = isMultiple;
142
+ if (metadata.through ?? relationSchema?.through) config.through = metadata.through ?? relationSchema?.through;
143
+ if (metadata.foreignKey ?? relationSchema?.foreignKey) config.foreignKey = metadata.foreignKey ?? relationSchema?.foreignKey;
144
+ }
145
+ function applyNestedConfig(config, metadata, relations, registry) {
146
+ if (!metadata.nestedFields) return;
147
+ if (metadata.type === "object") {
148
+ const nestedDefs = buildNestedFieldDefinitions(metadata.nestedFields, relations, registry);
149
+ config.fields = () => nestedDefs;
150
+ return;
151
+ }
152
+ if (metadata.type === "array") {
153
+ const itemMetadata = metadata.nestedFields.item;
154
+ if (!itemMetadata) return;
155
+ if (itemMetadata.type === "object" && itemMetadata.nestedFields) {
156
+ const itemFields = buildNestedFieldDefinitions(itemMetadata.nestedFields ?? {}, relations, registry);
157
+ config.item = () => itemFields;
158
+ return;
159
+ }
160
+ const itemType = mapArrayItemType(itemMetadata.type);
161
+ if (itemType) {
162
+ config.itemType = itemType;
163
+ if (itemMetadata.type === "select") applySelectConfig(config, itemMetadata);
164
+ }
165
+ }
166
+ if (metadata.type === "blocks") {
167
+ const blocksMetadata = metadata;
168
+ if (blocksMetadata.allowedBlocks) config.allowedBlocks = blocksMetadata.allowedBlocks;
169
+ if (blocksMetadata.minBlocks !== void 0) config.minBlocks = blocksMetadata.minBlocks;
170
+ if (blocksMetadata.maxBlocks !== void 0) config.maxBlocks = blocksMetadata.maxBlocks;
171
+ }
172
+ }
173
+ function applyExtraMetadata(config, metadata) {
174
+ const reservedKeys = new Set([
175
+ "type",
176
+ "label",
177
+ "description",
178
+ "required",
179
+ "localized",
180
+ "readOnly",
181
+ "writeOnly",
182
+ "validation",
183
+ "meta",
184
+ "nestedFields",
185
+ "features"
186
+ ]);
187
+ for (const [key, value] of Object.entries(metadata)) {
188
+ if (reservedKeys.has(key)) continue;
189
+ if (key.startsWith("_")) continue;
190
+ if (value === void 0) continue;
191
+ config[key] = value;
192
+ }
193
+ }
194
+ function applyRichTextConfig(config, metadata) {
195
+ if (metadata.maxCharacters !== void 0) {
196
+ config.maxCharacters = metadata.maxCharacters;
197
+ config.showCharacterCount = true;
198
+ }
199
+ if (metadata.placeholder !== void 0) config.placeholder = metadata.placeholder;
200
+ if (metadata.allowImages !== void 0) config.enableImages = metadata.allowImages;
201
+ if (metadata.imageCollection !== void 0) config.imageCollection = metadata.imageCollection;
202
+ }
203
+ function buildNestedFieldDefinitions(nestedFields, relations, registry) {
204
+ const result = {};
205
+ for (const [nestedName, nestedMetadata] of Object.entries(nestedFields)) {
206
+ const fieldType = resolveFieldType(nestedMetadata);
207
+ const fieldBuilder = registry[fieldType];
208
+ if (!fieldBuilder) continue;
209
+ const config = buildFieldConfig(nestedName, nestedMetadata, relations, registry, fieldType);
210
+ const adminConfig = nestedMetadata.meta?.admin;
211
+ if (adminConfig) applyAdminConfig(config, adminConfig);
212
+ result[nestedName] = fieldBuilder.$options(config);
213
+ }
214
+ return result;
215
+ }
216
+ function resolveFieldType(metadata) {
217
+ if (metadata.type === "relation") {
218
+ if (metadata.isUpload) return "upload";
219
+ }
220
+ return metadata.type;
221
+ }
222
+ function mapArrayItemType(type) {
223
+ return new Set([
224
+ "text",
225
+ "number",
226
+ "email",
227
+ "textarea",
228
+ "select"
229
+ ]).has(type) ? type : null;
230
+ }
231
+ /**
232
+ * Apply admin config overrides from server meta.admin
233
+ *
234
+ * Since each field type has its own admin meta with only valid properties,
235
+ * we simply copy all defined properties from adminConfig to config.
236
+ */
237
+ function applyAdminConfig(config, adminConfig) {
238
+ for (const [key, value] of Object.entries(adminConfig)) if (value !== void 0) config[key] = value;
239
+ }
240
+ /**
241
+ * Check if a field is a system field that shouldn't be in forms
242
+ */
243
+ function isSystemField(fieldName) {
244
+ return [
245
+ "id",
246
+ "createdAt",
247
+ "updatedAt",
248
+ "deletedAt",
249
+ "_title",
250
+ "_locale"
251
+ ].includes(fieldName);
252
+ }
253
+
254
+ //#endregion
255
+ export { buildFieldDefinitionsFromMetadata, buildFieldDefinitionsFromSchema };
256
+ //# sourceMappingURL=build-field-definitions-from-schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-field-definitions-from-schema.mjs","names":["result: FieldDefinitionsResult","config: Record<string, unknown>"],"sources":["../../../src/client/utils/build-field-definitions-from-schema.ts"],"sourcesContent":["/**\n * Build Field Definitions from Schema\n *\n * Maps server introspection schema to admin field definitions.\n * Used by AutoForm to dynamically render forms based on server schema\n * when explicit field config is not provided.\n */\n\nimport type {\n\tCollectionSchema,\n\tFieldMetadata,\n\tGlobalSchema,\n\tNestedFieldMetadata,\n\tRelationFieldMetadata,\n\tRelationSchema,\n\tSelectFieldMetadata,\n} from \"questpie\";\nimport type { AnyAdminMeta } from \"../../augmentation\";\nimport type { FieldBuilder, FieldDefinition } from \"../builder/field/field\";\nimport { formatLabel } from \"../lib/utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Field registry type - maps field type names to FieldBuilder instances\n * This is what Admin.getFields() returns\n */\nexport type FieldRegistry = Record<string, FieldBuilder<any>>;\n\n/**\n * Options for building field definitions\n */\nexport interface BuildFieldDefinitionsOptions {\n\t/**\n\t * Field names to exclude from generation\n\t */\n\texclude?: string[];\n\n\t/**\n\t * Only generate these field names\n\t */\n\tinclude?: string[];\n\n\t/**\n\t * Override generated config for specific fields\n\t */\n\toverrides?: Record<string, Partial<Record<string, unknown>>>;\n}\n\n/**\n * Result of building field definitions\n */\nexport type FieldDefinitionsResult = Record<string, FieldDefinition>;\n\n// ============================================================================\n// Main Function\n// ============================================================================\n\n/**\n * Build admin field definitions from server collection schema.\n *\n * Maps server field metadata to admin FieldDefinition objects:\n * - Uses `metadata.type` to look up field in registry\n * - Applies `metadata.meta.admin` overrides\n * - Handles relation type mapping (belongsTo -> single, hasMany -> multiple)\n *\n * @param schema - Collection schema from server introspection\n * @param registry - Field registry from admin config (admin.getFields())\n * @param options - Optional configuration\n *\n * @example\n * ```tsx\n * // In a component with admin context\n * const admin = useAdminStore(selectAdmin);\n * const { data: schema } = useCollectionSchema(\"posts\");\n * const fields = buildFieldDefinitionsFromSchema(\n * schema,\n * admin.getFields(),\n * );\n * ```\n */\n\n/**\n * Build field definitions from raw field metadata.\n * Works with metadata from any source (collection schema, global schema, block fields).\n *\n * @param fields - Record of field name to field metadata\n * @param registry - Field registry from admin config\n *\n * @example\n * ```tsx\n * const admin = useAdminStore(selectAdmin);\n * const fields = buildFieldDefinitionsFromMetadata(\n * blockDef.fields,\n * admin.getFields(),\n * );\n * ```\n */\nexport function buildFieldDefinitionsFromMetadata(\n\tfields: Record<string, { metadata?: unknown; name?: string }> | undefined,\n\tregistry: FieldRegistry,\n): FieldDefinitionsResult {\n\tif (!fields) return {};\n\n\tconst result: FieldDefinitionsResult = {};\n\n\tfor (const [fieldName, fieldSchema] of Object.entries(fields)) {\n\t\tconst metadata = (fieldSchema.metadata ?? fieldSchema) as FieldMetadata;\n\t\tconst fieldType = resolveFieldType(metadata);\n\n\t\tconst fieldBuilder = registry[fieldType];\n\t\tif (!fieldBuilder) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst config = buildFieldConfig(\n\t\t\tfieldSchema.name ?? fieldName,\n\t\t\tmetadata,\n\t\t\t{},\n\t\t\tregistry,\n\t\t\tfieldType,\n\t\t);\n\n\t\tresult[fieldName] = fieldBuilder.$options(config);\n\t}\n\n\treturn result;\n}\n\nexport function buildFieldDefinitionsFromSchema(\n\tschema: CollectionSchema | GlobalSchema | null | undefined,\n\tregistry: FieldRegistry,\n\toptions: BuildFieldDefinitionsOptions = {},\n): FieldDefinitionsResult {\n\tif (!schema) return {};\n\n\tconst relations = \"relations\" in schema ? schema.relations : {};\n\n\tconst result: FieldDefinitionsResult = {};\n\n\tfor (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n\t\t// Skip excluded fields\n\t\tif (options.exclude?.includes(fieldName)) continue;\n\n\t\t// Skip if not in include list (when include is specified)\n\t\tif (options.include && !options.include.includes(fieldName)) continue;\n\n\t\t// Skip system fields that shouldn't be in forms\n\t\tif (isSystemField(fieldName)) continue;\n\n\t\tconst fieldDef = buildFieldDefinition(\n\t\t\tfieldName,\n\t\t\tfieldSchema,\n\t\t\trelations,\n\t\t\tregistry,\n\t\t\toptions.overrides?.[fieldName],\n\t\t);\n\n\t\tif (fieldDef) {\n\t\t\tresult[fieldName] = fieldDef;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// ============================================================================\n// Field Definition Builder\n// ============================================================================\n\n/**\n * Build a single field definition from schema\n */\nfunction buildFieldDefinition(\n\tfieldName: string,\n\tfieldSchema: { metadata: FieldMetadata },\n\trelations: Record<string, RelationSchema>,\n\tregistry: FieldRegistry,\n\toverrides?: Partial<Record<string, unknown>>,\n): FieldDefinition | null {\n\tconst { metadata } = fieldSchema;\n\tconst fieldType = resolveFieldType(metadata);\n\n\t// Get field builder from registry\n\tconst fieldBuilder = registry[fieldType];\n\tif (!fieldBuilder) {\n\t\t// Unknown field type - skip silently\n\t\t// Custom fields might not be registered in admin yet\n\t\treturn null;\n\t}\n\n\t// Build field config from metadata\n\tconst config = buildFieldConfig(\n\t\tfieldName,\n\t\tmetadata,\n\t\trelations,\n\t\tregistry,\n\t\tfieldType,\n\t);\n\n\t// Apply admin overrides from server meta\n\t// The meta.admin property is added via module augmentation on field-specific meta interfaces\n\tconst adminConfig = (metadata.meta as { admin?: AnyAdminMeta } | undefined)\n\t\t?.admin;\n\tif (adminConfig) {\n\t\tapplyAdminConfig(config, adminConfig);\n\t}\n\n\t// Apply local overrides\n\tif (overrides) {\n\t\tObject.assign(config, overrides);\n\t}\n\n\t// Create field definition with options\n\treturn fieldBuilder.$options(config);\n}\n\n/**\n * Build field config from metadata\n */\nfunction buildFieldConfig(\n\tfieldName: string,\n\tmetadata: FieldMetadata,\n\trelations: Record<string, RelationSchema>,\n\tregistry: FieldRegistry,\n\tfieldType: string,\n): Record<string, unknown> {\n\tconst config: Record<string, unknown> = {\n\t\tlabel: metadata.label ?? formatLabel(fieldName),\n\t\tdescription: metadata.description,\n\t\trequired: metadata.required,\n\t\tlocalized: metadata.localized,\n\t\treadOnly: metadata.readOnly,\n\t};\n\n\t// Apply validation constraints from base metadata\n\tif (metadata.validation) {\n\t\tObject.assign(config, metadata.validation);\n\t}\n\n\t// Handle field-type-specific config via type guard\n\tif (isSelectMetadata(metadata)) {\n\t\tapplySelectConfig(config, metadata);\n\t} else if (isRelationMetadata(metadata)) {\n\t\tif (fieldType === \"upload\") {\n\t\t\tapplyUploadConfig(config, metadata, relations[fieldName]);\n\t\t} else {\n\t\t\tapplyRelationConfig(config, metadata, relations[fieldName]);\n\t\t}\n\t} else if (isNestedMetadata(metadata)) {\n\t\tapplyNestedConfig(config, metadata, relations, registry);\n\t} else if (metadata.type === \"richText\") {\n\t\tapplyRichTextConfig(config, metadata as unknown as Record<string, unknown>);\n\t}\n\n\tapplyExtraMetadata(config, metadata);\n\n\treturn config;\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nfunction isSelectMetadata(m: FieldMetadata): m is SelectFieldMetadata {\n\treturn m.type === \"select\";\n}\n\nfunction isRelationMetadata(m: FieldMetadata): m is RelationFieldMetadata {\n\treturn m.type === \"relation\";\n}\n\nfunction isNestedMetadata(m: FieldMetadata): m is NestedFieldMetadata {\n\treturn m.type === \"object\" || m.type === \"array\" || m.type === \"blocks\";\n}\n\n// ============================================================================\n// Config Appliers (mutate config object)\n// ============================================================================\n\n/**\n * Apply select field config\n */\nfunction applySelectConfig(\n\tconfig: Record<string, unknown>,\n\tmetadata: SelectFieldMetadata,\n): void {\n\tconfig.options = metadata.options.map((opt) => ({\n\t\tvalue: opt.value,\n\t\tlabel: opt.label ?? String(opt.value),\n\t}));\n\tif (metadata.multiple !== undefined) {\n\t\tconfig.multiple = metadata.multiple;\n\t}\n}\n\n/**\n * Apply relation field config\n */\nfunction applyRelationConfig(\n\tconfig: Record<string, unknown>,\n\tmetadata: RelationFieldMetadata,\n\trelationSchema?: RelationSchema,\n): void {\n\t// Map relation type to single/multiple\n\tconst isSingle = [\"belongsTo\", \"morphTo\"].includes(metadata.relationType);\n\n\tconfig.targetCollection = metadata.targetCollection;\n\tconfig.type = isSingle ? \"single\" : \"multiple\";\n\t// Pass through relation metadata for advanced use\n\tconfig.relationType = metadata.relationType;\n\n\tif (metadata.through ?? relationSchema?.through) {\n\t\tconfig.through = metadata.through ?? relationSchema?.through;\n\t}\n\tif (metadata.foreignKey ?? relationSchema?.foreignKey) {\n\t\tconfig.foreignKey = metadata.foreignKey ?? relationSchema?.foreignKey;\n\t}\n}\n\nfunction applyUploadConfig(\n\tconfig: Record<string, unknown>,\n\tmetadata: RelationFieldMetadata,\n\trelationSchema?: RelationSchema,\n): void {\n\tconst isMultiple = [\n\t\t\"hasMany\",\n\t\t\"manyToMany\",\n\t\t\"multiple\",\n\t\t\"morphMany\",\n\t].includes(metadata.relationType);\n\n\tconfig.to = metadata.targetCollection;\n\tconfig.multiple = isMultiple;\n\n\tif (metadata.through ?? relationSchema?.through) {\n\t\tconfig.through = metadata.through ?? relationSchema?.through;\n\t}\n\tif (metadata.foreignKey ?? relationSchema?.foreignKey) {\n\t\tconfig.foreignKey = metadata.foreignKey ?? relationSchema?.foreignKey;\n\t}\n}\n\nfunction applyNestedConfig(\n\tconfig: Record<string, unknown>,\n\tmetadata: NestedFieldMetadata,\n\trelations: Record<string, RelationSchema>,\n\tregistry: FieldRegistry,\n): void {\n\tif (!metadata.nestedFields) return;\n\n\tif (metadata.type === \"object\") {\n\t\tconst nestedDefs = buildNestedFieldDefinitions(\n\t\t\tmetadata.nestedFields,\n\t\t\trelations,\n\t\t\tregistry,\n\t\t);\n\t\tconfig.fields = () => nestedDefs;\n\t\treturn;\n\t}\n\n\tif (metadata.type === \"array\") {\n\t\tconst itemMetadata = metadata.nestedFields.item as\n\t\t\t| FieldMetadata\n\t\t\t| undefined;\n\t\tif (!itemMetadata) return;\n\n\t\tif (\n\t\t\titemMetadata.type === \"object\" &&\n\t\t\t(itemMetadata as NestedFieldMetadata).nestedFields\n\t\t) {\n\t\t\tconst itemFields = buildNestedFieldDefinitions(\n\t\t\t\t(itemMetadata as NestedFieldMetadata).nestedFields ?? {},\n\t\t\t\trelations,\n\t\t\t\tregistry,\n\t\t\t);\n\t\t\tconfig.item = () => itemFields;\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemType = mapArrayItemType(itemMetadata.type);\n\t\tif (itemType) {\n\t\t\tconfig.itemType = itemType;\n\t\t\tif (itemMetadata.type === \"select\") {\n\t\t\t\tapplySelectConfig(config, itemMetadata as SelectFieldMetadata);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (metadata.type === \"blocks\") {\n\t\tconst blocksMetadata = metadata as unknown as Record<string, unknown>;\n\t\tif (blocksMetadata.allowedBlocks) {\n\t\t\tconfig.allowedBlocks = blocksMetadata.allowedBlocks;\n\t\t}\n\t\tif (blocksMetadata.minBlocks !== undefined) {\n\t\t\tconfig.minBlocks = blocksMetadata.minBlocks;\n\t\t}\n\t\tif (blocksMetadata.maxBlocks !== undefined) {\n\t\t\tconfig.maxBlocks = blocksMetadata.maxBlocks;\n\t\t}\n\t}\n}\n\nfunction applyExtraMetadata(\n\tconfig: Record<string, unknown>,\n\tmetadata: FieldMetadata,\n) {\n\tconst reservedKeys = new Set([\n\t\t\"type\",\n\t\t\"label\",\n\t\t\"description\",\n\t\t\"required\",\n\t\t\"localized\",\n\t\t\"readOnly\",\n\t\t\"writeOnly\",\n\t\t\"validation\",\n\t\t\"meta\",\n\t\t\"nestedFields\",\n\t\t\"features\",\n\t]);\n\n\tfor (const [key, value] of Object.entries(\n\t\tmetadata as unknown as Record<string, unknown>,\n\t)) {\n\t\tif (reservedKeys.has(key)) continue;\n\t\tif (key.startsWith(\"_\")) continue;\n\t\tif (value === undefined) continue;\n\t\tconfig[key] = value;\n\t}\n}\n\nfunction applyRichTextConfig(\n\tconfig: Record<string, unknown>,\n\tmetadata: Record<string, unknown>,\n) {\n\tif (metadata.maxCharacters !== undefined) {\n\t\tconfig.maxCharacters = metadata.maxCharacters;\n\t\tconfig.showCharacterCount = true;\n\t}\n\tif (metadata.placeholder !== undefined) {\n\t\tconfig.placeholder = metadata.placeholder;\n\t}\n\tif (metadata.allowImages !== undefined) {\n\t\tconfig.enableImages = metadata.allowImages;\n\t}\n\tif (metadata.imageCollection !== undefined) {\n\t\tconfig.imageCollection = metadata.imageCollection;\n\t}\n}\n\nfunction buildNestedFieldDefinitions(\n\tnestedFields: Record<string, FieldMetadata>,\n\trelations: Record<string, RelationSchema>,\n\tregistry: FieldRegistry,\n): FieldDefinitionsResult {\n\tconst result: FieldDefinitionsResult = {};\n\n\tfor (const [nestedName, nestedMetadata] of Object.entries(nestedFields)) {\n\t\tconst fieldType = resolveFieldType(nestedMetadata);\n\t\tconst fieldBuilder = registry[fieldType];\n\t\tif (!fieldBuilder) continue;\n\n\t\tconst config = buildFieldConfig(\n\t\t\tnestedName,\n\t\t\tnestedMetadata,\n\t\t\trelations,\n\t\t\tregistry,\n\t\t\tfieldType,\n\t\t);\n\n\t\tconst adminConfig = (\n\t\t\tnestedMetadata.meta as { admin?: AnyAdminMeta } | undefined\n\t\t)?.admin;\n\t\tif (adminConfig) {\n\t\t\tapplyAdminConfig(config, adminConfig);\n\t\t}\n\n\t\tresult[nestedName] = fieldBuilder.$options(config);\n\t}\n\n\treturn result;\n}\n\nfunction resolveFieldType(metadata: FieldMetadata): string {\n\tif (metadata.type === \"relation\") {\n\t\tconst relationMeta = metadata as RelationFieldMetadata;\n\t\t// Upload fields are marked explicitly by server metadata\n\t\tif (relationMeta.isUpload) {\n\t\t\treturn \"upload\";\n\t\t}\n\t}\n\treturn metadata.type;\n}\n\nfunction mapArrayItemType(type: string): string | null {\n\tconst allowed = new Set([\"text\", \"number\", \"email\", \"textarea\", \"select\"]);\n\treturn allowed.has(type) ? type : null;\n}\n\n/**\n * Apply admin config overrides from server meta.admin\n *\n * Since each field type has its own admin meta with only valid properties,\n * we simply copy all defined properties from adminConfig to config.\n */\nfunction applyAdminConfig(\n\tconfig: Record<string, unknown>,\n\tadminConfig: AnyAdminMeta,\n): void {\n\t// Copy all defined properties from admin config\n\t// Each field type's admin meta only contains valid properties for that type\n\tfor (const [key, value] of Object.entries(adminConfig)) {\n\t\tif (value !== undefined) {\n\t\t\tconfig[key] = value;\n\t\t}\n\t}\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Check if a field is a system field that shouldn't be in forms\n */\nfunction isSystemField(fieldName: string): boolean {\n\tconst systemFields = [\n\t\t\"id\",\n\t\t\"createdAt\",\n\t\t\"updatedAt\",\n\t\t\"deletedAt\",\n\t\t\"_title\",\n\t\t\"_locale\",\n\t];\n\treturn systemFields.includes(fieldName);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGA,SAAgB,kCACf,QACA,UACyB;AACzB,KAAI,CAAC,OAAQ,QAAO,EAAE;CAEtB,MAAMA,SAAiC,EAAE;AAEzC,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAAQ,OAAO,EAAE;EAC9D,MAAM,WAAY,YAAY,YAAY;EAC1C,MAAM,YAAY,iBAAiB,SAAS;EAE5C,MAAM,eAAe,SAAS;AAC9B,MAAI,CAAC,aACJ;EAGD,MAAM,SAAS,iBACd,YAAY,QAAQ,WACpB,UACA,EAAE,EACF,UACA,UACA;AAED,SAAO,aAAa,aAAa,SAAS,OAAO;;AAGlD,QAAO;;AAGR,SAAgB,gCACf,QACA,UACA,UAAwC,EAAE,EACjB;AACzB,KAAI,CAAC,OAAQ,QAAO,EAAE;CAEtB,MAAM,YAAY,eAAe,SAAS,OAAO,YAAY,EAAE;CAE/D,MAAMA,SAAiC,EAAE;AAEzC,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAAQ,OAAO,OAAO,EAAE;AAErE,MAAI,QAAQ,SAAS,SAAS,UAAU,CAAE;AAG1C,MAAI,QAAQ,WAAW,CAAC,QAAQ,QAAQ,SAAS,UAAU,CAAE;AAG7D,MAAI,cAAc,UAAU,CAAE;EAE9B,MAAM,WAAW,qBAChB,WACA,aACA,WACA,UACA,QAAQ,YAAY,WACpB;AAED,MAAI,SACH,QAAO,aAAa;;AAItB,QAAO;;;;;AAUR,SAAS,qBACR,WACA,aACA,WACA,UACA,WACyB;CACzB,MAAM,EAAE,aAAa;CACrB,MAAM,YAAY,iBAAiB,SAAS;CAG5C,MAAM,eAAe,SAAS;AAC9B,KAAI,CAAC,aAGJ,QAAO;CAIR,MAAM,SAAS,iBACd,WACA,UACA,WACA,UACA,UACA;CAID,MAAM,cAAe,SAAS,MAC3B;AACH,KAAI,YACH,kBAAiB,QAAQ,YAAY;AAItC,KAAI,UACH,QAAO,OAAO,QAAQ,UAAU;AAIjC,QAAO,aAAa,SAAS,OAAO;;;;;AAMrC,SAAS,iBACR,WACA,UACA,WACA,UACA,WAC0B;CAC1B,MAAMC,SAAkC;EACvC,OAAO,SAAS,SAAS,YAAY,UAAU;EAC/C,aAAa,SAAS;EACtB,UAAU,SAAS;EACnB,WAAW,SAAS;EACpB,UAAU,SAAS;EACnB;AAGD,KAAI,SAAS,WACZ,QAAO,OAAO,QAAQ,SAAS,WAAW;AAI3C,KAAI,iBAAiB,SAAS,CAC7B,mBAAkB,QAAQ,SAAS;UACzB,mBAAmB,SAAS,CACtC,KAAI,cAAc,SACjB,mBAAkB,QAAQ,UAAU,UAAU,WAAW;KAEzD,qBAAoB,QAAQ,UAAU,UAAU,WAAW;UAElD,iBAAiB,SAAS,CACpC,mBAAkB,QAAQ,UAAU,WAAW,SAAS;UAC9C,SAAS,SAAS,WAC5B,qBAAoB,QAAQ,SAA+C;AAG5E,oBAAmB,QAAQ,SAAS;AAEpC,QAAO;;AAOR,SAAS,iBAAiB,GAA4C;AACrE,QAAO,EAAE,SAAS;;AAGnB,SAAS,mBAAmB,GAA8C;AACzE,QAAO,EAAE,SAAS;;AAGnB,SAAS,iBAAiB,GAA4C;AACrE,QAAO,EAAE,SAAS,YAAY,EAAE,SAAS,WAAW,EAAE,SAAS;;;;;AAUhE,SAAS,kBACR,QACA,UACO;AACP,QAAO,UAAU,SAAS,QAAQ,KAAK,SAAS;EAC/C,OAAO,IAAI;EACX,OAAO,IAAI,SAAS,OAAO,IAAI,MAAM;EACrC,EAAE;AACH,KAAI,SAAS,aAAa,OACzB,QAAO,WAAW,SAAS;;;;;AAO7B,SAAS,oBACR,QACA,UACA,gBACO;CAEP,MAAM,WAAW,CAAC,aAAa,UAAU,CAAC,SAAS,SAAS,aAAa;AAEzE,QAAO,mBAAmB,SAAS;AACnC,QAAO,OAAO,WAAW,WAAW;AAEpC,QAAO,eAAe,SAAS;AAE/B,KAAI,SAAS,WAAW,gBAAgB,QACvC,QAAO,UAAU,SAAS,WAAW,gBAAgB;AAEtD,KAAI,SAAS,cAAc,gBAAgB,WAC1C,QAAO,aAAa,SAAS,cAAc,gBAAgB;;AAI7D,SAAS,kBACR,QACA,UACA,gBACO;CACP,MAAM,aAAa;EAClB;EACA;EACA;EACA;EACA,CAAC,SAAS,SAAS,aAAa;AAEjC,QAAO,KAAK,SAAS;AACrB,QAAO,WAAW;AAElB,KAAI,SAAS,WAAW,gBAAgB,QACvC,QAAO,UAAU,SAAS,WAAW,gBAAgB;AAEtD,KAAI,SAAS,cAAc,gBAAgB,WAC1C,QAAO,aAAa,SAAS,cAAc,gBAAgB;;AAI7D,SAAS,kBACR,QACA,UACA,WACA,UACO;AACP,KAAI,CAAC,SAAS,aAAc;AAE5B,KAAI,SAAS,SAAS,UAAU;EAC/B,MAAM,aAAa,4BAClB,SAAS,cACT,WACA,SACA;AACD,SAAO,eAAe;AACtB;;AAGD,KAAI,SAAS,SAAS,SAAS;EAC9B,MAAM,eAAe,SAAS,aAAa;AAG3C,MAAI,CAAC,aAAc;AAEnB,MACC,aAAa,SAAS,YACrB,aAAqC,cACrC;GACD,MAAM,aAAa,4BACjB,aAAqC,gBAAgB,EAAE,EACxD,WACA,SACA;AACD,UAAO,aAAa;AACpB;;EAGD,MAAM,WAAW,iBAAiB,aAAa,KAAK;AACpD,MAAI,UAAU;AACb,UAAO,WAAW;AAClB,OAAI,aAAa,SAAS,SACzB,mBAAkB,QAAQ,aAAoC;;;AAKjE,KAAI,SAAS,SAAS,UAAU;EAC/B,MAAM,iBAAiB;AACvB,MAAI,eAAe,cAClB,QAAO,gBAAgB,eAAe;AAEvC,MAAI,eAAe,cAAc,OAChC,QAAO,YAAY,eAAe;AAEnC,MAAI,eAAe,cAAc,OAChC,QAAO,YAAY,eAAe;;;AAKrC,SAAS,mBACR,QACA,UACC;CACD,MAAM,eAAe,IAAI,IAAI;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;AAEF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QACjC,SACA,EAAE;AACF,MAAI,aAAa,IAAI,IAAI,CAAE;AAC3B,MAAI,IAAI,WAAW,IAAI,CAAE;AACzB,MAAI,UAAU,OAAW;AACzB,SAAO,OAAO;;;AAIhB,SAAS,oBACR,QACA,UACC;AACD,KAAI,SAAS,kBAAkB,QAAW;AACzC,SAAO,gBAAgB,SAAS;AAChC,SAAO,qBAAqB;;AAE7B,KAAI,SAAS,gBAAgB,OAC5B,QAAO,cAAc,SAAS;AAE/B,KAAI,SAAS,gBAAgB,OAC5B,QAAO,eAAe,SAAS;AAEhC,KAAI,SAAS,oBAAoB,OAChC,QAAO,kBAAkB,SAAS;;AAIpC,SAAS,4BACR,cACA,WACA,UACyB;CACzB,MAAMD,SAAiC,EAAE;AAEzC,MAAK,MAAM,CAAC,YAAY,mBAAmB,OAAO,QAAQ,aAAa,EAAE;EACxE,MAAM,YAAY,iBAAiB,eAAe;EAClD,MAAM,eAAe,SAAS;AAC9B,MAAI,CAAC,aAAc;EAEnB,MAAM,SAAS,iBACd,YACA,gBACA,WACA,UACA,UACA;EAED,MAAM,cACL,eAAe,MACb;AACH,MAAI,YACH,kBAAiB,QAAQ,YAAY;AAGtC,SAAO,cAAc,aAAa,SAAS,OAAO;;AAGnD,QAAO;;AAGR,SAAS,iBAAiB,UAAiC;AAC1D,KAAI,SAAS,SAAS,YAGrB;MAFqB,SAEJ,SAChB,QAAO;;AAGT,QAAO,SAAS;;AAGjB,SAAS,iBAAiB,MAA6B;AAEtD,QADgB,IAAI,IAAI;EAAC;EAAQ;EAAU;EAAS;EAAY;EAAS,CAAC,CAC3D,IAAI,KAAK,GAAG,OAAO;;;;;;;;AASnC,SAAS,iBACR,QACA,aACO;AAGP,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,YAAY,CACrD,KAAI,UAAU,OACb,QAAO,OAAO;;;;;AAYjB,SAAS,cAAc,WAA4B;AASlD,QARqB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA,CACmB,SAAS,UAAU"}
@@ -0,0 +1,46 @@
1
+ //#region src/client/utils/detect-relations.ts
2
+ function isMultiRelationType(relationType) {
3
+ return relationType === "hasMany" || relationType === "manyToMany" || relationType === "multiple" || relationType === "morphMany";
4
+ }
5
+ /**
6
+ * Auto-detect M:N relation fields from config and build `with` clause.
7
+ *
8
+ * M:N relations need to be explicitly loaded when fetching items for editing,
9
+ * as they are stored in junction tables and not included by default.
10
+ *
11
+ * @param config - Collection configuration with fields
12
+ * @returns Object mapping relation field names to `true` for M:N relations
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const withRelations = detectManyToManyRelations({ fields: config?.fields });
17
+ *
18
+ * // Use with query
19
+ * const { data } = useCollectionItem(collection, id, {
20
+ * with: withRelations,
21
+ * });
22
+ * ```
23
+ */
24
+ function detectManyToManyRelations(config) {
25
+ const withRelations = {};
26
+ if (config.schema?.fields) for (const [fieldName, fieldSchema] of Object.entries(config.schema.fields)) {
27
+ const metadata = fieldSchema?.metadata;
28
+ if (metadata?.type !== "relation") continue;
29
+ if (isMultiRelationType(metadata.relationType)) withRelations[fieldName] = true;
30
+ }
31
+ if (config?.fields) for (const [fieldName, fieldConfig] of Object.entries(config.fields)) {
32
+ const fc = fieldConfig;
33
+ if (fc?.name === "relation" && fc?.["~options"]?.type === "multiple") withRelations[fieldName] = true;
34
+ }
35
+ return withRelations;
36
+ }
37
+ /**
38
+ * Check if there are any M:N relations to include
39
+ */
40
+ function hasManyToManyRelations(withRelations) {
41
+ return Object.keys(withRelations).length > 0;
42
+ }
43
+
44
+ //#endregion
45
+ export { detectManyToManyRelations, hasManyToManyRelations };
46
+ //# sourceMappingURL=detect-relations.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-relations.mjs","names":["withRelations: Record<string, boolean>"],"sources":["../../../src/client/utils/detect-relations.ts"],"sourcesContent":["/**\n * Detect Relations Utility\n *\n * Automatically detects relation fields (especially M:N relations)\n * that need to be included when fetching data for forms.\n */\n\nimport type { CollectionSchema } from \"questpie/client\";\nimport type { FieldDefinition } from \"../builder/field/field\";\n\nexport interface DetectRelationsConfig {\n\t/**\n\t * Collection fields configuration\n\t */\n\tfields?: Record<string, FieldDefinition>;\n\n\t/**\n\t * Collection schema from introspection\n\t */\n\tschema?: CollectionSchema;\n}\n\nfunction isMultiRelationType(relationType: unknown): boolean {\n\treturn (\n\t\trelationType === \"hasMany\" ||\n\t\trelationType === \"manyToMany\" ||\n\t\trelationType === \"multiple\" ||\n\t\trelationType === \"morphMany\"\n\t);\n}\n\n/**\n * Auto-detect M:N relation fields from config and build `with` clause.\n *\n * M:N relations need to be explicitly loaded when fetching items for editing,\n * as they are stored in junction tables and not included by default.\n *\n * @param config - Collection configuration with fields\n * @returns Object mapping relation field names to `true` for M:N relations\n *\n * @example\n * ```tsx\n * const withRelations = detectManyToManyRelations({ fields: config?.fields });\n *\n * // Use with query\n * const { data } = useCollectionItem(collection, id, {\n * with: withRelations,\n * });\n * ```\n */\nexport function detectManyToManyRelations(\n\tconfig: DetectRelationsConfig,\n): Record<string, boolean> {\n\tconst withRelations: Record<string, boolean> = {};\n\n\t// Prefer schema metadata when available (source of truth from server)\n\tif (config.schema?.fields) {\n\t\tfor (const [fieldName, fieldSchema] of Object.entries(\n\t\t\tconfig.schema.fields,\n\t\t)) {\n\t\t\tconst metadata = (fieldSchema as any)?.metadata;\n\t\t\tif (metadata?.type !== \"relation\") continue;\n\n\t\t\tif (isMultiRelationType(metadata.relationType)) {\n\t\t\t\twithRelations[fieldName] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fallback to local field definitions (for compatibility when schema is unavailable)\n\tif (config?.fields) {\n\t\tfor (const [fieldName, fieldConfig] of Object.entries(config.fields)) {\n\t\t\tconst fc = fieldConfig as any;\n\t\t\t// Detect M:N relation fields (FieldDefinition.name: \"relation\" with ~options.type: \"multiple\")\n\t\t\tif (fc?.name === \"relation\" && fc?.[\"~options\"]?.type === \"multiple\") {\n\t\t\t\twithRelations[fieldName] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn withRelations;\n}\n\n/**\n * Check if there are any M:N relations to include\n */\nexport function hasManyToManyRelations(\n\twithRelations: Record<string, boolean>,\n): boolean {\n\treturn Object.keys(withRelations).length > 0;\n}\n"],"mappings":";AAsBA,SAAS,oBAAoB,cAAgC;AAC5D,QACC,iBAAiB,aACjB,iBAAiB,gBACjB,iBAAiB,cACjB,iBAAiB;;;;;;;;;;;;;;;;;;;;;AAuBnB,SAAgB,0BACf,QAC0B;CAC1B,MAAMA,gBAAyC,EAAE;AAGjD,KAAI,OAAO,QAAQ,OAClB,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAC7C,OAAO,OAAO,OACd,EAAE;EACF,MAAM,WAAY,aAAqB;AACvC,MAAI,UAAU,SAAS,WAAY;AAEnC,MAAI,oBAAoB,SAAS,aAAa,CAC7C,eAAc,aAAa;;AAM9B,KAAI,QAAQ,OACX,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAAQ,OAAO,OAAO,EAAE;EACrE,MAAM,KAAK;AAEX,MAAI,IAAI,SAAS,cAAc,KAAK,aAAa,SAAS,WACzD,eAAc,aAAa;;AAK9B,QAAO;;;;;AAMR,SAAgB,uBACf,eACU;AACV,QAAO,OAAO,KAAK,cAAc,CAAC,SAAS"}
@@ -0,0 +1,118 @@
1
+ //#region src/client/utils/locale-to-flag.d.ts
2
+ /**
3
+ * Locale to Flag Utility
4
+ *
5
+ * Converts locale codes to country codes for flag display.
6
+ * Uses flagcdn.com for PNG flags via CDN (no dependencies).
7
+ *
8
+ * ## Features
9
+ *
10
+ * - **Smart mapping**: Automatically maps locale codes to country codes (sk → SK, en → GB, en-US → US)
11
+ * - **Custom overrides**: Support for custom country codes via `flagCountryCode` in locale config
12
+ * - **Lightweight**: No dependencies, uses CDN for flags
13
+ * - **Fallback support**: Gracefully handles unknown locale codes
14
+ *
15
+ * ## Usage
16
+ *
17
+ * ### Basic Usage
18
+ *
19
+ * ```tsx
20
+ * import { getFlagUrl } from "@questpie/admin/client";
21
+ *
22
+ * function LocaleBadge({ locale }: { locale: string }) {
23
+ * return (
24
+ * <div>
25
+ * <img src={getFlagUrl(locale, 20)} alt={locale} />
26
+ * {locale}
27
+ * </div>
28
+ * );
29
+ * }
30
+ * ```
31
+ *
32
+ * ### Custom Country Code Mapping
33
+ *
34
+ * If the default mapping doesn't fit your needs, you can provide custom mapping:
35
+ *
36
+ * ```tsx
37
+ * // Show US flag for English instead of UK
38
+ * const flagUrl = getFlagUrl("en", 20, { en: "us" });
39
+ * ```
40
+ *
41
+ * ### In CMS Configuration
42
+ *
43
+ * The best way to customize flag mapping is in your CMS locale config:
44
+ *
45
+ * ```ts
46
+ * // questpie/server/cms.ts
47
+ * q().locale({
48
+ * locales: [
49
+ * {
50
+ * code: "en",
51
+ * label: "English",
52
+ * flagCountryCode: "us", // Show US flag instead of UK
53
+ * },
54
+ * { code: "sk", label: "Slovenčina" },
55
+ * ],
56
+ * defaultLocale: "en",
57
+ * })
58
+ * ```
59
+ *
60
+ * The `flagCountryCode` will be automatically used by `LocaleSwitcher` and other locale UI components.
61
+ */
62
+ interface FlagConfig {
63
+ /** Country code (ISO 3166-1 alpha-2) */
64
+ countryCode: string;
65
+ /** Alt text for accessibility */
66
+ alt: string;
67
+ }
68
+ /**
69
+ * Get country code from locale code.
70
+ *
71
+ * @param locale - Locale code (e.g., "en", "sk", "en-US")
72
+ * @param customMapping - Optional custom locale-to-country mapping (overrides defaults)
73
+ * @returns Country code (lowercase, e.g., "gb", "sk", "us")
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * getCountryCode("en") // "gb" (default)
78
+ * getCountryCode("en-US") // "us"
79
+ * getCountryCode("sk") // "sk"
80
+ * getCountryCode("en", { en: "us" }) // "us" (custom mapping)
81
+ * getCountryCode("unknown") // "unknown" (fallback to input)
82
+ * ```
83
+ */
84
+ declare function getCountryCode(locale: string, customMapping?: Record<string, string>): string;
85
+ /**
86
+ * Get flag configuration for a locale.
87
+ *
88
+ * @param locale - Locale code
89
+ * @param customMapping - Optional custom locale-to-country mapping
90
+ * @returns Flag configuration with country code and alt text
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * getFlagConfig("sk") // { countryCode: "sk", alt: "Slovakia" }
95
+ * getFlagConfig("en-US") // { countryCode: "us", alt: "United States" }
96
+ * getFlagConfig("en", { en: "us" }) // { countryCode: "us", alt: "EN" }
97
+ * ```
98
+ */
99
+ declare function getFlagConfig(locale: string, customMapping?: Record<string, string>): FlagConfig;
100
+ /**
101
+ * Get flag image URL from flagcdn.com.
102
+ *
103
+ * @param locale - Locale code
104
+ * @param size - Width in pixels (default: 20)
105
+ * @param customMapping - Optional custom locale-to-country mapping
106
+ * @returns URL to flag PNG
107
+ *
108
+ * @example
109
+ * ```tsx
110
+ * <img src={getFlagUrl("sk")} alt="SK" />
111
+ * <img src={getFlagUrl("en-US", 40)} alt="EN-US" />
112
+ * <img src={getFlagUrl("en", 20, { en: "us" })} alt="EN" />
113
+ * ```
114
+ */
115
+ declare function getFlagUrl(locale: string, size?: number, customMapping?: Record<string, string>): string;
116
+ //#endregion
117
+ export { FlagConfig, getCountryCode, getFlagConfig, getFlagUrl };
118
+ //# sourceMappingURL=locale-to-flag.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-to-flag.d.mts","names":[],"sources":["../../../src/client/utils/locale-to-flag.ts"],"sourcesContent":[],"mappings":";;AAiEA;AAoGA;AA2CA;AA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAzKiB,UAAA;;;;;;;;;;;;;;;;;;;;;;iBAoGD,cAAA,iCAEE;;;;;;;;;;;;;;;iBAyCF,aAAA,iCAEE,yBACf;;;;;;;;;;;;;;;;iBAuBa,UAAA,gDAGE"}
@@ -0,0 +1,130 @@
1
+ //#region src/client/utils/locale-to-flag.ts
2
+ /**
3
+ * Maps locale codes to country codes.
4
+ * Handles both simple codes (en, sk) and region-specific (en-US, en-GB).
5
+ */
6
+ const LOCALE_TO_COUNTRY = {
7
+ en: "gb",
8
+ "en-US": "us",
9
+ "en-GB": "gb",
10
+ "en-CA": "ca",
11
+ "en-AU": "au",
12
+ "en-NZ": "nz",
13
+ "en-IE": "ie",
14
+ sk: "sk",
15
+ cs: "cz",
16
+ de: "de",
17
+ "de-AT": "at",
18
+ "de-CH": "ch",
19
+ fr: "fr",
20
+ "fr-CA": "ca",
21
+ "fr-CH": "ch",
22
+ es: "es",
23
+ "es-MX": "mx",
24
+ "es-AR": "ar",
25
+ it: "it",
26
+ pt: "pt",
27
+ "pt-BR": "br",
28
+ nl: "nl",
29
+ pl: "pl",
30
+ ru: "ru",
31
+ uk: "ua",
32
+ tr: "tr",
33
+ sv: "se",
34
+ no: "no",
35
+ da: "dk",
36
+ fi: "fi",
37
+ hu: "hu",
38
+ ro: "ro",
39
+ bg: "bg",
40
+ hr: "hr",
41
+ sr: "rs",
42
+ sl: "si",
43
+ et: "ee",
44
+ lv: "lv",
45
+ lt: "lt",
46
+ zh: "cn",
47
+ "zh-CN": "cn",
48
+ "zh-TW": "tw",
49
+ "zh-HK": "hk",
50
+ ja: "jp",
51
+ ko: "kr",
52
+ th: "th",
53
+ vi: "vn",
54
+ id: "id",
55
+ ms: "my",
56
+ hi: "in",
57
+ ar: "sa",
58
+ he: "il",
59
+ el: "gr",
60
+ fa: "ir",
61
+ ur: "pk"
62
+ };
63
+ /**
64
+ * Get country code from locale code.
65
+ *
66
+ * @param locale - Locale code (e.g., "en", "sk", "en-US")
67
+ * @param customMapping - Optional custom locale-to-country mapping (overrides defaults)
68
+ * @returns Country code (lowercase, e.g., "gb", "sk", "us")
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * getCountryCode("en") // "gb" (default)
73
+ * getCountryCode("en-US") // "us"
74
+ * getCountryCode("sk") // "sk"
75
+ * getCountryCode("en", { en: "us" }) // "us" (custom mapping)
76
+ * getCountryCode("unknown") // "unknown" (fallback to input)
77
+ * ```
78
+ */
79
+ function getCountryCode(locale, customMapping) {
80
+ const normalized = locale.toLowerCase();
81
+ if (customMapping?.[normalized]) return customMapping[normalized].toLowerCase();
82
+ if (LOCALE_TO_COUNTRY[normalized]) return LOCALE_TO_COUNTRY[normalized];
83
+ const baseCode = normalized.split("-")[0];
84
+ if (baseCode && customMapping?.[baseCode]) return customMapping[baseCode].toLowerCase();
85
+ if (baseCode && LOCALE_TO_COUNTRY[baseCode]) return LOCALE_TO_COUNTRY[baseCode];
86
+ return normalized;
87
+ }
88
+ /**
89
+ * Get flag configuration for a locale.
90
+ *
91
+ * @param locale - Locale code
92
+ * @param customMapping - Optional custom locale-to-country mapping
93
+ * @returns Flag configuration with country code and alt text
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * getFlagConfig("sk") // { countryCode: "sk", alt: "Slovakia" }
98
+ * getFlagConfig("en-US") // { countryCode: "us", alt: "United States" }
99
+ * getFlagConfig("en", { en: "us" }) // { countryCode: "us", alt: "EN" }
100
+ * ```
101
+ */
102
+ function getFlagConfig(locale, customMapping) {
103
+ return {
104
+ countryCode: getCountryCode(locale, customMapping),
105
+ alt: locale.toUpperCase()
106
+ };
107
+ }
108
+ /**
109
+ * Get flag image URL from flagcdn.com.
110
+ *
111
+ * @param locale - Locale code
112
+ * @param size - Width in pixels (default: 20)
113
+ * @param customMapping - Optional custom locale-to-country mapping
114
+ * @returns URL to flag PNG
115
+ *
116
+ * @example
117
+ * ```tsx
118
+ * <img src={getFlagUrl("sk")} alt="SK" />
119
+ * <img src={getFlagUrl("en-US", 40)} alt="EN-US" />
120
+ * <img src={getFlagUrl("en", 20, { en: "us" })} alt="EN" />
121
+ * ```
122
+ */
123
+ function getFlagUrl(locale, size = 24, customMapping) {
124
+ const { countryCode } = getFlagConfig(locale, customMapping);
125
+ return `https://flagcdn.com/h${size}/${countryCode}.png`;
126
+ }
127
+
128
+ //#endregion
129
+ export { getCountryCode, getFlagConfig, getFlagUrl };
130
+ //# sourceMappingURL=locale-to-flag.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-to-flag.mjs","names":["LOCALE_TO_COUNTRY: Record<string, string>"],"sources":["../../../src/client/utils/locale-to-flag.ts"],"sourcesContent":["/**\n * Locale to Flag Utility\n *\n * Converts locale codes to country codes for flag display.\n * Uses flagcdn.com for PNG flags via CDN (no dependencies).\n *\n * ## Features\n *\n * - **Smart mapping**: Automatically maps locale codes to country codes (sk → SK, en → GB, en-US → US)\n * - **Custom overrides**: Support for custom country codes via `flagCountryCode` in locale config\n * - **Lightweight**: No dependencies, uses CDN for flags\n * - **Fallback support**: Gracefully handles unknown locale codes\n *\n * ## Usage\n *\n * ### Basic Usage\n *\n * ```tsx\n * import { getFlagUrl } from \"@questpie/admin/client\";\n *\n * function LocaleBadge({ locale }: { locale: string }) {\n * return (\n * <div>\n * <img src={getFlagUrl(locale, 20)} alt={locale} />\n * {locale}\n * </div>\n * );\n * }\n * ```\n *\n * ### Custom Country Code Mapping\n *\n * If the default mapping doesn't fit your needs, you can provide custom mapping:\n *\n * ```tsx\n * // Show US flag for English instead of UK\n * const flagUrl = getFlagUrl(\"en\", 20, { en: \"us\" });\n * ```\n *\n * ### In CMS Configuration\n *\n * The best way to customize flag mapping is in your CMS locale config:\n *\n * ```ts\n * // questpie/server/cms.ts\n * q().locale({\n * locales: [\n * {\n * code: \"en\",\n * label: \"English\",\n * flagCountryCode: \"us\", // Show US flag instead of UK\n * },\n * { code: \"sk\", label: \"Slovenčina\" },\n * ],\n * defaultLocale: \"en\",\n * })\n * ```\n *\n * The `flagCountryCode` will be automatically used by `LocaleSwitcher` and other locale UI components.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FlagConfig {\n /** Country code (ISO 3166-1 alpha-2) */\n countryCode: string;\n /** Alt text for accessibility */\n alt: string;\n}\n\n// ============================================================================\n// Locale to Country Code Mapping\n// ============================================================================\n\n/**\n * Maps locale codes to country codes.\n * Handles both simple codes (en, sk) and region-specific (en-US, en-GB).\n */\nconst LOCALE_TO_COUNTRY: Record<string, string> = {\n // English variants\n en: \"gb\", // Default English → Great Britain\n \"en-US\": \"us\",\n \"en-GB\": \"gb\",\n \"en-CA\": \"ca\",\n \"en-AU\": \"au\",\n \"en-NZ\": \"nz\",\n \"en-IE\": \"ie\",\n\n // European languages\n sk: \"sk\", // Slovak\n cs: \"cz\", // Czech\n de: \"de\", // German\n \"de-AT\": \"at\",\n \"de-CH\": \"ch\",\n fr: \"fr\", // French\n \"fr-CA\": \"ca\",\n \"fr-CH\": \"ch\",\n es: \"es\", // Spanish\n \"es-MX\": \"mx\",\n \"es-AR\": \"ar\",\n it: \"it\", // Italian\n pt: \"pt\", // Portuguese\n \"pt-BR\": \"br\",\n nl: \"nl\", // Dutch\n pl: \"pl\", // Polish\n ru: \"ru\", // Russian\n uk: \"ua\", // Ukrainian\n tr: \"tr\", // Turkish\n sv: \"se\", // Swedish\n no: \"no\", // Norwegian\n da: \"dk\", // Danish\n fi: \"fi\", // Finnish\n hu: \"hu\", // Hungarian\n ro: \"ro\", // Romanian\n bg: \"bg\", // Bulgarian\n hr: \"hr\", // Croatian\n sr: \"rs\", // Serbian\n sl: \"si\", // Slovenian\n et: \"ee\", // Estonian\n lv: \"lv\", // Latvian\n lt: \"lt\", // Lithuanian\n\n // Asian languages\n zh: \"cn\", // Chinese\n \"zh-CN\": \"cn\",\n \"zh-TW\": \"tw\",\n \"zh-HK\": \"hk\",\n ja: \"jp\", // Japanese\n ko: \"kr\", // Korean\n th: \"th\", // Thai\n vi: \"vn\", // Vietnamese\n id: \"id\", // Indonesian\n ms: \"my\", // Malay\n hi: \"in\", // Hindi\n ar: \"sa\", // Arabic (Saudi Arabia as default)\n he: \"il\", // Hebrew\n\n // Other\n el: \"gr\", // Greek\n fa: \"ir\", // Persian\n ur: \"pk\", // Urdu\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get country code from locale code.\n *\n * @param locale - Locale code (e.g., \"en\", \"sk\", \"en-US\")\n * @param customMapping - Optional custom locale-to-country mapping (overrides defaults)\n * @returns Country code (lowercase, e.g., \"gb\", \"sk\", \"us\")\n *\n * @example\n * ```ts\n * getCountryCode(\"en\") // \"gb\" (default)\n * getCountryCode(\"en-US\") // \"us\"\n * getCountryCode(\"sk\") // \"sk\"\n * getCountryCode(\"en\", { en: \"us\" }) // \"us\" (custom mapping)\n * getCountryCode(\"unknown\") // \"unknown\" (fallback to input)\n * ```\n */\nexport function getCountryCode(\n locale: string,\n customMapping?: Record<string, string>,\n): string {\n const normalized = locale.toLowerCase();\n\n // Try custom mapping first (highest priority)\n if (customMapping?.[normalized]) {\n return customMapping[normalized].toLowerCase();\n }\n\n // Try exact match in default mapping\n if (LOCALE_TO_COUNTRY[normalized]) {\n return LOCALE_TO_COUNTRY[normalized];\n }\n\n // Try base language code (e.g., \"en-US\" → \"en\")\n const baseCode = normalized.split(\"-\")[0];\n if (baseCode && customMapping?.[baseCode]) {\n return customMapping[baseCode].toLowerCase();\n }\n if (baseCode && LOCALE_TO_COUNTRY[baseCode]) {\n return LOCALE_TO_COUNTRY[baseCode];\n }\n\n // Fallback to input (useful for direct country codes)\n return normalized;\n}\n\n/**\n * Get flag configuration for a locale.\n *\n * @param locale - Locale code\n * @param customMapping - Optional custom locale-to-country mapping\n * @returns Flag configuration with country code and alt text\n *\n * @example\n * ```ts\n * getFlagConfig(\"sk\") // { countryCode: \"sk\", alt: \"Slovakia\" }\n * getFlagConfig(\"en-US\") // { countryCode: \"us\", alt: \"United States\" }\n * getFlagConfig(\"en\", { en: \"us\" }) // { countryCode: \"us\", alt: \"EN\" }\n * ```\n */\nexport function getFlagConfig(\n locale: string,\n customMapping?: Record<string, string>,\n): FlagConfig {\n const countryCode = getCountryCode(locale, customMapping);\n return {\n countryCode,\n alt: locale.toUpperCase(),\n };\n}\n\n/**\n * Get flag image URL from flagcdn.com.\n *\n * @param locale - Locale code\n * @param size - Width in pixels (default: 20)\n * @param customMapping - Optional custom locale-to-country mapping\n * @returns URL to flag PNG\n *\n * @example\n * ```tsx\n * <img src={getFlagUrl(\"sk\")} alt=\"SK\" />\n * <img src={getFlagUrl(\"en-US\", 40)} alt=\"EN-US\" />\n * <img src={getFlagUrl(\"en\", 20, { en: \"us\" })} alt=\"EN\" />\n * ```\n */\nexport function getFlagUrl(\n locale: string,\n size = 24,\n customMapping?: Record<string, string>,\n): string {\n const { countryCode } = getFlagConfig(locale, customMapping);\n return `https://flagcdn.com/h${size}/${countryCode}.png`;\n}\n"],"mappings":";;;;;AAgFA,MAAMA,oBAA4C;CAEhD,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CAGT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,IAAI;CACJ,SAAS;CACT,SAAS;CACT,IAAI;CACJ,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CAGJ,IAAI;CACJ,SAAS;CACT,SAAS;CACT,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CAGJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;;;;;;;;;;;;;;;;;AAsBD,SAAgB,eACd,QACA,eACQ;CACR,MAAM,aAAa,OAAO,aAAa;AAGvC,KAAI,gBAAgB,YAClB,QAAO,cAAc,YAAY,aAAa;AAIhD,KAAI,kBAAkB,YACpB,QAAO,kBAAkB;CAI3B,MAAM,WAAW,WAAW,MAAM,IAAI,CAAC;AACvC,KAAI,YAAY,gBAAgB,UAC9B,QAAO,cAAc,UAAU,aAAa;AAE9C,KAAI,YAAY,kBAAkB,UAChC,QAAO,kBAAkB;AAI3B,QAAO;;;;;;;;;;;;;;;;AAiBT,SAAgB,cACd,QACA,eACY;AAEZ,QAAO;EACL,aAFkB,eAAe,QAAQ,cAAc;EAGvD,KAAK,OAAO,aAAa;EAC1B;;;;;;;;;;;;;;;;;AAkBH,SAAgB,WACd,QACA,OAAO,IACP,eACQ;CACR,MAAM,EAAE,gBAAgB,cAAc,QAAQ,cAAc;AAC5D,QAAO,wBAAwB,KAAK,GAAG,YAAY"}