@questpie/admin 3.2.4 → 3.2.5

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 (248) 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.mjs +40 -126
  8. package/dist/client/components/auth/auth-loading.mjs +9 -44
  9. package/dist/client/components/blocks/block-canvas.mjs +31 -95
  10. package/dist/client/components/blocks/block-editor-context.mjs +13 -57
  11. package/dist/client/components/blocks/block-editor-layout.mjs +72 -166
  12. package/dist/client/components/blocks/block-editor-provider.mjs +184 -245
  13. package/dist/client/components/blocks/block-fields-renderer.mjs +54 -229
  14. package/dist/client/components/blocks/block-insert-button.mjs +49 -165
  15. package/dist/client/components/blocks/block-item-menu.mjs +102 -301
  16. package/dist/client/components/blocks/block-item.mjs +136 -370
  17. package/dist/client/components/blocks/block-library-sidebar.mjs +103 -230
  18. package/dist/client/components/blocks/block-tree.mjs +12 -68
  19. package/dist/client/components/blocks/block-type-icon.mjs +14 -56
  20. package/dist/client/components/brand-logo.mjs +35 -149
  21. package/dist/client/components/component-renderer.mjs +42 -118
  22. package/dist/client/components/error-boundary.mjs +14 -58
  23. package/dist/client/components/fields/array-field.mjs +209 -521
  24. package/dist/client/components/fields/asset-preview-field.mjs +41 -141
  25. package/dist/client/components/fields/blocks-field/blocks-field.mjs +60 -156
  26. package/dist/client/components/fields/boolean-field.mjs +29 -59
  27. package/dist/client/components/fields/date-field.mjs +7 -37
  28. package/dist/client/components/fields/datetime-field.mjs +7 -38
  29. package/dist/client/components/fields/email-field.mjs +25 -54
  30. package/dist/client/components/fields/field-wrapper.mjs +30 -105
  31. package/dist/client/components/fields/json-field.mjs +94 -296
  32. package/dist/client/components/fields/locale-badge.mjs +6 -15
  33. package/dist/client/components/fields/number-field.mjs +27 -60
  34. package/dist/client/components/fields/object-array-field.mjs +283 -659
  35. package/dist/client/components/fields/object-field.mjs +165 -633
  36. package/dist/client/components/fields/relation/displays/cards-display.mjs +106 -220
  37. package/dist/client/components/fields/relation/displays/chips-display.mjs +78 -150
  38. package/dist/client/components/fields/relation/displays/grid-display.mjs +92 -186
  39. package/dist/client/components/fields/relation/displays/list-display.mjs +122 -239
  40. package/dist/client/components/fields/relation/displays/table-display.mjs +70 -244
  41. package/dist/client/components/fields/relation/relation-items-display.mjs +30 -126
  42. package/dist/client/components/fields/relation-field.mjs +10 -66
  43. package/dist/client/components/fields/relation-picker.mjs +18 -18
  44. package/dist/client/components/fields/relation-select.mjs +12 -12
  45. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +80 -180
  46. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +2 -2
  47. package/dist/client/components/fields/rich-text-editor/image-upload.mjs +13 -29
  48. package/dist/client/components/fields/rich-text-editor/index.mjs +195 -513
  49. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +61 -111
  50. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +105 -415
  51. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +256 -511
  52. package/dist/client/components/fields/rich-text-field.mjs +14 -53
  53. package/dist/client/components/fields/select-field.mjs +39 -74
  54. package/dist/client/components/fields/text-field.mjs +26 -59
  55. package/dist/client/components/fields/textarea-field.mjs +26 -58
  56. package/dist/client/components/fields/time-field.mjs +7 -35
  57. package/dist/client/components/fields/upload-field.mjs +47 -165
  58. package/dist/client/components/filter-builder/columns-tab.mjs +80 -280
  59. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +197 -540
  60. package/dist/client/components/filter-builder/filters-tab.mjs +96 -386
  61. package/dist/client/components/filter-builder/saved-views-tab.mjs +133 -351
  62. package/dist/client/components/history-sidebar.mjs +285 -605
  63. package/dist/client/components/layout/field-layout-renderer.mjs +106 -254
  64. package/dist/client/components/locale-switcher.mjs +106 -228
  65. package/dist/client/components/media/media-grid.mjs +84 -273
  66. package/dist/client/components/media/media-picker-dialog.mjs +176 -476
  67. package/dist/client/components/preview/live-preview-mode.mjs +233 -458
  68. package/dist/client/components/preview/preview-pane.mjs +22 -22
  69. package/dist/client/components/primitives/asset-preview.mjs +290 -666
  70. package/dist/client/components/primitives/checkbox-input.mjs +9 -35
  71. package/dist/client/components/primitives/date-input.mjs +109 -327
  72. package/dist/client/components/primitives/dropzone.mjs +209 -336
  73. package/dist/client/components/primitives/field-select-control.mjs +12 -80
  74. package/dist/client/components/primitives/number-input.mjs +4 -4
  75. package/dist/client/components/primitives/select-multi.mjs +200 -559
  76. package/dist/client/components/primitives/select-single.mjs +165 -499
  77. package/dist/client/components/primitives/time-input.mjs +43 -117
  78. package/dist/client/components/primitives/toggle-input.mjs +9 -29
  79. package/dist/client/components/sheets/resource-sheet.mjs +61 -70
  80. package/dist/client/components/ui/accordion.mjs +35 -155
  81. package/dist/client/components/ui/alert.mjs +13 -68
  82. package/dist/client/components/ui/badge.mjs +9 -51
  83. package/dist/client/components/ui/button.mjs +8 -54
  84. package/dist/client/components/ui/card.mjs +37 -193
  85. package/dist/client/components/ui/checkbox.mjs +12 -68
  86. package/dist/client/components/ui/command.mjs +48 -219
  87. package/dist/client/components/ui/dialog.mjs +50 -262
  88. package/dist/client/components/ui/drawer.mjs +55 -259
  89. package/dist/client/components/ui/dropdown-menu.mjs +86 -427
  90. package/dist/client/components/ui/empty-state.mjs +28 -98
  91. package/dist/client/components/ui/field.mjs +73 -309
  92. package/dist/client/components/ui/input-group.mjs +42 -167
  93. package/dist/client/components/ui/input.mjs +7 -37
  94. package/dist/client/components/ui/kbd.mjs +6 -36
  95. package/dist/client/components/ui/label.mjs +7 -37
  96. package/dist/client/components/ui/popover.mjs +34 -169
  97. package/dist/client/components/ui/responsive-dialog.mjs +67 -273
  98. package/dist/client/components/ui/scroll-fade.mjs +63 -158
  99. package/dist/client/components/ui/search-input.mjs +33 -100
  100. package/dist/client/components/ui/select.mjs +72 -393
  101. package/dist/client/components/ui/separator.mjs +7 -38
  102. package/dist/client/components/ui/sheet.mjs +49 -269
  103. package/dist/client/components/ui/sidebar.mjs +171 -690
  104. package/dist/client/components/ui/skeleton.mjs +7 -38
  105. package/dist/client/components/ui/sonner.mjs +11 -42
  106. package/dist/client/components/ui/switch.mjs +9 -45
  107. package/dist/client/components/ui/table.mjs +48 -266
  108. package/dist/client/components/ui/tabs.mjs +26 -139
  109. package/dist/client/components/ui/textarea.mjs +6 -32
  110. package/dist/client/components/ui/tooltip.mjs +27 -129
  111. package/dist/client/components/widgets/chart-widget.mjs +174 -522
  112. package/dist/client/components/widgets/progress-widget.mjs +66 -172
  113. package/dist/client/components/widgets/quick-actions-widget.mjs +102 -261
  114. package/dist/client/components/widgets/recent-items-widget.mjs +69 -195
  115. package/dist/client/components/widgets/stats-widget.mjs +41 -175
  116. package/dist/client/components/widgets/table-widget.mjs +9 -9
  117. package/dist/client/components/widgets/timeline-widget.mjs +86 -226
  118. package/dist/client/components/widgets/value-widget.mjs +74 -381
  119. package/dist/client/components/widgets/widget-empty-state.mjs +26 -76
  120. package/dist/client/components/widgets/widget-skeletons.mjs +138 -421
  121. package/dist/client/contexts/focus-context.mjs +63 -146
  122. package/dist/client/hooks/typed-hooks.mjs +241 -701
  123. package/dist/client/hooks/use-action.mjs +62 -198
  124. package/dist/client/hooks/use-admin-config.mjs +5 -35
  125. package/dist/client/hooks/use-admin-preferences.mjs +16 -88
  126. package/dist/client/hooks/use-admin-routes.mjs +22 -56
  127. package/dist/client/hooks/use-audit-history.mjs +21 -69
  128. package/dist/client/hooks/use-brand.mjs +1 -9
  129. package/dist/client/hooks/use-collection-fields.mjs +17 -57
  130. package/dist/client/hooks/use-collection-meta.mjs +12 -44
  131. package/dist/client/hooks/use-collection-schema.mjs +10 -33
  132. package/dist/client/hooks/use-collection-validation.mjs +23 -53
  133. package/dist/client/hooks/use-collection.mjs +194 -614
  134. package/dist/client/hooks/use-current-user.mjs +0 -1
  135. package/dist/client/hooks/use-field-hooks.mjs +10 -10
  136. package/dist/client/hooks/use-field-options.mjs +61 -202
  137. package/dist/client/hooks/use-global-fields.mjs +14 -46
  138. package/dist/client/hooks/use-global-meta.mjs +9 -30
  139. package/dist/client/hooks/use-global-schema.mjs +9 -30
  140. package/dist/client/hooks/use-global.mjs +63 -219
  141. package/dist/client/hooks/use-locks.mjs +117 -325
  142. package/dist/client/hooks/use-media-query.mjs +16 -36
  143. package/dist/client/hooks/use-prefill-params.mjs +0 -1
  144. package/dist/client/hooks/use-questpie-query-options.mjs +12 -29
  145. package/dist/client/hooks/use-reactive-fields.mjs +1 -1
  146. package/dist/client/hooks/use-reactive-prop.mjs +65 -223
  147. package/dist/client/hooks/use-realtime-highlight.mjs +51 -114
  148. package/dist/client/hooks/use-saved-views.mjs +22 -103
  149. package/dist/client/hooks/use-search-param-toggle.mjs +28 -79
  150. package/dist/client/hooks/use-search.mjs +31 -143
  151. package/dist/client/hooks/use-server-actions.mjs +18 -50
  152. package/dist/client/hooks/use-server-validation.mjs +72 -166
  153. package/dist/client/hooks/use-server-widget-data.mjs +7 -33
  154. package/dist/client/hooks/use-setup-status.mjs +12 -25
  155. package/dist/client/hooks/use-sidebar-search-param.mjs +33 -78
  156. package/dist/client/hooks/use-transition-stage.mjs +8 -38
  157. package/dist/client/hooks/use-upload.mjs +54 -152
  158. package/dist/client/hooks/use-validation-error-map.mjs +6 -26
  159. package/dist/client/hooks/use-view-state.mjs +187 -437
  160. package/dist/client/i18n/hooks.mjs +65 -197
  161. package/dist/client/lib/render-profiler.mjs +14 -41
  162. package/dist/client/preview/block-scope-context.d.mts +2 -2
  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.d.mts +2 -2
  174. package/dist/client/scope/picker.mjs +86 -321
  175. package/dist/client/scope/provider.d.mts +2 -2
  176. package/dist/client/scope/provider.mjs +8 -17
  177. package/dist/client/views/auth/accept-invite-form.d.mts +2 -2
  178. package/dist/client/views/auth/accept-invite-form.mjs +121 -412
  179. package/dist/client/views/auth/auth-layout.d.mts +3 -3
  180. package/dist/client/views/auth/auth-layout.mjs +104 -284
  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 +109 -363
  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.mjs +41 -121
  222. package/dist/client/views/pages/reset-password-page.mjs +46 -173
  223. package/dist/client/views/pages/setup-page.mjs +33 -95
  224. package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
  225. package/dist/components/rich-text/rich-text-renderer.mjs +9 -33
  226. package/dist/server/modules/admin/collections/account.d.mts +46 -46
  227. package/dist/server/modules/admin/collections/admin-locks.d.mts +50 -50
  228. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  229. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  230. package/dist/server/modules/admin/collections/apikey.d.mts +68 -68
  231. package/dist/server/modules/admin/collections/assets.d.mts +39 -39
  232. package/dist/server/modules/admin/collections/session.d.mts +41 -41
  233. package/dist/server/modules/admin/collections/user.d.mts +63 -63
  234. package/dist/server/modules/admin/collections/verification.d.mts +36 -36
  235. package/dist/server/modules/admin/index.d.mts +20 -19
  236. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  237. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  238. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  239. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  240. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  241. package/dist/server/modules/admin/routes/setup.d.mts +7 -7
  242. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  243. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  244. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +45 -45
  245. package/dist/server/modules/audit/.generated/module.d.mts +6 -6
  246. package/dist/server/modules/audit/collections/audit-log.d.mts +78 -78
  247. package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +2 -2
  248. 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