@questpie/admin 3.2.4 → 3.2.6

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 (255) hide show
  1. package/dist/client/blocks/block-renderer.d.mts +2 -2
  2. package/dist/client/blocks/block-renderer.mjs +164 -339
  3. package/dist/client/components/actions/action-button.mjs +9 -9
  4. package/dist/client/components/actions/action-dialog.mjs +195 -493
  5. package/dist/client/components/actions/confirmation-dialog.mjs +44 -159
  6. package/dist/client/components/actions/header-actions.mjs +73 -165
  7. package/dist/client/components/admin-link.d.mts +2 -2
  8. package/dist/client/components/admin-link.mjs +40 -126
  9. package/dist/client/components/auth/auth-loading.mjs +9 -44
  10. package/dist/client/components/blocks/block-canvas.mjs +31 -95
  11. package/dist/client/components/blocks/block-editor-context.mjs +13 -57
  12. package/dist/client/components/blocks/block-editor-layout.mjs +72 -166
  13. package/dist/client/components/blocks/block-editor-provider.mjs +184 -245
  14. package/dist/client/components/blocks/block-fields-renderer.mjs +54 -229
  15. package/dist/client/components/blocks/block-insert-button.mjs +49 -165
  16. package/dist/client/components/blocks/block-item-menu.mjs +102 -301
  17. package/dist/client/components/blocks/block-item.mjs +136 -370
  18. package/dist/client/components/blocks/block-library-sidebar.mjs +103 -230
  19. package/dist/client/components/blocks/block-tree.mjs +12 -68
  20. package/dist/client/components/blocks/block-type-icon.mjs +14 -56
  21. package/dist/client/components/brand-logo.mjs +35 -149
  22. package/dist/client/components/component-renderer.mjs +42 -118
  23. package/dist/client/components/error-boundary.mjs +14 -58
  24. package/dist/client/components/fields/array-field.mjs +209 -521
  25. package/dist/client/components/fields/asset-preview-field.mjs +41 -141
  26. package/dist/client/components/fields/blocks-field/blocks-field.mjs +60 -156
  27. package/dist/client/components/fields/boolean-field.mjs +29 -59
  28. package/dist/client/components/fields/date-field.mjs +7 -37
  29. package/dist/client/components/fields/datetime-field.mjs +7 -38
  30. package/dist/client/components/fields/email-field.mjs +25 -54
  31. package/dist/client/components/fields/field-wrapper.mjs +30 -105
  32. package/dist/client/components/fields/json-field.mjs +94 -296
  33. package/dist/client/components/fields/locale-badge.mjs +6 -15
  34. package/dist/client/components/fields/number-field.mjs +27 -60
  35. package/dist/client/components/fields/object-array-field.mjs +283 -659
  36. package/dist/client/components/fields/object-field.mjs +165 -633
  37. package/dist/client/components/fields/relation/displays/cards-display.mjs +106 -220
  38. package/dist/client/components/fields/relation/displays/chips-display.mjs +78 -150
  39. package/dist/client/components/fields/relation/displays/grid-display.mjs +92 -186
  40. package/dist/client/components/fields/relation/displays/list-display.mjs +122 -239
  41. package/dist/client/components/fields/relation/displays/table-display.mjs +70 -244
  42. package/dist/client/components/fields/relation/relation-items-display.mjs +30 -126
  43. package/dist/client/components/fields/relation-field.mjs +10 -66
  44. package/dist/client/components/fields/relation-picker.mjs +18 -18
  45. package/dist/client/components/fields/relation-select.mjs +12 -12
  46. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +80 -180
  47. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +2 -2
  48. package/dist/client/components/fields/rich-text-editor/image-upload.mjs +13 -29
  49. package/dist/client/components/fields/rich-text-editor/index.mjs +195 -513
  50. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +61 -111
  51. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +105 -415
  52. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +256 -511
  53. package/dist/client/components/fields/rich-text-field.mjs +14 -53
  54. package/dist/client/components/fields/select-field.mjs +61 -72
  55. package/dist/client/components/fields/text-field.mjs +26 -59
  56. package/dist/client/components/fields/textarea-field.mjs +26 -58
  57. package/dist/client/components/fields/time-field.mjs +7 -35
  58. package/dist/client/components/fields/upload-field.mjs +47 -165
  59. package/dist/client/components/filter-builder/columns-tab.mjs +80 -280
  60. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +197 -540
  61. package/dist/client/components/filter-builder/filters-tab.mjs +96 -386
  62. package/dist/client/components/filter-builder/saved-views-tab.mjs +133 -351
  63. package/dist/client/components/history-sidebar.mjs +285 -605
  64. package/dist/client/components/layout/field-layout-renderer.mjs +106 -254
  65. package/dist/client/components/locale-switcher.mjs +106 -228
  66. package/dist/client/components/media/media-grid.mjs +84 -273
  67. package/dist/client/components/media/media-picker-dialog.mjs +176 -476
  68. package/dist/client/components/preview/live-preview-mode.mjs +233 -458
  69. package/dist/client/components/preview/preview-pane.mjs +22 -22
  70. package/dist/client/components/primitives/asset-preview.mjs +290 -666
  71. package/dist/client/components/primitives/checkbox-input.mjs +9 -35
  72. package/dist/client/components/primitives/date-input.mjs +109 -327
  73. package/dist/client/components/primitives/dropzone.mjs +209 -336
  74. package/dist/client/components/primitives/field-select-control.mjs +12 -80
  75. package/dist/client/components/primitives/number-input.mjs +4 -4
  76. package/dist/client/components/primitives/select-multi.mjs +229 -572
  77. package/dist/client/components/primitives/select-single.mjs +179 -499
  78. package/dist/client/components/primitives/time-input.mjs +43 -117
  79. package/dist/client/components/primitives/toggle-input.mjs +9 -29
  80. package/dist/client/components/sheets/resource-sheet.mjs +61 -70
  81. package/dist/client/components/ui/accordion.mjs +35 -155
  82. package/dist/client/components/ui/alert.mjs +13 -68
  83. package/dist/client/components/ui/badge.mjs +9 -51
  84. package/dist/client/components/ui/button.mjs +8 -54
  85. package/dist/client/components/ui/card.mjs +37 -193
  86. package/dist/client/components/ui/checkbox.mjs +12 -68
  87. package/dist/client/components/ui/command.mjs +48 -219
  88. package/dist/client/components/ui/dialog.mjs +50 -262
  89. package/dist/client/components/ui/drawer.mjs +55 -259
  90. package/dist/client/components/ui/dropdown-menu.mjs +86 -427
  91. package/dist/client/components/ui/empty-state.mjs +28 -98
  92. package/dist/client/components/ui/field.mjs +73 -309
  93. package/dist/client/components/ui/input-group.mjs +42 -167
  94. package/dist/client/components/ui/input.mjs +7 -37
  95. package/dist/client/components/ui/kbd.mjs +6 -36
  96. package/dist/client/components/ui/label.mjs +7 -37
  97. package/dist/client/components/ui/popover.mjs +34 -169
  98. package/dist/client/components/ui/responsive-dialog.mjs +67 -273
  99. package/dist/client/components/ui/scroll-fade.mjs +63 -158
  100. package/dist/client/components/ui/search-input.mjs +33 -100
  101. package/dist/client/components/ui/select.mjs +72 -393
  102. package/dist/client/components/ui/separator.mjs +7 -38
  103. package/dist/client/components/ui/sheet.mjs +49 -269
  104. package/dist/client/components/ui/sidebar.mjs +171 -690
  105. package/dist/client/components/ui/skeleton.mjs +7 -38
  106. package/dist/client/components/ui/sonner.mjs +11 -42
  107. package/dist/client/components/ui/switch.mjs +9 -45
  108. package/dist/client/components/ui/table.mjs +48 -266
  109. package/dist/client/components/ui/tabs.mjs +26 -139
  110. package/dist/client/components/ui/textarea.mjs +6 -32
  111. package/dist/client/components/ui/tooltip.mjs +27 -129
  112. package/dist/client/components/widgets/chart-widget.mjs +174 -522
  113. package/dist/client/components/widgets/progress-widget.mjs +66 -172
  114. package/dist/client/components/widgets/quick-actions-widget.mjs +102 -261
  115. package/dist/client/components/widgets/recent-items-widget.mjs +69 -195
  116. package/dist/client/components/widgets/stats-widget.mjs +41 -175
  117. package/dist/client/components/widgets/table-widget.mjs +9 -9
  118. package/dist/client/components/widgets/timeline-widget.mjs +86 -226
  119. package/dist/client/components/widgets/value-widget.mjs +74 -381
  120. package/dist/client/components/widgets/widget-empty-state.mjs +26 -76
  121. package/dist/client/components/widgets/widget-skeletons.mjs +138 -421
  122. package/dist/client/contexts/focus-context.mjs +63 -146
  123. package/dist/client/hooks/typed-hooks.mjs +241 -701
  124. package/dist/client/hooks/use-action.mjs +62 -198
  125. package/dist/client/hooks/use-admin-config.mjs +5 -35
  126. package/dist/client/hooks/use-admin-preferences.mjs +16 -88
  127. package/dist/client/hooks/use-admin-routes.mjs +22 -56
  128. package/dist/client/hooks/use-audit-history.mjs +21 -69
  129. package/dist/client/hooks/use-brand.mjs +1 -9
  130. package/dist/client/hooks/use-collection-fields.mjs +17 -57
  131. package/dist/client/hooks/use-collection-meta.mjs +12 -44
  132. package/dist/client/hooks/use-collection-schema.mjs +10 -33
  133. package/dist/client/hooks/use-collection-validation.mjs +23 -53
  134. package/dist/client/hooks/use-collection.mjs +194 -614
  135. package/dist/client/hooks/use-current-user.mjs +0 -1
  136. package/dist/client/hooks/use-field-hooks.mjs +10 -10
  137. package/dist/client/hooks/use-field-options.mjs +61 -202
  138. package/dist/client/hooks/use-global-fields.mjs +14 -46
  139. package/dist/client/hooks/use-global-meta.mjs +9 -30
  140. package/dist/client/hooks/use-global-schema.mjs +9 -30
  141. package/dist/client/hooks/use-global.mjs +63 -219
  142. package/dist/client/hooks/use-locks.mjs +117 -325
  143. package/dist/client/hooks/use-media-query.mjs +16 -36
  144. package/dist/client/hooks/use-prefill-params.mjs +0 -1
  145. package/dist/client/hooks/use-questpie-query-options.mjs +12 -29
  146. package/dist/client/hooks/use-reactive-fields.mjs +1 -1
  147. package/dist/client/hooks/use-reactive-prop.mjs +65 -223
  148. package/dist/client/hooks/use-realtime-highlight.mjs +51 -114
  149. package/dist/client/hooks/use-saved-views.mjs +22 -103
  150. package/dist/client/hooks/use-search-param-toggle.mjs +28 -79
  151. package/dist/client/hooks/use-search.mjs +31 -143
  152. package/dist/client/hooks/use-server-actions.mjs +18 -50
  153. package/dist/client/hooks/use-server-validation.mjs +72 -166
  154. package/dist/client/hooks/use-server-widget-data.mjs +7 -33
  155. package/dist/client/hooks/use-setup-status.mjs +12 -25
  156. package/dist/client/hooks/use-sidebar-search-param.mjs +33 -78
  157. package/dist/client/hooks/use-transition-stage.mjs +8 -38
  158. package/dist/client/hooks/use-upload.mjs +54 -152
  159. package/dist/client/hooks/use-validation-error-map.mjs +6 -26
  160. package/dist/client/hooks/use-view-state.mjs +187 -437
  161. package/dist/client/i18n/hooks.mjs +65 -197
  162. package/dist/client/lib/render-profiler.mjs +14 -41
  163. package/dist/client/preview/block-scope-context.mjs +14 -36
  164. package/dist/client/preview/preview-banner.d.mts +2 -2
  165. package/dist/client/preview/preview-banner.mjs +42 -108
  166. package/dist/client/preview/preview-field.d.mts +4 -4
  167. package/dist/client/preview/preview-field.mjs +167 -348
  168. package/dist/client/preview/use-collection-preview.mjs +121 -215
  169. package/dist/client/runtime/content-locales-provider.mjs +31 -83
  170. package/dist/client/runtime/locale-scope.mjs +22 -63
  171. package/dist/client/runtime/provider.mjs +100 -255
  172. package/dist/client/runtime/translations-provider.mjs +41 -107
  173. package/dist/client/scope/picker.mjs +86 -321
  174. package/dist/client/scope/provider.mjs +8 -17
  175. package/dist/client/utils/build-field-definitions-from-schema.mjs +4 -2
  176. package/dist/client/views/auth/accept-invite-form.d.mts +2 -2
  177. package/dist/client/views/auth/accept-invite-form.mjs +121 -412
  178. package/dist/client/views/auth/auth-layout.d.mts +3 -3
  179. package/dist/client/views/auth/auth-layout.mjs +104 -284
  180. package/dist/client/views/auth/forgot-password-form.d.mts +2 -2
  181. package/dist/client/views/auth/forgot-password-form.mjs +94 -325
  182. package/dist/client/views/auth/invite-form.mjs +107 -442
  183. package/dist/client/views/auth/login-form.d.mts +2 -2
  184. package/dist/client/views/auth/login-form.mjs +116 -337
  185. package/dist/client/views/auth/reset-password-form.d.mts +2 -2
  186. package/dist/client/views/auth/reset-password-form.mjs +128 -453
  187. package/dist/client/views/auth/setup-form.d.mts +2 -2
  188. package/dist/client/views/auth/setup-form.mjs +140 -478
  189. package/dist/client/views/collection/auto-form-fields.mjs +243 -615
  190. package/dist/client/views/collection/bulk-action-toolbar.mjs +212 -379
  191. package/dist/client/views/collection/cells/complex-cells.mjs +183 -611
  192. package/dist/client/views/collection/cells/primitive-cells.mjs +116 -356
  193. package/dist/client/views/collection/cells/relation-cells.mjs +86 -233
  194. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +142 -371
  195. package/dist/client/views/collection/cells/shared/relation-chip.mjs +35 -131
  196. package/dist/client/views/collection/cells/upload-cells.mjs +60 -177
  197. package/dist/client/views/collection/columns/build-columns.mjs +8 -48
  198. package/dist/client/views/collection/field-renderer.mjs +58 -182
  199. package/dist/client/views/collection/form-view.mjs +284 -518
  200. package/dist/client/views/collection/table-view.mjs +231 -463
  201. package/dist/client/views/collection/view-skeletons.mjs +112 -237
  202. package/dist/client/views/common/global-search.mjs +241 -560
  203. package/dist/client/views/dashboard/dashboard-grid.mjs +256 -775
  204. package/dist/client/views/dashboard/dashboard-widget.mjs +38 -126
  205. package/dist/client/views/dashboard/widget-card.mjs +61 -269
  206. package/dist/client/views/globals/global-form-view.mjs +477 -1301
  207. package/dist/client/views/layout/admin-layout-provider.mjs +28 -88
  208. package/dist/client/views/layout/admin-layout.mjs +83 -246
  209. package/dist/client/views/layout/admin-router.mjs +458 -1274
  210. package/dist/client/views/layout/admin-sidebar.mjs +510 -1292
  211. package/dist/client/views/layout/admin-theme.mjs +30 -64
  212. package/dist/client/views/layout/admin-view-layout.mjs +40 -144
  213. package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
  214. package/dist/client/views/pages/accept-invite-page.mjs +95 -290
  215. package/dist/client/views/pages/dashboard-page.d.mts +2 -2
  216. package/dist/client/views/pages/dashboard-page.mjs +11 -57
  217. package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
  218. package/dist/client/views/pages/forgot-password-page.mjs +31 -83
  219. package/dist/client/views/pages/invite-page.d.mts +2 -2
  220. package/dist/client/views/pages/invite-page.mjs +35 -90
  221. package/dist/client/views/pages/login-page.d.mts +2 -2
  222. package/dist/client/views/pages/login-page.mjs +41 -121
  223. package/dist/client/views/pages/reset-password-page.d.mts +2 -2
  224. package/dist/client/views/pages/reset-password-page.mjs +46 -173
  225. package/dist/client/views/pages/setup-page.d.mts +2 -2
  226. package/dist/client/views/pages/setup-page.mjs +33 -95
  227. package/dist/components/rich-text/rich-text-renderer.mjs +9 -33
  228. package/dist/server/adapters/index.d.mts +2 -0
  229. package/dist/server/adapters/nextjs.d.mts +1 -0
  230. package/dist/server/auth-helpers.d.mts +1 -0
  231. package/dist/server/modules/admin/.generated/module.d.mts +1 -0
  232. package/dist/server/modules/admin/collections/account.d.mts +46 -46
  233. package/dist/server/modules/admin/collections/admin-locks.d.mts +50 -50
  234. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  235. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  236. package/dist/server/modules/admin/collections/apikey.d.mts +68 -68
  237. package/dist/server/modules/admin/collections/assets.d.mts +39 -39
  238. package/dist/server/modules/admin/collections/session.d.mts +42 -42
  239. package/dist/server/modules/admin/collections/user.d.mts +62 -62
  240. package/dist/server/modules/admin/collections/verification.d.mts +23 -23
  241. package/dist/server/modules/admin/index.d.mts +20 -19
  242. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  243. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  244. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  245. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  246. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  247. package/dist/server/modules/admin/routes/setup.d.mts +7 -7
  248. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  249. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  250. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +45 -45
  251. package/dist/server/modules/audit/.generated/module.d.mts +6 -6
  252. package/dist/server/modules/audit/collections/audit-log.d.mts +78 -78
  253. package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +2 -2
  254. package/dist/server.d.mts +2 -0
  255. package/package.json +3 -5
@@ -90,26 +90,26 @@ function RelationPicker({ name, value, onChange, targetCollection, label, filter
90
90
  const options = { limit: 50 };
91
91
  if (search) options.search = search;
92
92
  if (filter) options.where = filter;
93
- const response_0 = await client.collections[targetCollection].find(options);
93
+ const response = await client.collections[targetCollection].find(options);
94
94
  let docs;
95
- if (response_0) if (response_0.docs) docs = response_0.docs;
95
+ if (response) if (response.docs) docs = response.docs;
96
96
  else docs = [];
97
97
  else docs = [];
98
98
  const selectedIdSet = new Set(selectedIds);
99
99
  return docs.filter((opt) => !selectedIdSet.has(opt.id)).map((item) => {
100
- let label_0;
101
- if (renderOption) label_0 = String(renderOption(item));
102
- else if (item._title) label_0 = item._title;
103
- else if (item.id) label_0 = item.id;
104
- else label_0 = "";
100
+ let label$1;
101
+ if (renderOption) label$1 = String(renderOption(item));
102
+ else if (item._title) label$1 = item._title;
103
+ else if (item.id) label$1 = item.id;
104
+ else label$1 = "";
105
105
  return {
106
106
  value: item.id,
107
- label: label_0,
107
+ label: label$1,
108
108
  icon: resolveIconElement(collectionIconRef, { className: "size-3.5 text-muted-foreground" })
109
109
  };
110
110
  });
111
- } catch (error_0) {
112
- console.error("Failed to load relation options:", error_0);
111
+ } catch (error$1) {
112
+ console.error("Failed to load relation options:", error$1);
113
113
  toast.error(t("error.failedToLoadOptions"));
114
114
  return [];
115
115
  }
@@ -154,15 +154,15 @@ function RelationPicker({ name, value, onChange, targetCollection, label, filter
154
154
  maxItems,
155
155
  onChange
156
156
  ]);
157
- const handleRemove = React.useCallback((itemId_0) => {
158
- onChange(selectedIds.filter((id_0) => id_0 !== itemId_0));
157
+ const handleRemove = React.useCallback((itemId) => {
158
+ onChange(selectedIds.filter((id) => id !== itemId));
159
159
  }, [selectedIds, onChange]);
160
160
  const handleOpenCreate = React.useCallback(() => {
161
161
  setEditingItemId(void 0);
162
162
  setIsSheetOpen(true);
163
163
  }, []);
164
- const handleOpenEdit = React.useCallback((itemId_1) => {
165
- setEditingItemId(itemId_1);
164
+ const handleOpenEdit = React.useCallback((itemId) => {
165
+ setEditingItemId(itemId);
166
166
  setIsSheetOpen(true);
167
167
  }, []);
168
168
  const handleSheetSave = React.useCallback(async (result) => {
@@ -176,8 +176,8 @@ function RelationPicker({ name, value, onChange, targetCollection, label, filter
176
176
  ]);
177
177
  const canAddMore = !maxItems || selectedIds.length < maxItems;
178
178
  const displayActions = React.useMemo(() => ({
179
- onEdit: !readOnly ? (item_0) => handleOpenEdit(item_0.id) : void 0,
180
- onRemove: !readOnly && (!required || selectedIds.length > 1) ? (item_1) => handleRemove(item_1.id) : void 0
179
+ onEdit: !readOnly ? (item) => handleOpenEdit(item.id) : void 0,
180
+ onRemove: !readOnly && (!required || selectedIds.length > 1) ? (item) => handleRemove(item.id) : void 0
181
181
  }), [
182
182
  readOnly,
183
183
  required,
@@ -237,13 +237,13 @@ function RelationPicker({ name, value, onChange, targetCollection, label, filter
237
237
  value: null,
238
238
  onChange: handleAdd,
239
239
  loadOptions,
240
- queryKey: (search_0) => queryOpts.key([
240
+ queryKey: (search) => queryOpts.key([
241
241
  "collections",
242
242
  targetCollection,
243
243
  "find",
244
244
  {
245
245
  limit: 50,
246
- search: search_0,
246
+ search,
247
247
  where: filter ?? void 0,
248
248
  selectedIds
249
249
  }
@@ -56,19 +56,19 @@ function RelationSelect({ name, value, onChange, targetCollection, label, filter
56
56
  else docs = [];
57
57
  else docs = [];
58
58
  return docs.map((item) => {
59
- let label_0;
60
- if (renderOption) label_0 = String(renderOption(item));
61
- else if (item._title) label_0 = item._title;
62
- else if (item.id) label_0 = item.id;
63
- else label_0 = "";
59
+ let label$1;
60
+ if (renderOption) label$1 = String(renderOption(item));
61
+ else if (item._title) label$1 = item._title;
62
+ else if (item.id) label$1 = item.id;
63
+ else label$1 = "";
64
64
  return {
65
65
  value: item.id,
66
- label: label_0,
66
+ label: label$1,
67
67
  icon: resolveIconElement(collectionIconRef, { className: "size-3.5 text-muted-foreground" })
68
68
  };
69
69
  });
70
- } catch (error_0) {
71
- console.error("Failed to load relation options:", error_0);
70
+ } catch (error$1) {
71
+ console.error("Failed to load relation options:", error$1);
72
72
  toast.error(t("error.failedToLoadOptions"));
73
73
  return [];
74
74
  }
@@ -160,14 +160,14 @@ function RelationSelect({ name, value, onChange, targetCollection, label, filter
160
160
  onChange: handleValueChange,
161
161
  options: selectedOptions,
162
162
  loadOptions,
163
- queryKey: (search_0) => queryOpts.key([
163
+ queryKey: (search) => queryOpts.key([
164
164
  "collections",
165
165
  targetCollection,
166
166
  "find",
167
167
  {
168
168
  limit: 50,
169
169
  locale,
170
- search: search_0,
170
+ search,
171
171
  where: filter ?? void 0
172
172
  }
173
173
  ]),
@@ -214,14 +214,14 @@ function RelationSelect({ name, value, onChange, targetCollection, label, filter
214
214
  onChange: handleValueChange,
215
215
  options: selectedOptions,
216
216
  loadOptions,
217
- queryKey: (search_1) => queryOpts.key([
217
+ queryKey: (search) => queryOpts.key([
218
218
  "collections",
219
219
  targetCollection,
220
220
  "find",
221
221
  {
222
222
  limit: 50,
223
223
  locale,
224
- search: search_1,
224
+ search,
225
225
  where: filter ?? void 0
226
226
  }
227
227
  ]),
@@ -4,7 +4,6 @@ import { Input } from "../../ui/input.mjs";
4
4
  import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "../../ui/select.mjs";
5
5
  import { createLinkAttributes } from "./link-utils.mjs";
6
6
  import { EDITOR_ICONS, ToolbarButton } from "./toolbar.mjs";
7
- import { c } from "react/compiler-runtime";
8
7
  import { Icon } from "@iconify/react";
9
8
  import * as React from "react";
10
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -87,154 +86,90 @@ function setCurrentBlockValue(editor, value) {
87
86
  /**
88
87
  * Bubble menu that appears on text selection
89
88
  */
90
- function RichTextBubbleMenu(t0) {
91
- const $ = c(44);
92
- const { editor, features, disabled, linkOpen, onImageClick, onLinkOpenChange, showFormatting: t1 } = t0;
93
- const showFormatting = t1 === void 0 ? true : t1;
89
+ function RichTextBubbleMenu({ editor, features, disabled, linkOpen, onImageClick, onLinkOpenChange, showFormatting = true }) {
94
90
  const { t } = useTranslation();
95
91
  const [linkUrl, setLinkUrl] = React.useState("");
96
92
  const linkInputRef = React.useRef(null);
97
93
  const isEditable = !disabled;
98
- let currentBlockValue;
99
- let t2;
100
- if ($[0] !== editor || $[1] !== t) {
101
- currentBlockValue = getCurrentBlockValue(editor);
102
- t2 = BLOCK_OPTIONS.find((option) => option.value === currentBlockValue)?.value ? getBlockOptionLabel(currentBlockValue, t) : t("editor.paragraph");
103
- $[0] = editor;
104
- $[1] = t;
105
- $[2] = currentBlockValue;
106
- $[3] = t2;
107
- } else {
108
- currentBlockValue = $[2];
109
- t2 = $[3];
110
- }
111
- const currentBlockLabel = t2;
112
- let t3;
113
- if ($[4] !== isEditable || $[5] !== linkOpen || $[6] !== showFormatting) {
114
- t3 = (t4$1) => {
115
- const { editor: currentEditor, from, to } = t4$1;
116
- if (!isEditable) return false;
117
- if (linkOpen) return true;
118
- if (!showFormatting) return false;
119
- if (from === to) return false;
120
- return !currentEditor.isActive("image");
121
- };
122
- $[4] = isEditable;
123
- $[5] = linkOpen;
124
- $[6] = showFormatting;
125
- $[7] = t3;
126
- } else t3 = $[7];
127
- const shouldShow = t3;
128
- let t4;
129
- if ($[8] !== editor || $[9] !== onLinkOpenChange) {
130
- t4 = () => {
131
- const currentLink = editor.getAttributes("link").href;
132
- setLinkUrl(currentLink || "");
133
- onLinkOpenChange(true);
134
- };
135
- $[8] = editor;
136
- $[9] = onLinkOpenChange;
137
- $[10] = t4;
138
- } else t4 = $[10];
139
- const openLinkMode = t4;
140
- let t5;
141
- if ($[11] !== editor || $[12] !== onLinkOpenChange) {
142
- t5 = () => {
143
- onLinkOpenChange(false);
144
- setLinkUrl("");
145
- editor.chain().focus().run();
146
- };
147
- $[11] = editor;
148
- $[12] = onLinkOpenChange;
149
- $[13] = t5;
150
- } else t5 = $[13];
151
- const closeLinkMode = t5;
152
- let t6;
153
- if ($[14] !== closeLinkMode || $[15] !== editor || $[16] !== linkUrl) {
154
- t6 = () => {
155
- const trimmedUrl = linkUrl.trim();
156
- if (!trimmedUrl) {
157
- editor.chain().focus().extendMarkRange("link").unsetLink().run();
158
- closeLinkMode();
159
- return;
160
- }
161
- const attrs = createLinkAttributes(trimmedUrl);
162
- if (editor.state.selection.empty && !editor.isActive("link")) editor.chain().focus().insertContent({
163
- type: "text",
164
- text: attrs.href,
165
- marks: [{
166
- type: "link",
167
- attrs
168
- }]
169
- }).run();
170
- else editor.chain().focus().extendMarkRange("link").setLink(attrs).run();
171
- closeLinkMode();
172
- };
173
- $[14] = closeLinkMode;
174
- $[15] = editor;
175
- $[16] = linkUrl;
176
- $[17] = t6;
177
- } else t6 = $[17];
178
- const applyLink = t6;
179
- let t7;
180
- if ($[18] !== closeLinkMode || $[19] !== editor) {
181
- t7 = () => {
94
+ const currentBlockValue = getCurrentBlockValue(editor);
95
+ const currentBlockLabel = BLOCK_OPTIONS.find((option) => option.value === currentBlockValue)?.value ? getBlockOptionLabel(currentBlockValue, t) : t("editor.paragraph");
96
+ const shouldShow = React.useCallback(({ editor: currentEditor, from, to }) => {
97
+ if (!isEditable) return false;
98
+ if (linkOpen) return true;
99
+ if (!showFormatting) return false;
100
+ if (from === to) return false;
101
+ return !currentEditor.isActive("image");
102
+ }, [
103
+ isEditable,
104
+ linkOpen,
105
+ showFormatting
106
+ ]);
107
+ const openLinkMode = React.useCallback(() => {
108
+ const currentLink = editor.getAttributes("link").href;
109
+ setLinkUrl(currentLink || "");
110
+ onLinkOpenChange(true);
111
+ }, [editor, onLinkOpenChange]);
112
+ const closeLinkMode = React.useCallback(() => {
113
+ onLinkOpenChange(false);
114
+ setLinkUrl("");
115
+ editor.chain().focus().run();
116
+ }, [editor, onLinkOpenChange]);
117
+ const applyLink = React.useCallback(() => {
118
+ const trimmedUrl = linkUrl.trim();
119
+ if (!trimmedUrl) {
182
120
  editor.chain().focus().extendMarkRange("link").unsetLink().run();
183
121
  closeLinkMode();
184
- };
185
- $[18] = closeLinkMode;
186
- $[19] = editor;
187
- $[20] = t7;
188
- } else t7 = $[20];
189
- const removeLink = t7;
190
- let t8;
191
- let t9;
192
- if ($[21] !== linkOpen) {
193
- t8 = () => {
194
- if (!linkOpen) return;
195
- const frame = window.requestAnimationFrame(() => {
196
- linkInputRef.current?.focus();
197
- linkInputRef.current?.select();
198
- });
199
- return () => window.cancelAnimationFrame(frame);
200
- };
201
- t9 = [linkOpen];
202
- $[21] = linkOpen;
203
- $[22] = t8;
204
- $[23] = t9;
205
- } else {
206
- t8 = $[22];
207
- t9 = $[23];
208
- }
209
- React.useEffect(t8, t9);
210
- let t10;
211
- if ($[24] === Symbol.for("react.memo_cache_sentinel")) {
212
- t10 = [120, 90];
213
- $[24] = t10;
214
- } else t10 = $[24];
215
- let t11;
216
- if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
217
- t11 = {
218
- duration: t10,
122
+ return;
123
+ }
124
+ const attrs = createLinkAttributes(trimmedUrl);
125
+ if (editor.state.selection.empty && !editor.isActive("link")) editor.chain().focus().insertContent({
126
+ type: "text",
127
+ text: attrs.href,
128
+ marks: [{
129
+ type: "link",
130
+ attrs
131
+ }]
132
+ }).run();
133
+ else editor.chain().focus().extendMarkRange("link").setLink(attrs).run();
134
+ closeLinkMode();
135
+ }, [
136
+ closeLinkMode,
137
+ editor,
138
+ linkUrl
139
+ ]);
140
+ const removeLink = React.useCallback(() => {
141
+ editor.chain().focus().extendMarkRange("link").unsetLink().run();
142
+ closeLinkMode();
143
+ }, [closeLinkMode, editor]);
144
+ React.useEffect(() => {
145
+ if (!linkOpen) return;
146
+ const frame = window.requestAnimationFrame(() => {
147
+ linkInputRef.current?.focus();
148
+ linkInputRef.current?.select();
149
+ });
150
+ return () => window.cancelAnimationFrame(frame);
151
+ }, [linkOpen]);
152
+ return /* @__PURE__ */ jsx(BubbleMenu, {
153
+ editor,
154
+ shouldShow,
155
+ tippyOptions: {
156
+ duration: [120, 90],
219
157
  interactive: true,
220
158
  maxWidth: "none",
221
159
  offset: [0, 8],
222
160
  placement: "top"
223
- };
224
- $[25] = t11;
225
- } else t11 = $[25];
226
- let t12;
227
- if ($[26] !== applyLink || $[27] !== closeLinkMode || $[28] !== currentBlockLabel || $[29] !== currentBlockValue || $[30] !== editor || $[31] !== features || $[32] !== isEditable || $[33] !== linkOpen || $[34] !== linkUrl || $[35] !== onImageClick || $[36] !== openLinkMode || $[37] !== removeLink || $[38] !== t) {
228
- t12 = linkOpen ? /* @__PURE__ */ jsxs("form", {
161
+ },
162
+ className: "qp-rich-text-editor__bubble floating-surface text-popover-foreground",
163
+ children: linkOpen ? /* @__PURE__ */ jsxs("form", {
229
164
  className: "qp-rich-text-editor__link-form",
230
165
  onSubmit: (event) => {
231
166
  event.preventDefault();
232
167
  applyLink();
233
168
  },
234
- onKeyDown: (event_0) => {
235
- event_0.stopPropagation();
236
- if (event_0.key === "Escape") {
237
- event_0.preventDefault();
169
+ onKeyDown: (event) => {
170
+ event.stopPropagation();
171
+ if (event.key === "Escape") {
172
+ event.preventDefault();
238
173
  closeLinkMode();
239
174
  }
240
175
  },
@@ -256,7 +191,7 @@ function RichTextBubbleMenu(t0) {
256
191
  placeholder: t("editor.pasteOrTypeLink"),
257
192
  type: "text",
258
193
  value: linkUrl,
259
- onChange: (event_1) => setLinkUrl(event_1.target.value),
194
+ onChange: (event) => setLinkUrl(event.target.value),
260
195
  disabled: !isEditable
261
196
  }),
262
197
  /* @__PURE__ */ jsx(Button, {
@@ -303,15 +238,15 @@ function RichTextBubbleMenu(t0) {
303
238
  children: t("editor.paragraph")
304
239
  })] }),
305
240
  /* @__PURE__ */ jsx(SelectSeparator, {}),
306
- /* @__PURE__ */ jsxs(SelectGroup, { children: [/* @__PURE__ */ jsx(SelectLabel, { children: t("editor.headings") }), BLOCK_OPTIONS.filter(_temp).map((option_1) => /* @__PURE__ */ jsx(SelectItem, {
307
- value: option_1.value,
308
- children: getBlockOptionLabel(option_1.value, t)
309
- }, option_1.value))] }),
241
+ /* @__PURE__ */ jsxs(SelectGroup, { children: [/* @__PURE__ */ jsx(SelectLabel, { children: t("editor.headings") }), BLOCK_OPTIONS.filter((option) => option.group === "heading").map((option) => /* @__PURE__ */ jsx(SelectItem, {
242
+ value: option.value,
243
+ children: getBlockOptionLabel(option.value, t)
244
+ }, option.value))] }),
310
245
  /* @__PURE__ */ jsx(SelectSeparator, {}),
311
- /* @__PURE__ */ jsxs(SelectGroup, { children: [/* @__PURE__ */ jsx(SelectLabel, { children: t("editor.list") }), BLOCK_OPTIONS.filter(_temp2).map((option_3) => /* @__PURE__ */ jsx(SelectItem, {
312
- value: option_3.value,
313
- children: getBlockOptionLabel(option_3.value, t)
314
- }, option_3.value))] }),
246
+ /* @__PURE__ */ jsxs(SelectGroup, { children: [/* @__PURE__ */ jsx(SelectLabel, { children: t("editor.list") }), BLOCK_OPTIONS.filter((option) => option.group === "list").map((option) => /* @__PURE__ */ jsx(SelectItem, {
247
+ value: option.value,
248
+ children: getBlockOptionLabel(option.value, t)
249
+ }, option.value))] }),
315
250
  /* @__PURE__ */ jsx(SelectSeparator, {}),
316
251
  /* @__PURE__ */ jsxs(SelectGroup, { children: [/* @__PURE__ */ jsx(SelectLabel, { children: t("editor.blocks") }), /* @__PURE__ */ jsx(SelectItem, {
317
252
  value: "blockquote",
@@ -370,43 +305,8 @@ function RichTextBubbleMenu(t0) {
370
305
  title: t("editor.image"),
371
306
  onClick: onImageClick
372
307
  })
373
- ] });
374
- $[26] = applyLink;
375
- $[27] = closeLinkMode;
376
- $[28] = currentBlockLabel;
377
- $[29] = currentBlockValue;
378
- $[30] = editor;
379
- $[31] = features;
380
- $[32] = isEditable;
381
- $[33] = linkOpen;
382
- $[34] = linkUrl;
383
- $[35] = onImageClick;
384
- $[36] = openLinkMode;
385
- $[37] = removeLink;
386
- $[38] = t;
387
- $[39] = t12;
388
- } else t12 = $[39];
389
- let t13;
390
- if ($[40] !== editor || $[41] !== shouldShow || $[42] !== t12) {
391
- t13 = /* @__PURE__ */ jsx(BubbleMenu, {
392
- editor,
393
- shouldShow,
394
- tippyOptions: t11,
395
- className: "qp-rich-text-editor__bubble floating-surface text-popover-foreground",
396
- children: t12
397
- });
398
- $[40] = editor;
399
- $[41] = shouldShow;
400
- $[42] = t12;
401
- $[43] = t13;
402
- } else t13 = $[43];
403
- return t13;
404
- }
405
- function _temp2(option_2) {
406
- return option_2.group === "list";
407
- }
408
- function _temp(option_0) {
409
- return option_0.group === "heading";
308
+ ] })
309
+ });
410
310
  }
411
311
 
412
312
  //#endregion
@@ -110,7 +110,7 @@ function ImagePopover({ editor, open, onOpenChange, disabled, onImageUpload, ima
110
110
  type: "url",
111
111
  value: imageUrl,
112
112
  placeholder: "https://example.com/image.jpg…",
113
- onChange: (event_0) => setImageUrl(event_0.target.value),
113
+ onChange: (event) => setImageUrl(event.target.value),
114
114
  disabled
115
115
  }),
116
116
  /* @__PURE__ */ jsx(Input, {
@@ -119,7 +119,7 @@ function ImagePopover({ editor, open, onOpenChange, disabled, onImageUpload, ima
119
119
  name: "rich-text-image-alt",
120
120
  value: imageAlt,
121
121
  placeholder: `${t("editor.altText")}…`,
122
- onChange: (event_1) => setImageAlt(event_1.target.value),
122
+ onChange: (event) => setImageAlt(event.target.value),
123
123
  disabled
124
124
  }),
125
125
  /* @__PURE__ */ jsx("div", {
@@ -2,7 +2,7 @@ import { useTranslation } from "../../../i18n/hooks.mjs";
2
2
  import { sanitizeFilename } from "../field-utils.mjs";
3
3
  import { useUploadCollection } from "../../../hooks/use-upload-collection.mjs";
4
4
  import { useUpload } from "../../../hooks/use-upload.mjs";
5
- import { c } from "react/compiler-runtime";
5
+ import * as React from "react";
6
6
 
7
7
  //#region src/client/components/fields/rich-text-editor/image-upload.ts
8
8
  function getImageFilesFromDataTransfer(dataTransfer) {
@@ -13,15 +13,15 @@ function getImageAltFromFile(file) {
13
13
  if (!cleanName) return void 0;
14
14
  return cleanName.replace(/\.[^.]+$/, "") || cleanName;
15
15
  }
16
- function useRichTextImageUpload(t0) {
17
- const $ = c(11);
18
- const { imageCollection, onImageUpload } = t0;
16
+ function useRichTextImageUpload({ imageCollection, onImageUpload }) {
19
17
  const { t } = useTranslation();
20
18
  const { upload, isUploading } = useUpload();
21
19
  const { collection, collections } = useUploadCollection(imageCollection);
22
- let t1;
23
- if ($[0] !== collection || $[1] !== collections || $[2] !== onImageUpload || $[3] !== t || $[4] !== upload) {
24
- t1 = async (file) => {
20
+ return {
21
+ collection,
22
+ collections,
23
+ isUploading,
24
+ uploadImageFile: React.useCallback(async (file) => {
25
25
  if (!file.type.startsWith("image/")) throw new Error(`"${file.name}" is not an image file.`);
26
26
  if (onImageUpload) {
27
27
  const url = await onImageUpload(file);
@@ -36,30 +36,14 @@ function useRichTextImageUpload(t0) {
36
36
  const uploadedAsset = await upload(sanitizedName === file.name ? file : new File([file], sanitizedName, { type: file.type }), { to: collection });
37
37
  if (!uploadedAsset?.url) throw new Error(t("upload.error"));
38
38
  return uploadedAsset.url;
39
- };
40
- $[0] = collection;
41
- $[1] = collections;
42
- $[2] = onImageUpload;
43
- $[3] = t;
44
- $[4] = upload;
45
- $[5] = t1;
46
- } else t1 = $[5];
47
- const uploadImageFile = t1;
48
- let t2;
49
- if ($[6] !== collection || $[7] !== collections || $[8] !== isUploading || $[9] !== uploadImageFile) {
50
- t2 = {
39
+ }, [
51
40
  collection,
52
41
  collections,
53
- isUploading,
54
- uploadImageFile
55
- };
56
- $[6] = collection;
57
- $[7] = collections;
58
- $[8] = isUploading;
59
- $[9] = uploadImageFile;
60
- $[10] = t2;
61
- } else t2 = $[10];
62
- return t2;
42
+ onImageUpload,
43
+ t,
44
+ upload
45
+ ])
46
+ };
63
47
  }
64
48
 
65
49
  //#endregion