@questpie/admin 2.0.0 → 3.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 (1091) hide show
  1. package/README.md +119 -122
  2. package/dist/augmentation.d.mts +110 -11
  3. package/dist/client/blocks/block-renderer.d.mts +5 -12
  4. package/dist/client/blocks/block-renderer.mjs +89 -55
  5. package/dist/client/blocks/index.d.mts +2 -4
  6. package/dist/client/blocks/types.d.mts +3 -4
  7. package/dist/client/blocks/types.mjs +1 -2
  8. package/dist/client/builder/admin-types.d.mts +11 -44
  9. package/dist/client/builder/admin.d.mts +34 -45
  10. package/dist/client/builder/admin.mjs +35 -44
  11. package/dist/client/builder/field/field.d.mts +27 -205
  12. package/dist/client/builder/field/field.mjs +22 -68
  13. package/dist/client/builder/index.d.mts +23 -28
  14. package/dist/client/builder/page/page.d.mts +15 -27
  15. package/dist/client/builder/page/page.mjs +21 -17
  16. package/dist/client/builder/registry.d.mts +14 -34
  17. package/dist/client/builder/types/action-registry.mjs +148 -14
  18. package/dist/client/builder/types/action-types.d.mts +8 -35
  19. package/dist/client/builder/types/collection-types.mjs +1 -2
  20. package/dist/client/builder/types/common.d.mts +6 -20
  21. package/dist/client/builder/types/field-types.d.mts +4 -5
  22. package/dist/client/builder/types/field-types.mjs +1 -2
  23. package/dist/client/builder/types/ui-config.d.mts +3 -5
  24. package/dist/client/builder/types/widget-types.d.mts +19 -20
  25. package/dist/client/builder/validation.d.mts +33 -3
  26. package/dist/client/builder/validation.mjs +169 -150
  27. package/dist/client/builder/view/view.d.mts +26 -106
  28. package/dist/client/builder/view/view.mjs +14 -96
  29. package/dist/client/builder/widget/widget.d.mts +16 -22
  30. package/dist/client/builder/widget/widget.mjs +11 -16
  31. package/dist/client/components/actions/action-button.mjs +207 -97
  32. package/dist/client/components/actions/action-dialog.mjs +471 -176
  33. package/dist/client/components/actions/confirmation-dialog.mjs +166 -47
  34. package/dist/client/components/actions/header-actions.mjs +164 -71
  35. package/dist/client/components/admin-link.d.mts +8 -9
  36. package/dist/client/components/admin-link.mjs +127 -48
  37. package/dist/client/components/auth/auth-guard.d.mts +6 -7
  38. package/dist/client/components/auth/auth-guard.mjs +9 -9
  39. package/dist/client/components/auth/auth-loading.d.mts +3 -4
  40. package/dist/client/components/auth/auth-loading.mjs +38 -10
  41. package/dist/client/components/blocks/block-canvas.mjs +111 -42
  42. package/dist/client/components/blocks/block-editor-context.mjs +90 -23
  43. package/dist/client/components/blocks/block-editor-layout.mjs +176 -59
  44. package/dist/client/components/blocks/block-editor-provider.mjs +219 -139
  45. package/dist/client/components/blocks/block-fields-renderer.mjs +212 -42
  46. package/dist/client/components/blocks/block-insert-button.mjs +168 -51
  47. package/dist/client/components/blocks/block-item-menu.mjs +312 -110
  48. package/dist/client/components/blocks/block-item.mjs +372 -125
  49. package/dist/client/components/blocks/block-library-sidebar.mjs +209 -114
  50. package/dist/client/components/blocks/block-tree.mjs +73 -15
  51. package/dist/client/components/blocks/block-type-icon.mjs +65 -20
  52. package/dist/client/components/blocks/utils/tree-utils.mjs +1 -2
  53. package/dist/client/components/component-renderer.d.mts +11 -22
  54. package/dist/client/components/component-renderer.mjs +151 -38
  55. package/dist/client/components/error-boundary.mjs +77 -25
  56. package/dist/client/components/fields/array-field.mjs +474 -199
  57. package/dist/client/components/fields/asset-preview-field.mjs +143 -44
  58. package/dist/client/components/fields/blocks-field/blocks-field.mjs +143 -35
  59. package/dist/client/components/fields/boolean-field.mjs +62 -32
  60. package/dist/client/components/fields/date-field.mjs +46 -12
  61. package/dist/client/components/fields/datetime-field.mjs +42 -11
  62. package/dist/client/components/fields/email-field.mjs +57 -28
  63. package/dist/client/components/fields/field-utils.mjs +1 -2
  64. package/dist/client/components/fields/field-wrapper.mjs +107 -32
  65. package/dist/client/components/fields/json-field.mjs +323 -110
  66. package/dist/client/components/fields/locale-badge.mjs +16 -8
  67. package/dist/client/components/fields/number-field.mjs +63 -30
  68. package/dist/client/components/fields/object-array-field.mjs +666 -272
  69. package/dist/client/components/fields/object-field.mjs +656 -98
  70. package/dist/client/components/fields/relation/displays/cards-display.mjs +225 -111
  71. package/dist/client/components/fields/relation/displays/chips-display.mjs +150 -77
  72. package/dist/client/components/fields/relation/displays/grid-display.mjs +186 -91
  73. package/dist/client/components/fields/relation/displays/list-display.mjs +230 -111
  74. package/dist/client/components/fields/relation/displays/table-display.mjs +241 -66
  75. package/dist/client/components/fields/relation/displays/types.mjs +2 -3
  76. package/dist/client/components/fields/relation/relation-items-display.mjs +131 -35
  77. package/dist/client/components/fields/relation-field.mjs +70 -15
  78. package/dist/client/components/fields/relation-picker.mjs +93 -98
  79. package/dist/client/components/fields/relation-select.mjs +42 -29
  80. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +90 -41
  81. package/dist/client/components/fields/rich-text-editor/extensions.mjs +33 -7
  82. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +48 -23
  83. package/dist/client/components/fields/rich-text-editor/index.mjs +491 -158
  84. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +13 -14
  85. package/dist/client/components/fields/rich-text-editor/presets.mjs +1 -2
  86. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +96 -53
  87. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +416 -107
  88. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +476 -215
  89. package/dist/client/components/fields/rich-text-editor/types.mjs +1 -2
  90. package/dist/client/components/fields/rich-text-editor/utils.mjs +1 -2
  91. package/dist/client/components/fields/rich-text-field.mjs +55 -17
  92. package/dist/client/components/fields/select-field.mjs +79 -44
  93. package/dist/client/components/fields/text-field.mjs +62 -29
  94. package/dist/client/components/fields/textarea-field.mjs +61 -29
  95. package/dist/client/components/fields/time-field.mjs +39 -11
  96. package/dist/client/components/fields/upload-field.mjs +253 -129
  97. package/dist/client/components/filter-builder/columns-tab.mjs +287 -93
  98. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +437 -138
  99. package/dist/client/components/filter-builder/filters-tab.mjs +409 -126
  100. package/dist/client/components/filter-builder/saved-views-tab.mjs +259 -106
  101. package/dist/client/components/history-sidebar.mjs +496 -0
  102. package/dist/client/components/layout/field-layout-renderer.mjs +301 -0
  103. package/dist/client/components/locale-switcher.mjs +231 -108
  104. package/dist/client/components/media/media-grid.mjs +259 -84
  105. package/dist/client/components/media/media-picker-dialog.mjs +500 -192
  106. package/dist/client/components/preview/live-preview-mode.mjs +416 -124
  107. package/dist/client/components/preview/preview-pane.mjs +353 -144
  108. package/dist/client/components/primitives/asset-preview.mjs +665 -257
  109. package/dist/client/components/primitives/checkbox-input.mjs +37 -11
  110. package/dist/client/components/primitives/date-input.mjs +392 -149
  111. package/dist/client/components/primitives/dropzone.mjs +314 -185
  112. package/dist/client/components/primitives/number-input.mjs +14 -10
  113. package/dist/client/components/primitives/select-multi.mjs +519 -185
  114. package/dist/client/components/primitives/select-single.mjs +416 -126
  115. package/dist/client/components/primitives/text-input.mjs +10 -5
  116. package/dist/client/components/primitives/textarea-input.mjs +10 -5
  117. package/dist/client/components/primitives/time-input.mjs +118 -45
  118. package/dist/client/components/primitives/toggle-input.mjs +31 -11
  119. package/dist/client/components/primitives/types.mjs +1 -2
  120. package/dist/client/components/sheets/resource-sheet.mjs +72 -64
  121. package/dist/client/components/ui/accordion.mjs +156 -37
  122. package/dist/client/components/ui/alert.mjs +70 -17
  123. package/dist/client/components/ui/badge.mjs +57 -16
  124. package/dist/client/components/ui/button.mjs +49 -14
  125. package/dist/client/components/ui/card.mjs +194 -39
  126. package/dist/client/components/ui/checkbox.mjs +71 -16
  127. package/dist/client/components/ui/command.mjs +220 -50
  128. package/dist/client/components/ui/dialog.mjs +265 -52
  129. package/dist/client/components/ui/drawer.mjs +260 -57
  130. package/dist/client/components/ui/dropdown-menu.mjs +293 -67
  131. package/dist/client/components/ui/empty-state.mjs +72 -26
  132. package/dist/client/components/ui/field.mjs +332 -56
  133. package/dist/client/components/ui/input-group.mjs +174 -41
  134. package/dist/client/components/ui/input.mjs +38 -9
  135. package/dist/client/components/ui/kbd.mjs +37 -8
  136. package/dist/client/components/ui/label.mjs +38 -8
  137. package/dist/client/components/ui/popover.mjs +162 -35
  138. package/dist/client/components/ui/responsive-dialog.mjs +277 -71
  139. package/dist/client/components/ui/search-input.mjs +101 -36
  140. package/dist/client/components/ui/select.mjs +297 -57
  141. package/dist/client/components/ui/separator.mjs +39 -9
  142. package/dist/client/components/ui/sheet.mjs +253 -51
  143. package/dist/client/components/ui/sidebar.mjs +700 -182
  144. package/dist/client/components/ui/skeleton.mjs +33 -8
  145. package/dist/client/components/ui/sonner.d.mts +2 -3
  146. package/dist/client/components/ui/sonner.mjs +45 -15
  147. package/dist/client/components/ui/spinner.mjs +44 -10
  148. package/dist/client/components/ui/switch.mjs +47 -12
  149. package/dist/client/components/ui/table.mjs +260 -50
  150. package/dist/client/components/ui/tabs.mjs +140 -29
  151. package/dist/client/components/ui/textarea.mjs +33 -8
  152. package/dist/client/components/ui/toolbar.mjs +105 -23
  153. package/dist/client/components/ui/tooltip.mjs +130 -29
  154. package/dist/client/components/widgets/chart-widget.mjs +456 -156
  155. package/dist/client/components/widgets/progress-widget.mjs +150 -60
  156. package/dist/client/components/widgets/quick-actions-widget.mjs +175 -87
  157. package/dist/client/components/widgets/recent-items-widget.mjs +157 -62
  158. package/dist/client/components/widgets/stats-widget.mjs +153 -42
  159. package/dist/client/components/widgets/table-widget.mjs +198 -64
  160. package/dist/client/components/widgets/timeline-widget.mjs +193 -82
  161. package/dist/client/components/widgets/value-widget.mjs +257 -56
  162. package/dist/client/components/widgets/widget-skeletons.mjs +390 -108
  163. package/dist/client/contexts/breadcrumb-context.mjs +44 -16
  164. package/dist/client/{context → contexts}/focus-context.d.mts +6 -7
  165. package/dist/client/{context → contexts}/focus-context.mjs +134 -62
  166. package/dist/client/hooks/typed-hooks.d.mts +38 -12
  167. package/dist/client/hooks/typed-hooks.mjs +758 -142
  168. package/dist/client/hooks/use-action.mjs +197 -69
  169. package/dist/client/hooks/use-admin-config.mjs +39 -10
  170. package/dist/client/hooks/use-admin-preferences.mjs +118 -15
  171. package/dist/client/hooks/use-admin-routes.mjs +60 -27
  172. package/dist/client/hooks/use-audit-history.mjs +157 -0
  173. package/dist/client/hooks/use-auth.d.mts +14 -15
  174. package/dist/client/hooks/use-auth.mjs +8 -9
  175. package/dist/client/hooks/use-collection-fields.mjs +58 -19
  176. package/dist/client/hooks/use-collection-meta.mjs +45 -13
  177. package/dist/client/hooks/use-collection-schema.mjs +34 -11
  178. package/dist/client/hooks/use-collection-validation.mjs +39 -25
  179. package/dist/client/hooks/use-collection.d.mts +18 -8
  180. package/dist/client/hooks/use-collection.mjs +560 -101
  181. package/dist/client/hooks/use-current-user.d.mts +6 -3
  182. package/dist/client/hooks/use-current-user.mjs +2 -2
  183. package/dist/client/hooks/use-field-hooks.mjs +73 -65
  184. package/dist/client/hooks/use-field-options.d.mts +1 -34
  185. package/dist/client/hooks/use-field-options.mjs +233 -148
  186. package/dist/client/hooks/use-global-fields.mjs +47 -16
  187. package/dist/client/hooks/use-global-meta.mjs +57 -11
  188. package/dist/client/hooks/use-global-schema.mjs +31 -11
  189. package/dist/client/hooks/use-global.d.mts +13 -2
  190. package/dist/client/hooks/use-global.mjs +244 -34
  191. package/dist/client/hooks/use-locks.mjs +331 -124
  192. package/dist/client/hooks/use-media-query.d.mts +1 -2
  193. package/dist/client/hooks/use-media-query.mjs +38 -19
  194. package/dist/client/hooks/use-prefill-params.mjs +2 -2
  195. package/dist/client/hooks/use-questpie-query-options.mjs +33 -11
  196. package/dist/client/hooks/use-reactive-fields.d.mts +6 -3
  197. package/dist/client/hooks/use-reactive-fields.mjs +130 -93
  198. package/dist/client/hooks/use-realtime-highlight.mjs +115 -53
  199. package/dist/client/hooks/use-saved-views.mjs +109 -34
  200. package/dist/client/hooks/use-search-param-toggle.d.mts +12 -0
  201. package/dist/client/hooks/use-search-param-toggle.mjs +115 -0
  202. package/dist/client/hooks/use-search.mjs +147 -36
  203. package/dist/client/hooks/use-server-actions.mjs +191 -0
  204. package/dist/client/hooks/use-server-validation.mjs +164 -72
  205. package/dist/client/hooks/use-server-widget-data.d.mts +2 -3
  206. package/dist/client/hooks/use-server-widget-data.mjs +36 -11
  207. package/dist/client/hooks/use-setup-status.d.mts +3 -4
  208. package/dist/client/hooks/use-setup-status.mjs +28 -16
  209. package/dist/client/hooks/use-sidebar-search-param.d.mts +9 -0
  210. package/dist/client/hooks/use-sidebar-search-param.mjs +104 -0
  211. package/dist/client/hooks/use-transition-stage.mjs +125 -0
  212. package/dist/client/hooks/use-upload-collection.mjs +1 -2
  213. package/dist/client/hooks/use-upload.mjs +189 -125
  214. package/dist/client/hooks/use-validation-error-map.mjs +10 -6
  215. package/dist/client/hooks/use-view-state.mjs +380 -162
  216. package/dist/client/i18n/hooks.mjs +191 -67
  217. package/dist/client/i18n/intl-cache.mjs +1 -2
  218. package/dist/client/i18n/messages.mjs +1 -2
  219. package/dist/client/i18n/simple.d.mts +1 -2
  220. package/dist/client/i18n/simple.mjs +1 -2
  221. package/dist/client/i18n/types.d.mts +1 -2
  222. package/dist/client/lib/cookies.mjs +9 -0
  223. package/dist/client/lib/events.mjs +5 -0
  224. package/dist/client/lib/render-profiler.mjs +51 -0
  225. package/dist/client/lib/utils.mjs +1 -6
  226. package/dist/client/preview/block-scope-context.d.mts +5 -6
  227. package/dist/client/preview/block-scope-context.mjs +50 -27
  228. package/dist/client/preview/index.d.mts +2 -2
  229. package/dist/client/preview/preview-banner.d.mts +3 -4
  230. package/dist/client/preview/preview-banner.mjs +74 -35
  231. package/dist/client/preview/preview-field.d.mts +9 -10
  232. package/dist/client/preview/preview-field.mjs +163 -61
  233. package/dist/client/preview/types.d.mts +1 -2
  234. package/dist/client/preview/types.mjs +1 -2
  235. package/dist/client/preview/use-collection-preview.d.mts +1 -2
  236. package/dist/client/preview/use-collection-preview.mjs +105 -56
  237. package/dist/client/runtime/content-locales-provider.mjs +87 -36
  238. package/dist/client/runtime/index.d.mts +1 -3
  239. package/dist/client/runtime/index.mjs +1 -3
  240. package/dist/client/runtime/locale-scope.mjs +69 -29
  241. package/dist/client/runtime/provider.d.mts +18 -9922
  242. package/dist/client/runtime/provider.mjs +250 -86
  243. package/dist/client/runtime/routes.d.mts +7 -7
  244. package/dist/client/runtime/routes.mjs +4 -20
  245. package/dist/client/runtime/translations-provider.mjs +114 -53
  246. package/dist/client/scope/picker.d.mts +3 -4
  247. package/dist/client/scope/picker.mjs +324 -90
  248. package/dist/client/scope/provider.d.mts +4 -5
  249. package/dist/client/scope/provider.mjs +30 -22
  250. package/dist/client/scope/types.d.mts +1 -2
  251. package/dist/client/styles/index.css +301 -225
  252. package/dist/client/utils/auto-expand-fields.mjs +23 -5
  253. package/dist/client/utils/build-field-definitions-from-schema.mjs +10 -7
  254. package/dist/client/utils/dependency-tracker.mjs +61 -0
  255. package/dist/client/utils/detect-relations.mjs +1 -2
  256. package/dist/client/utils/locale-to-flag.d.mts +8 -7
  257. package/dist/client/utils/locale-to-flag.mjs +1 -2
  258. package/dist/client/utils/routes.mjs +1 -2
  259. package/dist/client/views/auth/accept-invite-form.d.mts +3 -4
  260. package/dist/client/views/auth/accept-invite-form.mjs +414 -121
  261. package/dist/client/views/auth/auth-layout.d.mts +7 -8
  262. package/dist/client/views/auth/auth-layout.mjs +93 -30
  263. package/dist/client/views/auth/forgot-password-form.d.mts +4 -5
  264. package/dist/client/views/auth/forgot-password-form.mjs +332 -100
  265. package/dist/client/views/auth/invite-form.mjs +447 -105
  266. package/dist/client/views/auth/login-form.d.mts +4 -5
  267. package/dist/client/views/auth/login-form.mjs +340 -120
  268. package/dist/client/views/auth/reset-password-form.d.mts +4 -5
  269. package/dist/client/views/auth/reset-password-form.mjs +458 -131
  270. package/dist/client/views/auth/setup-form.d.mts +4 -5
  271. package/dist/client/views/auth/setup-form.mjs +481 -141
  272. package/dist/client/views/collection/auto-form-fields.mjs +686 -266
  273. package/dist/client/views/collection/bulk-action-toolbar.mjs +392 -203
  274. package/dist/client/views/collection/cells/complex-cells.mjs +635 -216
  275. package/dist/client/views/collection/cells/primitive-cells.mjs +332 -102
  276. package/dist/client/views/collection/cells/relation-cells.mjs +227 -72
  277. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +456 -136
  278. package/dist/client/views/collection/cells/shared/cell-helpers.mjs +49 -2
  279. package/dist/client/views/collection/cells/shared/relation-chip.mjs +109 -25
  280. package/dist/client/views/collection/cells/upload-cells.mjs +16 -8
  281. package/dist/client/views/collection/columns/build-columns.mjs +51 -12
  282. package/dist/client/views/collection/columns/column-defaults.mjs +17 -2
  283. package/dist/client/views/collection/field-context.mjs +10 -11
  284. package/dist/client/views/collection/field-renderer.mjs +237 -40
  285. package/dist/client/views/collection/form-view.mjs +1108 -445
  286. package/dist/client/views/collection/table-view.mjs +300 -163
  287. package/dist/client/views/collection/view-skeletons.mjs +181 -87
  288. package/dist/client/views/common/global-search.mjs +557 -233
  289. package/dist/client/views/dashboard/dashboard-grid.mjs +707 -211
  290. package/dist/client/views/dashboard/dashboard-widget.mjs +145 -58
  291. package/dist/client/views/dashboard/widget-card.mjs +315 -102
  292. package/dist/client/views/globals/global-form-view.mjs +1256 -131
  293. package/dist/client/views/layout/admin-layout-provider.d.mts +18 -21
  294. package/dist/client/views/layout/admin-layout-provider.mjs +135 -32
  295. package/dist/client/views/layout/admin-layout.d.mts +14 -32
  296. package/dist/client/views/layout/admin-layout.mjs +254 -96
  297. package/dist/client/views/layout/admin-router.d.mts +10 -42
  298. package/dist/client/views/layout/admin-router.mjs +1086 -426
  299. package/dist/client/views/layout/admin-sidebar.d.mts +10 -16
  300. package/dist/client/views/layout/admin-sidebar.mjs +1211 -382
  301. package/dist/client/views/layout/admin-topbar.mjs +220 -112
  302. package/dist/client/views/pages/accept-invite-page.d.mts +5 -6
  303. package/dist/client/views/pages/accept-invite-page.mjs +302 -96
  304. package/dist/client/views/pages/dashboard-page.d.mts +7 -16
  305. package/dist/client/views/pages/dashboard-page.mjs +62 -23
  306. package/dist/client/views/pages/forgot-password-page.d.mts +7 -10
  307. package/dist/client/views/pages/forgot-password-page.mjs +112 -40
  308. package/dist/client/views/pages/invite-page.d.mts +6 -7
  309. package/dist/client/views/pages/invite-page.mjs +121 -46
  310. package/dist/client/views/pages/login-page.d.mts +8 -15
  311. package/dist/client/views/pages/login-page.mjs +152 -57
  312. package/dist/client/views/pages/reset-password-page.d.mts +7 -10
  313. package/dist/client/views/pages/reset-password-page.mjs +209 -57
  314. package/dist/client/views/pages/setup-page.d.mts +7 -10
  315. package/dist/client/views/pages/setup-page.mjs +108 -43
  316. package/dist/client-module.d.mts +3 -0
  317. package/dist/client-module.mjs +3 -0
  318. package/dist/client.d.mts +55 -48
  319. package/dist/client.mjs +26 -28
  320. package/dist/components/rich-text/rich-text-renderer.d.mts +3 -4
  321. package/dist/components/rich-text/rich-text-renderer.mjs +97 -70
  322. package/dist/index.d.mts +36 -39
  323. package/dist/index.mjs +26 -28
  324. package/dist/plugin.d.mts +2 -0
  325. package/dist/plugin.mjs +3 -0
  326. package/dist/server/adapters/nextjs.d.mts +13 -14
  327. package/dist/server/adapters/nextjs.mjs +12 -13
  328. package/dist/server/adapters/tanstack.d.mts +10 -11
  329. package/dist/server/adapters/tanstack.mjs +11 -12
  330. package/dist/server/augmentation/actions.d.mts +279 -0
  331. package/dist/server/augmentation/common.d.mts +76 -0
  332. package/dist/server/augmentation/dashboard.d.mts +547 -0
  333. package/dist/server/augmentation/form-layout.d.mts +303 -0
  334. package/dist/server/augmentation/index.d.mts +44 -0
  335. package/dist/server/augmentation/index.mjs +10 -0
  336. package/dist/server/augmentation/sidebar.d.mts +181 -0
  337. package/dist/server/augmentation/views.d.mts +237 -0
  338. package/dist/server/augmentation.d.mts +7 -1523
  339. package/dist/server/block/index.d.mts +4 -3
  340. package/dist/server/codegen/admin-client-template.mjs +93 -0
  341. package/dist/server/codegen/projection-validator.mjs +67 -0
  342. package/dist/server/fields/blocks.d.mts +10 -78
  343. package/dist/server/fields/blocks.mjs +74 -115
  344. package/dist/server/fields/index.d.mts +6 -39
  345. package/dist/server/fields/index.mjs +6 -7
  346. package/dist/server/fields/rich-text.d.mts +10 -77
  347. package/dist/server/fields/rich-text.mjs +59 -100
  348. package/dist/server/i18n/index.mjs +8 -9
  349. package/dist/server/i18n/messages/cs.mjs +3 -3
  350. package/dist/server/i18n/messages/de.mjs +3 -3
  351. package/dist/server/i18n/messages/en.mjs +217 -3
  352. package/dist/server/i18n/messages/es.mjs +3 -3
  353. package/dist/server/i18n/messages/fr.mjs +3 -3
  354. package/dist/server/i18n/messages/index.mjs +1 -2
  355. package/dist/server/i18n/messages/pl.mjs +3 -3
  356. package/dist/server/i18n/messages/pt.mjs +3 -3
  357. package/dist/server/i18n/messages/sk.mjs +202 -3
  358. package/dist/server/modules/admin/.generated/module.d.mts +52 -0
  359. package/dist/server/modules/admin/.generated/module.mjs +78 -0
  360. package/dist/server/modules/admin/.generated/registries.d.mts +22 -0
  361. package/dist/server/{auth-helpers.d.mts → modules/admin/auth-helpers.d.mts} +13 -14
  362. package/dist/server/{auth-helpers.mjs → modules/admin/auth-helpers.mjs} +15 -16
  363. package/dist/server/{block → modules/admin/block}/block-builder.d.mts +96 -32
  364. package/dist/server/{block → modules/admin/block}/block-builder.mjs +113 -15
  365. package/dist/server/modules/admin/block/index.d.mts +3 -0
  366. package/dist/server/{block → modules/admin/block}/introspection.d.mts +10 -5
  367. package/dist/server/{block → modules/admin/block}/introspection.mjs +18 -7
  368. package/dist/server/{block → modules/admin/block}/prefetch.d.mts +17 -17
  369. package/dist/server/{block → modules/admin/block}/prefetch.mjs +17 -16
  370. package/dist/server/modules/admin/client/.generated/module.d.mts +94 -0
  371. package/dist/server/modules/admin/client/.generated/module.mjs +91 -0
  372. package/dist/server/modules/admin/client/components/badge.d.mts +1 -0
  373. package/dist/server/modules/admin/client/components/icon.d.mts +1 -0
  374. package/dist/server/modules/admin/client/fields/array.d.mts +6 -0
  375. package/dist/server/modules/admin/client/fields/array.mjs +12 -0
  376. package/dist/server/modules/admin/client/fields/assetPreview.d.mts +6 -0
  377. package/dist/server/modules/admin/client/fields/assetPreview.mjs +18 -0
  378. package/dist/server/modules/admin/client/fields/blocks.d.mts +6 -0
  379. package/dist/server/modules/admin/client/fields/blocks.mjs +12 -0
  380. package/dist/server/modules/admin/client/fields/boolean.d.mts +6 -0
  381. package/dist/server/modules/admin/client/fields/boolean.mjs +12 -0
  382. package/dist/server/modules/admin/client/fields/date.d.mts +6 -0
  383. package/dist/server/modules/admin/client/fields/date.mjs +12 -0
  384. package/dist/server/modules/admin/client/fields/datetime.d.mts +6 -0
  385. package/dist/server/modules/admin/client/fields/datetime.mjs +12 -0
  386. package/dist/server/modules/admin/client/fields/email.d.mts +6 -0
  387. package/dist/server/modules/admin/client/fields/email.mjs +12 -0
  388. package/dist/server/modules/admin/client/fields/json.d.mts +6 -0
  389. package/dist/server/modules/admin/client/fields/json.mjs +11 -0
  390. package/dist/server/modules/admin/client/fields/number.d.mts +6 -0
  391. package/dist/server/modules/admin/client/fields/number.mjs +12 -0
  392. package/dist/server/modules/admin/client/fields/object.d.mts +6 -0
  393. package/dist/server/modules/admin/client/fields/object.mjs +12 -0
  394. package/dist/server/modules/admin/client/fields/relation.d.mts +6 -0
  395. package/dist/server/modules/admin/client/fields/relation.mjs +12 -0
  396. package/dist/server/modules/admin/client/fields/richText.d.mts +6 -0
  397. package/dist/server/modules/admin/client/fields/richText.mjs +11 -0
  398. package/dist/server/modules/admin/client/fields/select.d.mts +6 -0
  399. package/dist/server/modules/admin/client/fields/select.mjs +12 -0
  400. package/dist/server/modules/admin/client/fields/text.d.mts +6 -0
  401. package/dist/server/modules/admin/client/fields/text.mjs +12 -0
  402. package/dist/server/modules/admin/client/fields/textarea.d.mts +6 -0
  403. package/dist/server/modules/admin/client/fields/textarea.mjs +12 -0
  404. package/dist/server/modules/admin/client/fields/time.d.mts +6 -0
  405. package/dist/server/modules/admin/client/fields/time.mjs +12 -0
  406. package/dist/server/modules/admin/client/fields/upload.d.mts +6 -0
  407. package/dist/server/modules/admin/client/fields/upload.mjs +12 -0
  408. package/dist/server/modules/admin/client/fields/url.d.mts +6 -0
  409. package/dist/server/modules/admin/client/fields/url.mjs +12 -0
  410. package/dist/server/modules/admin/client/index.d.mts +1 -0
  411. package/dist/server/modules/admin/client/pages/dashboard.d.mts +6 -0
  412. package/dist/server/modules/admin/client/pages/dashboard.mjs +11 -0
  413. package/dist/server/modules/admin/client/pages/forgotPassword.d.mts +6 -0
  414. package/dist/server/modules/admin/client/pages/forgotPassword.mjs +11 -0
  415. package/dist/server/modules/admin/client/pages/login.d.mts +6 -0
  416. package/dist/server/modules/admin/client/pages/login.mjs +11 -0
  417. package/dist/server/modules/admin/client/pages/resetPassword.d.mts +6 -0
  418. package/dist/server/modules/admin/client/pages/resetPassword.mjs +11 -0
  419. package/dist/server/modules/admin/client/pages/setup.d.mts +6 -0
  420. package/dist/server/modules/admin/client/pages/setup.mjs +11 -0
  421. package/dist/server/modules/admin/client/views/collection-form.mjs +10 -0
  422. package/dist/server/modules/admin/client/views/collection-table.mjs +10 -0
  423. package/dist/server/modules/admin/client/views/global-form.mjs +10 -0
  424. package/dist/server/modules/admin/client/widgets/chart.d.mts +6 -0
  425. package/dist/server/modules/admin/client/widgets/chart.mjs +7 -0
  426. package/dist/server/modules/admin/client/widgets/progress.d.mts +6 -0
  427. package/dist/server/modules/admin/client/widgets/progress.mjs +7 -0
  428. package/dist/server/modules/admin/client/widgets/quickActions.d.mts +6 -0
  429. package/dist/server/modules/admin/client/widgets/quickActions.mjs +7 -0
  430. package/dist/server/modules/admin/client/widgets/recentItems.d.mts +6 -0
  431. package/dist/server/modules/admin/client/widgets/recentItems.mjs +7 -0
  432. package/dist/server/modules/admin/client/widgets/stats.d.mts +6 -0
  433. package/dist/server/modules/admin/client/widgets/stats.mjs +7 -0
  434. package/dist/server/modules/admin/client/widgets/table.d.mts +6 -0
  435. package/dist/server/modules/admin/client/widgets/table.mjs +7 -0
  436. package/dist/server/modules/admin/client/widgets/timeline.d.mts +6 -0
  437. package/dist/server/modules/admin/client/widgets/timeline.mjs +7 -0
  438. package/dist/server/modules/admin/client/widgets/value.d.mts +6 -0
  439. package/dist/server/modules/admin/client/widgets/value.mjs +7 -0
  440. package/dist/server/modules/admin/collections/account.d.mts +77 -0
  441. package/dist/server/modules/admin/collections/account.mjs +23 -0
  442. package/dist/server/modules/admin/collections/admin-locks.d.mts +90 -0
  443. package/dist/server/modules/admin/collections/admin-locks.mjs +16 -0
  444. package/dist/server/modules/admin/collections/admin-preferences.d.mts +69 -0
  445. package/dist/server/modules/admin/collections/admin-preferences.mjs +16 -0
  446. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +83 -0
  447. package/dist/server/modules/admin/collections/admin-saved-views.mjs +16 -0
  448. package/dist/server/modules/admin/collections/apikey.d.mts +99 -0
  449. package/dist/server/modules/admin/collections/apikey.mjs +15 -0
  450. package/dist/server/modules/admin/collections/assets.d.mts +72 -0
  451. package/dist/server/modules/admin/collections/assets.mjs +71 -0
  452. package/dist/server/modules/admin/collections/session.d.mts +69 -0
  453. package/dist/server/modules/admin/collections/session.mjs +15 -0
  454. package/dist/server/modules/admin/collections/user.d.mts +85 -0
  455. package/dist/server/modules/admin/collections/user.mjs +204 -0
  456. package/dist/server/modules/admin/collections/verification.d.mts +63 -0
  457. package/dist/server/modules/admin/collections/verification.mjs +15 -0
  458. package/dist/server/modules/admin/components/badge.d.mts +10 -0
  459. package/dist/server/modules/admin/components/badge.mjs +10 -0
  460. package/dist/server/modules/admin/components/icon.d.mts +9 -0
  461. package/dist/server/modules/admin/components/icon.mjs +11 -0
  462. package/dist/server/modules/admin/config/admin.mjs +34 -0
  463. package/dist/server/modules/admin/dto/admin-config.dto.mjs +102 -0
  464. package/dist/server/modules/admin/factories.mjs +172 -0
  465. package/dist/server/modules/admin/index.d.mts +1060 -16846
  466. package/dist/server/modules/admin/index.mjs +17 -240
  467. package/dist/server/modules/admin/modules.mjs +11 -0
  468. package/dist/server/modules/admin/plugin.mjs +13 -0
  469. package/dist/server/modules/admin/routes/admin-config.d.mts +28 -0
  470. package/dist/server/modules/admin/routes/admin-config.mjs +552 -0
  471. package/dist/server/modules/admin/{functions → routes}/execute-action.d.mts +17 -32
  472. package/dist/server/modules/admin/{functions → routes}/execute-action.mjs +146 -44
  473. package/dist/server/modules/admin/routes/locales.d.mts +18 -0
  474. package/dist/server/modules/admin/routes/locales.mjs +69 -0
  475. package/dist/server/modules/admin/{functions → routes}/preview.d.mts +25 -15
  476. package/dist/server/modules/admin/{functions → routes}/preview.mjs +84 -97
  477. package/dist/server/modules/admin/{functions → routes}/reactive.d.mts +19 -44
  478. package/dist/server/modules/admin/{functions → routes}/reactive.mjs +89 -117
  479. package/dist/server/modules/admin/routes/route-helpers.d.mts +23 -0
  480. package/dist/server/modules/admin/routes/route-helpers.mjs +76 -0
  481. package/dist/server/modules/admin/{functions → routes}/setup.d.mts +11 -32
  482. package/dist/server/modules/admin/routes/setup.mjs +114 -0
  483. package/dist/server/modules/admin/routes/translations.d.mts +26 -0
  484. package/dist/server/modules/admin/routes/translations.mjs +114 -0
  485. package/dist/server/modules/admin/routes/widget-data.d.mts +32 -0
  486. package/dist/server/modules/admin/routes/widget-data.mjs +62 -0
  487. package/dist/server/modules/admin/views/form.d.mts +8 -0
  488. package/dist/server/modules/admin/views/form.mjs +7 -0
  489. package/dist/server/modules/admin/views/global-form.d.mts +8 -0
  490. package/dist/server/modules/admin/views/global-form.mjs +7 -0
  491. package/dist/server/modules/admin/views/table.d.mts +8 -0
  492. package/dist/server/modules/admin/views/table.mjs +7 -0
  493. package/dist/server/modules/admin-preferences/collections/{admin-preferences.collection.mjs → admin-preferences.mjs} +13 -24
  494. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +18 -42
  495. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +99 -0
  496. package/dist/server/modules/admin-preferences/collections/saved-views.mjs +38 -0
  497. package/dist/server/modules/audit/.generated/module.d.mts +60 -0
  498. package/dist/server/modules/audit/.generated/module.mjs +30 -0
  499. package/dist/server/modules/audit/collections/audit-log.d.mts +214 -0
  500. package/dist/server/modules/audit/collections/audit-log.mjs +107 -0
  501. package/dist/server/modules/audit/config/admin.mjs +21 -0
  502. package/dist/server/modules/audit/config/app.mjs +262 -0
  503. package/dist/server/modules/audit/index.d.mts +2 -0
  504. package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +13 -0
  505. package/dist/server/modules/audit/jobs/audit-cleanup.mjs +28 -0
  506. package/dist/server/plugin.d.mts +26 -0
  507. package/dist/server/plugin.mjs +385 -0
  508. package/dist/server/proxy-factories.d.mts +85 -0
  509. package/dist/server/proxy-factories.mjs +302 -0
  510. package/dist/server/registry-helpers.d.mts +83 -0
  511. package/dist/server/registry-helpers.mjs +104 -0
  512. package/dist/server.d.mts +30 -18
  513. package/dist/server.mjs +19 -16
  514. package/dist/shared/preview-utils.d.mts +2 -3
  515. package/dist/shared/preview-utils.mjs +2 -3
  516. package/dist/shared/types/saved-views.types.d.mts +2 -2
  517. package/package.json +50 -40
  518. package/skills/questpie-admin/SKILL.md +397 -0
  519. package/skills/questpie-admin/blocks/SKILL.md +305 -0
  520. package/skills/questpie-admin/custom-ui/SKILL.md +307 -0
  521. package/skills/questpie-admin/views/SKILL.md +442 -0
  522. package/dist/_virtual/rolldown_runtime.mjs +0 -18
  523. package/dist/augmentation.d.mts.map +0 -1
  524. package/dist/client/blocks/block-registry.d.mts +0 -199
  525. package/dist/client/blocks/block-registry.d.mts.map +0 -1
  526. package/dist/client/blocks/block-registry.mjs +0 -88
  527. package/dist/client/blocks/block-registry.mjs.map +0 -1
  528. package/dist/client/blocks/block-renderer.d.mts.map +0 -1
  529. package/dist/client/blocks/block-renderer.mjs.map +0 -1
  530. package/dist/client/blocks/prefetch.d.mts +0 -45
  531. package/dist/client/blocks/prefetch.d.mts.map +0 -1
  532. package/dist/client/blocks/prefetch.mjs +0 -26
  533. package/dist/client/blocks/prefetch.mjs.map +0 -1
  534. package/dist/client/blocks/types.d.mts.map +0 -1
  535. package/dist/client/blocks/types.mjs.map +0 -1
  536. package/dist/client/builder/admin-builder.d.mts +0 -112
  537. package/dist/client/builder/admin-builder.d.mts.map +0 -1
  538. package/dist/client/builder/admin-builder.mjs +0 -185
  539. package/dist/client/builder/admin-builder.mjs.map +0 -1
  540. package/dist/client/builder/admin-types.d.mts.map +0 -1
  541. package/dist/client/builder/admin.d.mts.map +0 -1
  542. package/dist/client/builder/admin.mjs.map +0 -1
  543. package/dist/client/builder/defaults/components.mjs +0 -20
  544. package/dist/client/builder/defaults/components.mjs.map +0 -1
  545. package/dist/client/builder/defaults/core.d.mts +0 -354
  546. package/dist/client/builder/defaults/core.d.mts.map +0 -1
  547. package/dist/client/builder/defaults/core.mjs +0 -49
  548. package/dist/client/builder/defaults/core.mjs.map +0 -1
  549. package/dist/client/builder/defaults/fields.mjs +0 -328
  550. package/dist/client/builder/defaults/fields.mjs.map +0 -1
  551. package/dist/client/builder/defaults/pages.mjs +0 -58
  552. package/dist/client/builder/defaults/pages.mjs.map +0 -1
  553. package/dist/client/builder/defaults/starter.d.mts +0 -351
  554. package/dist/client/builder/defaults/starter.d.mts.map +0 -1
  555. package/dist/client/builder/defaults/starter.mjs +0 -28
  556. package/dist/client/builder/defaults/starter.mjs.map +0 -1
  557. package/dist/client/builder/defaults/views.mjs +0 -27
  558. package/dist/client/builder/defaults/views.mjs.map +0 -1
  559. package/dist/client/builder/defaults/widgets.mjs +0 -31
  560. package/dist/client/builder/defaults/widgets.mjs.map +0 -1
  561. package/dist/client/builder/field/field.d.mts.map +0 -1
  562. package/dist/client/builder/field/field.mjs.map +0 -1
  563. package/dist/client/builder/index.d.mts.map +0 -1
  564. package/dist/client/builder/page/page.d.mts.map +0 -1
  565. package/dist/client/builder/page/page.mjs.map +0 -1
  566. package/dist/client/builder/proxies.d.mts +0 -2
  567. package/dist/client/builder/proxies.mjs +0 -24
  568. package/dist/client/builder/proxies.mjs.map +0 -1
  569. package/dist/client/builder/qa.d.mts +0 -50
  570. package/dist/client/builder/qa.d.mts.map +0 -1
  571. package/dist/client/builder/qa.mjs +0 -42
  572. package/dist/client/builder/qa.mjs.map +0 -1
  573. package/dist/client/builder/registry.d.mts.map +0 -1
  574. package/dist/client/builder/types/action-registry.d.mts +0 -2
  575. package/dist/client/builder/types/action-registry.mjs.map +0 -1
  576. package/dist/client/builder/types/action-types.d.mts.map +0 -1
  577. package/dist/client/builder/types/collection-types.d.mts +0 -199
  578. package/dist/client/builder/types/collection-types.d.mts.map +0 -1
  579. package/dist/client/builder/types/collection-types.mjs.map +0 -1
  580. package/dist/client/builder/types/common.d.mts.map +0 -1
  581. package/dist/client/builder/types/field-types.d.mts.map +0 -1
  582. package/dist/client/builder/types/field-types.mjs.map +0 -1
  583. package/dist/client/builder/types/global-types.d.mts +0 -22
  584. package/dist/client/builder/types/global-types.d.mts.map +0 -1
  585. package/dist/client/builder/types/ui-config.d.mts.map +0 -1
  586. package/dist/client/builder/types/views.d.mts +0 -89
  587. package/dist/client/builder/types/views.d.mts.map +0 -1
  588. package/dist/client/builder/types/widget-types.d.mts.map +0 -1
  589. package/dist/client/builder/validation.mjs.map +0 -1
  590. package/dist/client/builder/view/view.d.mts.map +0 -1
  591. package/dist/client/builder/view/view.mjs.map +0 -1
  592. package/dist/client/builder/widget/widget.d.mts.map +0 -1
  593. package/dist/client/builder/widget/widget.mjs.map +0 -1
  594. package/dist/client/components/actions/action-button.d.mts +0 -2
  595. package/dist/client/components/actions/action-button.mjs.map +0 -1
  596. package/dist/client/components/actions/action-dialog.d.mts +0 -2
  597. package/dist/client/components/actions/action-dialog.mjs.map +0 -1
  598. package/dist/client/components/actions/confirmation-dialog.d.mts +0 -2
  599. package/dist/client/components/actions/confirmation-dialog.mjs.map +0 -1
  600. package/dist/client/components/actions/header-actions.d.mts +0 -2
  601. package/dist/client/components/actions/header-actions.mjs.map +0 -1
  602. package/dist/client/components/actions/index.d.mts +0 -4
  603. package/dist/client/components/admin-link.d.mts.map +0 -1
  604. package/dist/client/components/admin-link.mjs.map +0 -1
  605. package/dist/client/components/auth/auth-guard.d.mts.map +0 -1
  606. package/dist/client/components/auth/auth-guard.mjs.map +0 -1
  607. package/dist/client/components/auth/auth-loading.d.mts.map +0 -1
  608. package/dist/client/components/auth/auth-loading.mjs.map +0 -1
  609. package/dist/client/components/auth/index.d.mts +0 -2
  610. package/dist/client/components/blocks/block-canvas.mjs.map +0 -1
  611. package/dist/client/components/blocks/block-editor-context.mjs.map +0 -1
  612. package/dist/client/components/blocks/block-editor-layout.mjs.map +0 -1
  613. package/dist/client/components/blocks/block-editor-provider.mjs.map +0 -1
  614. package/dist/client/components/blocks/block-fields-renderer.mjs.map +0 -1
  615. package/dist/client/components/blocks/block-insert-button.mjs.map +0 -1
  616. package/dist/client/components/blocks/block-item-menu.mjs.map +0 -1
  617. package/dist/client/components/blocks/block-item.mjs.map +0 -1
  618. package/dist/client/components/blocks/block-library-sidebar.mjs.map +0 -1
  619. package/dist/client/components/blocks/block-tree.mjs.map +0 -1
  620. package/dist/client/components/blocks/block-type-icon.mjs.map +0 -1
  621. package/dist/client/components/blocks/utils/tree-utils.mjs.map +0 -1
  622. package/dist/client/components/component-renderer.d.mts.map +0 -1
  623. package/dist/client/components/component-renderer.mjs.map +0 -1
  624. package/dist/client/components/error-boundary.mjs.map +0 -1
  625. package/dist/client/components/fields/array-field.d.mts +0 -44
  626. package/dist/client/components/fields/array-field.d.mts.map +0 -1
  627. package/dist/client/components/fields/array-field.mjs.map +0 -1
  628. package/dist/client/components/fields/asset-preview-field.d.mts +0 -52
  629. package/dist/client/components/fields/asset-preview-field.d.mts.map +0 -1
  630. package/dist/client/components/fields/asset-preview-field.mjs.map +0 -1
  631. package/dist/client/components/fields/blocks-field/blocks-field.d.mts +0 -41
  632. package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +0 -1
  633. package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +0 -1
  634. package/dist/client/components/fields/blocks-field/index.d.mts +0 -1
  635. package/dist/client/components/fields/boolean-field.d.mts +0 -30
  636. package/dist/client/components/fields/boolean-field.d.mts.map +0 -1
  637. package/dist/client/components/fields/boolean-field.mjs.map +0 -1
  638. package/dist/client/components/fields/custom-field.d.mts +0 -3
  639. package/dist/client/components/fields/date-field.d.mts +0 -22
  640. package/dist/client/components/fields/date-field.d.mts.map +0 -1
  641. package/dist/client/components/fields/date-field.mjs.map +0 -1
  642. package/dist/client/components/fields/datetime-field.d.mts +0 -23
  643. package/dist/client/components/fields/datetime-field.d.mts.map +0 -1
  644. package/dist/client/components/fields/datetime-field.mjs.map +0 -1
  645. package/dist/client/components/fields/email-field.d.mts +0 -19
  646. package/dist/client/components/fields/email-field.d.mts.map +0 -1
  647. package/dist/client/components/fields/email-field.mjs.map +0 -1
  648. package/dist/client/components/fields/embedded-collection.d.mts +0 -3
  649. package/dist/client/components/fields/field-types.d.mts +0 -571
  650. package/dist/client/components/fields/field-types.d.mts.map +0 -1
  651. package/dist/client/components/fields/field-utils.d.mts +0 -1
  652. package/dist/client/components/fields/field-utils.mjs.map +0 -1
  653. package/dist/client/components/fields/field-wrapper.d.mts +0 -3
  654. package/dist/client/components/fields/field-wrapper.mjs.map +0 -1
  655. package/dist/client/components/fields/index.d.mts +0 -33
  656. package/dist/client/components/fields/json-field.d.mts +0 -84
  657. package/dist/client/components/fields/json-field.d.mts.map +0 -1
  658. package/dist/client/components/fields/json-field.mjs.map +0 -1
  659. package/dist/client/components/fields/locale-badge.d.mts +0 -1
  660. package/dist/client/components/fields/locale-badge.mjs.map +0 -1
  661. package/dist/client/components/fields/number-field.d.mts +0 -23
  662. package/dist/client/components/fields/number-field.d.mts.map +0 -1
  663. package/dist/client/components/fields/number-field.mjs.map +0 -1
  664. package/dist/client/components/fields/object-array-field.d.mts +0 -2
  665. package/dist/client/components/fields/object-array-field.mjs.map +0 -1
  666. package/dist/client/components/fields/object-field.d.mts +0 -32
  667. package/dist/client/components/fields/object-field.d.mts.map +0 -1
  668. package/dist/client/components/fields/object-field.mjs.map +0 -1
  669. package/dist/client/components/fields/relation/displays/cards-display.d.mts +0 -2
  670. package/dist/client/components/fields/relation/displays/cards-display.mjs.map +0 -1
  671. package/dist/client/components/fields/relation/displays/chips-display.d.mts +0 -2
  672. package/dist/client/components/fields/relation/displays/chips-display.mjs.map +0 -1
  673. package/dist/client/components/fields/relation/displays/grid-display.d.mts +0 -2
  674. package/dist/client/components/fields/relation/displays/grid-display.mjs.map +0 -1
  675. package/dist/client/components/fields/relation/displays/index.d.mts +0 -6
  676. package/dist/client/components/fields/relation/displays/list-display.d.mts +0 -2
  677. package/dist/client/components/fields/relation/displays/list-display.mjs.map +0 -1
  678. package/dist/client/components/fields/relation/displays/table-display.d.mts +0 -2
  679. package/dist/client/components/fields/relation/displays/table-display.mjs.map +0 -1
  680. package/dist/client/components/fields/relation/displays/types.d.mts +0 -22
  681. package/dist/client/components/fields/relation/displays/types.d.mts.map +0 -1
  682. package/dist/client/components/fields/relation/displays/types.mjs.map +0 -1
  683. package/dist/client/components/fields/relation/index.d.mts +0 -3
  684. package/dist/client/components/fields/relation/relation-items-display.d.mts +0 -5
  685. package/dist/client/components/fields/relation/relation-items-display.mjs.map +0 -1
  686. package/dist/client/components/fields/relation-field.d.mts +0 -134
  687. package/dist/client/components/fields/relation-field.d.mts.map +0 -1
  688. package/dist/client/components/fields/relation-field.mjs.map +0 -1
  689. package/dist/client/components/fields/relation-picker.d.mts +0 -4
  690. package/dist/client/components/fields/relation-picker.mjs.map +0 -1
  691. package/dist/client/components/fields/relation-select.d.mts +0 -3
  692. package/dist/client/components/fields/relation-select.mjs.map +0 -1
  693. package/dist/client/components/fields/reverse-relation-field.d.mts +0 -2
  694. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +0 -1
  695. package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +0 -1
  696. package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +0 -1
  697. package/dist/client/components/fields/rich-text-editor/index.d.mts +0 -4
  698. package/dist/client/components/fields/rich-text-editor/index.mjs.map +0 -1
  699. package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +0 -1
  700. package/dist/client/components/fields/rich-text-editor/presets.d.mts +0 -11
  701. package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +0 -1
  702. package/dist/client/components/fields/rich-text-editor/presets.mjs.map +0 -1
  703. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +0 -1
  704. package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +0 -1
  705. package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +0 -1
  706. package/dist/client/components/fields/rich-text-editor/types.d.mts +0 -78
  707. package/dist/client/components/fields/rich-text-editor/types.d.mts.map +0 -1
  708. package/dist/client/components/fields/rich-text-editor/types.mjs.map +0 -1
  709. package/dist/client/components/fields/rich-text-editor/utils.mjs.map +0 -1
  710. package/dist/client/components/fields/rich-text-editor/variants.d.mts +0 -2
  711. package/dist/client/components/fields/rich-text-field.d.mts +0 -14
  712. package/dist/client/components/fields/rich-text-field.d.mts.map +0 -1
  713. package/dist/client/components/fields/rich-text-field.mjs.map +0 -1
  714. package/dist/client/components/fields/select-field.d.mts +0 -25
  715. package/dist/client/components/fields/select-field.d.mts.map +0 -1
  716. package/dist/client/components/fields/select-field.mjs.map +0 -1
  717. package/dist/client/components/fields/status-field.d.mts +0 -2
  718. package/dist/client/components/fields/text-field.d.mts +0 -22
  719. package/dist/client/components/fields/text-field.d.mts.map +0 -1
  720. package/dist/client/components/fields/text-field.mjs.map +0 -1
  721. package/dist/client/components/fields/textarea-field.d.mts +0 -22
  722. package/dist/client/components/fields/textarea-field.d.mts.map +0 -1
  723. package/dist/client/components/fields/textarea-field.mjs.map +0 -1
  724. package/dist/client/components/fields/time-field.d.mts +0 -20
  725. package/dist/client/components/fields/time-field.d.mts.map +0 -1
  726. package/dist/client/components/fields/time-field.mjs.map +0 -1
  727. package/dist/client/components/fields/upload-field.d.mts +0 -97
  728. package/dist/client/components/fields/upload-field.d.mts.map +0 -1
  729. package/dist/client/components/fields/upload-field.mjs.map +0 -1
  730. package/dist/client/components/filter-builder/columns-tab.d.mts +0 -1
  731. package/dist/client/components/filter-builder/columns-tab.mjs.map +0 -1
  732. package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +0 -1
  733. package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +0 -1
  734. package/dist/client/components/filter-builder/filters-tab.d.mts +0 -1
  735. package/dist/client/components/filter-builder/filters-tab.mjs.map +0 -1
  736. package/dist/client/components/filter-builder/index.d.mts +0 -5
  737. package/dist/client/components/filter-builder/saved-views-tab.d.mts +0 -1
  738. package/dist/client/components/filter-builder/saved-views-tab.mjs.map +0 -1
  739. package/dist/client/components/index.d.mts +0 -80
  740. package/dist/client/components/locale-switcher.d.mts +0 -2
  741. package/dist/client/components/locale-switcher.mjs.map +0 -1
  742. package/dist/client/components/media/media-grid.mjs.map +0 -1
  743. package/dist/client/components/media/media-picker-dialog.mjs.map +0 -1
  744. package/dist/client/components/preview/live-preview-mode.mjs.map +0 -1
  745. package/dist/client/components/preview/preview-pane.mjs.map +0 -1
  746. package/dist/client/components/primitives/asset-preview.mjs.map +0 -1
  747. package/dist/client/components/primitives/checkbox-input.mjs.map +0 -1
  748. package/dist/client/components/primitives/date-input.mjs.map +0 -1
  749. package/dist/client/components/primitives/dropzone.mjs.map +0 -1
  750. package/dist/client/components/primitives/number-input.mjs.map +0 -1
  751. package/dist/client/components/primitives/select-multi.mjs.map +0 -1
  752. package/dist/client/components/primitives/select-single.mjs.map +0 -1
  753. package/dist/client/components/primitives/text-input.mjs.map +0 -1
  754. package/dist/client/components/primitives/textarea-input.mjs.map +0 -1
  755. package/dist/client/components/primitives/time-input.mjs.map +0 -1
  756. package/dist/client/components/primitives/toggle-input.mjs.map +0 -1
  757. package/dist/client/components/primitives/types.d.mts +0 -14
  758. package/dist/client/components/primitives/types.d.mts.map +0 -1
  759. package/dist/client/components/primitives/types.mjs.map +0 -1
  760. package/dist/client/components/sheets/index.d.mts +0 -1
  761. package/dist/client/components/sheets/resource-sheet.d.mts +0 -1
  762. package/dist/client/components/sheets/resource-sheet.mjs.map +0 -1
  763. package/dist/client/components/ui/accordion.d.mts +0 -2
  764. package/dist/client/components/ui/accordion.mjs.map +0 -1
  765. package/dist/client/components/ui/alert.mjs.map +0 -1
  766. package/dist/client/components/ui/avatar.d.mts +0 -3
  767. package/dist/client/components/ui/badge.d.mts +0 -3
  768. package/dist/client/components/ui/badge.mjs.map +0 -1
  769. package/dist/client/components/ui/button.d.mts +0 -3
  770. package/dist/client/components/ui/button.mjs.map +0 -1
  771. package/dist/client/components/ui/card.d.mts +0 -2
  772. package/dist/client/components/ui/card.mjs.map +0 -1
  773. package/dist/client/components/ui/checkbox.d.mts +0 -2
  774. package/dist/client/components/ui/checkbox.mjs.map +0 -1
  775. package/dist/client/components/ui/combobox.d.mts +0 -3
  776. package/dist/client/components/ui/command.mjs.map +0 -1
  777. package/dist/client/components/ui/dialog.d.mts +0 -3
  778. package/dist/client/components/ui/dialog.mjs.map +0 -1
  779. package/dist/client/components/ui/drawer.mjs.map +0 -1
  780. package/dist/client/components/ui/dropdown-menu.d.mts +0 -3
  781. package/dist/client/components/ui/dropdown-menu.mjs.map +0 -1
  782. package/dist/client/components/ui/empty-state.mjs.map +0 -1
  783. package/dist/client/components/ui/field.d.mts +0 -3
  784. package/dist/client/components/ui/field.mjs.map +0 -1
  785. package/dist/client/components/ui/input-group.d.mts +0 -4
  786. package/dist/client/components/ui/input-group.mjs.map +0 -1
  787. package/dist/client/components/ui/input.d.mts +0 -2
  788. package/dist/client/components/ui/input.mjs.map +0 -1
  789. package/dist/client/components/ui/kbd.mjs.map +0 -1
  790. package/dist/client/components/ui/label.d.mts +0 -2
  791. package/dist/client/components/ui/label.mjs.map +0 -1
  792. package/dist/client/components/ui/popover.d.mts +0 -3
  793. package/dist/client/components/ui/popover.mjs.map +0 -1
  794. package/dist/client/components/ui/responsive-dialog.mjs.map +0 -1
  795. package/dist/client/components/ui/scroll-area.d.mts +0 -2
  796. package/dist/client/components/ui/search-input.mjs.map +0 -1
  797. package/dist/client/components/ui/select.d.mts +0 -3
  798. package/dist/client/components/ui/select.mjs.map +0 -1
  799. package/dist/client/components/ui/separator.d.mts +0 -2
  800. package/dist/client/components/ui/separator.mjs.map +0 -1
  801. package/dist/client/components/ui/sheet.d.mts +0 -3
  802. package/dist/client/components/ui/sheet.mjs.map +0 -1
  803. package/dist/client/components/ui/sidebar.d.mts +0 -8
  804. package/dist/client/components/ui/sidebar.mjs.map +0 -1
  805. package/dist/client/components/ui/skeleton.d.mts +0 -1
  806. package/dist/client/components/ui/skeleton.mjs.map +0 -1
  807. package/dist/client/components/ui/sonner.d.mts.map +0 -1
  808. package/dist/client/components/ui/sonner.mjs.map +0 -1
  809. package/dist/client/components/ui/spinner.d.mts +0 -1
  810. package/dist/client/components/ui/spinner.mjs.map +0 -1
  811. package/dist/client/components/ui/switch.d.mts +0 -2
  812. package/dist/client/components/ui/switch.mjs.map +0 -1
  813. package/dist/client/components/ui/table.d.mts +0 -2
  814. package/dist/client/components/ui/table.mjs.map +0 -1
  815. package/dist/client/components/ui/tabs.d.mts +0 -3
  816. package/dist/client/components/ui/tabs.mjs.map +0 -1
  817. package/dist/client/components/ui/textarea.d.mts +0 -2
  818. package/dist/client/components/ui/textarea.mjs.map +0 -1
  819. package/dist/client/components/ui/toolbar.mjs.map +0 -1
  820. package/dist/client/components/ui/tooltip.d.mts +0 -2
  821. package/dist/client/components/ui/tooltip.mjs.map +0 -1
  822. package/dist/client/components/widgets/chart-widget.d.mts +0 -57
  823. package/dist/client/components/widgets/chart-widget.d.mts.map +0 -1
  824. package/dist/client/components/widgets/chart-widget.mjs.map +0 -1
  825. package/dist/client/components/widgets/progress-widget.d.mts +0 -41
  826. package/dist/client/components/widgets/progress-widget.d.mts.map +0 -1
  827. package/dist/client/components/widgets/progress-widget.mjs.map +0 -1
  828. package/dist/client/components/widgets/quick-actions-widget.d.mts +0 -29
  829. package/dist/client/components/widgets/quick-actions-widget.d.mts.map +0 -1
  830. package/dist/client/components/widgets/quick-actions-widget.mjs.map +0 -1
  831. package/dist/client/components/widgets/recent-items-widget.d.mts +0 -51
  832. package/dist/client/components/widgets/recent-items-widget.d.mts.map +0 -1
  833. package/dist/client/components/widgets/recent-items-widget.mjs.map +0 -1
  834. package/dist/client/components/widgets/stats-widget.d.mts +0 -55
  835. package/dist/client/components/widgets/stats-widget.d.mts.map +0 -1
  836. package/dist/client/components/widgets/stats-widget.mjs.map +0 -1
  837. package/dist/client/components/widgets/table-widget.d.mts +0 -31
  838. package/dist/client/components/widgets/table-widget.d.mts.map +0 -1
  839. package/dist/client/components/widgets/table-widget.mjs.map +0 -1
  840. package/dist/client/components/widgets/timeline-widget.d.mts +0 -51
  841. package/dist/client/components/widgets/timeline-widget.d.mts.map +0 -1
  842. package/dist/client/components/widgets/timeline-widget.mjs.map +0 -1
  843. package/dist/client/components/widgets/value-widget.d.mts +0 -39
  844. package/dist/client/components/widgets/value-widget.d.mts.map +0 -1
  845. package/dist/client/components/widgets/value-widget.mjs.map +0 -1
  846. package/dist/client/components/widgets/widget-skeletons.mjs.map +0 -1
  847. package/dist/client/context/focus-context.d.mts.map +0 -1
  848. package/dist/client/context/focus-context.mjs.map +0 -1
  849. package/dist/client/contexts/breadcrumb-context.mjs.map +0 -1
  850. package/dist/client/hooks/typed-hooks.d.mts.map +0 -1
  851. package/dist/client/hooks/typed-hooks.mjs.map +0 -1
  852. package/dist/client/hooks/use-action.mjs.map +0 -1
  853. package/dist/client/hooks/use-admin-config.mjs.map +0 -1
  854. package/dist/client/hooks/use-admin-preferences.mjs.map +0 -1
  855. package/dist/client/hooks/use-admin-routes.mjs.map +0 -1
  856. package/dist/client/hooks/use-auth.d.mts.map +0 -1
  857. package/dist/client/hooks/use-auth.mjs.map +0 -1
  858. package/dist/client/hooks/use-collection-fields.mjs.map +0 -1
  859. package/dist/client/hooks/use-collection-meta.mjs.map +0 -1
  860. package/dist/client/hooks/use-collection-schema.mjs.map +0 -1
  861. package/dist/client/hooks/use-collection-validation.mjs.map +0 -1
  862. package/dist/client/hooks/use-collection.d.mts.map +0 -1
  863. package/dist/client/hooks/use-collection.mjs.map +0 -1
  864. package/dist/client/hooks/use-current-user.d.mts.map +0 -1
  865. package/dist/client/hooks/use-current-user.mjs.map +0 -1
  866. package/dist/client/hooks/use-field-hooks.mjs.map +0 -1
  867. package/dist/client/hooks/use-field-options.d.mts.map +0 -1
  868. package/dist/client/hooks/use-field-options.mjs.map +0 -1
  869. package/dist/client/hooks/use-global-fields.mjs.map +0 -1
  870. package/dist/client/hooks/use-global-meta.mjs.map +0 -1
  871. package/dist/client/hooks/use-global-schema.mjs.map +0 -1
  872. package/dist/client/hooks/use-global.d.mts.map +0 -1
  873. package/dist/client/hooks/use-global.mjs.map +0 -1
  874. package/dist/client/hooks/use-locks.mjs.map +0 -1
  875. package/dist/client/hooks/use-media-query.d.mts.map +0 -1
  876. package/dist/client/hooks/use-media-query.mjs.map +0 -1
  877. package/dist/client/hooks/use-prefill-params.mjs.map +0 -1
  878. package/dist/client/hooks/use-questpie-query-options.mjs.map +0 -1
  879. package/dist/client/hooks/use-reactive-fields.d.mts.map +0 -1
  880. package/dist/client/hooks/use-reactive-fields.mjs.map +0 -1
  881. package/dist/client/hooks/use-realtime-highlight.mjs.map +0 -1
  882. package/dist/client/hooks/use-saved-views.mjs.map +0 -1
  883. package/dist/client/hooks/use-search.mjs.map +0 -1
  884. package/dist/client/hooks/use-server-validation.mjs.map +0 -1
  885. package/dist/client/hooks/use-server-widget-data.d.mts.map +0 -1
  886. package/dist/client/hooks/use-server-widget-data.mjs.map +0 -1
  887. package/dist/client/hooks/use-setup-status.d.mts.map +0 -1
  888. package/dist/client/hooks/use-setup-status.mjs.map +0 -1
  889. package/dist/client/hooks/use-upload-collection.mjs.map +0 -1
  890. package/dist/client/hooks/use-upload.d.mts +0 -23
  891. package/dist/client/hooks/use-upload.d.mts.map +0 -1
  892. package/dist/client/hooks/use-upload.mjs.map +0 -1
  893. package/dist/client/hooks/use-validation-error-map.mjs.map +0 -1
  894. package/dist/client/hooks/use-view-state.mjs.map +0 -1
  895. package/dist/client/i18n/hooks.mjs.map +0 -1
  896. package/dist/client/i18n/intl-cache.mjs.map +0 -1
  897. package/dist/client/i18n/messages.mjs.map +0 -1
  898. package/dist/client/i18n/simple.d.mts.map +0 -1
  899. package/dist/client/i18n/simple.mjs.map +0 -1
  900. package/dist/client/i18n/types.d.mts.map +0 -1
  901. package/dist/client/lib/utils.d.mts +0 -1
  902. package/dist/client/lib/utils.mjs.map +0 -1
  903. package/dist/client/preview/block-scope-context.d.mts.map +0 -1
  904. package/dist/client/preview/block-scope-context.mjs.map +0 -1
  905. package/dist/client/preview/preview-banner.d.mts.map +0 -1
  906. package/dist/client/preview/preview-banner.mjs.map +0 -1
  907. package/dist/client/preview/preview-field.d.mts.map +0 -1
  908. package/dist/client/preview/preview-field.mjs.map +0 -1
  909. package/dist/client/preview/types.d.mts.map +0 -1
  910. package/dist/client/preview/types.mjs.map +0 -1
  911. package/dist/client/preview/use-collection-preview.d.mts.map +0 -1
  912. package/dist/client/preview/use-collection-preview.mjs.map +0 -1
  913. package/dist/client/runtime/content-locales-provider.mjs.map +0 -1
  914. package/dist/client/runtime/locale-scope.mjs.map +0 -1
  915. package/dist/client/runtime/provider.d.mts.map +0 -1
  916. package/dist/client/runtime/provider.mjs.map +0 -1
  917. package/dist/client/runtime/routes.d.mts.map +0 -1
  918. package/dist/client/runtime/routes.mjs.map +0 -1
  919. package/dist/client/runtime/translations-provider.d.mts +0 -2
  920. package/dist/client/runtime/translations-provider.mjs.map +0 -1
  921. package/dist/client/scope/picker.d.mts.map +0 -1
  922. package/dist/client/scope/picker.mjs.map +0 -1
  923. package/dist/client/scope/provider.d.mts.map +0 -1
  924. package/dist/client/scope/provider.mjs.map +0 -1
  925. package/dist/client/scope/types.d.mts.map +0 -1
  926. package/dist/client/utils/auto-expand-fields.mjs.map +0 -1
  927. package/dist/client/utils/build-field-definitions-from-schema.mjs.map +0 -1
  928. package/dist/client/utils/detect-relations.mjs.map +0 -1
  929. package/dist/client/utils/locale-to-flag.d.mts.map +0 -1
  930. package/dist/client/utils/locale-to-flag.mjs.map +0 -1
  931. package/dist/client/utils/routes.mjs.map +0 -1
  932. package/dist/client/views/auth/accept-invite-form.d.mts.map +0 -1
  933. package/dist/client/views/auth/accept-invite-form.mjs.map +0 -1
  934. package/dist/client/views/auth/auth-layout.d.mts.map +0 -1
  935. package/dist/client/views/auth/auth-layout.mjs.map +0 -1
  936. package/dist/client/views/auth/forgot-password-form.d.mts.map +0 -1
  937. package/dist/client/views/auth/forgot-password-form.mjs.map +0 -1
  938. package/dist/client/views/auth/index.d.mts +0 -7
  939. package/dist/client/views/auth/invite-form.d.mts +0 -1
  940. package/dist/client/views/auth/invite-form.mjs.map +0 -1
  941. package/dist/client/views/auth/login-form.d.mts.map +0 -1
  942. package/dist/client/views/auth/login-form.mjs.map +0 -1
  943. package/dist/client/views/auth/reset-password-form.d.mts.map +0 -1
  944. package/dist/client/views/auth/reset-password-form.mjs.map +0 -1
  945. package/dist/client/views/auth/setup-form.d.mts.map +0 -1
  946. package/dist/client/views/auth/setup-form.mjs.map +0 -1
  947. package/dist/client/views/collection/auto-form-fields.d.mts +0 -4
  948. package/dist/client/views/collection/auto-form-fields.mjs.map +0 -1
  949. package/dist/client/views/collection/bulk-action-toolbar.mjs.map +0 -1
  950. package/dist/client/views/collection/cells/complex-cells.d.mts +0 -46
  951. package/dist/client/views/collection/cells/complex-cells.d.mts.map +0 -1
  952. package/dist/client/views/collection/cells/complex-cells.mjs.map +0 -1
  953. package/dist/client/views/collection/cells/index.d.mts +0 -7
  954. package/dist/client/views/collection/cells/primitive-cells.d.mts +0 -76
  955. package/dist/client/views/collection/cells/primitive-cells.d.mts.map +0 -1
  956. package/dist/client/views/collection/cells/primitive-cells.mjs.map +0 -1
  957. package/dist/client/views/collection/cells/relation-cells.d.mts +0 -21
  958. package/dist/client/views/collection/cells/relation-cells.d.mts.map +0 -1
  959. package/dist/client/views/collection/cells/relation-cells.mjs.map +0 -1
  960. package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +0 -1
  961. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +0 -1
  962. package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +0 -2
  963. package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +0 -1
  964. package/dist/client/views/collection/cells/shared/relation-chip.d.mts +0 -1
  965. package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +0 -1
  966. package/dist/client/views/collection/cells/upload-cells.d.mts +0 -25
  967. package/dist/client/views/collection/cells/upload-cells.d.mts.map +0 -1
  968. package/dist/client/views/collection/cells/upload-cells.mjs.map +0 -1
  969. package/dist/client/views/collection/columns/build-columns.d.mts +0 -2
  970. package/dist/client/views/collection/columns/build-columns.mjs.map +0 -1
  971. package/dist/client/views/collection/columns/column-defaults.d.mts +0 -2
  972. package/dist/client/views/collection/columns/column-defaults.mjs.map +0 -1
  973. package/dist/client/views/collection/columns/index.d.mts +0 -3
  974. package/dist/client/views/collection/columns/types.d.mts +0 -2
  975. package/dist/client/views/collection/field-context.mjs.map +0 -1
  976. package/dist/client/views/collection/field-renderer.mjs.map +0 -1
  977. package/dist/client/views/collection/form-view.d.mts +0 -112
  978. package/dist/client/views/collection/form-view.d.mts.map +0 -1
  979. package/dist/client/views/collection/form-view.mjs.map +0 -1
  980. package/dist/client/views/collection/index.d.mts +0 -9
  981. package/dist/client/views/collection/table-view.d.mts +0 -102
  982. package/dist/client/views/collection/table-view.d.mts.map +0 -1
  983. package/dist/client/views/collection/table-view.mjs.map +0 -1
  984. package/dist/client/views/collection/view-skeletons.mjs.map +0 -1
  985. package/dist/client/views/common/global-search.d.mts +0 -1
  986. package/dist/client/views/common/global-search.mjs.map +0 -1
  987. package/dist/client/views/common/index.d.mts +0 -1
  988. package/dist/client/views/dashboard/dashboard-grid.mjs.map +0 -1
  989. package/dist/client/views/dashboard/dashboard-widget.mjs.map +0 -1
  990. package/dist/client/views/dashboard/widget-card.mjs.map +0 -1
  991. package/dist/client/views/globals/global-form-view.d.mts +0 -74
  992. package/dist/client/views/globals/global-form-view.d.mts.map +0 -1
  993. package/dist/client/views/globals/global-form-view.mjs.map +0 -1
  994. package/dist/client/views/index.d.mts +0 -28
  995. package/dist/client/views/layout/admin-layout-provider.d.mts.map +0 -1
  996. package/dist/client/views/layout/admin-layout-provider.mjs.map +0 -1
  997. package/dist/client/views/layout/admin-layout.d.mts.map +0 -1
  998. package/dist/client/views/layout/admin-layout.mjs.map +0 -1
  999. package/dist/client/views/layout/admin-root.d.mts +0 -7
  1000. package/dist/client/views/layout/admin-router.d.mts.map +0 -1
  1001. package/dist/client/views/layout/admin-router.mjs.map +0 -1
  1002. package/dist/client/views/layout/admin-sidebar.d.mts.map +0 -1
  1003. package/dist/client/views/layout/admin-sidebar.mjs.map +0 -1
  1004. package/dist/client/views/layout/admin-topbar.mjs.map +0 -1
  1005. package/dist/client/views/layout/index.d.mts +0 -5
  1006. package/dist/client/views/pages/accept-invite-page.d.mts.map +0 -1
  1007. package/dist/client/views/pages/accept-invite-page.mjs.map +0 -1
  1008. package/dist/client/views/pages/dashboard-page.d.mts.map +0 -1
  1009. package/dist/client/views/pages/dashboard-page.mjs.map +0 -1
  1010. package/dist/client/views/pages/forgot-password-page.d.mts.map +0 -1
  1011. package/dist/client/views/pages/forgot-password-page.mjs.map +0 -1
  1012. package/dist/client/views/pages/index.d.mts +0 -7
  1013. package/dist/client/views/pages/invite-page.d.mts.map +0 -1
  1014. package/dist/client/views/pages/invite-page.mjs.map +0 -1
  1015. package/dist/client/views/pages/login-page.d.mts.map +0 -1
  1016. package/dist/client/views/pages/login-page.mjs.map +0 -1
  1017. package/dist/client/views/pages/reset-password-page.d.mts.map +0 -1
  1018. package/dist/client/views/pages/reset-password-page.mjs.map +0 -1
  1019. package/dist/client/views/pages/setup-page.d.mts.map +0 -1
  1020. package/dist/client/views/pages/setup-page.mjs.map +0 -1
  1021. package/dist/client.d.mts.map +0 -1
  1022. package/dist/components/rich-text/rich-text-renderer.d.mts.map +0 -1
  1023. package/dist/components/rich-text/rich-text-renderer.mjs.map +0 -1
  1024. package/dist/server/adapters/nextjs.d.mts.map +0 -1
  1025. package/dist/server/adapters/nextjs.mjs.map +0 -1
  1026. package/dist/server/adapters/tanstack.d.mts.map +0 -1
  1027. package/dist/server/adapters/tanstack.mjs.map +0 -1
  1028. package/dist/server/augmentation.d.mts.map +0 -1
  1029. package/dist/server/auth-helpers.d.mts.map +0 -1
  1030. package/dist/server/auth-helpers.mjs.map +0 -1
  1031. package/dist/server/block/block-builder.d.mts.map +0 -1
  1032. package/dist/server/block/block-builder.mjs.map +0 -1
  1033. package/dist/server/block/introspection.d.mts.map +0 -1
  1034. package/dist/server/block/introspection.mjs.map +0 -1
  1035. package/dist/server/block/prefetch.d.mts.map +0 -1
  1036. package/dist/server/block/prefetch.mjs.map +0 -1
  1037. package/dist/server/fields/blocks.d.mts.map +0 -1
  1038. package/dist/server/fields/blocks.mjs.map +0 -1
  1039. package/dist/server/fields/index.d.mts.map +0 -1
  1040. package/dist/server/fields/index.mjs.map +0 -1
  1041. package/dist/server/fields/rich-text.d.mts.map +0 -1
  1042. package/dist/server/fields/rich-text.mjs.map +0 -1
  1043. package/dist/server/i18n/index.d.mts +0 -16
  1044. package/dist/server/i18n/index.d.mts.map +0 -1
  1045. package/dist/server/i18n/index.mjs.map +0 -1
  1046. package/dist/server/i18n/messages/cs.mjs.map +0 -1
  1047. package/dist/server/i18n/messages/de.mjs.map +0 -1
  1048. package/dist/server/i18n/messages/en.mjs.map +0 -1
  1049. package/dist/server/i18n/messages/es.mjs.map +0 -1
  1050. package/dist/server/i18n/messages/fr.mjs.map +0 -1
  1051. package/dist/server/i18n/messages/index.mjs.map +0 -1
  1052. package/dist/server/i18n/messages/pl.mjs.map +0 -1
  1053. package/dist/server/i18n/messages/pt.mjs.map +0 -1
  1054. package/dist/server/i18n/messages/sk.mjs.map +0 -1
  1055. package/dist/server/index.d.mts +0 -20
  1056. package/dist/server/modules/admin/functions/admin-config.mjs +0 -348
  1057. package/dist/server/modules/admin/functions/admin-config.mjs.map +0 -1
  1058. package/dist/server/modules/admin/functions/execute-action.d.mts.map +0 -1
  1059. package/dist/server/modules/admin/functions/execute-action.mjs.map +0 -1
  1060. package/dist/server/modules/admin/functions/locales.mjs +0 -80
  1061. package/dist/server/modules/admin/functions/locales.mjs.map +0 -1
  1062. package/dist/server/modules/admin/functions/preview.d.mts.map +0 -1
  1063. package/dist/server/modules/admin/functions/preview.mjs.map +0 -1
  1064. package/dist/server/modules/admin/functions/reactive.d.mts.map +0 -1
  1065. package/dist/server/modules/admin/functions/reactive.mjs.map +0 -1
  1066. package/dist/server/modules/admin/functions/setup.d.mts.map +0 -1
  1067. package/dist/server/modules/admin/functions/setup.mjs +0 -131
  1068. package/dist/server/modules/admin/functions/setup.mjs.map +0 -1
  1069. package/dist/server/modules/admin/functions/translations.mjs +0 -125
  1070. package/dist/server/modules/admin/functions/translations.mjs.map +0 -1
  1071. package/dist/server/modules/admin/functions/widget-data.d.mts +0 -33
  1072. package/dist/server/modules/admin/functions/widget-data.d.mts.map +0 -1
  1073. package/dist/server/modules/admin/functions/widget-data.mjs +0 -70
  1074. package/dist/server/modules/admin/functions/widget-data.mjs.map +0 -1
  1075. package/dist/server/modules/admin/index.d.mts.map +0 -1
  1076. package/dist/server/modules/admin/index.mjs.map +0 -1
  1077. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +0 -3
  1078. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +0 -1
  1079. package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +0 -3
  1080. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +0 -1
  1081. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +0 -1490
  1082. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +0 -1
  1083. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +0 -57
  1084. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +0 -1
  1085. package/dist/server/patch.d.mts +0 -100
  1086. package/dist/server/patch.d.mts.map +0 -1
  1087. package/dist/server/patch.mjs +0 -1062
  1088. package/dist/server/patch.mjs.map +0 -1
  1089. package/dist/shared/preview-utils.d.mts.map +0 -1
  1090. package/dist/shared/preview-utils.mjs.map +0 -1
  1091. package/dist/shared/types/saved-views.types.d.mts.map +0 -1
@@ -1,84 +0,0 @@
1
- import { BaseFieldProps } from "./field-types.mjs";
2
- import * as React$1 from "react";
3
- import * as react_jsx_runtime210 from "react/jsx-runtime";
4
-
5
- //#region src/client/components/fields/json-field.d.ts
6
-
7
- type JsonFieldMode = "code" | "form";
8
- type JsonFieldProps = BaseFieldProps & {
9
- /**
10
- * Is the field readonly
11
- */
12
- readOnly?: boolean;
13
- /**
14
- * Initial editing mode
15
- * @default "code"
16
- */
17
- defaultMode?: JsonFieldMode;
18
- /**
19
- * Allow switching between modes
20
- * @default true
21
- */
22
- allowModeSwitch?: boolean;
23
- /**
24
- * Minimum height for the editor
25
- * @default 200
26
- */
27
- minHeight?: number;
28
- /**
29
- * Maximum height for the editor (0 = no limit)
30
- * @default 400
31
- */
32
- maxHeight?: number;
33
- /**
34
- * Custom render function for form mode
35
- * Receives current value and onChange handler
36
- */
37
- renderForm?: (props: {
38
- value: any;
39
- onChange: (value: any) => void;
40
- disabled?: boolean;
41
- readOnly?: boolean;
42
- }) => React$1.ReactNode;
43
- };
44
- /**
45
- * JSON field with code editor and optional form mode.
46
- *
47
- * @example
48
- * ```tsx
49
- * // Basic JSON editor
50
- * <JsonField
51
- * name="metadata"
52
- * label="Metadata"
53
- * description="Additional metadata as JSON"
54
- * />
55
- *
56
- * // With custom form mode
57
- * <JsonField
58
- * name="settings"
59
- * label="Settings"
60
- * renderForm={({ value, onChange }) => (
61
- * <SettingsForm value={value} onChange={onChange} />
62
- * )}
63
- * />
64
- * ```
65
- */
66
- declare function JsonField({
67
- name,
68
- label,
69
- description,
70
- required,
71
- disabled,
72
- readOnly,
73
- placeholder,
74
- defaultMode,
75
- allowModeSwitch,
76
- minHeight,
77
- maxHeight,
78
- renderForm,
79
- control: controlProp,
80
- className
81
- }: JsonFieldProps): react_jsx_runtime210.JSX.Element | null;
82
- //#endregion
83
- export { JsonField, JsonFieldMode, JsonFieldProps };
84
- //# sourceMappingURL=json-field.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/json-field.tsx"],"sourcesContent":[],"mappings":";;;;;;AA4FgB,KAlEJ,aAAA,GAkEa,MAAA,GAAA,MAAA;AACvB,KAjEU,cAAA,GAAiB,cAiE3B,GAAA;EACA;;;EAGA,QAAA,CAAA,EAAA,OAAA;EACA;;;;EAIA,WAAA,CAAA,EAhEc,aAgEd;EACA;;;;EAIC,eAAA,CAAA,EAAA,OAAA;EAAc;;;;;;;;;;;;;;;;;;;QAxCT,OAAA,CAAM;;;;;;;;;;;;;;;;;;;;;;;;iBAyBE,SAAA;;;;;;;;;;;;;WAaL;;GAER,iBAAc,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/json-field.tsx"],"sourcesContent":["/**\n * JsonField Component\n *\n * JSON field with two editing modes:\n * - \"code\" - Raw JSON editing with syntax highlighting\n * - \"form\" - Structured form editing (if schema provided)\n *\n * Integrates with react-hook-form via Controller.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport { Textarea } from \"../ui/textarea\";\nimport type { BaseFieldProps } from \"./field-types\";\n\nexport type JsonFieldMode = \"code\" | \"form\";\n\nexport type JsonFieldProps = BaseFieldProps & {\n /**\n * Is the field readonly\n */\n readOnly?: boolean;\n\n /**\n * Initial editing mode\n * @default \"code\"\n */\n defaultMode?: JsonFieldMode;\n\n /**\n * Allow switching between modes\n * @default true\n */\n allowModeSwitch?: boolean;\n\n /**\n * Minimum height for the editor\n * @default 200\n */\n minHeight?: number;\n\n /**\n * Maximum height for the editor (0 = no limit)\n * @default 400\n */\n maxHeight?: number;\n\n /**\n * Custom render function for form mode\n * Receives current value and onChange handler\n */\n renderForm?: (props: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n }) => React.ReactNode;\n};\n\n/**\n * JSON field with code editor and optional form mode.\n *\n * @example\n * ```tsx\n * // Basic JSON editor\n * <JsonField\n * name=\"metadata\"\n * label=\"Metadata\"\n * description=\"Additional metadata as JSON\"\n * />\n *\n * // With custom form mode\n * <JsonField\n * name=\"settings\"\n * label=\"Settings\"\n * renderForm={({ value, onChange }) => (\n * <SettingsForm value={value} onChange={onChange} />\n * )}\n * />\n * ```\n */\nexport function JsonField({\n name,\n label,\n description,\n required,\n disabled,\n readOnly,\n placeholder = '{\\n \"key\": \"value\"\\n}',\n defaultMode = \"code\",\n allowModeSwitch = true,\n minHeight = 200,\n maxHeight = 400,\n renderForm,\n control: controlProp,\n className,\n}: JsonFieldProps) {\n const resolveText = useResolveText();\n const resolvedLabel = label ? resolveText(label) : undefined;\n const resolvedDescription = description\n ? resolveText(description)\n : undefined;\n const formContext = useFormContext();\n const control = controlProp ?? formContext?.control;\n const [mode, setMode] = React.useState<JsonFieldMode>(defaultMode);\n\n if (!control) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"JsonField: No form control found. Make sure to use within FormProvider or pass control prop.\",\n );\n }\n return null;\n }\n\n // Only show mode switch if form rendering is available\n const showModeSwitch = allowModeSwitch && renderForm;\n\n return (\n <Controller\n name={name}\n control={control}\n rules={{\n required: required ? `${resolvedLabel || name} is required` : undefined,\n validate: (value) => {\n if (!value) return true;\n // In code mode, validate JSON\n if (mode === \"code\" && typeof value === \"string\") {\n try {\n JSON.parse(value);\n return true;\n } catch {\n return \"Invalid JSON format\";\n }\n }\n return true;\n },\n }}\n render={({ field, fieldState }) => {\n const error = fieldState.error?.message;\n\n return (\n <Field data-invalid={!!error} className={className}>\n {/* Header with label and mode switch */}\n <div className=\"flex items-center justify-between\">\n {resolvedLabel && (\n <FieldLabel htmlFor={name}>\n {resolvedLabel}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n\n {showModeSwitch && (\n <div className=\"flex gap-1\">\n <Button\n type=\"button\"\n variant={mode === \"code\" ? \"secondary\" : \"ghost\"}\n size=\"icon-xs\"\n onClick={() => setMode(\"code\")}\n disabled={disabled}\n title=\"Code editor\"\n >\n <Icon icon=\"ph:code-bold\" />\n </Button>\n <Button\n type=\"button\"\n variant={mode === \"form\" ? \"secondary\" : \"ghost\"}\n size=\"icon-xs\"\n onClick={() => setMode(\"form\")}\n disabled={disabled}\n title=\"Form editor\"\n >\n <Icon icon=\"ph:list-bullets-bold\" />\n </Button>\n </div>\n )}\n </div>\n\n <FieldContent>\n {mode === \"code\" ? (\n <JsonCodeEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n minHeight={minHeight}\n maxHeight={maxHeight}\n error={!!error}\n />\n ) : renderForm ? (\n <JsonFormEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n renderForm={renderForm}\n />\n ) : (\n <JsonCodeEditor\n value={field.value}\n onChange={field.onChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n minHeight={minHeight}\n maxHeight={maxHeight}\n error={!!error}\n />\n )}\n\n {resolvedDescription && !error && (\n <FieldDescription>{resolvedDescription}</FieldDescription>\n )}\n <FieldError>{error}</FieldError>\n </FieldContent>\n </Field>\n );\n }}\n />\n );\n}\n\n/**\n * Code editor for JSON (using Textarea for simplicity)\n * Can be replaced with Monaco/CodeMirror in the future\n */\nfunction JsonCodeEditor({\n value,\n onChange,\n disabled,\n readOnly,\n placeholder,\n minHeight,\n maxHeight,\n error,\n}: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n maxHeight?: number;\n error?: boolean;\n}) {\n const [localValue, setLocalValue] = React.useState<string>(() => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"\";\n }\n });\n const [parseError, setParseError] = React.useState<string | null>(null);\n\n // Sync local value when external value changes\n React.useEffect(() => {\n if (typeof value === \"string\") {\n setLocalValue(value);\n } else if (value !== null && value !== undefined) {\n try {\n setLocalValue(JSON.stringify(value, null, 2));\n } catch {\n // Keep current local value if stringification fails\n }\n } else {\n setLocalValue(\"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n // Try to parse and update form value\n if (!newValue.trim()) {\n setParseError(null);\n onChange(null);\n return;\n }\n\n try {\n const parsed = JSON.parse(newValue);\n setParseError(null);\n onChange(parsed);\n } catch (err) {\n setParseError(\"Invalid JSON\");\n // Still update with raw string so validation can catch it\n onChange(newValue);\n }\n };\n\n const handleFormat = () => {\n try {\n const parsed = JSON.parse(localValue);\n const formatted = JSON.stringify(parsed, null, 2);\n setLocalValue(formatted);\n setParseError(null);\n onChange(parsed);\n } catch {\n // Can't format invalid JSON\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"relative\">\n <Textarea\n value={localValue}\n onChange={handleChange}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n className={cn(\n \"font-mono text-xs\",\n error || parseError ? \"border-destructive\" : \"\",\n )}\n style={{\n minHeight: `${minHeight}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n resize: maxHeight ? \"none\" : \"vertical\",\n }}\n aria-invalid={!!error || !!parseError}\n />\n\n {/* Parse error indicator */}\n {parseError && (\n <div className=\"text-destructive absolute right-2 top-2 flex items-center gap-1 text-xs\">\n <Icon icon=\"ph:warning-circle-fill\" className=\"size-3\" />\n {parseError}\n </div>\n )}\n </div>\n\n {/* Format button */}\n {!readOnly && !disabled && localValue && (\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleFormat}\n disabled={!!parseError}\n >\n Format JSON\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Form-based editor wrapper\n */\nfunction JsonFormEditor({\n value,\n onChange,\n disabled,\n readOnly,\n renderForm,\n}: {\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n readOnly?: boolean;\n renderForm: JsonFieldProps[\"renderForm\"];\n}) {\n // Ensure value is an object for form mode\n const safeValue = React.useMemo(() => {\n if (typeof value === \"object\" && value !== null) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return {};\n }\n }\n return {};\n }, [value]);\n\n if (!renderForm) return null;\n\n return (\n <div className=\"rounded-lg border p-4\">\n {renderForm({\n value: safeValue,\n onChange,\n disabled,\n readOnly,\n })}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"locale-badge.mjs","names":[],"sources":["../../../../src/client/components/fields/locale-badge.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Badge } from \"../ui/badge\";\n\ntype LocaleBadgeProps = {\n locale?: string;\n};\n\nexport function LocaleBadge({ locale }: LocaleBadgeProps) {\n if (!locale) return null;\n return (\n <Badge variant=\"secondary\" className=\"uppercase text-[10px] tracking-wide\">\n {locale}\n </Badge>\n );\n}\n"],"mappings":";;;;;AAOA,SAAgB,YAAY,EAAE,UAA4B;AACxD,KAAI,CAAC,OAAQ,QAAO;AACpB,QACE,oBAAC;EAAM,SAAQ;EAAY,WAAU;YAClC;GACK"}
@@ -1,23 +0,0 @@
1
- import { NumberFieldProps } from "./field-types.mjs";
2
- import * as react_jsx_runtime209 from "react/jsx-runtime";
3
-
4
- //#region src/client/components/fields/number-field.d.ts
5
- declare function NumberField({
6
- name,
7
- label,
8
- description,
9
- placeholder,
10
- required,
11
- disabled,
12
- localized,
13
- locale,
14
- control,
15
- className,
16
- min,
17
- max,
18
- step,
19
- showButtons
20
- }: NumberFieldProps): react_jsx_runtime209.JSX.Element;
21
- //#endregion
22
- export { NumberField };
23
- //# sourceMappingURL=number-field.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/number-field.tsx"],"sourcesContent":[],"mappings":";;;;iBAMgB,WAAA;;;;;;;;;;;;;;;GAeb,mBAAgB,oBAAA,CAAA,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-field.mjs","names":[],"sources":["../../../../src/client/components/fields/number-field.tsx"],"sourcesContent":["import { Controller } from \"react-hook-form\";\nimport { NumberInput } from \"../primitives/number-input\";\nimport type { NumberFieldProps } from \"./field-types\";\nimport { useResolvedControl } from \"./field-utils\";\nimport { FieldWrapper } from \"./field-wrapper\";\n\nexport function NumberField({\n name,\n label,\n description,\n placeholder,\n required,\n disabled,\n localized,\n locale,\n control,\n className,\n min,\n max,\n step,\n showButtons,\n}: NumberFieldProps) {\n const resolvedControl = useResolvedControl(control);\n\n return (\n <Controller\n name={name}\n control={resolvedControl}\n render={({ field, fieldState }) => (\n <FieldWrapper\n name={name}\n label={label}\n description={description}\n required={required}\n disabled={disabled}\n localized={localized}\n locale={locale}\n error={fieldState.error?.message}\n >\n <NumberInput\n id={name}\n value={field.value ?? null}\n onChange={field.onChange}\n placeholder={placeholder}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n showButtons={showButtons}\n aria-invalid={!!fieldState.error}\n className={className}\n />\n </FieldWrapper>\n )}\n />\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,YAAY,EAC1B,MACA,OACA,aACA,aACA,UACA,UACA,WACA,QACA,SACA,WACA,KACA,KACA,MACA,eACmB;AAGnB,QACE,oBAAC;EACO;EACN,SALoB,mBAAmB,QAAQ;EAM/C,SAAS,EAAE,OAAO,iBAChB,oBAAC;GACO;GACC;GACM;GACH;GACA;GACC;GACH;GACR,OAAO,WAAW,OAAO;aAEzB,oBAAC;IACC,IAAI;IACJ,OAAO,MAAM,SAAS;IACtB,UAAU,MAAM;IACH;IACH;IACL;IACA;IACC;IACO;IACb,gBAAc,CAAC,CAAC,WAAW;IAChB;KACX;IACW;GAEjB"}
@@ -1,2 +0,0 @@
1
- import "./field-types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"object-array-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/object-array-field.tsx"],"sourcesContent":["/**\n * ObjectArrayField Component\n *\n * Manages arrays of objects with inline, modal, or drawer editing.\n * Similar to EmbeddedCollectionField but with inline field definitions.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { useFieldArray, useFormContext, useWatch } from \"react-hook-form\";\nimport type { FieldDefinition } from \"../../builder/field/field\";\nimport { createFieldRegistryProxy } from \"../../builder/proxies\";\nimport { useResolveText, useTranslation } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectAdmin, useAdminStore } from \"../../runtime\";\nimport { Button } from \"../ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n} from \"../ui/dialog\";\nimport {\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n} from \"../ui/sheet\";\nimport type { ArrayFieldConfig, BaseFieldProps } from \"./field-types\";\nimport { gridColumnClasses } from \"./field-utils\";\nimport { LocaleBadge } from \"./locale-badge\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ObjectArrayFieldProps\n\textends BaseFieldProps,\n\t\tPick<\n\t\t\tArrayFieldConfig,\n\t\t\t| \"item\"\n\t\t\t| \"mode\"\n\t\t\t| \"layout\"\n\t\t\t| \"columns\"\n\t\t\t| \"itemLabel\"\n\t\t\t| \"orderable\"\n\t\t\t| \"minItems\"\n\t\t\t| \"maxItems\"\n\t\t> {}\n\n// ============================================================================\n// Nested Field Renderer (for object items)\n// ============================================================================\n\ninterface ItemFieldRendererProps {\n\tfieldName: string;\n\tfieldDef: FieldDefinition;\n\tparentName: string;\n\tdisabled?: boolean;\n}\n\nfunction ItemFieldRenderer({\n\tfieldName,\n\tfieldDef,\n\tparentName,\n\tdisabled,\n}: ItemFieldRendererProps) {\n\tconst resolveText = useResolveText();\n\tconst fullName = `${parentName}.${fieldName}`;\n\tconst options = fieldDef[\"~options\"] || {};\n\n\t// Get the component from the field definition (registry-based)\n\tconst Component = fieldDef.field?.component as\n\t\t| React.ComponentType<any>\n\t\t| undefined;\n\n\tif (!Component) {\n\t\treturn (\n\t\t\t<div className=\"text-sm text-destructive\">\n\t\t\t\tNo component for field type: {fieldDef.name}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Strip UI-specific options that are handled separately\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder,\n\t\trequired,\n\t\tdisabled: optionsDisabled,\n\t\treadOnly,\n\t\thidden,\n\t\tlocalized,\n\t\tlocale,\n\t\t...fieldSpecificOptions\n\t} = options;\n\n\treturn (\n\t\t<Component\n\t\t\tname={fullName}\n\t\t\tlabel={resolveText(label)}\n\t\t\tdescription={resolveText(description)}\n\t\t\tplaceholder={resolveText(placeholder)}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled || optionsDisabled}\n\t\t\treadOnly={readOnly}\n\t\t\tlocalized={localized}\n\t\t\tlocale={locale}\n\t\t\t{...fieldSpecificOptions}\n\t\t/>\n\t);\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function ObjectArrayField({\n\tname,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\trequired,\n\tdisabled,\n\tlocalized,\n\tlocale,\n\titem: itemProp,\n\tmode = \"inline\",\n\tlayout = \"stack\",\n\tcolumns = 2,\n\titemLabel: itemLabelProp,\n\torderable = false,\n\tminItems,\n\tmaxItems,\n}: ObjectArrayFieldProps) {\n\tconst { t } = useTranslation();\n\tconst resolveText = useResolveText();\n\tconst resolvedPlaceholder = placeholder\n\t\t? resolveText(placeholder)\n\t\t: undefined;\n\tconst resolvedLabel = label ? resolveText(label) : undefined;\n\tconst form = useFormContext();\n\tconst { control } = form;\n\tconst { fields, append, remove, move } = useFieldArray({ control, name });\n\tconst values = useWatch({ control, name }) as any[] | undefined;\n\n\tconst admin = useAdminStore(selectAdmin);\n\tconst [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\tconst [isOpen, setIsOpen] = React.useState(false);\n\n\t// Resolve item field definitions\n\tconst itemFields = React.useMemo(() => {\n\t\tif (!itemProp) return {};\n\n\t\tif (typeof itemProp === \"function\") {\n\t\t\tconst registeredFields = admin.getFields();\n\t\t\tconst r = createFieldRegistryProxy(registeredFields as any);\n\t\t\treturn itemProp({ r });\n\t\t}\n\n\t\treturn itemProp;\n\t}, [itemProp, admin]);\n\n\tconst fieldEntries = Object.entries(itemFields);\n\tconst canAddMore = !maxItems || fields.length < maxItems;\n\tconst canRemove = !minItems || fields.length > minItems;\n\tconst fallbackLabel = resolvedLabel || \"Item\";\n\tconst emptyLabel = t(\"array.empty\", { name: fallbackLabel });\n\tconst addLabel = t(\"array.addItem\", { name: fallbackLabel });\n\n\t// Resolve item label\n\tconst resolveItemLabel = React.useCallback(\n\t\t(item: any, index: number) => {\n\t\t\tif (typeof itemLabelProp === \"function\") {\n\t\t\t\tconst labelValue = itemLabelProp(item, index);\n\t\t\t\tif (labelValue) return labelValue;\n\t\t\t}\n\t\t\tif (typeof itemLabelProp === \"string\") {\n\t\t\t\treturn resolveText(itemLabelProp);\n\t\t\t}\n\t\t\t// Try common label fields\n\t\t\tif (item?.name) return String(item.name);\n\t\t\tif (item?.title) return String(item.title);\n\t\t\tif (item?.label) return String(item.label);\n\t\t\treturn `${fallbackLabel} ${index + 1}`;\n\t\t},\n\t\t[fallbackLabel, itemLabelProp, resolveText],\n\t);\n\n\tconst handleAdd = () => {\n\t\tif (disabled || !canAddMore) return;\n\t\t// Create empty object with keys from field definitions (immutable pattern)\n\t\tconst emptyItem = Object.fromEntries(\n\t\t\tfieldEntries.map(([key]) => [key, undefined]),\n\t\t);\n\t\tappend(emptyItem);\n\t\tif (mode !== \"inline\") {\n\t\t\tsetActiveIndex(fields.length);\n\t\t\tsetIsOpen(true);\n\t\t}\n\t};\n\n\tconst handleRemove = (index: number) => {\n\t\tif (!canRemove) return;\n\t\tremove(index);\n\t\tif (activeIndex === null) return;\n\t\tif (index === activeIndex) {\n\t\t\tsetIsOpen(false);\n\t\t\tsetActiveIndex(null);\n\t\t} else if (index < activeIndex) {\n\t\t\tsetActiveIndex(activeIndex - 1);\n\t\t}\n\t};\n\n\tconst handleMove = (from: number, to: number) => {\n\t\tif (to < 0 || to >= fields.length) return;\n\t\tmove(from, to);\n\t\tif (activeIndex === null) return;\n\t\tif (activeIndex === from) {\n\t\t\tsetActiveIndex(to);\n\t\t} else if (activeIndex === to) {\n\t\t\tsetActiveIndex(from);\n\t\t}\n\t};\n\n\tconst handleOpenChange = (open: boolean) => {\n\t\tsetIsOpen(open);\n\t\tif (!open) {\n\t\t\tsetActiveIndex(null);\n\t\t}\n\t};\n\n\t// Render fields for an item at given index\n\tconst renderItemFields = (index: number) => {\n\t\tif (fieldEntries.length === 0) {\n\t\t\treturn (\n\t\t\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\tNo fields configured for items.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tconst fieldElements = fieldEntries.map(([fieldName, fieldDef]) => (\n\t\t\t<ItemFieldRenderer\n\t\t\t\tkey={fieldName}\n\t\t\t\tfieldName={fieldName}\n\t\t\t\tfieldDef={fieldDef as FieldDefinition}\n\t\t\t\tparentName={`${name}.${index}`}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>\n\t\t));\n\n\t\tif (layout === \"inline\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-wrap items-end gap-2\">{fieldElements}</div>\n\t\t\t);\n\t\t}\n\n\t\tif (layout === \"grid\") {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"grid gap-4\",\n\t\t\t\t\t\tgridColumnClasses[columns] || \"grid-cols-2\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fieldElements}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// Default: stack\n\t\treturn <div className=\"space-y-4\">{fieldElements}</div>;\n\t};\n\n\tconst emptyState = (\n\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t{resolvedPlaceholder || emptyLabel}\n\t\t\t</p>\n\t\t</div>\n\t);\n\n\tconst editorContent =\n\t\tactiveIndex !== null ? renderItemFields(activeIndex) : null;\n\tconst editorTitle =\n\t\tactiveIndex !== null\n\t\t\t? resolveItemLabel(values?.[activeIndex], activeIndex)\n\t\t\t: fallbackLabel;\n\n\tconst showEditor = mode === \"modal\" || mode === \"drawer\";\n\n\treturn (\n\t\t<div className=\"space-y-2\">\n\t\t\t{label && (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<label htmlFor={name} className=\"text-sm font-medium\">\n\t\t\t\t\t\t{resolvedLabel}\n\t\t\t\t\t\t{required && <span className=\"text-destructive\">*</span>}\n\t\t\t\t\t\t{maxItems && (\n\t\t\t\t\t\t\t<span className=\"ml-2 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t({fields.length}/{maxItems})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</label>\n\t\t\t\t\t{localized && <LocaleBadge locale={locale || \"i18n\"} />}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{description && (\n\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t{resolveText(description)}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t<div className=\"space-y-3\">\n\t\t\t\t{fields.length === 0\n\t\t\t\t\t? emptyState\n\t\t\t\t\t: fields.map((field, index) => {\n\t\t\t\t\t\t\tconst itemValue = values?.[index];\n\t\t\t\t\t\t\tconst itemLabel = resolveItemLabel(itemValue, index);\n\t\t\t\t\t\t\tconst canMoveUp = orderable && index > 0;\n\t\t\t\t\t\t\tconst canMoveDown = orderable && index < fields.length - 1;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between border-b px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t#{index + 1}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium\">{itemLabel}</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{orderable && (\n\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleMove(index, index - 1)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canMoveUp || disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Move up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Move item up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:caret-up\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleMove(index, index + 1)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canMoveDown || disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Move down\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Move item down\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:caret-down\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{mode !== \"inline\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(true);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={t(\"common.edit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t(\"common.edit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{canRemove && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleRemove(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={t(\"common.remove\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t(\"common.remove\")}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:trash\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{mode === \"inline\" && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"p-3\">{renderItemFields(index)}</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{canAddMore && (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tonClick={handleAdd}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<Icon icon=\"ph:plus\" className=\"h-4 w-4\" />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t{showEditor && mode === \"modal\" && (\n\t\t\t\t<Dialog open={isOpen} onOpenChange={handleOpenChange}>\n\t\t\t\t\t<DialogContent className=\"sm:max-w-2xl\">\n\t\t\t\t\t\t<DialogHeader>\n\t\t\t\t\t\t\t<DialogTitle>{editorTitle}</DialogTitle>\n\t\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\t\t\t\t{resolveText(description)}\n\t\t\t\t\t\t\t\t</DialogDescription>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t\t<div className=\"space-y-4\">{editorContent}</div>\n\t\t\t\t\t</DialogContent>\n\t\t\t\t</Dialog>\n\t\t\t)}\n\n\t\t\t{showEditor && mode === \"drawer\" && (\n\t\t\t\t<Sheet open={isOpen} onOpenChange={handleOpenChange}>\n\t\t\t\t\t<SheetContent side=\"right\" className=\"sm:max-w-lg\">\n\t\t\t\t\t\t<SheetHeader>\n\t\t\t\t\t\t\t<SheetTitle>{editorTitle}</SheetTitle>\n\t\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t\t<SheetDescription>{resolveText(description)}</SheetDescription>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t\t<div className=\"space-y-4 p-4\">{editorContent}</div>\n\t\t\t\t\t</SheetContent>\n\t\t\t\t</Sheet>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { BaseFieldProps, ObjectFieldConfig } from "./field-types.mjs";
2
- import * as react_jsx_runtime216 from "react/jsx-runtime";
3
-
4
- //#region src/client/components/fields/object-field.d.ts
5
-
6
- interface ObjectFieldProps extends BaseFieldProps, Omit<ObjectFieldConfig, "fields"> {
7
- /**
8
- * Nested field definitions.
9
- * Can be a callback (evaluated at render time) or pre-evaluated record.
10
- */
11
- fields?: ((ctx: {
12
- r: any;
13
- }) => Record<string, any>) | Record<string, any>;
14
- }
15
- declare function ObjectField({
16
- name,
17
- label,
18
- description,
19
- required,
20
- disabled,
21
- localized,
22
- locale,
23
- className,
24
- fields: fieldsProp,
25
- wrapper,
26
- layout,
27
- columns,
28
- defaultCollapsed
29
- }: ObjectFieldProps): react_jsx_runtime216.JSX.Element | null;
30
- //#endregion
31
- export { ObjectField, ObjectFieldProps };
32
- //# sourceMappingURL=object-field.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"object-field.d.mts","names":[],"sources":["../../../../src/client/components/fields/object-field.tsx"],"sourcesContent":[],"mappings":";;;;;AA8BuD,UAPtC,gBAAA,SACR,cAM8C,EALrD,IAKqD,CALhD,iBAKgD,EAAA,QAAA,CAAA,CAAA;EAN9C;;;AAgFT;EACC,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA;IACA,CAAA,EAAA,GAAA;EACA,CAAA,EAAA,GA7E+B,MA6E/B,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,GA7EsD,MA6EtD,CAAA,MAAA,EAAA,GAAA,CAAA;;AAEA,iBALe,WAAA,CAKf;EAAA,IAAA;EAAA,KAAA;EAAA,WAAA;EAAA,QAAA;EAAA,QAAA;EAAA,SAAA;EAAA,MAAA;EAAA,SAAA;EAAA,MAAA,EAIQ,UAJR;EAAA,OAAA;EAAA,MAAA;EAAA,OAAA;EAAA;AAAA,CAAA,EASE,gBATF,CAAA,EASkB,oBAAA,CAAA,GAAA,CAAA,OAAA,GATlB,IAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"object-field.mjs","names":["React"],"sources":["../../../../src/client/components/fields/object-field.tsx"],"sourcesContent":["/**\n * ObjectField Component\n *\n * Renders nested fields for JSON object structures.\n * Supports wrapper modes (flat, collapsible) and layout modes (stack, inline, grid).\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\n\nimport type { FieldDefinition } from \"../../builder/field/field\";\nimport { createFieldRegistryProxy } from \"../../builder/proxies\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { selectAdmin, useAdminStore } from \"../../runtime\";\nimport type { BaseFieldProps, ObjectFieldConfig } from \"./field-types\";\nimport { gridColumnClasses } from \"./field-utils\";\nimport { FieldWrapper } from \"./field-wrapper\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ObjectFieldProps\n\textends BaseFieldProps,\n\t\tOmit<ObjectFieldConfig, \"fields\"> {\n\t/**\n\t * Nested field definitions.\n\t * Can be a callback (evaluated at render time) or pre-evaluated record.\n\t */\n\tfields?: ((ctx: { r: any }) => Record<string, any>) | Record<string, any>;\n}\n\n// ============================================================================\n// Nested Field Renderer\n// ============================================================================\n\ninterface NestedFieldRendererProps {\n\tfieldName: string;\n\tfieldDef: FieldDefinition;\n\tparentName: string;\n\tdisabled?: boolean;\n}\n\nfunction NestedFieldRenderer({\n\tfieldName,\n\tfieldDef,\n\tparentName,\n\tdisabled,\n}: NestedFieldRendererProps) {\n\tconst resolveText = useResolveText();\n\tconst fullName = `${parentName}.${fieldName}`;\n\tconst options = fieldDef[\"~options\"] || {};\n\n\t// Get the component from the field definition (registry-based)\n\t// Cast to ComponentType since MaybeLazyComponent includes lazy variants\n\tconst Component = fieldDef.field?.component as\n\t\t| React.ComponentType<any>\n\t\t| undefined;\n\n\tif (!Component) {\n\t\t// Fallback error display if no component found\n\t\treturn (\n\t\t\t<div className=\"text-sm text-destructive\">\n\t\t\t\tNo component for field type: {fieldDef.name}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Strip UI-specific options that are handled by FieldWrapper\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder,\n\t\trequired,\n\t\tdisabled: optionsDisabled,\n\t\treadOnly,\n\t\thidden,\n\t\tlocalized,\n\t\tlocale,\n\t\t...fieldSpecificOptions\n\t} = options;\n\n\t// Render using the component from the field registry\n\treturn (\n\t\t<Component\n\t\t\tname={fullName}\n\t\t\tlabel={resolveText(label)}\n\t\t\tdescription={resolveText(description)}\n\t\t\tplaceholder={resolveText(placeholder)}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled || optionsDisabled}\n\t\t\treadOnly={readOnly}\n\t\t\tlocalized={localized}\n\t\t\tlocale={locale}\n\t\t\t{...fieldSpecificOptions}\n\t\t/>\n\t);\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function ObjectField({\n\tname,\n\tlabel,\n\tdescription,\n\trequired,\n\tdisabled,\n\tlocalized,\n\tlocale,\n\tclassName,\n\tfields: fieldsProp,\n\twrapper = \"flat\",\n\tlayout = \"stack\",\n\tcolumns = 2,\n\tdefaultCollapsed = true,\n}: ObjectFieldProps) {\n\tconst resolveText = useResolveText();\n\tconst admin = useAdminStore(selectAdmin);\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed);\n\n\t// Resolve nested field definitions\n\tconst nestedFields = React.useMemo(() => {\n\t\tif (!fieldsProp) return {};\n\n\t\t// If it's a callback, evaluate it with field registry\n\t\tif (typeof fieldsProp === \"function\") {\n\t\t\tconst registeredFields = admin.getFields();\n\t\t\tconst r = createFieldRegistryProxy(registeredFields as any);\n\t\t\treturn fieldsProp({ r });\n\t\t}\n\n\t\t// Otherwise it's already evaluated\n\t\treturn fieldsProp;\n\t}, [fieldsProp, admin]);\n\n\tconst fieldEntries = Object.entries(nestedFields);\n\n\tif (fieldEntries.length === 0) {\n\t\treturn null;\n\t}\n\n\t// Render nested fields based on layout\n\tconst renderFields = () => {\n\t\tconst fieldElements = fieldEntries.map(([fieldName, fieldDef]) => (\n\t\t\t<NestedFieldRenderer\n\t\t\t\tkey={fieldName}\n\t\t\t\tfieldName={fieldName}\n\t\t\t\tfieldDef={fieldDef as FieldDefinition}\n\t\t\t\tparentName={name}\n\t\t\t\tdisabled={disabled}\n\t\t\t/>\n\t\t));\n\n\t\tif (layout === \"inline\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-wrap items-end gap-2\">{fieldElements}</div>\n\t\t\t);\n\t\t}\n\n\t\tif (layout === \"grid\") {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"grid gap-4\",\n\t\t\t\t\t\tgridColumnClasses[columns] || \"grid-cols-2\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fieldElements}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// Default: stack\n\t\treturn <div className=\"space-y-4\">{fieldElements}</div>;\n\t};\n\n\t// Collapsible wrapper (also support legacy layout=\"collapsible\" for backwards compatibility)\n\tif (wrapper === \"collapsible\" || (layout as string) === \"collapsible\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\tclassName=\"flex w-full items-center justify-between p-3 text-left hover:bg-muted/50\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<Icon icon=\"ph:caret-right\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Icon icon=\"ph:caret-down\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<span className=\"font-medium\">{resolveText(label ?? name)}</span>\n\t\t\t\t\t\t{required && <span className=\"text-destructive\">*</span>}\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t<div className=\"border-t p-4\">\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<p className=\"mb-4 text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t{resolveText(description)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{renderFields()}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Flat wrapper with optional label\n\tif (label) {\n\t\treturn (\n\t\t\t<FieldWrapper\n\t\t\t\tname={name}\n\t\t\t\tlabel={resolveText(label)}\n\t\t\t\tdescription={description}\n\t\t\t\trequired={required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tlocalized={localized}\n\t\t\t\tlocale={locale}\n\t\t\t>\n\t\t\t\t<div className={cn(\"pt-1\", className)}>{renderFields()}</div>\n\t\t\t</FieldWrapper>\n\t\t);\n\t}\n\n\t// No label - just render fields\n\treturn <div className={className}>{renderFields()}</div>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA4CA,SAAS,oBAAoB,EAC5B,WACA,UACA,YACA,YAC4B;CAC5B,MAAM,cAAc,gBAAgB;CACpC,MAAM,WAAW,GAAG,WAAW,GAAG;CAClC,MAAM,UAAU,SAAS,eAAe,EAAE;CAI1C,MAAM,YAAY,SAAS,OAAO;AAIlC,KAAI,CAAC,UAEJ,QACC,qBAAC;EAAI,WAAU;aAA2B,iCACX,SAAS;GAClC;CAKR,MAAM,EACL,OACA,aACA,aACA,UACA,UAAU,iBACV,UACA,QACA,WACA,QACA,GAAG,yBACA;AAGJ,QACC,oBAAC;EACA,MAAM;EACN,OAAO,YAAY,MAAM;EACzB,aAAa,YAAY,YAAY;EACrC,aAAa,YAAY,YAAY;EAC3B;EACV,UAAU,YAAY;EACZ;EACC;EACH;EACR,GAAI;GACH;;AAQJ,SAAgB,YAAY,EAC3B,MACA,OACA,aACA,UACA,UACA,WACA,QACA,WACA,QAAQ,YACR,UAAU,QACV,SAAS,SACT,UAAU,GACV,mBAAmB,QACC;CACpB,MAAM,cAAc,gBAAgB;CACpC,MAAM,QAAQ,cAAc,YAAY;CACxC,MAAM,CAAC,aAAa,kBAAkBA,QAAM,SAAS,iBAAiB;CAGtE,MAAM,eAAeA,QAAM,cAAc;AACxC,MAAI,CAAC,WAAY,QAAO,EAAE;AAG1B,MAAI,OAAO,eAAe,WAGzB,QAAO,WAAW,EAAE,GADV,yBADe,MAAM,WAAW,CACiB,EACpC,CAAC;AAIzB,SAAO;IACL,CAAC,YAAY,MAAM,CAAC;CAEvB,MAAM,eAAe,OAAO,QAAQ,aAAa;AAEjD,KAAI,aAAa,WAAW,EAC3B,QAAO;CAIR,MAAM,qBAAqB;EAC1B,MAAM,gBAAgB,aAAa,KAAK,CAAC,WAAW,cACnD,oBAAC;GAEW;GACD;GACV,YAAY;GACF;KAJL,UAKJ,CACD;AAEF,MAAI,WAAW,SACd,QACC,oBAAC;GAAI,WAAU;aAAkC;IAAoB;AAIvE,MAAI,WAAW,OACd,QACC,oBAAC;GACA,WAAW,GACV,cACA,kBAAkB,YAAY,cAC9B;aAEA;IACI;AAKR,SAAO,oBAAC;GAAI,WAAU;aAAa;IAAoB;;AAIxD,KAAI,YAAY,iBAAkB,WAAsB,cACvD,QACC,qBAAC;EACA,WAAW,GACV,kEACA,UACA;aAED,oBAAC;GACA,MAAK;GACL,eAAe,eAAe,CAAC,YAAY;GAC3C,WAAU;GACA;aAEV,qBAAC;IAAI,WAAU;;KACb,cACA,oBAAC;MAAK,MAAK;MAAiB,WAAU;OAAY,GAElD,oBAAC;MAAK,MAAK;MAAgB,WAAU;OAAY;KAElD,oBAAC;MAAK,WAAU;gBAAe,YAAY,SAAS,KAAK;OAAQ;KAChE,YAAY,oBAAC;MAAK,WAAU;gBAAmB;OAAQ;;KACnD;IACE,EACR,CAAC,eACD,qBAAC;GAAI,WAAU;cACb,eACA,oBAAC;IAAE,WAAU;cACX,YAAY,YAAY;KACtB,EAEJ,cAAc;IACV;GAEF;AAKR,KAAI,MACH,QACC,oBAAC;EACM;EACN,OAAO,YAAY,MAAM;EACZ;EACH;EACA;EACC;EACH;YAER,oBAAC;GAAI,WAAW,GAAG,QAAQ,UAAU;aAAG,cAAc;IAAO;GAC/C;AAKjB,QAAO,oBAAC;EAAe;YAAY,cAAc;GAAO"}
@@ -1,2 +0,0 @@
1
- import "./types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"cards-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/cards-display.tsx"],"sourcesContent":["/**\n * Cards Display - card grid with image, title, subtitle, meta\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { useResolveText } from \"../../../../i18n/hooks\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tformatCellValue,\n\tformatColumnHeader,\n\tgetImageUrl,\n\tgetItemDisplayValue,\n\ttype RelationDisplayProps,\n} from \"./types\";\n\nconst gridCols = {\n\t1: \"grid-cols-1\",\n\t2: \"grid-cols-1 sm:grid-cols-2\",\n\t3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n\t4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n};\n\nfunction CardsSkeleton({\n\tcount = 3,\n\tgridColumns = 2,\n\thasImage = false,\n}: {\n\tcount?: number;\n\tgridColumns?: 1 | 2 | 3 | 4;\n\thasImage?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className={`grid gap-4 ${gridCols[gridColumns]}`}>\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={key}\n\t\t\t\t\tclassName=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{hasImage && <Skeleton className=\"aspect-video w-full\" />}\n\t\t\t\t\t<div className=\"p-3 space-y-2\">\n\t\t\t\t\t\t<Skeleton className=\"h-5 w-3/4 rounded\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-1/2 rounded\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function CardsDisplay({\n\titems,\n\tcollection,\n\tactions,\n\teditable = false,\n\tfields,\n\tgridColumns = 2,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst resolveText = useResolveText();\n\tconst getTitle = (item: any) =>\n\t\titem[fields?.title || \"_title\"] || getItemDisplayValue(item);\n\tconst getSubtitle = (item: any) =>\n\t\tfields?.subtitle ? item[fields.subtitle] : null;\n\tconst getImage = (item: any) => getImageUrl(item, fields?.image);\n\tconst getMeta = (item: any) => {\n\t\tif (!fields?.meta?.length) return [];\n\t\treturn fields.meta\n\t\t\t.map((field) => ({\n\t\t\t\tlabel: formatColumnHeader(field),\n\t\t\t\tvalue: formatCellValue(item[field]),\n\t\t\t}))\n\t\t\t.filter((m) => m.value !== \"-\");\n\t};\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn (\n\t\t\t<CardsSkeleton\n\t\t\t\tcount={loadingCount}\n\t\t\t\tgridColumns={gridColumns}\n\t\t\t\thasImage={!!fields?.image}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={`grid gap-4 ${gridCols[gridColumns]}`}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst image = getImage(item);\n\t\t\t\tconst subtitle = getSubtitle(item);\n\t\t\t\tconst meta = getMeta(item);\n\n\t\t\t\tconst cardContent = (\n\t\t\t\t\t<div className=\"rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm hover:bg-card/50 transition-colors overflow-hidden h-full\">\n\t\t\t\t\t\t{image && (\n\t\t\t\t\t\t\t<div className=\"aspect-video bg-muted\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\t\talt={getTitle(item)}\n\t\t\t\t\t\t\t\t\tclassName=\"w-full h-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"p-3\">\n\t\t\t\t\t\t\t<div className=\"flex items-start justify-between gap-2\">\n\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t<div className=\"font-medium truncate\">{getTitle(item)}</div>\n\t\t\t\t\t\t\t\t\t{subtitle && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"text-sm text-muted-foreground truncate mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/* Action buttons for editable mode */}\n\t\t\t\t\t\t\t\t{editable && (actions?.onEdit || actions?.onRemove) && (\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tactions.onEdit?.(item);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tactions.onRemove?.(item);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{meta.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-x-3 gap-y-1 mt-2 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{meta.map((m) => (\n\t\t\t\t\t\t\t\t\t\t<span key={String(m.label)}>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t{resolveText(m.label)}:\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t{m.value}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\t\t// Non-editable with sheet edit\n\t\t\t\tif (!editable && actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"text-left w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cardContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Non-editable with link to detail\n\t\t\t\tif (!editable && linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cardContent}\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Editable or read-only\n\t\t\t\treturn <div key={item.id}>{cardContent}</div>;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import "./types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"chips-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/chips-display.tsx"],"sourcesContent":["/**\n * Chips Display - compact badge/tag style\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Badge } from \"../../../ui/badge\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { getItemDisplayValue, type RelationDisplayProps } from \"./types\";\n\nfunction ChipsSkeleton({ count = 3 }: { count?: number }) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<Skeleton key={key} className=\"h-6 w-20 rounded-full\" />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function ChipsDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst iconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3 text-muted-foreground\",\n\t});\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <ChipsSkeleton count={loadingCount} />;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{items.map((item) => {\n\t\t\t\tconst displayText = getItemDisplayValue(item);\n\n\t\t\t\t// Editable mode - show edit/remove buttons\n\t\t\t\tif (editable && (actions?.onEdit || actions?.onRemove)) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 rounded-md border bg-secondary/50 pl-2 pr-1 py-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t<span className=\"text-sm\">{displayText}</span>\n\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-5 w-5\"\n\t\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-5 w-5\"\n\t\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Clickable for edit in sheet\n\t\t\t\tif (actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"inline-flex\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclassName=\"hover:bg-secondary/80 cursor-pointer gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Link to detail page\n\t\t\t\tif (linkToDetail && actions?.onNavigate) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"inline-flex\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclassName=\"hover:bg-secondary/80 cursor-pointer gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Read-only badge\n\t\t\t\treturn (\n\t\t\t\t\t<Badge key={item.id} variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t{displayText}\n\t\t\t\t\t</Badge>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;AAaA,SAAS,cAAc,EAAE,QAAQ,KAAyB;AAMzD,QACC,oBAAC;EAAI,WAAU;YANKA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP,CAIe,KAAK,QAClB,oBAAC,YAAmB,WAAU,2BAAf,IAAyC,CACvD;GACG;;AAIR,SAAgB,aAAa,EAC5B,OACA,YACA,gBACA,SACA,WAAW,OACX,eAAe,OACf,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,cAAc,mBAAmB,gBAAgB,EACtD,WAAW,gCACX,CAAC;AAGF,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC,iBAAc,OAAO,eAAgB;AAG9C,QACC,oBAAC;EAAI,WAAU;YACb,MAAM,KAAK,SAAS;GACpB,MAAM,cAAc,oBAAoB,KAAK;AAG7C,OAAI,aAAa,SAAS,UAAU,SAAS,UAC5C,QACC,qBAAC;IAEA,WAAU;;KAET;KACD,oBAAC;MAAK,WAAU;gBAAW;OAAmB;KAC7C,SAAS,UACT,oBAAC;MACA,MAAK;MACL,SAAQ;MACR,MAAK;MACL,WAAU;MACV,eAAe,QAAQ,SAAS,KAAK;MACrC,cAAW;gBAEX,oBAAC;OAAK,MAAK;OAAY,WAAU;QAAW;OACpC;KAET,SAAS,YACT,oBAAC;MACA,MAAK;MACL,SAAQ;MACR,MAAK;MACL,WAAU;MACV,eAAe,QAAQ,WAAW,KAAK;MACvC,cAAW;gBAEX,oBAAC;OAAK,MAAK;OAAO,WAAU;QAAW;OAC/B;;MA3BL,KAAK,GA6BL;AAKR,OAAI,SAAS,OACZ,QACC,oBAAC;IAEA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;cAEV,qBAAC;KACA,SAAQ;KACR,WAAU;;MAET;MACA;MACD,oBAAC;OAAK,MAAK;OAAY,WAAU;QAAW;;MACrC;MAZH,KAAK,GAaF;AAKX,OAAI,gBAAgB,SAAS,WAC5B,QACC,oBAAC;IAEY;IACZ,IAAI,KAAK;IACT,WAAU;cAEV,qBAAC;KACA,SAAQ;KACR,WAAU;gBAET,aACA;MACM;MAXH,KAAK,GAYU;AAKvB,UACC,qBAAC;IAAoB,SAAQ;IAAY,WAAU;eACjD,aACA;MAFU,KAAK,GAGT;IAER;GACG"}
@@ -1,2 +0,0 @@
1
- import "./types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"grid-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/grid-display.tsx"],"sourcesContent":["/**\n * Grid Display - compact grid with thumbnails\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tgetImageUrl,\n\tgetItemDisplayValue,\n\ttype RelationDisplayProps,\n} from \"./types\";\n\nconst gridCols = {\n\t1: \"grid-cols-1\",\n\t2: \"grid-cols-2\",\n\t3: \"grid-cols-2 sm:grid-cols-3\",\n\t4: \"grid-cols-2 sm:grid-cols-3 lg:grid-cols-4\",\n};\n\nfunction GridSkeleton({\n\tcount = 6,\n\tgridColumns = 3,\n}: {\n\tcount?: number;\n\tgridColumns?: 1 | 2 | 3 | 4;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className={`grid gap-2 ${gridCols[gridColumns]}`}>\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={key}\n\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t>\n\t\t\t\t\t<Skeleton className=\"size-8 shrink-0 rounded\" />\n\t\t\t\t\t<Skeleton className=\"h-4 flex-1 max-w-[120px] rounded\" />\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nexport function GridDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\tfields,\n\tgridColumns = 3,\n\tlinkToDetail = false,\n\tisLoading = false,\n\tloadingCount = 6,\n}: RelationDisplayProps) {\n\tconst getTitle = (item: any) =>\n\t\titem[fields?.title || \"_title\"] || getItemDisplayValue(item);\n\tconst getImage = (item: any) => getImageUrl(item, fields?.image);\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <GridSkeleton count={loadingCount} gridColumns={gridColumns} />;\n\t}\n\n\treturn (\n\t\t<div className={`grid gap-2 ${gridCols[gridColumns]}`}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst image = getImage(item);\n\n\t\t\t\tconst gridContent = (\n\t\t\t\t\t<div className=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2 hover:bg-card/50 transition-colors h-full\">\n\t\t\t\t\t\t{image ? (\n\t\t\t\t\t\t\t<div className=\"size-8 rounded bg-muted shrink-0 overflow-hidden\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\t\talt={getTitle(item)}\n\t\t\t\t\t\t\t\t\tclassName=\"w-full h-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : collectionIcon ? (\n\t\t\t\t\t\t\t<div className=\"size-8 rounded bg-muted shrink-0 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t{resolveIconElement(collectionIcon, {\n\t\t\t\t\t\t\t\t\tclassName: \"size-4 text-muted-foreground\",\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<span className=\"text-sm truncate flex-1\">{getTitle(item)}</span>\n\t\t\t\t\t\t{/* Action buttons for editable mode */}\n\t\t\t\t\t\t{editable && (actions?.onEdit || actions?.onRemove) && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\tactions.onEdit?.(item);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\tactions.onRemove?.(item);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\t\t// Non-editable with sheet edit\n\t\t\t\tif (!editable && actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\tclassName=\"text-left w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{gridContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Non-editable with link to detail\n\t\t\t\tif (!editable && linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{gridContent}\n\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Editable or read-only\n\t\t\t\treturn <div key={item.id}>{gridContent}</div>;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,WAAW;CAChB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH;AAED,SAAS,aAAa,EACrB,QAAQ,GACR,cAAc,KAIZ;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,QACC,oBAAC;EAAI,WAAW,cAAc,SAAS;YACrC,aAAa,KAAK,QAClB,qBAAC;GAEA,WAAU;cAEV,oBAAC,YAAS,WAAU,4BAA4B,EAChD,oBAAC,YAAS,WAAU,qCAAqC;KAJpD,IAKA,CACL;GACG;;AAIR,SAAgB,YAAY,EAC3B,OACA,YACA,gBACA,SACA,WAAW,OACX,QACA,cAAc,GACd,eAAe,OACf,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,YAAY,SACjB,KAAK,QAAQ,SAAS,aAAa,oBAAoB,KAAK;CAC7D,MAAM,YAAY,SAAc,YAAY,MAAM,QAAQ,MAAM;AAGhE,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC;EAAa,OAAO;EAA2B;GAAe;AAGvE,QACC,oBAAC;EAAI,WAAW,cAAc,SAAS;YACrC,MAAM,KAAK,SAAS;GACpB,MAAM,QAAQ,SAAS,KAAK;GAE5B,MAAM,cACL,qBAAC;IAAI,WAAU;;KACb,QACA,oBAAC;MAAI,WAAU;gBACd,oBAAC;OACA,KAAK;OACL,KAAK,SAAS,KAAK;OACnB,WAAU;QACT;OACG,GACH,iBACH,oBAAC;MAAI,WAAU;gBACb,mBAAmB,gBAAgB,EACnC,WAAW,gCACX,CAAC;OACG,GACH;KACJ,oBAAC;MAAK,WAAU;gBAA2B,SAAS,KAAK;OAAQ;KAEhE,aAAa,SAAS,UAAU,SAAS,aACzC,qBAAC;MAAI,WAAU;iBACb,SAAS,UACT,oBAAC;OACA,MAAK;OACL,SAAQ;OACR,MAAK;OACL,WAAU;OACV,UAAU,MAAM;AACf,UAAE,gBAAgB;AAClB,UAAE,iBAAiB;AACnB,gBAAQ,SAAS,KAAK;;OAEvB,cAAW;iBAEX,oBAAC;QAAK,MAAK;QAAY,WAAU;SAAW;QACpC,EAET,SAAS,YACT,oBAAC;OACA,MAAK;OACL,SAAQ;OACR,MAAK;OACL,WAAU;OACV,UAAU,MAAM;AACf,UAAE,gBAAgB;AAClB,UAAE,iBAAiB;AACnB,gBAAQ,WAAW,KAAK;;OAEzB,cAAW;iBAEX,oBAAC;QAAK,MAAK;QAAO,WAAU;SAAW;QAC/B;OAEL;;KAEF;AAIP,OAAI,CAAC,YAAY,SAAS,OACzB,QACC,oBAAC;IAEA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;cAET;MALI,KAAK,GAMF;AAKX,OAAI,CAAC,YAAY,aAChB,QACC,oBAAC;IAEY;IACZ,IAAI,KAAK;IACT,WAAU;cAET;MALI,KAAK,GAMU;AAKvB,UAAO,oBAAC,mBAAmB,eAAV,KAAK,GAAuB;IAC5C;GACG"}
@@ -1,6 +0,0 @@
1
- import { RelationDisplayFields, RelationDisplayMode } from "./types.mjs";
2
- import "./chips-display.mjs";
3
- import "./list-display.mjs";
4
- import "./table-display.mjs";
5
- import "./cards-display.mjs";
6
- import "./grid-display.mjs";
@@ -1,2 +0,0 @@
1
- import "./types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/list-display.tsx"],"sourcesContent":["/**\n * List Display - vertical list with action buttons\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { resolveIconElement } from \"../../../component-renderer\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { getItemDisplayValue, type RelationDisplayProps } from \"./types\";\n\nfunction ListSkeleton({\n\tcount = 3,\n\teditable = false,\n}: {\n\tcount?: number;\n\teditable?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\tif (editable) {\n\t\treturn (\n\t\t\t<div className=\"space-y-2 rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm p-3\">\n\t\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Skeleton className=\"size-3.5 rounded\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 flex-1 max-w-[200px] rounded\" />\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className=\"space-y-1\">\n\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t<li key={key} className=\"flex items-center gap-1\">\n\t\t\t\t\t<Skeleton className=\"size-3 rounded\" />\n\t\t\t\t\t<Skeleton className=\"h-4 w-32 rounded\" />\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n\nexport function ListDisplay({\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\torderable = false,\n\tlinkToDetail = false,\n\trenderItem,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst iconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3.5 text-muted-foreground shrink-0\",\n\t});\n\tconst smallIconElement = resolveIconElement(collectionIcon, {\n\t\tclassName: \"size-3 text-muted-foreground\",\n\t});\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn <ListSkeleton count={loadingCount} editable={editable} />;\n\t}\n\n\t// Editable list with cards\n\tif (editable) {\n\t\treturn (\n\t\t\t<div className=\"space-y-2 rounded-lg border border-border/60 bg-card/30 backdrop-blur-sm p-3\">\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md border border-border/60 bg-card/30 backdrop-blur-sm p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Drag Handle */}\n\t\t\t\t\t\t{orderable && (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName=\"cursor-grab text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\taria-label=\"Drag to reorder\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:dots-six-vertical\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Item Display */}\n\t\t\t\t\t\t<div className=\"flex-1 flex items-center gap-2 min-w-0\">\n\t\t\t\t\t\t\t{iconElement}\n\t\t\t\t\t\t\t{renderItem ? (\n\t\t\t\t\t\t\t\trenderItem(item, index)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"text-sm truncate\">\n\t\t\t\t\t\t\t\t\t{getItemDisplayValue(item)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Edit Button */}\n\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\tclassName=\"h-7 w-7 shrink-0\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\ttitle=\"Edit\"\n\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Remove Button */}\n\t\t\t\t\t\t{actions?.onRemove && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\tclassName=\"h-7 w-7 shrink-0\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\ttitle=\"Remove\"\n\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Read-only list\n\treturn (\n\t\t<ul className=\"space-y-1\">\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst displayText = renderItem\n\t\t\t\t\t? renderItem(item, index)\n\t\t\t\t\t: getItemDisplayValue(item);\n\n\t\t\t\t// Clickable for sheet edit\n\t\t\t\tif (actions?.onEdit) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\tclassName=\"text-sm text-primary hover:underline inline-flex items-center gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-3\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Link to detail page\n\t\t\t\tif (linkToDetail) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\t\tclassName=\"text-sm text-primary hover:underline inline-flex items-center gap-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t\t\t{displayText}\n\t\t\t\t\t\t\t\t<Icon icon=\"ph:arrow-right\" className=\"size-3\" />\n\t\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Read-only\n\t\t\t\treturn (\n\t\t\t\t\t<li key={item.id} className=\"text-sm flex items-center gap-1\">\n\t\t\t\t\t\t{smallIconElement}\n\t\t\t\t\t\t{displayText}\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ul>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,SAAS,aAAa,EACrB,QAAQ,GACR,WAAW,SAIT;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,KAAI,SACH,QACC,oBAAC;EAAI,WAAU;YACb,aAAa,KAAK,QAClB,qBAAC;GAEA,WAAU;cAEV,oBAAC,YAAS,WAAU,qBAAqB,EACzC,oBAAC,YAAS,WAAU,qCAAqC;KAJpD,IAKA,CACL;GACG;AAIR,QACC,oBAAC;EAAG,WAAU;YACZ,aAAa,KAAK,QAClB,qBAAC;GAAa,WAAU;cACvB,oBAAC,YAAS,WAAU,mBAAmB,EACvC,oBAAC,YAAS,WAAU,qBAAqB;KAFjC,IAGJ,CACJ;GACE;;AAIP,SAAgB,YAAY,EAC3B,OACA,YACA,gBACA,SACA,WAAW,OACX,YAAY,OACZ,eAAe,OACf,YACA,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,cAAc,mBAAmB,gBAAgB,EACtD,WAAW,2CACX,CAAC;CACF,MAAM,mBAAmB,mBAAmB,gBAAgB,EAC3D,WAAW,gCACX,CAAC;AAGF,KAAI,aAAa,MAAM,WAAW,EACjC,QAAO,oBAAC;EAAa,OAAO;EAAwB;GAAY;AAIjE,KAAI,SACH,QACC,oBAAC;EAAI,WAAU;YACb,MAAM,KAAK,MAAM,UACjB,qBAAC;GAEA,WAAU;;IAGT,aACA,oBAAC;KACA,MAAK;KACL,WAAU;KACV,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAuB,WAAU;OAAY;MAChD;IAIV,qBAAC;KAAI,WAAU;gBACb,aACA,aACA,WAAW,MAAM,MAAM,GAEvB,oBAAC;MAAK,WAAU;gBACd,oBAAoB,KAAK;OACpB;MAEH;IAGL,SAAS,UACT,oBAAC;KACA,MAAK;KACL,SAAQ;KACR,MAAK;KACL,WAAU;KACV,eAAe,QAAQ,SAAS,KAAK;KACrC,OAAM;KACN,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAY,WAAU;OAAY;MACrC;IAIT,SAAS,YACT,oBAAC;KACA,MAAK;KACL,SAAQ;KACR,MAAK;KACL,WAAU;KACV,eAAe,QAAQ,WAAW,KAAK;KACvC,OAAM;KACN,cAAW;eAEX,oBAAC;MAAK,MAAK;MAAO,WAAU;OAAY;MAChC;;KArDL,KAAK,GAuDL,CACL;GACG;AAKR,QACC,oBAAC;EAAG,WAAU;YACZ,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,cAAc,aACjB,WAAW,MAAM,MAAM,GACvB,oBAAoB,KAAK;AAG5B,OAAI,SAAS,OACZ,QACC,oBAAC,kBACA,qBAAC;IACA,MAAK;IACL,eAAe,QAAQ,SAAS,KAAK;IACrC,WAAU;;KAET;KACA;KACD,oBAAC;MAAK,MAAK;MAAY,WAAU;OAAW;;KACpC,IATD,KAAK,GAUT;AAKP,OAAI,aACH,QACC,oBAAC,kBACA,qBAAC;IACY;IACZ,IAAI,KAAK;IACT,WAAU;;KAET;KACA;KACD,oBAAC;MAAK,MAAK;MAAiB,WAAU;OAAW;;KAC7B,IATb,KAAK,GAUT;AAKP,UACC,qBAAC;IAAiB,WAAU;eAC1B,kBACA;MAFO,KAAK,GAGT;IAEL;GACE"}
@@ -1,2 +0,0 @@
1
- import "./types.mjs";
2
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-display.mjs","names":["React"],"sources":["../../../../../../src/client/components/fields/relation/displays/table-display.tsx"],"sourcesContent":["/**\n * Table Display - table with columns\n *\n * Uses the same cell components as TableView for consistent rendering.\n */\n\nimport { Icon } from \"@iconify/react\";\nimport * as React from \"react\";\nimport { CollectionEditLink } from \"../../../admin-link\";\nimport { Button } from \"../../../ui/button\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport {\n\tformatColumnHeader,\n\ttype RelationDisplayProps,\n\tresolveCellForColumn,\n} from \"./types\";\n\nfunction TableSkeleton({\n\tcount = 3,\n\tcolumns = [\"_title\"],\n\thasActions = false,\n}: {\n\tcount?: number;\n\tcolumns?: string[];\n\thasActions?: boolean;\n}) {\n\tconst skeletonKeys = React.useMemo(\n\t\t() => Array.from({ length: count }, () => crypto.randomUUID()),\n\t\t[count],\n\t);\n\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<table className=\"w-full text-sm\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"border-b border-border/40 bg-card/10 backdrop-blur-sm\">\n\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t<th key={col} className=\"px-3 py-2 text-left font-medium\">\n\t\t\t\t\t\t\t\t{formatColumnHeader(col)}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{hasActions && <th className=\"px-3 py-2 w-20\" />}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{skeletonKeys.map((key) => (\n\t\t\t\t\t\t<tr key={key} className=\"border-b last:border-0\">\n\t\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t\t<td key={col} className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-24 rounded\" />\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hasActions && (\n\t\t\t\t\t\t\t\t<td className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-end gap-1\">\n\t\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-7 w-7 rounded\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t))}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n}\n\n/**\n * Cell renderer that uses resolved cell components from field registry\n */\nfunction CellRenderer({\n\titem,\n\tcolumn,\n\tcollectionConfig,\n}: {\n\titem: any;\n\tcolumn: string;\n\tcollectionConfig?: RelationDisplayProps[\"collectionConfig\"];\n}) {\n\tconst resolved = React.useMemo(\n\t\t() => resolveCellForColumn(column, collectionConfig),\n\t\t[column, collectionConfig],\n\t);\n\n\tconst value = item[resolved.accessorKey];\n\tconst { component: CellComponent, fieldDef, needsFieldDef } = resolved;\n\n\tif (needsFieldDef) {\n\t\treturn <CellComponent value={value} row={item} fieldDef={fieldDef} />;\n\t}\n\n\treturn <CellComponent value={value} row={item} />;\n}\n\nexport function TableDisplay({\n\titems,\n\tcollection,\n\tactions,\n\teditable = false,\n\tcolumns = [\"_title\"],\n\tlinkToDetail = false,\n\tcollectionConfig,\n\tisLoading = false,\n\tloadingCount = 3,\n}: RelationDisplayProps) {\n\tconst hasActions = editable || linkToDetail || !!actions?.onEdit;\n\n\t// Show skeleton when loading and no items\n\tif (isLoading && items.length === 0) {\n\t\treturn (\n\t\t\t<TableSkeleton\n\t\t\t\tcount={loadingCount}\n\t\t\t\tcolumns={columns}\n\t\t\t\thasActions={hasActions}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<table className=\"w-full text-sm\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"border-b border-border/40 bg-card/10 backdrop-blur-sm\">\n\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t<th key={col} className=\"px-3 py-2 text-left font-medium\">\n\t\t\t\t\t\t\t\t{formatColumnHeader(col)}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{hasActions && <th className=\"px-3 py-2 w-20\" />}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<tr key={item.id} className=\"border-b last:border-0\">\n\t\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t\t<td key={col} className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<CellRenderer\n\t\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\t\tcolumn={col}\n\t\t\t\t\t\t\t\t\t\tcollectionConfig={collectionConfig}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hasActions && (\n\t\t\t\t\t\t\t\t<td className=\"px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-end gap-1\">\n\t\t\t\t\t\t\t\t\t\t{/* Edit button */}\n\t\t\t\t\t\t\t\t\t\t{actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => actions.onEdit?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:pencil\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Remove button (editable mode) */}\n\t\t\t\t\t\t\t\t\t\t{editable && actions?.onRemove && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => actions.onRemove?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove item\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:x\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Link to detail (non-editable mode) */}\n\t\t\t\t\t\t\t\t\t\t{!editable && linkToDetail && !actions?.onEdit && (\n\t\t\t\t\t\t\t\t\t\t\t<CollectionEditLink\n\t\t\t\t\t\t\t\t\t\t\t\tcollection={collection as any}\n\t\t\t\t\t\t\t\t\t\t\t\tid={item.id}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-primary hover:underline\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"ph:arrow-right\" className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</CollectionEditLink>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t))}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAS,cAAc,EACtB,QAAQ,GACR,UAAU,CAAC,SAAS,EACpB,aAAa,SAKX;CACF,MAAM,eAAeA,QAAM,cACpB,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO,YAAY,CAAC,EAC9D,CAAC,MAAM,CACP;AAED,QACC,oBAAC;EAAI,WAAU;YACd,qBAAC;GAAM,WAAU;cAChB,oBAAC,qBACA,qBAAC;IAAG,WAAU;eACZ,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACtB,mBAAmB,IAAI;OADhB,IAEJ,CACJ,EACD,cAAc,oBAAC,QAAG,WAAU,mBAAmB;KAC5C,GACE,EACR,oBAAC,qBACC,aAAa,KAAK,QAClB,qBAAC;IAAa,WAAU;eACtB,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACvB,oBAAC,YAAS,WAAU,qBAAqB;OADjC,IAEJ,CACJ,EACD,cACA,oBAAC;KAAG,WAAU;eACb,oBAAC;MAAI,WAAU;gBACd,oBAAC,YAAS,WAAU,oBAAoB;OACnC;MACF;MAXE,IAaJ,CACJ,GACK;IACD;GACH;;;;;AAOR,SAAS,aAAa,EACrB,MACA,QACA,oBAKE;CACF,MAAM,WAAWA,QAAM,cAChB,qBAAqB,QAAQ,iBAAiB,EACpD,CAAC,QAAQ,iBAAiB,CAC1B;CAED,MAAM,QAAQ,KAAK,SAAS;CAC5B,MAAM,EAAE,WAAW,eAAe,UAAU,kBAAkB;AAE9D,KAAI,cACH,QAAO,oBAAC;EAAqB;EAAO,KAAK;EAAgB;GAAY;AAGtE,QAAO,oBAAC;EAAqB;EAAO,KAAK;GAAQ;;AAGlD,SAAgB,aAAa,EAC5B,OACA,YACA,SACA,WAAW,OACX,UAAU,CAAC,SAAS,EACpB,eAAe,OACf,kBACA,YAAY,OACZ,eAAe,KACS;CACxB,MAAM,aAAa,YAAY,gBAAgB,CAAC,CAAC,SAAS;AAG1D,KAAI,aAAa,MAAM,WAAW,EACjC,QACC,oBAAC;EACA,OAAO;EACE;EACG;GACX;AAIJ,QACC,oBAAC;EAAI,WAAU;YACd,qBAAC;GAAM,WAAU;cAChB,oBAAC,qBACA,qBAAC;IAAG,WAAU;eACZ,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACtB,mBAAmB,IAAI;OADhB,IAEJ,CACJ,EACD,cAAc,oBAAC,QAAG,WAAU,mBAAmB;KAC5C,GACE,EACR,oBAAC,qBACC,MAAM,KAAK,SACX,qBAAC;IAAiB,WAAU;eAC1B,QAAQ,KAAK,QACb,oBAAC;KAAa,WAAU;eACvB,oBAAC;MACM;MACN,QAAQ;MACU;OACjB;OALM,IAMJ,CACJ,EACD,cACA,oBAAC;KAAG,WAAU;eACb,qBAAC;MAAI,WAAU;;OAEb,SAAS,UACT,oBAAC;QACA,MAAK;QACL,SAAQ;QACR,MAAK;QACL,WAAU;QACV,eAAe,QAAQ,SAAS,KAAK;QACrC,cAAW;kBAEX,oBAAC;SAAK,MAAK;SAAY,WAAU;UAAW;SACpC;OAIT,YAAY,SAAS,YACrB,oBAAC;QACA,MAAK;QACL,SAAQ;QACR,MAAK;QACL,WAAU;QACV,eAAe,QAAQ,WAAW,KAAK;QACvC,cAAW;kBAEX,oBAAC;SAAK,MAAK;SAAO,WAAU;UAAW;SAC/B;OAIT,CAAC,YAAY,gBAAgB,CAAC,SAAS,UACvC,oBAAC;QACY;QACZ,IAAI,KAAK;QACT,WAAU;kBAEV,oBAAC;SAAK,MAAK;SAAiB,WAAU;UAAW;SAC7B;;OAEjB;MACF;MApDE,KAAK,GAsDT,CACJ,GACK;IACD;GACH"}
@@ -1,22 +0,0 @@
1
- import "../../../../../server/index.mjs";
2
- import "../../../../builder/field/field.mjs";
3
- import "react";
4
-
5
- //#region src/client/components/fields/relation/displays/types.d.ts
6
-
7
- /**
8
- * Display mode for relation items
9
- */
10
- type RelationDisplayMode = "chips" | "list" | "table" | "cards" | "grid";
11
- /**
12
- * Field mapping for cards/grid display
13
- */
14
- interface RelationDisplayFields {
15
- title?: string;
16
- subtitle?: string;
17
- image?: string;
18
- meta?: string[];
19
- }
20
- //#endregion
21
- export { RelationDisplayFields, RelationDisplayMode };
22
- //# sourceMappingURL=types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../src/client/components/fields/relation/displays/types.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAqBY,mBAAA;;;;UAcK,qBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.mjs","names":["component: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>","accessorKey: string"],"sources":["../../../../../../src/client/components/fields/relation/displays/types.ts"],"sourcesContent":["/**\n * Shared types for relation display components\n */\n\nimport type * as React from \"react\";\nimport type { ComponentReference } from \"#questpie/admin/server\";\nimport type { FieldDefinition } from \"../../../../builder/field/field\";\nimport { formatLabel } from \"../../../../lib/utils\";\nimport { DefaultCell } from \"../../../../views/collection/cells\";\n\n/**\n * Icon type that can be a React component or a server-defined ComponentReference\n */\nexport type IconType =\n\t| React.ComponentType<{ className?: string }>\n\t| ComponentReference\n\t| undefined;\n\n/**\n * Display mode for relation items\n */\nexport type RelationDisplayMode = \"chips\" | \"list\" | \"table\" | \"cards\" | \"grid\";\n\n/**\n * Action handlers for relation items\n */\nexport interface RelationItemActions {\n\tonEdit?: (item: any) => void;\n\tonRemove?: (item: any) => void;\n\tonNavigate?: (item: any) => void;\n}\n\n/**\n * Field mapping for cards/grid display\n */\nexport interface RelationDisplayFields {\n\ttitle?: string;\n\tsubtitle?: string;\n\timage?: string;\n\tmeta?: string[];\n}\n\n/**\n * Collection field definitions for cell rendering\n */\nexport interface CollectionFieldsConfig {\n\tfields?: Record<string, FieldDefinition>;\n}\n\n/**\n * Common props for all display components\n */\nexport interface RelationDisplayProps {\n\t/**\n\t * Items to display\n\t */\n\titems: any[];\n\n\t/**\n\t * Collection name for navigation links\n\t */\n\tcollection: string;\n\n\t/**\n\t * Collection icon (React component or server ComponentReference)\n\t */\n\tcollectionIcon?: IconType;\n\n\t/**\n\t * Action handlers\n\t */\n\tactions?: RelationItemActions;\n\n\t/**\n\t * Whether items are editable (shows edit/remove buttons)\n\t */\n\teditable?: boolean;\n\n\t/**\n\t * Whether items are orderable (shows drag handle)\n\t */\n\torderable?: boolean;\n\n\t/**\n\t * Columns to show in table display\n\t */\n\tcolumns?: string[];\n\n\t/**\n\t * Field mapping for cards/grid display\n\t */\n\tfields?: RelationDisplayFields;\n\n\t/**\n\t * Number of columns for grid/cards layout\n\t */\n\tgridColumns?: 1 | 2 | 3 | 4;\n\n\t/**\n\t * Whether to show navigation link to detail page\n\t */\n\tlinkToDetail?: boolean;\n\n\t/**\n\t * Custom render function for items\n\t */\n\trenderItem?: (item: any, index: number) => React.ReactNode;\n\n\t/**\n\t * Collection config for cell rendering (enables proper cell components)\n\t */\n\tcollectionConfig?: CollectionFieldsConfig;\n\n\t/**\n\t * Whether items are being loaded\n\t */\n\tisLoading?: boolean;\n\n\t/**\n\t * Number of skeleton items to show when loading\n\t */\n\tloadingCount?: number;\n}\n\n/**\n * Get display value from item (_title fallback chain)\n */\nexport function getItemDisplayValue(item: any): string {\n\treturn item?._title || item?.name || item?.title || item?.id || \"\";\n}\n\n/**\n * Format column header (camelCase to Title Case)\n */\nexport function formatColumnHeader(column: string): string {\n\tif (column === \"_title\") return \"Name\";\n\treturn formatLabel(column);\n}\n\n/**\n * Format cell value for display\n */\nexport function formatCellValue(value: unknown): string {\n\tif (value === null || value === undefined) return \"-\";\n\tif (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n\tif (value instanceof Date) return value.toLocaleDateString();\n\tif (typeof value === \"object\") return JSON.stringify(value);\n\treturn String(value);\n}\n\n/**\n * Get image URL from item field\n */\nexport function getImageUrl(item: any, imageField?: string): string | null {\n\tif (!imageField) return null;\n\tconst imageValue = item[imageField];\n\tif (typeof imageValue === \"string\") return imageValue;\n\tif (imageValue?.url) return imageValue.url;\n\tif (imageValue?.key) return imageValue.key;\n\treturn null;\n}\n\n/**\n * Field types that need fieldDef passed to their cell component\n */\nconst FIELD_TYPES_NEEDING_FIELD_DEF = new Set([\n\t\"object\",\n\t\"array\",\n\t\"relation\",\n\t\"reverseRelation\",\n]);\n\n/**\n * Resolved cell info for rendering\n */\nexport interface ResolvedCell {\n\tcomponent: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>;\n\tfieldDef?: FieldDefinition;\n\tneedsFieldDef: boolean;\n\taccessorKey: string;\n}\n\n/**\n * Resolve cell component for a column based on field config\n * Uses the same priority as buildColumns:\n * 1. Cell from field registry (fieldDef.cell.component)\n * 2. DefaultCell fallback\n */\nexport function resolveCellForColumn(\n\tcolumn: string,\n\tcollectionConfig?: CollectionFieldsConfig,\n): ResolvedCell {\n\tconst fieldDef = collectionConfig?.fields?.[column];\n\tconst fieldType = fieldDef?.name ?? \"text\";\n\tconst fieldOptions = (fieldDef as any)?.[\"~options\"] ?? {};\n\n\t// Resolve cell component\n\tlet component: React.ComponentType<{\n\t\tvalue: unknown;\n\t\trow?: unknown;\n\t\tfieldDef?: FieldDefinition;\n\t}>;\n\n\tif (fieldDef?.cell?.component) {\n\t\t// Cell from field registry\n\t\tcomponent = fieldDef.cell.component as React.ComponentType<{\n\t\t\tvalue: unknown;\n\t\t\trow?: unknown;\n\t\t\tfieldDef?: FieldDefinition;\n\t\t}>;\n\t} else {\n\t\t// DefaultCell fallback\n\t\tcomponent = DefaultCell;\n\t}\n\n\tconst needsFieldDef = FIELD_TYPES_NEEDING_FIELD_DEF.has(fieldType);\n\n\t// For relation fields, use relationName as accessor if specified\n\tconst accessorKey: string =\n\t\tfieldType === \"relation\" && fieldOptions.relationName\n\t\t\t? fieldOptions.relationName\n\t\t\t: column;\n\n\treturn {\n\t\tcomponent,\n\t\tfieldDef,\n\t\tneedsFieldDef,\n\t\taccessorKey,\n\t};\n}\n"],"mappings":";;;;;;;AA+HA,SAAgB,oBAAoB,MAAmB;AACtD,QAAO,MAAM,UAAU,MAAM,QAAQ,MAAM,SAAS,MAAM,MAAM;;;;;AAMjE,SAAgB,mBAAmB,QAAwB;AAC1D,KAAI,WAAW,SAAU,QAAO;AAChC,QAAO,YAAY,OAAO;;;;;AAM3B,SAAgB,gBAAgB,OAAwB;AACvD,KAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,KAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,QAAQ;AACvD,KAAI,iBAAiB,KAAM,QAAO,MAAM,oBAAoB;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,MAAM;AAC3D,QAAO,OAAO,MAAM;;;;;AAMrB,SAAgB,YAAY,MAAW,YAAoC;AAC1E,KAAI,CAAC,WAAY,QAAO;CACxB,MAAM,aAAa,KAAK;AACxB,KAAI,OAAO,eAAe,SAAU,QAAO;AAC3C,KAAI,YAAY,IAAK,QAAO,WAAW;AACvC,KAAI,YAAY,IAAK,QAAO,WAAW;AACvC,QAAO;;;;;AAMR,MAAM,gCAAgC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA,CAAC;;;;;;;AAsBF,SAAgB,qBACf,QACA,kBACe;CACf,MAAM,WAAW,kBAAkB,SAAS;CAC5C,MAAM,YAAY,UAAU,QAAQ;CACpC,MAAM,eAAgB,WAAmB,eAAe,EAAE;CAG1D,IAAIA;AAMJ,KAAI,UAAU,MAAM,UAEnB,aAAY,SAAS,KAAK;KAO1B,aAAY;CAGb,MAAM,gBAAgB,8BAA8B,IAAI,UAAU;CAGlE,MAAMC,cACL,cAAc,cAAc,aAAa,eACtC,aAAa,eACb;AAEJ,QAAO;EACN;EACA;EACA;EACA;EACA"}
@@ -1,3 +0,0 @@
1
- import { RelationDisplayFields, RelationDisplayMode } from "./displays/types.mjs";
2
- import "./displays/index.mjs";
3
- import "./relation-items-display.mjs";
@@ -1,5 +0,0 @@
1
- import "../../../i18n/types.mjs";
2
- import { RelationDisplayFields, RelationDisplayMode } from "./displays/types.mjs";
3
- import "./displays/index.mjs";
4
- import "react";
5
- import "react/jsx-runtime";
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation-items-display.mjs","names":["displayProps: RelationDisplayProps"],"sources":["../../../../../src/client/components/fields/relation/relation-items-display.tsx"],"sourcesContent":["/**\n * RelationItemsDisplay Component\n *\n * Unified display component for relation items.\n * Renders items using the specified display mode.\n *\n * Used by:\n * - RelationPicker (editable M:N relations)\n * - ReverseRelationField (read-only reverse relations)\n */\n\nimport type * as React from \"react\";\nimport { useResolveText } from \"../../../i18n/hooks\";\nimport type { I18nText } from \"../../../i18n/types\";\nimport type {\n\tCollectionFieldsConfig,\n\tIconType,\n\tRelationDisplayFields,\n\tRelationDisplayMode,\n\tRelationDisplayProps,\n\tRelationItemActions,\n} from \"./displays\";\nimport { CardsDisplay } from \"./displays/cards-display\";\nimport { ChipsDisplay } from \"./displays/chips-display\";\nimport { GridDisplay } from \"./displays/grid-display\";\nimport { ListDisplay } from \"./displays/list-display\";\nimport { TableDisplay } from \"./displays/table-display\";\n\nexport interface RelationItemsDisplayProps {\n\t/**\n\t * Display mode\n\t */\n\tdisplay?: RelationDisplayMode;\n\n\t/**\n\t * Items to display\n\t */\n\titems: any[];\n\n\t/**\n\t * Collection name\n\t */\n\tcollection: string;\n\n\t/**\n\t * Collection icon (React component or server ComponentReference)\n\t */\n\tcollectionIcon?: IconType;\n\n\t/**\n\t * Action handlers\n\t */\n\tactions?: RelationItemActions;\n\n\t/**\n\t * Whether items are editable (shows edit/remove buttons inline)\n\t */\n\teditable?: boolean;\n\n\t/**\n\t * Whether items can be reordered (shows drag handle)\n\t */\n\torderable?: boolean;\n\n\t/**\n\t * Columns for table display\n\t */\n\tcolumns?: string[];\n\n\t/**\n\t * Field mapping for cards/grid display\n\t */\n\tfields?: RelationDisplayFields;\n\n\t/**\n\t * Number of columns for grid/cards layout\n\t */\n\tgridColumns?: 1 | 2 | 3 | 4;\n\n\t/**\n\t * Show link to detail page (for read-only displays)\n\t */\n\tlinkToDetail?: boolean;\n\n\t/**\n\t * Custom render function for list items\n\t */\n\trenderItem?: (item: any, index: number) => React.ReactNode;\n\n\t/**\n\t * Message to show when no items\n\t */\n\temptyMessage?: I18nText;\n\n\t/**\n\t * Collection config for cell rendering (enables proper cell components in table mode)\n\t */\n\tcollectionConfig?: CollectionFieldsConfig;\n\n\t/**\n\t * Whether items are being loaded\n\t */\n\tisLoading?: boolean;\n\n\t/**\n\t * Number of skeleton items to show when loading\n\t */\n\tloadingCount?: number;\n}\n\nexport function RelationItemsDisplay({\n\tdisplay = \"list\",\n\titems,\n\tcollection,\n\tcollectionIcon,\n\tactions,\n\teditable = false,\n\torderable = false,\n\tcolumns,\n\tfields,\n\tgridColumns,\n\tlinkToDetail = false,\n\trenderItem,\n\temptyMessage = \"No items\",\n\tcollectionConfig,\n\tisLoading = false,\n\tloadingCount,\n}: RelationItemsDisplayProps) {\n\tconst resolveText = useResolveText();\n\tconst resolvedEmptyMessage = resolveText(emptyMessage ?? \"No items\");\n\n\t// Show loading state (skeletons) when loading\n\t// Pass to display components so they can render skeletons\n\tconst displayProps: RelationDisplayProps = {\n\t\titems,\n\t\tcollection,\n\t\tcollectionIcon,\n\t\tactions,\n\t\teditable,\n\t\torderable,\n\t\tcolumns: columns || [\"_title\"],\n\t\tfields,\n\t\tgridColumns,\n\t\tlinkToDetail,\n\t\trenderItem,\n\t\tcollectionConfig,\n\t\tisLoading,\n\t\tloadingCount,\n\t};\n\n\t// Empty state - only show when not loading and no items\n\tif (!isLoading && (!items || items.length === 0)) {\n\t\treturn (\n\t\t\t<div className=\"rounded-lg border border-dashed p-4 text-center\">\n\t\t\t\t<p className=\"text-sm text-muted-foreground\">{resolvedEmptyMessage}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tswitch (display) {\n\t\tcase \"chips\":\n\t\t\treturn <ChipsDisplay {...displayProps} />;\n\t\tcase \"table\":\n\t\t\treturn <TableDisplay {...displayProps} />;\n\t\tcase \"cards\":\n\t\t\treturn <CardsDisplay {...displayProps} />;\n\t\tcase \"grid\":\n\t\t\treturn <GridDisplay {...displayProps} />;\n\t\tcase \"list\":\n\t\tdefault:\n\t\t\treturn <ListDisplay {...displayProps} />;\n\t}\n}\n\n// Re-export types for convenience\nexport type {\n\tCollectionFieldsConfig,\n\tRelationDisplayFields,\n\tRelationDisplayMode,\n\tRelationDisplayProps,\n\tRelationItemActions,\n} from \"./displays\";\n"],"mappings":";;;;;;;;;AA8GA,SAAgB,qBAAqB,EACpC,UAAU,QACV,OACA,YACA,gBACA,SACA,WAAW,OACX,YAAY,OACZ,SACA,QACA,aACA,eAAe,OACf,YACA,eAAe,YACf,kBACA,YAAY,OACZ,gBAC6B;CAE7B,MAAM,uBADc,gBAAgB,CACK,gBAAgB,WAAW;CAIpE,MAAMA,eAAqC;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW,CAAC,SAAS;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGD,KAAI,CAAC,cAAc,CAAC,SAAS,MAAM,WAAW,GAC7C,QACC,oBAAC;EAAI,WAAU;YACd,oBAAC;GAAE,WAAU;aAAiC;IAAyB;GAClE;AAIR,SAAQ,SAAR;EACC,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,QACJ,QAAO,oBAAC,gBAAa,GAAI,eAAgB;EAC1C,KAAK,OACJ,QAAO,oBAAC,eAAY,GAAI,eAAgB;EACzC,KAAK;EACL,QACC,QAAO,oBAAC,eAAY,GAAI,eAAgB"}