@questpie/admin 3.2.3 → 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 (244) 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 +106 -220
  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 +107 -313
  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 -182
  47. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +8 -19
  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 +196 -530
  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 +39 -74
  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 +306 -611
  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 +177 -494
  68. package/dist/client/components/preview/live-preview-mode.mjs +240 -438
  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 +200 -559
  77. package/dist/client/components/primitives/select-single.mjs +165 -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.d.mts +4 -0
  123. package/dist/client/contexts/focus-context.mjs +87 -150
  124. package/dist/client/hooks/typed-hooks.mjs +241 -701
  125. package/dist/client/hooks/use-action.mjs +62 -198
  126. package/dist/client/hooks/use-admin-config.mjs +5 -35
  127. package/dist/client/hooks/use-admin-preferences.mjs +16 -88
  128. package/dist/client/hooks/use-admin-routes.mjs +22 -56
  129. package/dist/client/hooks/use-audit-history.mjs +21 -69
  130. package/dist/client/hooks/use-brand.mjs +1 -9
  131. package/dist/client/hooks/use-collection-fields.mjs +17 -57
  132. package/dist/client/hooks/use-collection-meta.mjs +12 -44
  133. package/dist/client/hooks/use-collection-schema.mjs +10 -33
  134. package/dist/client/hooks/use-collection-validation.mjs +23 -53
  135. package/dist/client/hooks/use-collection.mjs +194 -614
  136. package/dist/client/hooks/use-current-user.mjs +0 -1
  137. package/dist/client/hooks/use-field-hooks.mjs +10 -10
  138. package/dist/client/hooks/use-field-options.mjs +61 -202
  139. package/dist/client/hooks/use-global-fields.mjs +14 -46
  140. package/dist/client/hooks/use-global-meta.mjs +9 -30
  141. package/dist/client/hooks/use-global-schema.mjs +9 -30
  142. package/dist/client/hooks/use-global.mjs +63 -219
  143. package/dist/client/hooks/use-locks.mjs +117 -325
  144. package/dist/client/hooks/use-media-query.mjs +16 -36
  145. package/dist/client/hooks/use-prefill-params.mjs +0 -1
  146. package/dist/client/hooks/use-questpie-query-options.mjs +12 -29
  147. package/dist/client/hooks/use-reactive-fields.mjs +1 -1
  148. package/dist/client/hooks/use-reactive-prop.mjs +65 -223
  149. package/dist/client/hooks/use-realtime-highlight.mjs +51 -114
  150. package/dist/client/hooks/use-saved-views.mjs +22 -103
  151. package/dist/client/hooks/use-search-param-toggle.mjs +28 -79
  152. package/dist/client/hooks/use-search.mjs +31 -143
  153. package/dist/client/hooks/use-server-actions.mjs +18 -50
  154. package/dist/client/hooks/use-server-validation.mjs +72 -166
  155. package/dist/client/hooks/use-server-widget-data.mjs +7 -33
  156. package/dist/client/hooks/use-setup-status.mjs +12 -25
  157. package/dist/client/hooks/use-sidebar-search-param.mjs +33 -78
  158. package/dist/client/hooks/use-transition-stage.mjs +8 -38
  159. package/dist/client/hooks/use-upload.mjs +54 -152
  160. package/dist/client/hooks/use-validation-error-map.mjs +6 -26
  161. package/dist/client/hooks/use-view-state.mjs +187 -437
  162. package/dist/client/i18n/hooks.mjs +65 -197
  163. package/dist/client/lib/render-profiler.mjs +14 -41
  164. package/dist/client/preview/block-scope-context.d.mts +2 -2
  165. package/dist/client/preview/block-scope-context.mjs +14 -36
  166. package/dist/client/preview/diff.mjs +110 -0
  167. package/dist/client/preview/preview-banner.mjs +42 -108
  168. package/dist/client/preview/preview-field.d.mts +4 -4
  169. package/dist/client/preview/preview-field.mjs +166 -409
  170. package/dist/client/preview/use-collection-preview.mjs +135 -201
  171. package/dist/client/runtime/content-locales-provider.mjs +31 -83
  172. package/dist/client/runtime/locale-scope.mjs +22 -63
  173. package/dist/client/runtime/provider.mjs +100 -255
  174. package/dist/client/runtime/translations-provider.mjs +41 -107
  175. package/dist/client/scope/picker.d.mts +2 -2
  176. package/dist/client/scope/picker.mjs +86 -321
  177. package/dist/client/scope/provider.d.mts +2 -2
  178. package/dist/client/scope/provider.mjs +8 -17
  179. package/dist/client/views/auth/accept-invite-form.d.mts +2 -2
  180. package/dist/client/views/auth/accept-invite-form.mjs +121 -412
  181. package/dist/client/views/auth/auth-layout.d.mts +3 -3
  182. package/dist/client/views/auth/auth-layout.mjs +104 -284
  183. package/dist/client/views/auth/forgot-password-form.d.mts +2 -2
  184. package/dist/client/views/auth/forgot-password-form.mjs +94 -325
  185. package/dist/client/views/auth/invite-form.mjs +107 -442
  186. package/dist/client/views/auth/login-form.d.mts +2 -2
  187. package/dist/client/views/auth/login-form.mjs +116 -337
  188. package/dist/client/views/auth/reset-password-form.mjs +128 -453
  189. package/dist/client/views/auth/setup-form.mjs +140 -478
  190. package/dist/client/views/collection/auto-form-fields.mjs +243 -615
  191. package/dist/client/views/collection/bulk-action-toolbar.mjs +212 -400
  192. package/dist/client/views/collection/cells/complex-cells.mjs +183 -611
  193. package/dist/client/views/collection/cells/primitive-cells.mjs +109 -363
  194. package/dist/client/views/collection/cells/relation-cells.mjs +86 -233
  195. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +142 -371
  196. package/dist/client/views/collection/cells/shared/relation-chip.mjs +35 -131
  197. package/dist/client/views/collection/cells/upload-cells.mjs +60 -177
  198. package/dist/client/views/collection/columns/build-columns.mjs +8 -48
  199. package/dist/client/views/collection/field-renderer.mjs +11 -24
  200. package/dist/client/views/collection/form-view.mjs +288 -560
  201. package/dist/client/views/collection/table-view.mjs +239 -469
  202. package/dist/client/views/collection/view-skeletons.mjs +112 -237
  203. package/dist/client/views/common/global-search.mjs +241 -543
  204. package/dist/client/views/dashboard/dashboard-grid.mjs +256 -775
  205. package/dist/client/views/dashboard/dashboard-widget.mjs +38 -126
  206. package/dist/client/views/dashboard/widget-card.mjs +61 -269
  207. package/dist/client/views/globals/global-form-view.mjs +478 -1298
  208. package/dist/client/views/layout/admin-layout-provider.mjs +28 -88
  209. package/dist/client/views/layout/admin-layout.mjs +83 -246
  210. package/dist/client/views/layout/admin-router.mjs +457 -1289
  211. package/dist/client/views/layout/admin-sidebar.mjs +510 -1292
  212. package/dist/client/views/layout/admin-theme.mjs +30 -64
  213. package/dist/client/views/layout/admin-view-layout.mjs +40 -144
  214. package/dist/client/views/pages/accept-invite-page.mjs +95 -290
  215. package/dist/client/views/pages/dashboard-page.mjs +11 -57
  216. package/dist/client/views/pages/forgot-password-page.mjs +31 -83
  217. package/dist/client/views/pages/invite-page.mjs +35 -90
  218. package/dist/client/views/pages/login-page.mjs +41 -121
  219. package/dist/client/views/pages/reset-password-page.d.mts +2 -2
  220. package/dist/client/views/pages/reset-password-page.mjs +46 -173
  221. package/dist/client/views/pages/setup-page.d.mts +2 -2
  222. package/dist/client/views/pages/setup-page.mjs +33 -95
  223. package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
  224. package/dist/components/rich-text/rich-text-renderer.mjs +9 -33
  225. package/dist/server/modules/admin/collections/account.d.mts +50 -50
  226. package/dist/server/modules/admin/collections/admin-locks.d.mts +54 -54
  227. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  228. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  229. package/dist/server/modules/admin/collections/apikey.d.mts +68 -68
  230. package/dist/server/modules/admin/collections/assets.d.mts +34 -34
  231. package/dist/server/modules/admin/collections/session.d.mts +42 -42
  232. package/dist/server/modules/admin/collections/user.d.mts +53 -53
  233. package/dist/server/modules/admin/collections/verification.d.mts +36 -36
  234. package/dist/server/modules/admin/index.d.mts +21 -20
  235. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  236. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  237. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  238. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  239. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  240. package/dist/server/modules/admin/routes/setup.d.mts +7 -7
  241. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  242. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  243. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +27 -27
  244. package/package.json +3 -5
@@ -7,9 +7,8 @@ import { SelectSingle } from "../primitives/select-single.mjs";
7
7
  import { ColumnsTab } from "./columns-tab.mjs";
8
8
  import { FiltersTab } from "./filters-tab.mjs";
9
9
  import { SavedViewsTab } from "./saved-views-tab.mjs";
10
- import { c } from "react/compiler-runtime";
11
10
  import { Icon } from "@iconify/react";
12
- import { useState } from "react";
11
+ import { useMemo, useState } from "react";
13
12
  import { jsx, jsxs } from "react/jsx-runtime";
14
13
 
15
14
  //#region src/client/components/filter-builder/filter-builder-sheet.tsx
@@ -50,79 +49,32 @@ function normalizeSavedViewConfig(config) {
50
49
  }
51
50
  };
52
51
  }
53
- function ViewOptionRow(t0) {
54
- const $ = c(12);
55
- const { title, description, control } = t0;
56
- let t1;
57
- if ($[0] !== title) {
58
- t1 = /* @__PURE__ */ jsx("p", {
59
- className: "text-sm font-medium",
60
- children: title
61
- });
62
- $[0] = title;
63
- $[1] = t1;
64
- } else t1 = $[1];
65
- let t2;
66
- if ($[2] !== description) {
67
- t2 = /* @__PURE__ */ jsx("p", {
68
- className: "text-muted-foreground mt-0.5 text-xs text-pretty",
69
- children: description
70
- });
71
- $[2] = description;
72
- $[3] = t2;
73
- } else t2 = $[3];
74
- let t3;
75
- if ($[4] !== t1 || $[5] !== t2) {
76
- t3 = /* @__PURE__ */ jsxs("div", {
52
+ function ViewOptionRow({ title, description, control }) {
53
+ return /* @__PURE__ */ jsxs("div", {
54
+ className: "border-border-subtle flex items-center justify-between gap-4 border-b py-3 last:border-b-0",
55
+ children: [/* @__PURE__ */ jsxs("div", {
77
56
  className: "min-w-0",
78
- children: [t1, t2]
79
- });
80
- $[4] = t1;
81
- $[5] = t2;
82
- $[6] = t3;
83
- } else t3 = $[6];
84
- let t4;
85
- if ($[7] !== control) {
86
- t4 = /* @__PURE__ */ jsx("div", {
57
+ children: [/* @__PURE__ */ jsx("p", {
58
+ className: "text-sm font-medium",
59
+ children: title
60
+ }), /* @__PURE__ */ jsx("p", {
61
+ className: "text-muted-foreground mt-0.5 text-xs text-pretty",
62
+ children: description
63
+ })]
64
+ }), /* @__PURE__ */ jsx("div", {
87
65
  className: "shrink-0",
88
66
  children: control
89
- });
90
- $[7] = control;
91
- $[8] = t4;
92
- } else t4 = $[8];
93
- let t5;
94
- if ($[9] !== t3 || $[10] !== t4) {
95
- t5 = /* @__PURE__ */ jsxs("div", {
96
- className: "border-border-subtle flex items-center justify-between gap-4 border-b py-3 last:border-b-0",
97
- children: [t3, t4]
98
- });
99
- $[9] = t3;
100
- $[10] = t4;
101
- $[11] = t5;
102
- } else t5 = $[11];
103
- return t5;
67
+ })]
68
+ });
104
69
  }
105
- function FilterBuilderSheet(t0) {
106
- const $ = c(124);
107
- const { collection, availableFields, currentConfig, onConfigChange, isOpen, onOpenChange, defaultColumns, savedViews, savedViewsLoading: t1, onSaveView, onDeleteView, supportsSoftDelete: t2, groupableFields: t3, defaultGroupBy: t4 } = t0;
108
- const savedViewsLoading = t1 === void 0 ? false : t1;
109
- const supportsSoftDelete = t2 === void 0 ? false : t2;
110
- const groupableFields = t3 === void 0 ? EMPTY_GROUPABLE_FIELDS : t3;
111
- const defaultGroupBy = t4 === void 0 ? null : t4;
70
+ function FilterBuilderSheet({ collection, availableFields, currentConfig, onConfigChange, isOpen, onOpenChange, defaultColumns, savedViews, savedViewsLoading = false, onSaveView, onDeleteView, supportsSoftDelete = false, groupableFields = EMPTY_GROUPABLE_FIELDS, defaultGroupBy = null }) {
112
71
  const resolvedSavedViews = savedViews ?? EMPTY_SAVED_VIEWS;
113
72
  const { t } = useTranslation();
114
73
  const [localConfig, setLocalConfig] = useState(currentConfig);
115
- let t5;
116
- if ($[0] !== currentConfig || $[1] !== isOpen) {
117
- t5 = {
118
- isOpen,
119
- currentConfig
120
- };
121
- $[0] = currentConfig;
122
- $[1] = isOpen;
123
- $[2] = t5;
124
- } else t5 = $[2];
125
- const [prev, setPrev] = useState(t5);
74
+ const [prev, setPrev] = useState({
75
+ isOpen,
76
+ currentConfig
77
+ });
126
78
  if (prev.isOpen !== isOpen || prev.currentConfig !== currentConfig) {
127
79
  setPrev({
128
80
  isOpen,
@@ -130,486 +82,191 @@ function FilterBuilderSheet(t0) {
130
82
  });
131
83
  if (isOpen) setLocalConfig(currentConfig);
132
84
  }
133
- let t6;
134
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
135
- t6 = (view) => {
136
- setLocalConfig(normalizeSavedViewConfig(view.configuration));
137
- };
138
- $[3] = t6;
139
- } else t6 = $[3];
140
- const handleLoadView = t6;
141
- let t7;
142
- if ($[4] !== localConfig || $[5] !== onSaveView) {
143
- t7 = (name) => {
144
- onSaveView?.(name, normalizeSavedViewConfig(localConfig));
145
- };
146
- $[4] = localConfig;
147
- $[5] = onSaveView;
148
- $[6] = t7;
149
- } else t7 = $[6];
150
- const handleSaveView = t7;
151
- let t8;
152
- if ($[7] !== localConfig || $[8] !== onConfigChange || $[9] !== onOpenChange) {
153
- t8 = () => {
154
- onConfigChange(localConfig);
155
- onOpenChange(false);
156
- };
157
- $[7] = localConfig;
158
- $[8] = onConfigChange;
159
- $[9] = onOpenChange;
160
- $[10] = t8;
161
- } else t8 = $[10];
162
- const handleApply = t8;
163
- let t9;
164
- if ($[11] !== availableFields || $[12] !== defaultColumns || $[13] !== defaultGroupBy) {
165
- t9 = () => {
166
- setLocalConfig({
167
- filters: [],
168
- sortConfig: null,
169
- visibleColumns: defaultColumns ?? availableFields.map(_temp),
170
- groupBy: defaultGroupBy,
171
- collapsedGroups: [],
172
- realtime: void 0,
173
- includeDeleted: false
174
- });
175
- };
176
- $[11] = availableFields;
177
- $[12] = defaultColumns;
178
- $[13] = defaultGroupBy;
179
- $[14] = t9;
180
- } else t9 = $[14];
181
- const handleReset = t9;
182
- let t10;
183
- if ($[15] !== currentConfig || $[16] !== localConfig) {
184
- t10 = viewConfigEqual(localConfig, currentConfig);
185
- $[15] = currentConfig;
186
- $[16] = localConfig;
187
- $[17] = t10;
188
- } else t10 = $[17];
189
- const hasChanges = !t10;
190
- let t11;
191
- if ($[18] !== t) {
192
- t11 = t("viewOptions.noGrouping");
193
- $[18] = t;
194
- $[19] = t11;
195
- } else t11 = $[19];
196
- let t12;
197
- if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
198
- t12 = /* @__PURE__ */ jsx(Icon, {
85
+ const handleLoadView = (view) => {
86
+ setLocalConfig(normalizeSavedViewConfig(view.configuration));
87
+ };
88
+ const handleSaveView = (name) => {
89
+ onSaveView?.(name, normalizeSavedViewConfig(localConfig));
90
+ };
91
+ const handleApply = () => {
92
+ onConfigChange(localConfig);
93
+ onOpenChange(false);
94
+ };
95
+ const handleReset = () => {
96
+ setLocalConfig({
97
+ filters: [],
98
+ sortConfig: null,
99
+ visibleColumns: defaultColumns ?? availableFields.map((f) => f.name),
100
+ groupBy: defaultGroupBy,
101
+ collapsedGroups: [],
102
+ realtime: void 0,
103
+ includeDeleted: false
104
+ });
105
+ };
106
+ const hasChanges = !viewConfigEqual(localConfig, currentConfig);
107
+ const groupByOptions = useMemo(() => [{
108
+ value: NO_GROUPING_VALUE,
109
+ label: t("viewOptions.noGrouping"),
110
+ icon: /* @__PURE__ */ jsx(Icon, {
199
111
  icon: "ph:stack-simple",
200
112
  className: "size-4 opacity-60"
201
- });
202
- $[20] = t12;
203
- } else t12 = $[20];
204
- let t13;
205
- if ($[21] !== t11) {
206
- t13 = {
207
- value: NO_GROUPING_VALUE,
208
- label: t11,
209
- icon: t12
210
- };
211
- $[21] = t11;
212
- $[22] = t13;
213
- } else t13 = $[22];
214
- let t14;
215
- if ($[23] !== groupableFields || $[24] !== t13) {
216
- t14 = [t13, ...groupableFields.map(_temp2)];
217
- $[23] = groupableFields;
218
- $[24] = t13;
219
- $[25] = t14;
220
- } else t14 = $[25];
221
- const groupByOptions = t14;
222
- let t15;
223
- if ($[26] !== t) {
224
- t15 = t("viewOptions.title");
225
- $[26] = t;
226
- $[27] = t15;
227
- } else t15 = $[27];
228
- let t16;
229
- if ($[28] !== t15) {
230
- t16 = /* @__PURE__ */ jsx(SheetHeader, {
231
- className: "px-6 pt-6",
232
- children: /* @__PURE__ */ jsx(SheetTitle, { children: t15 })
233
- });
234
- $[28] = t15;
235
- $[29] = t16;
236
- } else t16 = $[29];
237
- let t17;
238
- if ($[30] !== t) {
239
- t17 = t("viewOptions.realtime");
240
- $[30] = t;
241
- $[31] = t17;
242
- } else t17 = $[31];
243
- let t18;
244
- if ($[32] !== t) {
245
- t18 = t("viewOptions.realtimeDescription");
246
- $[32] = t;
247
- $[33] = t18;
248
- } else t18 = $[33];
249
- const t19 = localConfig.realtime ?? true;
250
- let t20;
251
- if ($[34] !== localConfig) {
252
- t20 = (checked) => setLocalConfig({
253
- ...localConfig,
254
- realtime: checked
255
- });
256
- $[34] = localConfig;
257
- $[35] = t20;
258
- } else t20 = $[35];
259
- let t21;
260
- if ($[36] !== t19 || $[37] !== t20) {
261
- t21 = /* @__PURE__ */ jsx(Switch, {
262
- checked: t19,
263
- onCheckedChange: t20
264
- });
265
- $[36] = t19;
266
- $[37] = t20;
267
- $[38] = t21;
268
- } else t21 = $[38];
269
- let t22;
270
- if ($[39] !== t17 || $[40] !== t18 || $[41] !== t21) {
271
- t22 = /* @__PURE__ */ jsx(ViewOptionRow, {
272
- title: t17,
273
- description: t18,
274
- control: t21
275
- });
276
- $[39] = t17;
277
- $[40] = t18;
278
- $[41] = t21;
279
- $[42] = t22;
280
- } else t22 = $[42];
281
- let t23;
282
- if ($[43] !== localConfig || $[44] !== supportsSoftDelete || $[45] !== t) {
283
- t23 = supportsSoftDelete && /* @__PURE__ */ jsx(ViewOptionRow, {
284
- title: t("viewOptions.showDeleted"),
285
- description: t("viewOptions.showDeletedDescription"),
286
- control: /* @__PURE__ */ jsx(Switch, {
287
- checked: localConfig.includeDeleted ?? false,
288
- onCheckedChange: (checked_0) => setLocalConfig({
289
- ...localConfig,
290
- includeDeleted: checked_0
291
- })
292
- })
293
- });
294
- $[43] = localConfig;
295
- $[44] = supportsSoftDelete;
296
- $[45] = t;
297
- $[46] = t23;
298
- } else t23 = $[46];
299
- let t24;
300
- if ($[47] !== groupByOptions || $[48] !== groupableFields.length || $[49] !== localConfig || $[50] !== t) {
301
- t24 = groupableFields.length > 0 && /* @__PURE__ */ jsx(ViewOptionRow, {
302
- title: t("viewOptions.groupBy"),
303
- description: t("viewOptions.groupByDescription"),
304
- control: /* @__PURE__ */ jsx(SelectSingle, {
305
- id: "view-options-group-by",
306
- value: localConfig.groupBy ?? NO_GROUPING_VALUE,
307
- onChange: (value) => {
308
- const nextGroupBy = !value || value === NO_GROUPING_VALUE ? null : value;
309
- setLocalConfig({
310
- ...localConfig,
311
- groupBy: nextGroupBy,
312
- collapsedGroups: [],
313
- pagination: {
314
- ...localConfig.pagination ?? { pageSize: 25 },
315
- page: 1
316
- }
317
- });
318
- },
319
- options: groupByOptions,
320
- clearable: false,
321
- emptyMessage: t("viewOptions.noFieldsAvailable"),
322
- placeholder: t("viewOptions.noGrouping"),
323
- drawerTitle: t("viewOptions.groupBy"),
324
- className: "h-9 w-48"
325
- })
326
- });
327
- $[47] = groupByOptions;
328
- $[48] = groupableFields.length;
329
- $[49] = localConfig;
330
- $[50] = t;
331
- $[51] = t24;
332
- } else t24 = $[51];
333
- let t25;
334
- if ($[52] !== t22 || $[53] !== t23 || $[54] !== t24) {
335
- t25 = /* @__PURE__ */ jsxs("div", {
336
- className: "mt-4",
337
- children: [
338
- t22,
339
- t23,
340
- t24
341
- ]
342
- });
343
- $[52] = t22;
344
- $[53] = t23;
345
- $[54] = t24;
346
- $[55] = t25;
347
- } else t25 = $[55];
348
- let t26;
349
- if ($[56] !== t) {
350
- t26 = t("viewOptions.columns");
351
- $[56] = t;
352
- $[57] = t26;
353
- } else t26 = $[57];
354
- let t27;
355
- if ($[58] !== t26) {
356
- t27 = /* @__PURE__ */ jsx(TabsTrigger, {
357
- value: "columns",
358
- className: "flex-1",
359
- children: t26
360
- });
361
- $[58] = t26;
362
- $[59] = t27;
363
- } else t27 = $[59];
364
- let t28;
365
- if ($[60] !== t) {
366
- t28 = t("viewOptions.filters");
367
- $[60] = t;
368
- $[61] = t28;
369
- } else t28 = $[61];
370
- let t29;
371
- if ($[62] !== localConfig.filters.length) {
372
- t29 = localConfig.filters.length > 0 && /* @__PURE__ */ jsx("span", {
373
- className: "bg-foreground text-background ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums",
374
- children: localConfig.filters.length
375
- });
376
- $[62] = localConfig.filters.length;
377
- $[63] = t29;
378
- } else t29 = $[63];
379
- let t30;
380
- if ($[64] !== t28 || $[65] !== t29) {
381
- t30 = /* @__PURE__ */ jsxs(TabsTrigger, {
382
- value: "filters",
383
- className: "flex-1",
384
- children: [t28, t29]
385
- });
386
- $[64] = t28;
387
- $[65] = t29;
388
- $[66] = t30;
389
- } else t30 = $[66];
390
- let t31;
391
- if ($[67] !== t) {
392
- t31 = t("viewOptions.savedViews");
393
- $[67] = t;
394
- $[68] = t31;
395
- } else t31 = $[68];
396
- let t32;
397
- if ($[69] !== t31) {
398
- t32 = /* @__PURE__ */ jsx(TabsTrigger, {
399
- value: "views",
400
- className: "flex-1",
401
- children: t31
402
- });
403
- $[69] = t31;
404
- $[70] = t32;
405
- } else t32 = $[70];
406
- let t33;
407
- if ($[71] !== t27 || $[72] !== t30 || $[73] !== t32) {
408
- t33 = /* @__PURE__ */ jsxs(TabsList, {
409
- className: "w-full",
410
- children: [
411
- t27,
412
- t30,
413
- t32
414
- ]
415
- });
416
- $[71] = t27;
417
- $[72] = t30;
418
- $[73] = t32;
419
- $[74] = t33;
420
- } else t33 = $[74];
421
- let t34;
422
- if ($[75] !== localConfig) {
423
- t34 = (columns) => setLocalConfig({
424
- ...localConfig,
425
- visibleColumns: columns
426
- });
427
- $[75] = localConfig;
428
- $[76] = t34;
429
- } else t34 = $[76];
430
- let t35;
431
- if ($[77] !== availableFields || $[78] !== localConfig.visibleColumns || $[79] !== t34) {
432
- t35 = /* @__PURE__ */ jsx(TabsContent, {
433
- value: "columns",
434
- children: /* @__PURE__ */ jsx(ColumnsTab, {
435
- fields: availableFields,
436
- visibleColumns: localConfig.visibleColumns,
437
- onVisibleColumnsChange: t34
438
- })
439
- });
440
- $[77] = availableFields;
441
- $[78] = localConfig.visibleColumns;
442
- $[79] = t34;
443
- $[80] = t35;
444
- } else t35 = $[80];
445
- let t36;
446
- if ($[81] !== localConfig) {
447
- t36 = (filters) => setLocalConfig({
448
- ...localConfig,
449
- filters
450
- });
451
- $[81] = localConfig;
452
- $[82] = t36;
453
- } else t36 = $[82];
454
- let t37;
455
- if ($[83] !== availableFields || $[84] !== localConfig.filters || $[85] !== t36) {
456
- t37 = /* @__PURE__ */ jsx(TabsContent, {
457
- value: "filters",
458
- children: /* @__PURE__ */ jsx(FiltersTab, {
459
- fields: availableFields,
460
- filters: localConfig.filters,
461
- onFiltersChange: t36
462
- })
463
- });
464
- $[83] = availableFields;
465
- $[84] = localConfig.filters;
466
- $[85] = t36;
467
- $[86] = t37;
468
- } else t37 = $[86];
469
- const t38 = onDeleteView || _temp3;
470
- let t39;
471
- if ($[87] !== collection || $[88] !== handleSaveView || $[89] !== localConfig || $[90] !== resolvedSavedViews || $[91] !== savedViewsLoading || $[92] !== t38) {
472
- t39 = /* @__PURE__ */ jsx(TabsContent, {
473
- value: "views",
474
- children: /* @__PURE__ */ jsx(SavedViewsTab, {
475
- collection,
476
- currentConfig: localConfig,
477
- savedViews: resolvedSavedViews,
478
- isLoading: savedViewsLoading,
479
- onLoadView: handleLoadView,
480
- onSaveView: handleSaveView,
481
- onDeleteView: t38
482
- })
483
- });
484
- $[87] = collection;
485
- $[88] = handleSaveView;
486
- $[89] = localConfig;
487
- $[90] = resolvedSavedViews;
488
- $[91] = savedViewsLoading;
489
- $[92] = t38;
490
- $[93] = t39;
491
- } else t39 = $[93];
492
- let t40;
493
- if ($[94] !== t33 || $[95] !== t35 || $[96] !== t37 || $[97] !== t39) {
494
- t40 = /* @__PURE__ */ jsxs(Tabs, {
495
- defaultValue: "columns",
496
- className: "mt-4",
497
- children: [
498
- t33,
499
- t35,
500
- t37,
501
- t39
502
- ]
503
- });
504
- $[94] = t33;
505
- $[95] = t35;
506
- $[96] = t37;
507
- $[97] = t39;
508
- $[98] = t40;
509
- } else t40 = $[98];
510
- let t41;
511
- if ($[99] !== t25 || $[100] !== t40) {
512
- t41 = /* @__PURE__ */ jsxs("div", {
513
- className: "flex-1 overflow-y-auto px-6",
514
- children: [t25, t40]
515
- });
516
- $[99] = t25;
517
- $[100] = t40;
518
- $[101] = t41;
519
- } else t41 = $[101];
520
- let t42;
521
- if ($[102] !== t) {
522
- t42 = t("viewOptions.reset");
523
- $[102] = t;
524
- $[103] = t42;
525
- } else t42 = $[103];
526
- let t43;
527
- if ($[104] !== handleReset || $[105] !== t42) {
528
- t43 = /* @__PURE__ */ jsx(Button, {
529
- variant: "outline",
530
- onClick: handleReset,
531
- className: "flex-1",
532
- children: t42
533
- });
534
- $[104] = handleReset;
535
- $[105] = t42;
536
- $[106] = t43;
537
- } else t43 = $[106];
538
- let t44;
539
- if ($[107] !== t) {
540
- t44 = t("viewOptions.apply");
541
- $[107] = t;
542
- $[108] = t44;
543
- } else t44 = $[108];
544
- const t45 = hasChanges && " *";
545
- let t46;
546
- if ($[109] !== handleApply || $[110] !== t44 || $[111] !== t45) {
547
- t46 = /* @__PURE__ */ jsxs(Button, {
548
- onClick: handleApply,
549
- className: "flex-1",
550
- children: [t44, t45]
551
- });
552
- $[109] = handleApply;
553
- $[110] = t44;
554
- $[111] = t45;
555
- $[112] = t46;
556
- } else t46 = $[112];
557
- let t47;
558
- if ($[113] !== t43 || $[114] !== t46) {
559
- t47 = /* @__PURE__ */ jsx(SheetFooter, {
560
- className: "mt-4 border-t px-6 py-4",
561
- children: /* @__PURE__ */ jsxs("div", {
562
- className: "flex w-full gap-2",
563
- children: [t43, t46]
564
- })
565
- });
566
- $[113] = t43;
567
- $[114] = t46;
568
- $[115] = t47;
569
- } else t47 = $[115];
570
- let t48;
571
- if ($[116] !== t16 || $[117] !== t41 || $[118] !== t47) {
572
- t48 = /* @__PURE__ */ jsxs(SheetContent, {
573
- side: "right",
574
- className: "qa-filter-builder flex flex-col p-0 sm:max-w-md",
575
- children: [
576
- t16,
577
- t41,
578
- t47
579
- ]
580
- });
581
- $[116] = t16;
582
- $[117] = t41;
583
- $[118] = t47;
584
- $[119] = t48;
585
- } else t48 = $[119];
586
- let t49;
587
- if ($[120] !== isOpen || $[121] !== onOpenChange || $[122] !== t48) {
588
- t49 = /* @__PURE__ */ jsx(Sheet, {
589
- open: isOpen,
590
- onOpenChange,
591
- children: t48
592
- });
593
- $[120] = isOpen;
594
- $[121] = onOpenChange;
595
- $[122] = t48;
596
- $[123] = t49;
597
- } else t49 = $[123];
598
- return t49;
599
- }
600
- function _temp3() {}
601
- function _temp2(field) {
602
- return {
113
+ })
114
+ }, ...groupableFields.map((field) => ({
603
115
  value: field.name,
604
116
  label: field.label,
605
117
  icon: /* @__PURE__ */ jsx(Icon, {
606
118
  icon: "ph:rows",
607
119
  className: "size-4 opacity-60"
608
120
  })
609
- };
610
- }
611
- function _temp(f) {
612
- return f.name;
121
+ }))], [groupableFields, t]);
122
+ return /* @__PURE__ */ jsx(Sheet, {
123
+ open: isOpen,
124
+ onOpenChange,
125
+ children: /* @__PURE__ */ jsxs(SheetContent, {
126
+ side: "right",
127
+ className: "qa-filter-builder flex flex-col p-0 sm:max-w-md",
128
+ children: [
129
+ /* @__PURE__ */ jsx(SheetHeader, {
130
+ className: "px-6 pt-6",
131
+ children: /* @__PURE__ */ jsx(SheetTitle, { children: t("viewOptions.title") })
132
+ }),
133
+ /* @__PURE__ */ jsxs("div", {
134
+ className: "flex-1 overflow-y-auto px-6",
135
+ children: [/* @__PURE__ */ jsxs("div", {
136
+ className: "mt-4",
137
+ children: [
138
+ /* @__PURE__ */ jsx(ViewOptionRow, {
139
+ title: t("viewOptions.realtime"),
140
+ description: t("viewOptions.realtimeDescription"),
141
+ control: /* @__PURE__ */ jsx(Switch, {
142
+ checked: localConfig.realtime ?? true,
143
+ onCheckedChange: (checked) => setLocalConfig({
144
+ ...localConfig,
145
+ realtime: checked
146
+ })
147
+ })
148
+ }),
149
+ supportsSoftDelete && /* @__PURE__ */ jsx(ViewOptionRow, {
150
+ title: t("viewOptions.showDeleted"),
151
+ description: t("viewOptions.showDeletedDescription"),
152
+ control: /* @__PURE__ */ jsx(Switch, {
153
+ checked: localConfig.includeDeleted ?? false,
154
+ onCheckedChange: (checked) => setLocalConfig({
155
+ ...localConfig,
156
+ includeDeleted: checked
157
+ })
158
+ })
159
+ }),
160
+ groupableFields.length > 0 && /* @__PURE__ */ jsx(ViewOptionRow, {
161
+ title: t("viewOptions.groupBy"),
162
+ description: t("viewOptions.groupByDescription"),
163
+ control: /* @__PURE__ */ jsx(SelectSingle, {
164
+ id: "view-options-group-by",
165
+ value: localConfig.groupBy ?? NO_GROUPING_VALUE,
166
+ onChange: (value) => {
167
+ const nextGroupBy = !value || value === NO_GROUPING_VALUE ? null : value;
168
+ setLocalConfig({
169
+ ...localConfig,
170
+ groupBy: nextGroupBy,
171
+ collapsedGroups: [],
172
+ pagination: {
173
+ ...localConfig.pagination ?? { pageSize: 25 },
174
+ page: 1
175
+ }
176
+ });
177
+ },
178
+ options: groupByOptions,
179
+ clearable: false,
180
+ emptyMessage: t("viewOptions.noFieldsAvailable"),
181
+ placeholder: t("viewOptions.noGrouping"),
182
+ drawerTitle: t("viewOptions.groupBy"),
183
+ className: "h-9 w-48"
184
+ })
185
+ })
186
+ ]
187
+ }), /* @__PURE__ */ jsxs(Tabs, {
188
+ defaultValue: "columns",
189
+ className: "mt-4",
190
+ children: [
191
+ /* @__PURE__ */ jsxs(TabsList, {
192
+ className: "w-full",
193
+ children: [
194
+ /* @__PURE__ */ jsx(TabsTrigger, {
195
+ value: "columns",
196
+ className: "flex-1",
197
+ children: t("viewOptions.columns")
198
+ }),
199
+ /* @__PURE__ */ jsxs(TabsTrigger, {
200
+ value: "filters",
201
+ className: "flex-1",
202
+ children: [t("viewOptions.filters"), localConfig.filters.length > 0 && /* @__PURE__ */ jsx("span", {
203
+ className: "bg-foreground text-background ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums",
204
+ children: localConfig.filters.length
205
+ })]
206
+ }),
207
+ /* @__PURE__ */ jsx(TabsTrigger, {
208
+ value: "views",
209
+ className: "flex-1",
210
+ children: t("viewOptions.savedViews")
211
+ })
212
+ ]
213
+ }),
214
+ /* @__PURE__ */ jsx(TabsContent, {
215
+ value: "columns",
216
+ children: /* @__PURE__ */ jsx(ColumnsTab, {
217
+ fields: availableFields,
218
+ visibleColumns: localConfig.visibleColumns,
219
+ onVisibleColumnsChange: (columns) => setLocalConfig({
220
+ ...localConfig,
221
+ visibleColumns: columns
222
+ })
223
+ })
224
+ }),
225
+ /* @__PURE__ */ jsx(TabsContent, {
226
+ value: "filters",
227
+ children: /* @__PURE__ */ jsx(FiltersTab, {
228
+ fields: availableFields,
229
+ filters: localConfig.filters,
230
+ onFiltersChange: (filters) => setLocalConfig({
231
+ ...localConfig,
232
+ filters
233
+ })
234
+ })
235
+ }),
236
+ /* @__PURE__ */ jsx(TabsContent, {
237
+ value: "views",
238
+ children: /* @__PURE__ */ jsx(SavedViewsTab, {
239
+ collection,
240
+ currentConfig: localConfig,
241
+ savedViews: resolvedSavedViews,
242
+ isLoading: savedViewsLoading,
243
+ onLoadView: handleLoadView,
244
+ onSaveView: handleSaveView,
245
+ onDeleteView: onDeleteView || (() => {})
246
+ })
247
+ })
248
+ ]
249
+ })]
250
+ }),
251
+ /* @__PURE__ */ jsx(SheetFooter, {
252
+ className: "mt-4 border-t px-6 py-4",
253
+ children: /* @__PURE__ */ jsxs("div", {
254
+ className: "flex w-full gap-2",
255
+ children: [/* @__PURE__ */ jsx(Button, {
256
+ variant: "outline",
257
+ onClick: handleReset,
258
+ className: "flex-1",
259
+ children: t("viewOptions.reset")
260
+ }), /* @__PURE__ */ jsxs(Button, {
261
+ onClick: handleApply,
262
+ className: "flex-1",
263
+ children: [t("viewOptions.apply"), hasChanges && " *"]
264
+ })]
265
+ })
266
+ })
267
+ ]
268
+ })
269
+ });
613
270
  }
614
271
 
615
272
  //#endregion