@questpie/admin 3.1.0 → 3.2.1
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.
- package/dist/client/blocks/block-renderer.d.mts +12 -2
- package/dist/client/blocks/block-renderer.mjs +357 -49
- package/dist/client/builder/page/page.d.mts +29 -1
- package/dist/client/components/blocks/block-editor-context.mjs +11 -1
- package/dist/client/components/blocks/block-editor-provider.mjs +68 -26
- package/dist/client/components/blocks/block-item.mjs +181 -170
- package/dist/client/components/blocks/utils/tree-utils.mjs +13 -1
- package/dist/client/components/fields/array-field.mjs +177 -118
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs +305 -310
- package/dist/client/components/filter-builder/filters-tab.mjs +1 -1
- package/dist/client/components/history-sidebar.mjs +121 -114
- package/dist/client/components/preview/live-preview-mode.mjs +140 -114
- package/dist/client/components/preview/preview-pane.mjs +288 -333
- package/dist/client/components/primitives/option-label.mjs +44 -0
- package/dist/client/components/primitives/select-multi.mjs +408 -383
- package/dist/client/components/primitives/select-single.mjs +387 -357
- package/dist/client/components/widgets/chart-widget.mjs +168 -143
- package/dist/client/contexts/focus-context.d.mts +11 -0
- package/dist/client/contexts/focus-context.mjs +51 -34
- package/dist/client/hooks/use-audit-history.mjs +10 -17
- package/dist/client/hooks/use-brand.mjs +2 -1
- package/dist/client/hooks/use-transition-stage.mjs +34 -41
- package/dist/client/preview/block-scope-context.d.mts +2 -2
- package/dist/client/preview/block-scope-context.mjs +10 -20
- package/dist/client/preview/index.d.mts +1 -1
- package/dist/client/preview/patch.mjs +100 -0
- package/dist/client/preview/preview-banner.d.mts +2 -2
- package/dist/client/preview/preview-field.d.mts +38 -9
- package/dist/client/preview/preview-field.mjs +385 -118
- package/dist/client/preview/types.d.mts +82 -3
- package/dist/client/preview/types.mjs +85 -6
- package/dist/client/preview/use-collection-preview.d.mts +19 -1
- package/dist/client/preview/use-collection-preview.mjs +182 -58
- package/dist/client/runtime/index.d.mts +2 -2
- package/dist/client/runtime/index.mjs +2 -2
- package/dist/client/runtime/provider.d.mts +5 -5
- package/dist/client/scope/picker.d.mts +2 -2
- package/dist/client/scope/provider.d.mts +2 -2
- package/dist/client/utils/build-field-definitions-from-schema.mjs +8 -3
- package/dist/client/views/auth/login-form.d.mts +2 -2
- package/dist/client/views/auth/reset-password-form.d.mts +2 -2
- package/dist/client/views/collection/bulk-action-toolbar.mjs +23 -25
- package/dist/client/views/collection/cells/primitive-cells.mjs +63 -13
- package/dist/client/views/collection/columns/build-columns.mjs +1 -0
- package/dist/client/views/collection/form-view.mjs +262 -33
- package/dist/client/views/collection/table-view.mjs +16 -11
- package/dist/client/views/layout/admin-layout-provider.d.mts +5 -5
- package/dist/client/views/layout/admin-layout-provider.mjs +107 -16
- package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
- package/dist/client/views/pages/dashboard-page.d.mts +2 -2
- package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
- package/dist/client/views/pages/reset-password-page.d.mts +2 -2
- package/dist/client/views/pages/setup-page.d.mts +2 -2
- package/dist/client.d.mts +3 -2
- package/dist/client.mjs +3 -2
- package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.mjs +3 -2
- package/dist/server/augmentation/common.d.mts +8 -4
- package/dist/server/augmentation/form-layout.d.mts +1 -1
- package/dist/server/i18n/messages/cs.mjs +11 -0
- package/dist/server/i18n/messages/de.mjs +11 -0
- package/dist/server/i18n/messages/en.mjs +11 -0
- package/dist/server/i18n/messages/es.mjs +11 -0
- package/dist/server/i18n/messages/fr.mjs +11 -0
- package/dist/server/i18n/messages/pl.mjs +11 -0
- package/dist/server/i18n/messages/pt.mjs +11 -0
- package/dist/server/i18n/messages/sk.mjs +11 -0
- package/dist/server/modules/admin/block/block-builder.d.mts +7 -10
- package/dist/server/modules/admin/block/block-builder.mjs +7 -10
- package/dist/server/modules/admin/collections/account.d.mts +50 -50
- package/dist/server/modules/admin/collections/admin-locks.d.mts +49 -49
- package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
- package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
- package/dist/server/modules/admin/collections/apikey.d.mts +64 -64
- package/dist/server/modules/admin/collections/assets.d.mts +57 -20
- package/dist/server/modules/admin/collections/session.d.mts +42 -42
- package/dist/server/modules/admin/collections/user.d.mts +100 -34
- package/dist/server/modules/admin/collections/user.mjs +4 -4
- package/dist/server/modules/admin/collections/verification.d.mts +32 -32
- package/dist/server/modules/admin/index.d.mts +3 -3
- package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
- package/dist/server/modules/admin/routes/admin-config.mjs +9 -12
- package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
- package/dist/server/modules/admin/routes/locales.d.mts +2 -2
- package/dist/server/modules/admin/routes/preview.d.mts +11 -11
- package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
- package/dist/server/modules/admin/routes/setup.d.mts +7 -7
- package/dist/server/modules/admin/routes/translations.d.mts +4 -4
- package/dist/server/modules/admin/routes/translations.mjs +1 -1
- package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
- package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +4 -6
- package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +27 -29
- package/dist/server/modules/admin-preferences/collections/saved-views.mjs +4 -6
- package/package.json +4 -4
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { useResolveText, useTranslation } from "../../i18n/hooks.mjs";
|
|
2
2
|
import { formatLabel } from "../../lib/utils.mjs";
|
|
3
|
+
import { resolveOptionLabelForValue } from "../primitives/option-label.mjs";
|
|
4
|
+
import { useCollectionFields } from "../../hooks/use-collection-fields.mjs";
|
|
3
5
|
import { useCollectionList } from "../../hooks/use-collection.mjs";
|
|
4
6
|
import { WidgetCard } from "../../views/dashboard/widget-card.mjs";
|
|
5
7
|
import { useServerWidgetData } from "../../hooks/use-server-widget-data.mjs";
|
|
@@ -75,10 +77,10 @@ function _temp(entry) {
|
|
|
75
77
|
}, String(entry.name));
|
|
76
78
|
}
|
|
77
79
|
function ChartWidget(t0) {
|
|
78
|
-
const $ = c(
|
|
80
|
+
const $ = c(63);
|
|
79
81
|
const { config } = t0;
|
|
80
82
|
const resolveText = useResolveText();
|
|
81
|
-
const { t } = useTranslation();
|
|
83
|
+
const { t, locale } = useTranslation();
|
|
82
84
|
const { collection, field, chartType: t1, timeRange: t2, label, color: t3, showGrid: t4, realtime, hasLoader, refreshInterval } = config;
|
|
83
85
|
const chartType = t1 === void 0 ? "area" : t1;
|
|
84
86
|
const timeRange = t2 === void 0 ? "30d" : t2;
|
|
@@ -96,126 +98,149 @@ function ChartWidget(t0) {
|
|
|
96
98
|
$[2] = t6;
|
|
97
99
|
} else t6 = $[2];
|
|
98
100
|
const serverQuery = useServerWidgetData(config.id, t6);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
const t7 = !!collection && !hasLoader;
|
|
102
|
+
let t8;
|
|
103
|
+
if ($[3] !== t7) {
|
|
104
|
+
t8 = { schemaQueryOptions: { enabled: t7 } };
|
|
102
105
|
$[3] = t7;
|
|
103
|
-
} else t7 = $[3];
|
|
104
|
-
const t8 = !hasLoader;
|
|
105
|
-
let t9;
|
|
106
|
-
if ($[4] !== t8) {
|
|
107
|
-
t9 = { enabled: t8 };
|
|
108
106
|
$[4] = t8;
|
|
107
|
+
} else t8 = $[4];
|
|
108
|
+
const { fields } = useCollectionFields(collection, t8);
|
|
109
|
+
const fieldDef = fields[field];
|
|
110
|
+
const fieldType = fieldDef?.name;
|
|
111
|
+
const selectOptions = fieldDef?.["~options"]?.options;
|
|
112
|
+
let t9;
|
|
113
|
+
if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
114
|
+
t9 = { limit: 1e3 };
|
|
109
115
|
$[5] = t9;
|
|
110
116
|
} else t9 = $[5];
|
|
111
|
-
|
|
112
|
-
if ($[6] !== realtime) {
|
|
113
|
-
t10 = { realtime };
|
|
114
|
-
$[6] = realtime;
|
|
115
|
-
$[7] = t10;
|
|
116
|
-
} else t10 = $[7];
|
|
117
|
-
const collectionQuery = useCollectionList(collection, t7, t9, t10);
|
|
118
|
-
const { isLoading, error, refetch, isFetching } = hasLoader ? serverQuery : collectionQuery;
|
|
117
|
+
const t10 = !hasLoader;
|
|
119
118
|
let t11;
|
|
119
|
+
if ($[6] !== t10) {
|
|
120
|
+
t11 = { enabled: t10 };
|
|
121
|
+
$[6] = t10;
|
|
122
|
+
$[7] = t11;
|
|
123
|
+
} else t11 = $[7];
|
|
124
|
+
let t12;
|
|
125
|
+
if ($[8] !== realtime) {
|
|
126
|
+
t12 = { realtime };
|
|
127
|
+
$[8] = realtime;
|
|
128
|
+
$[9] = t12;
|
|
129
|
+
} else t12 = $[9];
|
|
130
|
+
const collectionQuery = useCollectionList(collection, t9, t11, t12);
|
|
131
|
+
const { isLoading, error, refetch, isFetching } = hasLoader ? serverQuery : collectionQuery;
|
|
132
|
+
let t13;
|
|
120
133
|
bb0: {
|
|
121
134
|
if (hasLoader) {
|
|
122
|
-
let
|
|
123
|
-
if ($[
|
|
124
|
-
|
|
125
|
-
$[
|
|
126
|
-
} else
|
|
127
|
-
|
|
135
|
+
let t14$2;
|
|
136
|
+
if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
137
|
+
t14$2 = [];
|
|
138
|
+
$[10] = t14$2;
|
|
139
|
+
} else t14$2 = $[10];
|
|
140
|
+
t13 = t14$2;
|
|
128
141
|
break bb0;
|
|
129
142
|
}
|
|
130
|
-
let
|
|
131
|
-
if ($[
|
|
132
|
-
|
|
133
|
-
$[
|
|
134
|
-
$[
|
|
135
|
-
} else
|
|
136
|
-
|
|
143
|
+
let t14$1;
|
|
144
|
+
if ($[11] !== collectionQuery.data) {
|
|
145
|
+
t14$1 = Array.isArray(collectionQuery.data?.docs) ? collectionQuery.data.docs : [];
|
|
146
|
+
$[11] = collectionQuery.data;
|
|
147
|
+
$[12] = t14$1;
|
|
148
|
+
} else t14$1 = $[12];
|
|
149
|
+
t13 = t14$1;
|
|
137
150
|
}
|
|
138
|
-
const collectionItems =
|
|
139
|
-
let
|
|
140
|
-
if ($[
|
|
141
|
-
|
|
142
|
-
$[
|
|
143
|
-
$[
|
|
144
|
-
$[
|
|
145
|
-
$[
|
|
146
|
-
$[
|
|
147
|
-
$[
|
|
148
|
-
} else
|
|
149
|
-
const displayLabel =
|
|
150
|
-
let
|
|
151
|
+
const collectionItems = t13;
|
|
152
|
+
let t14;
|
|
153
|
+
if ($[13] !== collection || $[14] !== config.title || $[15] !== field || $[16] !== label || $[17] !== resolveText) {
|
|
154
|
+
t14 = config.title ? resolveText(config.title) : label ? resolveText(label) : `${formatLabel(collection)} by ${field}`;
|
|
155
|
+
$[13] = collection;
|
|
156
|
+
$[14] = config.title;
|
|
157
|
+
$[15] = field;
|
|
158
|
+
$[16] = label;
|
|
159
|
+
$[17] = resolveText;
|
|
160
|
+
$[18] = t14;
|
|
161
|
+
} else t14 = $[18];
|
|
162
|
+
const displayLabel = t14;
|
|
163
|
+
let t15;
|
|
151
164
|
bb1: {
|
|
152
165
|
if (hasLoader) {
|
|
153
|
-
let
|
|
154
|
-
if ($[
|
|
155
|
-
|
|
156
|
-
$[
|
|
157
|
-
$[
|
|
158
|
-
} else
|
|
159
|
-
|
|
166
|
+
let t16$2;
|
|
167
|
+
if ($[19] !== serverQuery.data) {
|
|
168
|
+
t16$2 = serverQuery.data ?? [];
|
|
169
|
+
$[19] = serverQuery.data;
|
|
170
|
+
$[20] = t16$2;
|
|
171
|
+
} else t16$2 = $[20];
|
|
172
|
+
t15 = t16$2;
|
|
160
173
|
break bb1;
|
|
161
174
|
}
|
|
162
175
|
if (!collectionItems.length) {
|
|
163
|
-
let
|
|
164
|
-
if ($[
|
|
165
|
-
|
|
166
|
-
$[
|
|
167
|
-
} else
|
|
168
|
-
|
|
176
|
+
let t16$2;
|
|
177
|
+
if ($[21] === Symbol.for("react.memo_cache_sentinel")) {
|
|
178
|
+
t16$2 = [];
|
|
179
|
+
$[21] = t16$2;
|
|
180
|
+
} else t16$2 = $[21];
|
|
181
|
+
t15 = t16$2;
|
|
169
182
|
break bb1;
|
|
170
183
|
}
|
|
171
|
-
let
|
|
172
|
-
if ($[
|
|
184
|
+
let t16$1;
|
|
185
|
+
if ($[22] !== collectionItems || $[23] !== field || $[24] !== fieldType || $[25] !== locale || $[26] !== resolveText || $[27] !== selectOptions || $[28] !== t || $[29] !== timeRange) {
|
|
173
186
|
const grouped = collectionItems.reduce((acc, item) => {
|
|
174
187
|
const value = item[field];
|
|
175
188
|
if (value === void 0 || value === null) return acc;
|
|
176
189
|
let key;
|
|
177
|
-
if (
|
|
190
|
+
if (fieldType === "select") key = resolveOptionLabelForValue({
|
|
191
|
+
value,
|
|
192
|
+
options: selectOptions,
|
|
193
|
+
resolveText,
|
|
194
|
+
t,
|
|
195
|
+
locale
|
|
196
|
+
});
|
|
197
|
+
else if (value instanceof Date || !isNaN(Date.parse(value))) key = formatDateForRange(new Date(value), timeRange);
|
|
178
198
|
else key = String(value);
|
|
179
199
|
acc[key] = (acc[key] || 0) + 1;
|
|
180
200
|
return acc;
|
|
181
201
|
}, {});
|
|
182
|
-
|
|
183
|
-
$[
|
|
184
|
-
$[
|
|
185
|
-
$[
|
|
186
|
-
$[
|
|
187
|
-
|
|
188
|
-
|
|
202
|
+
t16$1 = Object.entries(grouped).map(_temp2).sort(_temp3);
|
|
203
|
+
$[22] = collectionItems;
|
|
204
|
+
$[23] = field;
|
|
205
|
+
$[24] = fieldType;
|
|
206
|
+
$[25] = locale;
|
|
207
|
+
$[26] = resolveText;
|
|
208
|
+
$[27] = selectOptions;
|
|
209
|
+
$[28] = t;
|
|
210
|
+
$[29] = timeRange;
|
|
211
|
+
$[30] = t16$1;
|
|
212
|
+
} else t16$1 = $[30];
|
|
213
|
+
t15 = t16$1;
|
|
189
214
|
}
|
|
190
|
-
const chartData =
|
|
191
|
-
let t14;
|
|
192
|
-
if ($[24] !== t) {
|
|
193
|
-
t14 = t("widget.chart.emptyTitle");
|
|
194
|
-
$[24] = t;
|
|
195
|
-
$[25] = t14;
|
|
196
|
-
} else t14 = $[25];
|
|
197
|
-
let t15;
|
|
198
|
-
if ($[26] !== t) {
|
|
199
|
-
t15 = t("widget.chart.emptyDescription");
|
|
200
|
-
$[26] = t;
|
|
201
|
-
$[27] = t15;
|
|
202
|
-
} else t15 = $[27];
|
|
215
|
+
const chartData = t15;
|
|
203
216
|
let t16;
|
|
204
|
-
if ($[
|
|
205
|
-
t16 =
|
|
217
|
+
if ($[31] !== t) {
|
|
218
|
+
t16 = t("widget.chart.emptyTitle");
|
|
219
|
+
$[31] = t;
|
|
220
|
+
$[32] = t16;
|
|
221
|
+
} else t16 = $[32];
|
|
222
|
+
let t17;
|
|
223
|
+
if ($[33] !== t) {
|
|
224
|
+
t17 = t("widget.chart.emptyDescription");
|
|
225
|
+
$[33] = t;
|
|
226
|
+
$[34] = t17;
|
|
227
|
+
} else t17 = $[34];
|
|
228
|
+
let t18;
|
|
229
|
+
if ($[35] !== t16 || $[36] !== t17) {
|
|
230
|
+
t18 = /* @__PURE__ */ jsx(WidgetEmptyState, {
|
|
206
231
|
iconName: "ph:chart-line",
|
|
207
|
-
title:
|
|
208
|
-
description:
|
|
232
|
+
title: t16,
|
|
233
|
+
description: t17,
|
|
209
234
|
className: "min-h-48"
|
|
210
235
|
});
|
|
211
|
-
$[
|
|
212
|
-
$[
|
|
213
|
-
$[
|
|
214
|
-
} else
|
|
215
|
-
const emptyContent =
|
|
216
|
-
let
|
|
217
|
-
if ($[
|
|
218
|
-
|
|
236
|
+
$[35] = t16;
|
|
237
|
+
$[36] = t17;
|
|
238
|
+
$[37] = t18;
|
|
239
|
+
} else t18 = $[37];
|
|
240
|
+
const emptyContent = t18;
|
|
241
|
+
let t19;
|
|
242
|
+
if ($[38] !== chartData || $[39] !== chartType || $[40] !== color || $[41] !== emptyContent || $[42] !== showGrid) {
|
|
243
|
+
t19 = chartData.length === 0 ? emptyContent : /* @__PURE__ */ jsx("div", {
|
|
219
244
|
className: "h-48 w-full",
|
|
220
245
|
children: /* @__PURE__ */ jsx(ResponsiveContainer, {
|
|
221
246
|
width: "100%",
|
|
@@ -228,67 +253,67 @@ function ChartWidget(t0) {
|
|
|
228
253
|
})
|
|
229
254
|
})
|
|
230
255
|
});
|
|
231
|
-
$[
|
|
232
|
-
$[
|
|
233
|
-
$[
|
|
234
|
-
$[
|
|
235
|
-
$[
|
|
236
|
-
$[
|
|
237
|
-
} else
|
|
238
|
-
const chartContent =
|
|
239
|
-
let t18;
|
|
240
|
-
if ($[37] !== config.description || $[38] !== resolveText) {
|
|
241
|
-
t18 = config.description ? resolveText(config.description) : void 0;
|
|
242
|
-
$[37] = config.description;
|
|
243
|
-
$[38] = resolveText;
|
|
244
|
-
$[39] = t18;
|
|
245
|
-
} else t18 = $[39];
|
|
246
|
-
const t19 = isFetching && !isLoading;
|
|
256
|
+
$[38] = chartData;
|
|
257
|
+
$[39] = chartType;
|
|
258
|
+
$[40] = color;
|
|
259
|
+
$[41] = emptyContent;
|
|
260
|
+
$[42] = showGrid;
|
|
261
|
+
$[43] = t19;
|
|
262
|
+
} else t19 = $[43];
|
|
263
|
+
const chartContent = t19;
|
|
247
264
|
let t20;
|
|
248
|
-
if ($[
|
|
249
|
-
t20 =
|
|
250
|
-
$[
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
$[41] = error;
|
|
256
|
-
$[42] = t21;
|
|
257
|
-
} else t21 = $[42];
|
|
265
|
+
if ($[44] !== config.description || $[45] !== resolveText) {
|
|
266
|
+
t20 = config.description ? resolveText(config.description) : void 0;
|
|
267
|
+
$[44] = config.description;
|
|
268
|
+
$[45] = resolveText;
|
|
269
|
+
$[46] = t20;
|
|
270
|
+
} else t20 = $[46];
|
|
271
|
+
const t21 = isFetching && !isLoading;
|
|
258
272
|
let t22;
|
|
259
|
-
if ($[
|
|
260
|
-
t22 =
|
|
261
|
-
$[
|
|
262
|
-
|
|
263
|
-
} else t22 = $[44];
|
|
273
|
+
if ($[47] === Symbol.for("react.memo_cache_sentinel")) {
|
|
274
|
+
t22 = /* @__PURE__ */ jsx(ChartWidgetSkeleton, {});
|
|
275
|
+
$[47] = t22;
|
|
276
|
+
} else t22 = $[47];
|
|
264
277
|
let t23;
|
|
265
|
-
if ($[
|
|
266
|
-
t23 =
|
|
278
|
+
if ($[48] !== error) {
|
|
279
|
+
t23 = error instanceof Error ? error : error ? new Error(String(error)) : null;
|
|
280
|
+
$[48] = error;
|
|
281
|
+
$[49] = t23;
|
|
282
|
+
} else t23 = $[49];
|
|
283
|
+
let t24;
|
|
284
|
+
if ($[50] !== refetch) {
|
|
285
|
+
t24 = () => refetch();
|
|
286
|
+
$[50] = refetch;
|
|
287
|
+
$[51] = t24;
|
|
288
|
+
} else t24 = $[51];
|
|
289
|
+
let t25;
|
|
290
|
+
if ($[52] !== chartContent || $[53] !== config.actions || $[54] !== config.cardVariant || $[55] !== config.className || $[56] !== displayLabel || $[57] !== isLoading || $[58] !== t20 || $[59] !== t21 || $[60] !== t23 || $[61] !== t24) {
|
|
291
|
+
t25 = /* @__PURE__ */ jsx(WidgetCard, {
|
|
267
292
|
title: displayLabel,
|
|
268
|
-
description:
|
|
293
|
+
description: t20,
|
|
269
294
|
variant: config.cardVariant,
|
|
270
295
|
isLoading,
|
|
271
|
-
isRefreshing:
|
|
272
|
-
loadingSkeleton:
|
|
273
|
-
error:
|
|
274
|
-
onRefresh:
|
|
296
|
+
isRefreshing: t21,
|
|
297
|
+
loadingSkeleton: t22,
|
|
298
|
+
error: t23,
|
|
299
|
+
onRefresh: t24,
|
|
275
300
|
actions: config.actions,
|
|
276
301
|
className: config.className,
|
|
277
302
|
children: chartContent
|
|
278
303
|
});
|
|
279
|
-
$[
|
|
280
|
-
$[
|
|
281
|
-
$[
|
|
282
|
-
$[
|
|
283
|
-
$[
|
|
284
|
-
$[
|
|
285
|
-
$[
|
|
286
|
-
$[
|
|
287
|
-
$[
|
|
288
|
-
$[
|
|
289
|
-
$[
|
|
290
|
-
} else
|
|
291
|
-
return
|
|
304
|
+
$[52] = chartContent;
|
|
305
|
+
$[53] = config.actions;
|
|
306
|
+
$[54] = config.cardVariant;
|
|
307
|
+
$[55] = config.className;
|
|
308
|
+
$[56] = displayLabel;
|
|
309
|
+
$[57] = isLoading;
|
|
310
|
+
$[58] = t20;
|
|
311
|
+
$[59] = t21;
|
|
312
|
+
$[60] = t23;
|
|
313
|
+
$[61] = t24;
|
|
314
|
+
$[62] = t25;
|
|
315
|
+
} else t25 = $[62];
|
|
316
|
+
return t25;
|
|
292
317
|
}
|
|
293
318
|
/**
|
|
294
319
|
* Renders the appropriate chart type as a proper component
|
|
@@ -8,8 +8,13 @@ import * as react_jsx_runtime16 from "react/jsx-runtime";
|
|
|
8
8
|
* - idle: nothing focused
|
|
9
9
|
* - field: regular field focused (e.g., "title", "slug")
|
|
10
10
|
* - block: block field focused, optionally with specific field within block
|
|
11
|
+
* - block-insert: insert a block at a position using the existing block editor
|
|
11
12
|
* - relation: relation field focused (opens ResourceSheet for editing)
|
|
12
13
|
*/
|
|
14
|
+
type BlockInsertPosition = {
|
|
15
|
+
parentId: string | null;
|
|
16
|
+
index: number;
|
|
17
|
+
};
|
|
13
18
|
type FocusState = {
|
|
14
19
|
type: "idle";
|
|
15
20
|
} | {
|
|
@@ -19,6 +24,10 @@ type FocusState = {
|
|
|
19
24
|
type: "block";
|
|
20
25
|
blockId: string;
|
|
21
26
|
fieldPath?: string;
|
|
27
|
+
} | {
|
|
28
|
+
type: "block-insert";
|
|
29
|
+
position: BlockInsertPosition;
|
|
30
|
+
referenceBlockId?: string;
|
|
22
31
|
} | {
|
|
23
32
|
type: "relation";
|
|
24
33
|
fieldPath: string;
|
|
@@ -31,6 +40,8 @@ type FocusContextValue = {
|
|
|
31
40
|
focusField: (fieldPath: string) => void;
|
|
32
41
|
/** Focus a block, optionally a specific field within it */
|
|
33
42
|
focusBlock: (blockId: string, fieldPath?: string) => void;
|
|
43
|
+
/** Open block insertion at a specific position */
|
|
44
|
+
requestBlockInsert: (position: BlockInsertPosition, referenceBlockId?: string) => void;
|
|
34
45
|
/** Focus a relation field (opens ResourceSheet) */
|
|
35
46
|
focusRelation: (fieldPath: string, targetCollection?: string) => void;
|
|
36
47
|
/** Clear focus */
|
|
@@ -14,7 +14,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
14
14
|
*/
|
|
15
15
|
const FocusContext = React.createContext(null);
|
|
16
16
|
function FocusProvider(t0) {
|
|
17
|
-
const $ = c(
|
|
17
|
+
const $ = c(27);
|
|
18
18
|
const { children, onFocusChange } = t0;
|
|
19
19
|
let t1;
|
|
20
20
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
@@ -68,61 +68,78 @@ function FocusProvider(t0) {
|
|
|
68
68
|
const focusRelation = t4;
|
|
69
69
|
let t5;
|
|
70
70
|
if ($[7] !== onFocusChange) {
|
|
71
|
-
t5 = () => {
|
|
72
|
-
const newState_2 = {
|
|
71
|
+
t5 = (position, referenceBlockId) => {
|
|
72
|
+
const newState_2 = {
|
|
73
|
+
type: "block-insert",
|
|
74
|
+
position,
|
|
75
|
+
referenceBlockId
|
|
76
|
+
};
|
|
73
77
|
setState(newState_2);
|
|
74
78
|
onFocusChange?.(newState_2);
|
|
75
79
|
};
|
|
76
80
|
$[7] = onFocusChange;
|
|
77
81
|
$[8] = t5;
|
|
78
82
|
} else t5 = $[8];
|
|
79
|
-
const
|
|
80
|
-
const focusedFieldPath = state.type === "field" ? state.fieldPath : void 0;
|
|
81
|
-
const focusedBlockId = state.type === "block" ? state.blockId : void 0;
|
|
83
|
+
const requestBlockInsert = t5;
|
|
82
84
|
let t6;
|
|
83
|
-
if ($[9] !==
|
|
84
|
-
t6 = (
|
|
85
|
-
|
|
85
|
+
if ($[9] !== onFocusChange) {
|
|
86
|
+
t6 = () => {
|
|
87
|
+
const newState_3 = { type: "idle" };
|
|
88
|
+
setState(newState_3);
|
|
89
|
+
onFocusChange?.(newState_3);
|
|
90
|
+
};
|
|
91
|
+
$[9] = onFocusChange;
|
|
86
92
|
$[10] = t6;
|
|
87
93
|
} else t6 = $[10];
|
|
94
|
+
const clearFocus = t6;
|
|
95
|
+
const focusedFieldPath = state.type === "field" ? state.fieldPath : void 0;
|
|
96
|
+
const focusedBlockId = state.type === "block" ? state.blockId : void 0;
|
|
88
97
|
let t7;
|
|
89
|
-
if ($[11] !==
|
|
90
|
-
t7 = (
|
|
91
|
-
$[11] =
|
|
98
|
+
if ($[11] !== focusedFieldPath) {
|
|
99
|
+
t7 = (path) => focusedFieldPath === path;
|
|
100
|
+
$[11] = focusedFieldPath;
|
|
92
101
|
$[12] = t7;
|
|
93
102
|
} else t7 = $[12];
|
|
94
103
|
let t8;
|
|
95
|
-
if ($[13] !==
|
|
96
|
-
t8 =
|
|
104
|
+
if ($[13] !== focusedBlockId) {
|
|
105
|
+
t8 = (id) => focusedBlockId === id;
|
|
106
|
+
$[13] = focusedBlockId;
|
|
107
|
+
$[14] = t8;
|
|
108
|
+
} else t8 = $[14];
|
|
109
|
+
let t9;
|
|
110
|
+
if ($[15] !== clearFocus || $[16] !== focusBlock || $[17] !== focusField || $[18] !== focusRelation || $[19] !== requestBlockInsert || $[20] !== state || $[21] !== t7 || $[22] !== t8) {
|
|
111
|
+
t9 = {
|
|
97
112
|
state,
|
|
98
113
|
focusField,
|
|
99
114
|
focusBlock,
|
|
115
|
+
requestBlockInsert,
|
|
100
116
|
focusRelation,
|
|
101
117
|
clearFocus,
|
|
102
|
-
isFieldFocused:
|
|
103
|
-
isBlockFocused:
|
|
118
|
+
isFieldFocused: t7,
|
|
119
|
+
isBlockFocused: t8
|
|
104
120
|
};
|
|
105
|
-
$[
|
|
106
|
-
$[
|
|
107
|
-
$[
|
|
108
|
-
$[
|
|
109
|
-
$[
|
|
110
|
-
$[
|
|
111
|
-
$[
|
|
112
|
-
$[
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
121
|
+
$[15] = clearFocus;
|
|
122
|
+
$[16] = focusBlock;
|
|
123
|
+
$[17] = focusField;
|
|
124
|
+
$[18] = focusRelation;
|
|
125
|
+
$[19] = requestBlockInsert;
|
|
126
|
+
$[20] = state;
|
|
127
|
+
$[21] = t7;
|
|
128
|
+
$[22] = t8;
|
|
129
|
+
$[23] = t9;
|
|
130
|
+
} else t9 = $[23];
|
|
131
|
+
const value = t9;
|
|
132
|
+
let t10;
|
|
133
|
+
if ($[24] !== children || $[25] !== value) {
|
|
134
|
+
t10 = /* @__PURE__ */ jsx(FocusContext.Provider, {
|
|
118
135
|
value,
|
|
119
136
|
children
|
|
120
137
|
});
|
|
121
|
-
$[
|
|
122
|
-
$[
|
|
123
|
-
$[
|
|
124
|
-
} else
|
|
125
|
-
return
|
|
138
|
+
$[24] = children;
|
|
139
|
+
$[25] = value;
|
|
140
|
+
$[26] = t10;
|
|
141
|
+
} else t10 = $[26];
|
|
142
|
+
return t10;
|
|
126
143
|
}
|
|
127
144
|
/**
|
|
128
145
|
* Use the focus context
|
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { selectBasePath, useAdminStore } from "../runtime/provider.mjs";
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { useQuery } from "@tanstack/react-query";
|
|
4
4
|
|
|
5
5
|
//#region src/client/hooks/use-audit-history.ts
|
|
6
6
|
function useAuditFetcher(path) {
|
|
7
|
-
const $ = c(
|
|
8
|
-
const
|
|
7
|
+
const $ = c(3);
|
|
8
|
+
const basePath = useAdminStore(selectBasePath);
|
|
9
9
|
let t0;
|
|
10
|
-
if ($[0] !==
|
|
11
|
-
t0 =
|
|
12
|
-
$[0] = client;
|
|
13
|
-
$[1] = t0;
|
|
14
|
-
} else t0 = $[1];
|
|
15
|
-
const basePath = t0;
|
|
16
|
-
let t1;
|
|
17
|
-
if ($[2] !== basePath || $[3] !== path) {
|
|
18
|
-
t1 = async (signal) => {
|
|
10
|
+
if ($[0] !== basePath || $[1] !== path) {
|
|
11
|
+
t0 = async (signal) => {
|
|
19
12
|
const response = await fetch(`${basePath}${path}`, {
|
|
20
13
|
credentials: "include",
|
|
21
14
|
headers: { Accept: "application/json" },
|
|
@@ -25,11 +18,11 @@ function useAuditFetcher(path) {
|
|
|
25
18
|
const data = await response.json();
|
|
26
19
|
return Array.isArray(data) ? data : data?.docs ?? data ?? [];
|
|
27
20
|
};
|
|
28
|
-
$[
|
|
29
|
-
$[
|
|
30
|
-
$[
|
|
31
|
-
} else
|
|
32
|
-
return
|
|
21
|
+
$[0] = basePath;
|
|
22
|
+
$[1] = path;
|
|
23
|
+
$[2] = t0;
|
|
24
|
+
} else t0 = $[2];
|
|
25
|
+
return t0;
|
|
33
26
|
}
|
|
34
27
|
function useGlobalAuditHistory(globalName, options, queryOptions) {
|
|
35
28
|
const $ = c(14);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useAdminStoreRaw } from "../runtime/provider.mjs";
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useShallow } from "zustand/shallow";
|
|
3
4
|
import { createStore, useStore } from "zustand";
|
|
4
5
|
|
|
5
6
|
//#region src/client/hooks/use-brand.ts
|
|
@@ -29,7 +30,7 @@ function selectBrand(state) {
|
|
|
29
30
|
* mounted (e.g. on a bare auth page).
|
|
30
31
|
*/
|
|
31
32
|
function useBrand() {
|
|
32
|
-
return useStore(useAdminStoreRaw() ?? FALLBACK_STORE, selectBrand);
|
|
33
|
+
return useStore(useAdminStoreRaw() ?? FALLBACK_STORE, useShallow(selectBrand));
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
35
36
|
* Imperative variant for code paths that cannot use hooks (callbacks,
|