@questpie/admin 3.2.0 → 3.2.2

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 (86) hide show
  1. package/dist/client/blocks/block-renderer.d.mts +12 -2
  2. package/dist/client/blocks/block-renderer.mjs +357 -49
  3. package/dist/client/components/blocks/block-editor-context.mjs +11 -1
  4. package/dist/client/components/blocks/block-editor-provider.mjs +68 -26
  5. package/dist/client/components/blocks/block-item.mjs +181 -170
  6. package/dist/client/components/blocks/utils/tree-utils.mjs +13 -1
  7. package/dist/client/components/fields/array-field.mjs +177 -118
  8. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +305 -310
  9. package/dist/client/components/filter-builder/filters-tab.mjs +1 -1
  10. package/dist/client/components/history-sidebar.mjs +121 -114
  11. package/dist/client/components/preview/live-preview-mode.mjs +210 -175
  12. package/dist/client/components/preview/preview-pane.mjs +288 -333
  13. package/dist/client/components/primitives/option-label.mjs +44 -0
  14. package/dist/client/components/primitives/select-multi.mjs +408 -383
  15. package/dist/client/components/primitives/select-single.mjs +387 -357
  16. package/dist/client/components/widgets/chart-widget.mjs +168 -143
  17. package/dist/client/contexts/focus-context.d.mts +16 -1
  18. package/dist/client/contexts/focus-context.mjs +90 -38
  19. package/dist/client/hooks/use-brand.mjs +2 -1
  20. package/dist/client/preview/block-scope-context.d.mts +2 -2
  21. package/dist/client/preview/block-scope-context.mjs +10 -20
  22. package/dist/client/preview/index.d.mts +1 -1
  23. package/dist/client/preview/patch.mjs +100 -0
  24. package/dist/client/preview/preview-banner.d.mts +2 -2
  25. package/dist/client/preview/preview-field.d.mts +34 -5
  26. package/dist/client/preview/preview-field.mjs +385 -118
  27. package/dist/client/preview/types.d.mts +82 -3
  28. package/dist/client/preview/types.mjs +85 -6
  29. package/dist/client/preview/use-collection-preview.d.mts +19 -1
  30. package/dist/client/preview/use-collection-preview.mjs +182 -58
  31. package/dist/client/runtime/index.d.mts +2 -2
  32. package/dist/client/runtime/index.mjs +2 -2
  33. package/dist/client/runtime/provider.d.mts +5 -5
  34. package/dist/client/utils/build-field-definitions-from-schema.mjs +8 -3
  35. package/dist/client/views/auth/accept-invite-form.d.mts +2 -2
  36. package/dist/client/views/auth/auth-layout.d.mts +3 -3
  37. package/dist/client/views/auth/login-form.d.mts +2 -2
  38. package/dist/client/views/auth/reset-password-form.d.mts +2 -2
  39. package/dist/client/views/auth/setup-form.d.mts +2 -2
  40. package/dist/client/views/collection/bulk-action-toolbar.mjs +23 -25
  41. package/dist/client/views/collection/cells/primitive-cells.mjs +63 -13
  42. package/dist/client/views/collection/columns/build-columns.mjs +1 -0
  43. package/dist/client/views/collection/form-view.mjs +262 -33
  44. package/dist/client/views/collection/table-view.mjs +16 -11
  45. package/dist/client/views/layout/admin-layout-provider.d.mts +5 -5
  46. package/dist/client/views/layout/admin-layout-provider.mjs +107 -16
  47. package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
  48. package/dist/client/views/pages/dashboard-page.d.mts +2 -2
  49. package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
  50. package/dist/client/views/pages/reset-password-page.d.mts +2 -2
  51. package/dist/client/views/pages/setup-page.d.mts +2 -2
  52. package/dist/client.d.mts +2 -2
  53. package/dist/client.mjs +1 -1
  54. package/dist/index.d.mts +2 -2
  55. package/dist/index.mjs +1 -1
  56. package/dist/server/augmentation/common.d.mts +8 -4
  57. package/dist/server/augmentation/form-layout.d.mts +1 -1
  58. package/dist/server/i18n/messages/cs.mjs +11 -0
  59. package/dist/server/i18n/messages/de.mjs +11 -0
  60. package/dist/server/i18n/messages/en.mjs +11 -0
  61. package/dist/server/i18n/messages/es.mjs +11 -0
  62. package/dist/server/i18n/messages/fr.mjs +11 -0
  63. package/dist/server/i18n/messages/pl.mjs +11 -0
  64. package/dist/server/i18n/messages/pt.mjs +11 -0
  65. package/dist/server/i18n/messages/sk.mjs +11 -0
  66. package/dist/server/modules/admin/block/block-builder.d.mts +7 -10
  67. package/dist/server/modules/admin/block/block-builder.mjs +7 -10
  68. package/dist/server/modules/admin/collections/apikey.d.mts +64 -64
  69. package/dist/server/modules/admin/collections/assets.d.mts +57 -20
  70. package/dist/server/modules/admin/collections/session.d.mts +38 -38
  71. package/dist/server/modules/admin/collections/user.d.mts +100 -34
  72. package/dist/server/modules/admin/collections/user.mjs +4 -4
  73. package/dist/server/modules/admin/collections/verification.d.mts +31 -31
  74. package/dist/server/modules/admin/index.d.mts +3 -3
  75. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  76. package/dist/server/modules/admin/routes/admin-config.mjs +9 -12
  77. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  78. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  79. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  80. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  81. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  82. package/dist/server/modules/admin/routes/translations.mjs +1 -1
  83. package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +4 -6
  84. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +4 -6
  85. package/dist/server/modules/admin-preferences/collections/saved-views.mjs +4 -6
  86. package/package.json +3 -3
@@ -3,6 +3,8 @@ import { cn } from "../../lib/utils.mjs";
3
3
  import { selectRealtime, useAdminStore } from "../../runtime/provider.mjs";
4
4
  import { useSafeContentLocales } from "../../runtime/content-locales-provider.mjs";
5
5
  import { useScopedLocale } from "../../runtime/locale-scope.mjs";
6
+ import { flattenOptions } from "../../components/primitives/types.mjs";
7
+ import { resolveOptionLabelForValue } from "../../components/primitives/option-label.mjs";
6
8
  import { Button } from "../../components/ui/button.mjs";
7
9
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../components/ui/select.mjs";
8
10
  import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from "../../components/ui/sheet.mjs";
@@ -10,7 +12,6 @@ import { sanitizeFilename } from "../../components/fields/field-utils.mjs";
10
12
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../components/ui/tooltip.mjs";
11
13
  import { LocaleSwitcher } from "../../components/locale-switcher.mjs";
12
14
  import { Checkbox } from "../../components/ui/checkbox.mjs";
13
- import { flattenOptions } from "../../components/primitives/types.mjs";
14
15
  import { createActionRegistryProxy } from "../../builder/types/action-registry.mjs";
15
16
  import { ActionButton } from "../../components/actions/action-button.mjs";
16
17
  import { useCollectionFields } from "../../hooks/use-collection-fields.mjs";
@@ -298,14 +299,17 @@ function mapListSchemaToConfig(list) {
298
299
  config.actions = mapListActionsToDefinitions(list.actions);
299
300
  return config;
300
301
  }
301
- function stringifyGroupValue(value, field, resolveText, noValueLabel = "No value") {
302
+ function stringifyGroupValue(value, field, resolveText, t, locale = "en", noValueLabel = "No value") {
302
303
  if (value === null || value === void 0 || value === "") return noValueLabel;
303
- if (Array.isArray(value)) return value.length > 0 ? value.map((item) => stringifyGroupValue(item, field, resolveText, noValueLabel)).join(", ") : noValueLabel;
304
+ if (Array.isArray(value)) return value.length > 0 ? value.map((item) => stringifyGroupValue(item, field, resolveText, t, locale, noValueLabel)).join(", ") : noValueLabel;
304
305
  const options = field?.options?.options;
305
- if (options) {
306
- const option = flattenOptions(options).find((item) => String(item.value) === String(value));
307
- if (option) return resolveText?.(option.label, String(option.value)) ?? String(option.label);
308
- }
306
+ if (field?.type === "select" && resolveText && t) return resolveOptionLabelForValue({
307
+ value,
308
+ options: Array.isArray(options) ? options : void 0,
309
+ resolveText,
310
+ t,
311
+ locale
312
+ });
309
313
  if (typeof value === "object") {
310
314
  const record = value;
311
315
  const displayValue = record.title ?? record.name ?? record.label ?? record.id;
@@ -626,7 +630,7 @@ function TableViewInner({ collection, config, viewConfig, navigate, basePath = "
626
630
  const mergedActionsConfig = React.useMemo(() => mergeServerActions(resolvedActionsConfig ?? {}, serverActions), [resolvedActionsConfig, serverActions]);
627
631
  const { user } = useSessionState();
628
632
  const { data: collectionMeta } = useSuspenseCollectionMeta(collection);
629
- const { t } = useTranslation();
633
+ const { t, locale: uiLocale } = useTranslation();
630
634
  const resolveText = useResolveText();
631
635
  const { locale: contentLocale, setLocale: setContentLocale } = useScopedLocale();
632
636
  const localeOptions = useSafeContentLocales()?.locales ?? [];
@@ -1199,7 +1203,7 @@ function TableViewInner({ collection, config, viewConfig, navigate, basePath = "
1199
1203
  if (serverGroups?.length) {
1200
1204
  const rowsById_0 = new Map(rows.map((row_8) => [row_8.id, row_8]));
1201
1205
  return serverGroups.flatMap((group) => {
1202
- const label = stringifyGroupValue(group.value, groupField, resolveText, t("common.noValue"));
1206
+ const label = stringifyGroupValue(group.value, groupField, resolveText, t, uiLocale, t("common.noValue"));
1203
1207
  const groupKey = `${groupBy_0}:${label}`;
1204
1208
  const collapsed = collapsedGroups.has(groupKey);
1205
1209
  const groupRows = (group.docs ?? []).map((doc) => rowsById_0.get(String(doc.id))).filter(Boolean);
@@ -1217,7 +1221,7 @@ function TableViewInner({ collection, config, viewConfig, navigate, basePath = "
1217
1221
  }
1218
1222
  const groups = /* @__PURE__ */ new Map();
1219
1223
  for (const row_10 of rows) {
1220
- const valueLabel = stringifyGroupValue(row_10.original?.[groupBy_0], groupField, resolveText, t("common.noValue"));
1224
+ const valueLabel = stringifyGroupValue(row_10.original?.[groupBy_0], groupField, resolveText, t, uiLocale, t("common.noValue"));
1221
1225
  const groupKey_0 = `${groupBy_0}:${valueLabel}`;
1222
1226
  const group_0 = groups.get(groupKey_0);
1223
1227
  if (group_0) {
@@ -1251,7 +1255,8 @@ function TableViewInner({ collection, config, viewConfig, navigate, basePath = "
1251
1255
  isSearching,
1252
1256
  listData?.groups,
1253
1257
  resolveText,
1254
- t
1258
+ t,
1259
+ uiLocale
1255
1260
  ]);
1256
1261
  const handleSaveView = (name, config_0) => {
1257
1262
  saveViewMutation.mutate({
@@ -60,17 +60,17 @@ interface AdminLayoutProviderProps extends AdminLayoutSharedProps {
60
60
  /**
61
61
  * Use server-side translations (fetched via getAdminTranslations RPC).
62
62
  * When true, translations are fetched from the server configured via
63
- * .adminLocale() and config translations.
63
+ * config/admin.ts and config translations.
64
64
  *
65
65
  * @default false (for backwards compatibility)
66
66
  *
67
67
  * @example
68
68
  * ```tsx
69
69
  * // Server configures locales and messages
70
- * const app = runtimeConfig({
71
- * modules: [adminModule],
72
- * adminLocale: { locales: ["en", "sk"], defaultLocale: "en" },
73
- * messages: { sk: { "common.save": "Ulozit" } },
70
+ * import { adminConfig } from "#questpie/factories";
71
+ *
72
+ * export default adminConfig({
73
+ * locale: { locales: ["en", "sk"], defaultLocale: "en" },
74
74
  * });
75
75
  *
76
76
  * // Client fetches from server
@@ -10,11 +10,67 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
10
10
  import { jsx } from "react/jsx-runtime";
11
11
 
12
12
  //#region src/client/views/layout/admin-layout-provider.tsx
13
+ /**
14
+ * AdminLayoutProvider Component
15
+ *
16
+ * Universal layout wrapper that works with any router.
17
+ * Provides AdminProvider + AdminLayout and renders children.
18
+ *
19
+ * @example Next.js (App Router)
20
+ * ```tsx
21
+ * // app/admin/layout.tsx
22
+ * export default function AdminLayout({ children }) {
23
+ * return (
24
+ * <AdminLayoutProvider
25
+ * admin={myAdmin}
26
+ * client={cmsClient}
27
+ * authClient={authClient}
28
+ * LinkComponent={Link}
29
+ * >
30
+ * {children}
31
+ * </AdminLayoutProvider>
32
+ * );
33
+ * }
34
+ * ```
35
+ *
36
+ * @example TanStack Router
37
+ * ```tsx
38
+ * // routes/admin.tsx
39
+ * function AdminLayout() {
40
+ * return (
41
+ * <AdminLayoutProvider
42
+ * admin={myAdmin}
43
+ * client={cmsClient}
44
+ * authClient={authClient}
45
+ * LinkComponent={Link}
46
+ * >
47
+ * <Outlet />
48
+ * </AdminLayoutProvider>
49
+ * );
50
+ * }
51
+ * ```
52
+ *
53
+ * @example With Auth Protection
54
+ * ```tsx
55
+ * <AdminLayoutProvider
56
+ * admin={myAdmin}
57
+ * client={cmsClient}
58
+ * authClient={authClient}
59
+ * enableAuthGuard={true}
60
+ * publicPaths={["/admin/login", "/admin/forgot-password"]}
61
+ * requiredRole="admin"
62
+ * >
63
+ * {children}
64
+ * </AdminLayoutProvider>
65
+ * ```
66
+ */
13
67
  /** Debounced 401 redirect - prevents multiple redirects from concurrent failures */
14
68
  let sessionExpiredRedirectPending = false;
69
+ const ADMIN_QUERY_STALE_TIME_MS = 60 * 1e3;
70
+ const configuredAdminQueryClients = /* @__PURE__ */ new WeakSet();
15
71
  function handleSessionExpiredError(error) {
16
72
  if (sessionExpiredRedirectPending) return;
17
- if ((error != null && typeof error === "object" && "status" in error ? error.status : void 0) !== 401) return;
73
+ if (getErrorStatus(error) !== 401) return;
18
74
  if (typeof window !== "undefined") {
19
75
  const path = window.location.pathname;
20
76
  if (DEFAULT_PUBLIC_PATHS.some((p) => path.endsWith(p))) return;
@@ -23,22 +79,57 @@ function handleSessionExpiredError(error) {
23
79
  window.location.href = `${path.replace(/\/[^/]*$/, "")}/login?returnUrl=${returnUrl}`;
24
80
  }
25
81
  }
82
+ function getErrorStatus(error) {
83
+ if (error != null && typeof error === "object" && "status" in error) {
84
+ const status = error.status;
85
+ return typeof status === "number" ? status : void 0;
86
+ }
87
+ }
88
+ function shouldRetryAdminQuery(failureCount, error) {
89
+ const status = getErrorStatus(error);
90
+ if (status === 401) return false;
91
+ if (status && status >= 400 && status < 500 && status !== 408 && status !== 429) return false;
92
+ return failureCount < 3;
93
+ }
94
+ function createAdminDefaultOptions(defaultOptions = {}) {
95
+ const queries = defaultOptions.queries ?? {};
96
+ const mutations = defaultOptions.mutations ?? {};
97
+ const existingMutationOnError = mutations.onError;
98
+ return {
99
+ ...defaultOptions,
100
+ queries: {
101
+ ...queries,
102
+ staleTime: queries.staleTime ?? ADMIN_QUERY_STALE_TIME_MS,
103
+ refetchOnWindowFocus: queries.refetchOnWindowFocus ?? false,
104
+ retry: queries.retry ?? shouldRetryAdminQuery
105
+ },
106
+ mutations: {
107
+ ...mutations,
108
+ onError: ((error, ...args) => {
109
+ handleSessionExpiredError(error);
110
+ return existingMutationOnError?.(error, ...args);
111
+ })
112
+ }
113
+ };
114
+ }
115
+ function installQueryCacheSessionHandler(queryClient) {
116
+ const queryCache = queryClient.getQueryCache();
117
+ const existingOnError = queryCache.config.onError;
118
+ queryCache.config.onError = (error, ...args) => {
119
+ handleSessionExpiredError(error);
120
+ return existingOnError?.(error, ...args);
121
+ };
122
+ }
123
+ function configureAdminQueryClient(queryClient) {
124
+ if (configuredAdminQueryClients.has(queryClient)) return queryClient;
125
+ queryClient.setDefaultOptions(createAdminDefaultOptions(queryClient.getDefaultOptions()));
126
+ installQueryCacheSessionHandler(queryClient);
127
+ configuredAdminQueryClients.add(queryClient);
128
+ return queryClient;
129
+ }
26
130
  let cachedQueryClient;
27
131
  function getDefaultQueryClient() {
28
- if (!cachedQueryClient) {
29
- cachedQueryClient = new QueryClient({ defaultOptions: {
30
- queries: {
31
- staleTime: 60 * 1e3,
32
- refetchOnWindowFocus: false,
33
- retry: (failureCount, error) => {
34
- if ((error != null && typeof error === "object" && "status" in error ? error.status : void 0) === 401) return false;
35
- return failureCount < 3;
36
- }
37
- },
38
- mutations: { onError: handleSessionExpiredError }
39
- } });
40
- cachedQueryClient.getQueryCache().config.onError = handleSessionExpiredError;
41
- }
132
+ if (!cachedQueryClient) cachedQueryClient = configureAdminQueryClient(new QueryClient());
42
133
  return cachedQueryClient;
43
134
  }
44
135
  /**
@@ -77,7 +168,7 @@ function AdminLayoutProvider(t0) {
77
168
  const basePath = t1 === void 0 ? "/admin" : t1;
78
169
  const publicPaths = t2 === void 0 ? DEFAULT_PUBLIC_PATHS : t2;
79
170
  const requiredRole = t3 === void 0 ? "admin" : t3;
80
- const qc = queryClient ?? getDefaultQueryClient();
171
+ const qc = queryClient ? configureAdminQueryClient(queryClient) : getDefaultQueryClient();
81
172
  const { theme: managedTheme, setTheme: setManagedTheme } = useManagedAdminTheme(theme, setTheme);
82
173
  if (client?.routes) {
83
174
  qc.prefetchQuery(getAdminConfigQueryOptions(client));
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime7 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime8 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/views/pages/accept-invite-page.d.ts
5
5
 
@@ -61,6 +61,6 @@ declare function AcceptInvitePage({
61
61
  redirectTo,
62
62
  loginPath,
63
63
  minPasswordLength
64
- }: AcceptInvitePageProps): react_jsx_runtime7.JSX.Element;
64
+ }: AcceptInvitePageProps): react_jsx_runtime8.JSX.Element;
65
65
  //#endregion
66
66
  export { AcceptInvitePage };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime8 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime9 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/client/views/pages/dashboard-page.d.ts
4
4
 
@@ -38,6 +38,6 @@ declare function DashboardPage({
38
38
  title,
39
39
  description,
40
40
  className
41
- }: DashboardPageProps): react_jsx_runtime8.JSX.Element;
41
+ }: DashboardPageProps): react_jsx_runtime9.JSX.Element;
42
42
  //#endregion
43
43
  export { DashboardPage };
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime9 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/views/pages/forgot-password-page.d.ts
5
5
 
@@ -51,6 +51,6 @@ declare function ForgotPasswordPage({
51
51
  logo,
52
52
  loginPath,
53
53
  resetPasswordRedirectUrl
54
- }: ForgotPasswordPageProps): react_jsx_runtime9.JSX.Element;
54
+ }: ForgotPasswordPageProps): react_jsx_runtime6.JSX.Element;
55
55
  //#endregion
56
56
  export { ForgotPasswordPage };
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime13 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime12 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/views/pages/reset-password-page.d.ts
5
5
 
@@ -58,6 +58,6 @@ declare function ResetPasswordPage({
58
58
  loginPath,
59
59
  minPasswordLength,
60
60
  getToken
61
- }: ResetPasswordPageProps): react_jsx_runtime13.JSX.Element;
61
+ }: ResetPasswordPageProps): react_jsx_runtime12.JSX.Element;
62
62
  //#endregion
63
63
  export { ResetPasswordPage };
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime12 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime13 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/views/pages/setup-page.d.ts
5
5
 
@@ -56,6 +56,6 @@ declare function SetupPage({
56
56
  redirectTo,
57
57
  loginPath,
58
58
  showLoginLink
59
- }: SetupPageProps): react_jsx_runtime12.JSX.Element;
59
+ }: SetupPageProps): react_jsx_runtime13.JSX.Element;
60
60
  //#endregion
61
61
  export { SetupPage, SetupPageProps };
package/dist/client.d.mts CHANGED
@@ -28,7 +28,7 @@ import { RichTextEditor } from "./client/components/fields/rich-text-editor/inde
28
28
  import { BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, useBlockScope, useResolveFieldPath } from "./client/preview/block-scope-context.mjs";
29
29
  import { PreviewBanner, PreviewBannerProps } from "./client/preview/preview-banner.mjs";
30
30
  import { PreviewField, PreviewFieldProps, PreviewProvider, StandalonePreviewField, usePreviewContext } from "./client/preview/preview-field.mjs";
31
- import { AdminToPreviewMessage, BlockClickedMessage, FieldClickedMessage, FocusFieldMessage, PreviewConfig, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, RefreshCompleteMessage, SelectBlockMessage, isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
31
+ import { AdminToPreviewMessage, BlockClickedMessage, CommitMessage, FieldClickedMessage, FieldValueEditedMessage, FocusFieldMessage, FullResyncMessage, InitSnapshotMessage, PatchAppliedMessage, PatchBatchMessage, PreviewConfig, PreviewPatchOp, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, RefreshCompleteMessage, ResyncRequestMessage, SelectBlockMessage, isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
32
32
  import { UseCollectionPreviewOptions, UseCollectionPreviewResult, useCollectionPreview } from "./client/preview/use-collection-preview.mjs";
33
33
  import "./client/preview/index.mjs";
34
34
  import { AuthGuard } from "./client/components/auth/auth-guard.mjs";
@@ -105,4 +105,4 @@ type CollectionFieldKeys<TApp extends QuestpieApp, TCollectionName extends strin
105
105
  select: infer TSelect;
106
106
  } ? keyof TSelect : never : never : never;
107
107
  //#endregion
108
- export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, type AdminProviderProps, AdminRouter, type AdminRouterProps, type AdminSidebarBrandProps, type AdminSidebarNavItemProps, type AdminState, type AdminStore, type AdminToPreviewMessage, AnyQuestpieClient, type AnyWidgetConfig, type AppAdmin, AuthDefaultLogo, AuthGuard, AuthLayout, type AuthLayoutProps, AuthLoading, Badge, type BadgeProps, type BaseFieldProps, type BaseWidgetAdminMeta, type BaseWidgetConfig, type BlockCategory, type BlockClickedMessage, type BlockContent, type BlockNode, BlockRenderer, type BlockRendererProps as BlockRendererComponentProps, type BlockRendererProps$1 as BlockRendererProps, type BlockScopeContextValue, BlockScopeProvider, type BlockScopeProviderProps, type BrandLogoConfig, BrandLogoMark, type BrandLogoMarkProps, type BrandSnapshot, type BrandingConfig, type ChartWidgetConfig, CollectionFieldKeys, type CollectionFormViewProps, CollectionItem, type CollectionListViewProps, CollectionNames, type ComponentRegistry, ComponentRenderer, type ComponentRendererProps, type ComponentRendererRegistry, type CustomWidgetConfig, DashboardPage, EMPTY_BLOCK_CONTENT, type FieldClickedMessage, type FieldComponentProps, type FieldDefinition, type FieldInstance, type FlagConfig, type FocusContextValue, type FocusFieldMessage, FocusProvider, type FocusProviderProps, type FocusState, ForgotPasswordForm, ForgotPasswordPage, type FormViewConfig, type FormViewDefinition, type GlobalFormViewProps, GlobalNames, type I18nContext, type I18nText, type IconComponent, IconifyIcon, type IconifyIconProps, type InferAdminCMS, InvitePage, type ListViewDefinition, LoginForm, LoginPage, type MaybeLazyComponent, type OptionItem, type PageDefinition, PreviewBanner, type PreviewBannerProps, type PreviewConfig, PreviewField, type PreviewFieldProps, PreviewProvider, type PreviewReadyMessage, type PreviewRefreshMessage, type PreviewToAdminMessage, type ProgressWidgetConfig, type QuickActionsWidgetConfig, type ReactiveFieldResult, type ReactiveFieldState, type RecentItemsWidgetConfig, type RefreshCompleteMessage, ResetPasswordForm, ResetPasswordPage, RichTextEditor, type RichTextEditorProps, RichTextRenderer, type RichTextStyles, type ScopeContextValue, type ScopeOption, ScopePicker, type ScopePickerProps, ScopeProvider, type ScopeProviderProps, type SelectBlockMessage, SetupForm, type SetupFormValues, SetupPage, type SetupPageProps, type SetupStatus, StandalonePreviewField, type StatsWidgetConfig, type TableWidgetConfig, type TimelineWidgetConfig, type TipTapDoc, type TipTapNode, type TypedHooks, type UseCollectionPreviewOptions, type UseCollectionPreviewResult, type UseFieldOptionsOptions, type UseFieldOptionsResult, type UseReactiveFieldsOptions, type UseReactiveFieldsResult, type ValueWidgetConfig, type ViewDefinition, type ViewKind, type WidgetComponentProps, type WidgetConfig, type WidgetDefinition, type WidgetTypeRegistry, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, page, parsePreviewFieldPath, resolveIconElement, scrollFieldIntoView, selectAdmin, selectBasePath, selectClient, selectNavigate, useAdminStore, useAuthClient, useBlockScope, useBrand, useBrandSnapshotRef, useCollectionCreate, useCollectionDelete, useCollectionItem, useCollectionList, useCollectionPreview, useCollectionRestore, useCollectionRevertVersion, useCollectionUpdate, useCollectionVersions, useCurrentUser, useFieldOptions, useFocus, useFocusOptional, useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions, useIsBlockFocused, useIsDesktop, useIsFieldFocused, useIsMobile, useMediaQuery, usePreviewContext, useReactiveFields, useResolveFieldPath, useScope, useScopeSafe, useScopedFetch, useSearchParamToggle, useServerWidgetData, useSetupStatus, useShallow, useSidebarSearchParam, view, widget };
108
+ export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, type AdminProviderProps, AdminRouter, type AdminRouterProps, type AdminSidebarBrandProps, type AdminSidebarNavItemProps, type AdminState, type AdminStore, type AdminToPreviewMessage, AnyQuestpieClient, type AnyWidgetConfig, type AppAdmin, AuthDefaultLogo, AuthGuard, AuthLayout, type AuthLayoutProps, AuthLoading, Badge, type BadgeProps, type BaseFieldProps, type BaseWidgetAdminMeta, type BaseWidgetConfig, type BlockCategory, type BlockClickedMessage, type BlockContent, type BlockNode, BlockRenderer, type BlockRendererProps as BlockRendererComponentProps, type BlockRendererProps$1 as BlockRendererProps, type BlockScopeContextValue, BlockScopeProvider, type BlockScopeProviderProps, type BrandLogoConfig, BrandLogoMark, type BrandLogoMarkProps, type BrandSnapshot, type BrandingConfig, type ChartWidgetConfig, CollectionFieldKeys, type CollectionFormViewProps, CollectionItem, type CollectionListViewProps, CollectionNames, type CommitMessage, type ComponentRegistry, ComponentRenderer, type ComponentRendererProps, type ComponentRendererRegistry, type CustomWidgetConfig, DashboardPage, EMPTY_BLOCK_CONTENT, type FieldClickedMessage, type FieldComponentProps, type FieldDefinition, type FieldInstance, type FieldValueEditedMessage, type FlagConfig, type FocusContextValue, type FocusFieldMessage, FocusProvider, type FocusProviderProps, type FocusState, ForgotPasswordForm, ForgotPasswordPage, type FormViewConfig, type FormViewDefinition, type FullResyncMessage, type GlobalFormViewProps, GlobalNames, type I18nContext, type I18nText, type IconComponent, IconifyIcon, type IconifyIconProps, type InferAdminCMS, type InitSnapshotMessage, InvitePage, type ListViewDefinition, LoginForm, LoginPage, type MaybeLazyComponent, type OptionItem, type PageDefinition, type PatchAppliedMessage, type PatchBatchMessage, PreviewBanner, type PreviewBannerProps, type PreviewConfig, PreviewField, type PreviewFieldProps, type PreviewPatchOp, PreviewProvider, type PreviewReadyMessage, type PreviewRefreshMessage, type PreviewToAdminMessage, type ProgressWidgetConfig, type QuickActionsWidgetConfig, type ReactiveFieldResult, type ReactiveFieldState, type RecentItemsWidgetConfig, type RefreshCompleteMessage, ResetPasswordForm, ResetPasswordPage, type ResyncRequestMessage, RichTextEditor, type RichTextEditorProps, RichTextRenderer, type RichTextStyles, type ScopeContextValue, type ScopeOption, ScopePicker, type ScopePickerProps, ScopeProvider, type ScopeProviderProps, type SelectBlockMessage, SetupForm, type SetupFormValues, SetupPage, type SetupPageProps, type SetupStatus, StandalonePreviewField, type StatsWidgetConfig, type TableWidgetConfig, type TimelineWidgetConfig, type TipTapDoc, type TipTapNode, type TypedHooks, type UseCollectionPreviewOptions, type UseCollectionPreviewResult, type UseFieldOptionsOptions, type UseFieldOptionsResult, type UseReactiveFieldsOptions, type UseReactiveFieldsResult, type ValueWidgetConfig, type ViewDefinition, type ViewKind, type WidgetComponentProps, type WidgetConfig, type WidgetDefinition, type WidgetTypeRegistry, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, page, parsePreviewFieldPath, resolveIconElement, scrollFieldIntoView, selectAdmin, selectBasePath, selectClient, selectNavigate, useAdminStore, useAuthClient, useBlockScope, useBrand, useBrandSnapshotRef, useCollectionCreate, useCollectionDelete, useCollectionItem, useCollectionList, useCollectionPreview, useCollectionRestore, useCollectionRevertVersion, useCollectionUpdate, useCollectionVersions, useCurrentUser, useFieldOptions, useFocus, useFocusOptional, useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions, useIsBlockFocused, useIsDesktop, useIsFieldFocused, useIsMobile, useMediaQuery, usePreviewContext, useReactiveFields, useResolveFieldPath, useScope, useScopeSafe, useScopedFetch, useSearchParamToggle, useServerWidgetData, useSetupStatus, useShallow, useSidebarSearchParam, view, widget };
package/dist/client.mjs CHANGED
@@ -6,9 +6,9 @@ import { Badge, ComponentRenderer, IconifyIcon, createIconRenderer, isComponentR
6
6
  import { configureField, field } from "./client/builder/field/field.mjs";
7
7
  import { EMPTY_BLOCK_CONTENT, isBlockContent } from "./client/blocks/types.mjs";
8
8
  import { getCountryCode, getFlagConfig, getFlagUrl } from "./client/utils/locale-to-flag.mjs";
9
+ import { FocusProvider, parsePreviewFieldPath, scrollFieldIntoView, useFocus, useFocusOptional, useIsBlockFocused, useIsFieldFocused } from "./client/contexts/focus-context.mjs";
9
10
  import { useIsDesktop, useIsMobile, useMediaQuery } from "./client/hooks/use-media-query.mjs";
10
11
  import { buildValidationSchema, buildZodFromIntrospection, createFormSchema } from "./client/builder/validation.mjs";
11
- import { FocusProvider, parsePreviewFieldPath, scrollFieldIntoView, useFocus, useFocusOptional, useIsBlockFocused, useIsFieldFocused } from "./client/contexts/focus-context.mjs";
12
12
  import { isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
13
13
  import { useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions } from "./client/hooks/use-global.mjs";
14
14
  import { useSearchParamToggle } from "./client/hooks/use-search-param-toggle.mjs";
package/dist/index.d.mts CHANGED
@@ -26,7 +26,7 @@ import { RichTextEditor } from "./client/components/fields/rich-text-editor/inde
26
26
  import { BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, useBlockScope, useResolveFieldPath } from "./client/preview/block-scope-context.mjs";
27
27
  import { PreviewBanner, PreviewBannerProps } from "./client/preview/preview-banner.mjs";
28
28
  import { PreviewField, PreviewFieldProps, PreviewProvider, StandalonePreviewField, usePreviewContext } from "./client/preview/preview-field.mjs";
29
- import { AdminToPreviewMessage, BlockClickedMessage, FieldClickedMessage, FocusFieldMessage, PreviewConfig, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, RefreshCompleteMessage, SelectBlockMessage, isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
29
+ import { AdminToPreviewMessage, BlockClickedMessage, CommitMessage, FieldClickedMessage, FieldValueEditedMessage, FocusFieldMessage, FullResyncMessage, InitSnapshotMessage, PatchAppliedMessage, PatchBatchMessage, PreviewConfig, PreviewPatchOp, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, RefreshCompleteMessage, ResyncRequestMessage, SelectBlockMessage, isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
30
30
  import { UseCollectionPreviewOptions, UseCollectionPreviewResult, useCollectionPreview } from "./client/preview/use-collection-preview.mjs";
31
31
  import { AuthGuard } from "./client/components/auth/auth-guard.mjs";
32
32
  import { AuthLoading } from "./client/components/auth/auth-loading.mjs";
@@ -65,4 +65,4 @@ import { ScopeContextValue, ScopeOption, ScopePickerProps, ScopeProviderProps }
65
65
  import { ScopePicker } from "./client/scope/picker.mjs";
66
66
  import { ScopeProvider, createScopedFetch, useScope, useScopeSafe, useScopedFetch } from "./client/scope/provider.mjs";
67
67
  import { AnyQuestpieClient, CollectionFieldKeys, CollectionItem, CollectionNames, GlobalNames } from "./client.mjs";
68
- export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminProviderProps, AdminRouter, AdminRouterProps, AdminSidebarBrandProps, AdminSidebarNavItemProps, AdminState, AdminStore, AdminToPreviewMessage, type AnyAdminMeta, AnyQuestpieClient, AnyWidgetConfig, AppAdmin, type ArrayFieldAdminMeta, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLayoutProps, AuthLoading, Badge, BadgeProps, type BaseAdminMeta, BaseFieldProps, BaseWidgetAdminMeta, BaseWidgetConfig, BlockCategory, BlockClickedMessage, BlockContent, BlockNode, BlockRenderer, BlockRendererProps as BlockRendererComponentProps, BlockRendererProps$1 as BlockRendererProps, BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, type BooleanFieldAdminMeta, BrandLogoConfig, BrandLogoMark, BrandLogoMarkProps, BrandSnapshot, BrandingConfig, ChartWidgetConfig, CollectionFieldKeys, CollectionFormViewProps, CollectionItem, CollectionListViewProps, CollectionNames, ComponentRegistry, ComponentRenderer, ComponentRendererProps, ComponentRendererRegistry, CustomWidgetConfig, DashboardPage, type DateFieldAdminMeta, EMPTY_BLOCK_CONTENT, FieldClickedMessage, FieldComponentProps, FieldDefinition, FieldInstance, FlagConfig, FocusContextValue, FocusFieldMessage, FocusProvider, FocusProviderProps, FocusState, ForgotPasswordForm, ForgotPasswordPage, FormViewConfig, FormViewDefinition, GlobalFormViewProps, GlobalNames, I18nContext, I18nText, IconComponent, IconifyIcon, IconifyIconProps, InferAdminCMS, InvitePage, type JsonFieldAdminMeta, ListViewDefinition, LoginForm, LoginPage, MaybeLazyComponent, type NumberFieldAdminMeta, type ObjectFieldAdminMeta, OptionItem, PageDefinition, PreviewBanner, PreviewBannerProps, PreviewConfig, PreviewField, PreviewFieldProps, PreviewProvider, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, ProgressWidgetConfig, QuickActionsWidgetConfig, ReactiveFieldResult, ReactiveFieldState, RecentItemsWidgetConfig, RefreshCompleteMessage, type RelationFieldAdminMeta, ResetPasswordForm, ResetPasswordPage, RichTextEditor, RichTextEditorProps, RichTextRenderer, RichTextStyles, ScopeContextValue, ScopeOption, ScopePicker, ScopePickerProps, ScopeProvider, ScopeProviderProps, SelectBlockMessage, type SelectFieldAdminMeta, SetupForm, SetupFormValues, SetupPage, SetupPageProps, SetupStatus, StandalonePreviewField, StatsWidgetConfig, TableWidgetConfig, type TextFieldAdminMeta, type TextareaFieldAdminMeta, type TimeFieldAdminMeta, TimelineWidgetConfig, TipTapDoc, TipTapNode, TypedHooks, type UploadFieldAdminMeta, UseCollectionPreviewOptions, UseCollectionPreviewResult, UseFieldOptionsOptions, UseFieldOptionsResult, UseReactiveFieldsOptions, UseReactiveFieldsResult, ValueWidgetConfig, ViewDefinition, ViewKind, WidgetComponentProps, WidgetConfig, WidgetDefinition, WidgetTypeRegistry, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, page, parsePreviewFieldPath, resolveIconElement, scrollFieldIntoView, selectAdmin, selectBasePath, selectClient, selectNavigate, useAdminStore, useAuthClient, useBlockScope, useBrand, useBrandSnapshotRef, useCollectionCreate, useCollectionDelete, useCollectionItem, useCollectionList, useCollectionPreview, useCollectionRestore, useCollectionRevertVersion, useCollectionUpdate, useCollectionVersions, useCurrentUser, useFieldOptions, useFocus, useFocusOptional, useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions, useIsBlockFocused, useIsDesktop, useIsFieldFocused, useIsMobile, useMediaQuery, usePreviewContext, useReactiveFields, useResolveFieldPath, useScope, useScopeSafe, useScopedFetch, useSearchParamToggle, useServerWidgetData, useSetupStatus, useShallow, useSidebarSearchParam, view, widget };
68
+ export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminProviderProps, AdminRouter, AdminRouterProps, AdminSidebarBrandProps, AdminSidebarNavItemProps, AdminState, AdminStore, AdminToPreviewMessage, type AnyAdminMeta, AnyQuestpieClient, AnyWidgetConfig, AppAdmin, type ArrayFieldAdminMeta, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLayoutProps, AuthLoading, Badge, BadgeProps, type BaseAdminMeta, BaseFieldProps, BaseWidgetAdminMeta, BaseWidgetConfig, BlockCategory, BlockClickedMessage, BlockContent, BlockNode, BlockRenderer, BlockRendererProps as BlockRendererComponentProps, BlockRendererProps$1 as BlockRendererProps, BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, type BooleanFieldAdminMeta, BrandLogoConfig, BrandLogoMark, BrandLogoMarkProps, BrandSnapshot, BrandingConfig, ChartWidgetConfig, CollectionFieldKeys, CollectionFormViewProps, CollectionItem, CollectionListViewProps, CollectionNames, CommitMessage, ComponentRegistry, ComponentRenderer, ComponentRendererProps, ComponentRendererRegistry, CustomWidgetConfig, DashboardPage, type DateFieldAdminMeta, EMPTY_BLOCK_CONTENT, FieldClickedMessage, FieldComponentProps, FieldDefinition, FieldInstance, FieldValueEditedMessage, FlagConfig, FocusContextValue, FocusFieldMessage, FocusProvider, FocusProviderProps, FocusState, ForgotPasswordForm, ForgotPasswordPage, FormViewConfig, FormViewDefinition, FullResyncMessage, GlobalFormViewProps, GlobalNames, I18nContext, I18nText, IconComponent, IconifyIcon, IconifyIconProps, InferAdminCMS, InitSnapshotMessage, InvitePage, type JsonFieldAdminMeta, ListViewDefinition, LoginForm, LoginPage, MaybeLazyComponent, type NumberFieldAdminMeta, type ObjectFieldAdminMeta, OptionItem, PageDefinition, PatchAppliedMessage, PatchBatchMessage, PreviewBanner, PreviewBannerProps, PreviewConfig, PreviewField, PreviewFieldProps, PreviewPatchOp, PreviewProvider, PreviewReadyMessage, PreviewRefreshMessage, PreviewToAdminMessage, ProgressWidgetConfig, QuickActionsWidgetConfig, ReactiveFieldResult, ReactiveFieldState, RecentItemsWidgetConfig, RefreshCompleteMessage, type RelationFieldAdminMeta, ResetPasswordForm, ResetPasswordPage, ResyncRequestMessage, RichTextEditor, RichTextEditorProps, RichTextRenderer, RichTextStyles, ScopeContextValue, ScopeOption, ScopePicker, ScopePickerProps, ScopeProvider, ScopeProviderProps, SelectBlockMessage, type SelectFieldAdminMeta, SetupForm, SetupFormValues, SetupPage, SetupPageProps, SetupStatus, StandalonePreviewField, StatsWidgetConfig, TableWidgetConfig, type TextFieldAdminMeta, type TextareaFieldAdminMeta, type TimeFieldAdminMeta, TimelineWidgetConfig, TipTapDoc, TipTapNode, TypedHooks, type UploadFieldAdminMeta, UseCollectionPreviewOptions, UseCollectionPreviewResult, UseFieldOptionsOptions, UseFieldOptionsResult, UseReactiveFieldsOptions, UseReactiveFieldsResult, ValueWidgetConfig, ViewDefinition, ViewKind, WidgetComponentProps, WidgetConfig, WidgetDefinition, WidgetTypeRegistry, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, page, parsePreviewFieldPath, resolveIconElement, scrollFieldIntoView, selectAdmin, selectBasePath, selectClient, selectNavigate, useAdminStore, useAuthClient, useBlockScope, useBrand, useBrandSnapshotRef, useCollectionCreate, useCollectionDelete, useCollectionItem, useCollectionList, useCollectionPreview, useCollectionRestore, useCollectionRevertVersion, useCollectionUpdate, useCollectionVersions, useCurrentUser, useFieldOptions, useFocus, useFocusOptional, useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions, useIsBlockFocused, useIsDesktop, useIsFieldFocused, useIsMobile, useMediaQuery, usePreviewContext, useReactiveFields, useResolveFieldPath, useScope, useScopeSafe, useScopedFetch, useSearchParamToggle, useServerWidgetData, useSetupStatus, useShallow, useSidebarSearchParam, view, widget };
package/dist/index.mjs CHANGED
@@ -6,9 +6,9 @@ import { Badge, ComponentRenderer, IconifyIcon, createIconRenderer, isComponentR
6
6
  import { configureField, field } from "./client/builder/field/field.mjs";
7
7
  import { EMPTY_BLOCK_CONTENT, isBlockContent } from "./client/blocks/types.mjs";
8
8
  import { getCountryCode, getFlagConfig, getFlagUrl } from "./client/utils/locale-to-flag.mjs";
9
+ import { FocusProvider, parsePreviewFieldPath, scrollFieldIntoView, useFocus, useFocusOptional, useIsBlockFocused, useIsFieldFocused } from "./client/contexts/focus-context.mjs";
9
10
  import { useIsDesktop, useIsMobile, useMediaQuery } from "./client/hooks/use-media-query.mjs";
10
11
  import { buildValidationSchema, buildZodFromIntrospection, createFormSchema } from "./client/builder/validation.mjs";
11
- import { FocusProvider, parsePreviewFieldPath, scrollFieldIntoView, useFocus, useFocusOptional, useIsBlockFocused, useIsFieldFocused } from "./client/contexts/focus-context.mjs";
12
12
  import { isAdminToPreviewMessage, isPreviewToAdminMessage } from "./client/preview/types.mjs";
13
13
  import { useGlobal, useGlobalRevertVersion, useGlobalUpdate, useGlobalVersions } from "./client/hooks/use-global.mjs";
14
14
  import { useSearchParamToggle } from "./client/hooks/use-search-param-toggle.mjs";
@@ -11,10 +11,14 @@
11
11
  *
12
12
  * @example
13
13
  * ```ts
14
- * .adminLocale({
15
- * locales: ["en", "sk"], // UI available in 2 languages
16
- * defaultLocale: "en",
17
- * })
14
+ * import { adminConfig } from "#questpie/factories";
15
+ *
16
+ * export default adminConfig({
17
+ * locale: {
18
+ * locales: ["en", "sk"], // UI available in 2 languages
19
+ * defaultLocale: "en",
20
+ * },
21
+ * });
18
22
  * ```
19
23
  */
20
24
  interface AdminLocaleConfig {
@@ -22,7 +22,7 @@ interface AdminCollectionConfig {
22
22
  order?: number;
23
23
  /**
24
24
  * Whether this collection should be included in audit logging.
25
- * Requires the audit module to be registered via `runtimeConfig({ modules: [auditModule] })`.
25
+ * Requires `auditModule` to be registered in `questpie/server/modules.ts`.
26
26
  *
27
27
  * - `true` or `undefined` (default): audited when audit module is active
28
28
  * - `false`: never audited, even when audit module is active
@@ -368,7 +368,11 @@ var cs_default = {
368
368
  "defaults.users.fields.name.placeholder": "Zadejte jméno uživatele",
369
369
  "defaults.users.fields.email.label": "E-mail",
370
370
  "defaults.users.fields.email.description": "E-mailová adresa (jen pro čtení)",
371
+ "defaults.users.fields.image.label": "URL obrázku",
372
+ "defaults.users.fields.avatar.label": "Profilová fotka",
371
373
  "defaults.users.fields.role.label": "Role",
374
+ "defaults.users.fields.role.description": "Administrátoři mohou spravovat celou administraci; uživatelé mají omezený přístup.",
375
+ "defaults.users.fields.role.placeholder": "Vyberte roli",
372
376
  "defaults.users.fields.role.options.admin": "Administrátor",
373
377
  "defaults.users.fields.role.options.user": "Uživatel",
374
378
  "defaults.users.fields.emailVerified.label": "E-mail ověřen",
@@ -377,6 +381,8 @@ var cs_default = {
377
381
  "defaults.users.fields.banned.description": "Zabránit uživateli přístup do systému",
378
382
  "defaults.users.fields.banReason.label": "Důvod blokace",
379
383
  "defaults.users.fields.banReason.placeholder": "Zadejte důvod blokace...",
384
+ "defaults.users.fields.banExpires.label": "Konec blokace",
385
+ "defaults.users.fields.banExpires.description": "Kdy má blokace uživatele vypršet",
380
386
  "defaults.users.sections.basicInfo": "Základní informace",
381
387
  "defaults.users.sections.permissions": "Oprávnění",
382
388
  "defaults.users.sections.accessControl": "Řízení přístupu",
@@ -408,11 +414,16 @@ var cs_default = {
408
414
  "defaults.assets.fields.mimeType.description": "MIME typ souboru",
409
415
  "defaults.assets.fields.size.label": "Velikost (bajty)",
410
416
  "defaults.assets.fields.size.description": "Velikost souboru v bajtech",
417
+ "defaults.assets.fields.width.label": "Šířka",
418
+ "defaults.assets.fields.width.description": "Šířka obrázku v pixelech",
419
+ "defaults.assets.fields.height.label": "Výška",
420
+ "defaults.assets.fields.height.description": "Výška obrázku v pixelech",
411
421
  "defaults.assets.fields.alt.label": "Alternativní text",
412
422
  "defaults.assets.fields.alt.placeholder": "Popište obrázek pro přístupnost",
413
423
  "defaults.assets.fields.alt.description": "Alternativní text pro čtečky obrazovky",
414
424
  "defaults.assets.fields.caption.label": "Popisek",
415
425
  "defaults.assets.fields.caption.placeholder": "Přidejte popisek...",
426
+ "defaults.assets.fields.caption.description": "Volitelný popisek zobrazený u média",
416
427
  "defaults.assets.fields.visibility.label": "Viditelnost",
417
428
  "defaults.assets.fields.visibility.options.public": "Veřejné",
418
429
  "defaults.assets.fields.visibility.options.private": "Soukromé",
@@ -366,7 +366,11 @@ var de_default = {
366
366
  "defaults.users.fields.name.placeholder": "Benutzernamen eingeben",
367
367
  "defaults.users.fields.email.label": "E-Mail",
368
368
  "defaults.users.fields.email.description": "E-Mail-Adresse (schreibgeschützt)",
369
+ "defaults.users.fields.image.label": "Bild-URL",
370
+ "defaults.users.fields.avatar.label": "Profilfoto",
369
371
  "defaults.users.fields.role.label": "Rolle",
372
+ "defaults.users.fields.role.description": "Administratoren können den gesamten Admin-Bereich verwalten; Benutzer haben eingeschränkten Zugriff.",
373
+ "defaults.users.fields.role.placeholder": "Rolle auswählen",
370
374
  "defaults.users.fields.role.options.admin": "Administrator",
371
375
  "defaults.users.fields.role.options.user": "Benutzer",
372
376
  "defaults.users.fields.emailVerified.label": "E-Mail verifiziert",
@@ -375,6 +379,8 @@ var de_default = {
375
379
  "defaults.users.fields.banned.description": "Benutzer den Zugriff auf das System verweigern",
376
380
  "defaults.users.fields.banReason.label": "Sperrgrund",
377
381
  "defaults.users.fields.banReason.placeholder": "Grund für die Sperre eingeben...",
382
+ "defaults.users.fields.banExpires.label": "Sperre läuft ab",
383
+ "defaults.users.fields.banExpires.description": "Wann die Sperre des Benutzers ablaufen soll",
378
384
  "defaults.users.sections.basicInfo": "Grundinformationen",
379
385
  "defaults.users.sections.permissions": "Berechtigungen",
380
386
  "defaults.users.sections.accessControl": "Zugriffskontrolle",
@@ -406,11 +412,16 @@ var de_default = {
406
412
  "defaults.assets.fields.mimeType.description": "MIME-Typ der Datei",
407
413
  "defaults.assets.fields.size.label": "Größe (Bytes)",
408
414
  "defaults.assets.fields.size.description": "Dateigröße in Bytes",
415
+ "defaults.assets.fields.width.label": "Breite",
416
+ "defaults.assets.fields.width.description": "Bildbreite in Pixeln",
417
+ "defaults.assets.fields.height.label": "Höhe",
418
+ "defaults.assets.fields.height.description": "Bildhöhe in Pixeln",
409
419
  "defaults.assets.fields.alt.label": "Alternativtext",
410
420
  "defaults.assets.fields.alt.placeholder": "Bild für Barrierefreiheit beschreiben",
411
421
  "defaults.assets.fields.alt.description": "Alternativtext für Screenreader",
412
422
  "defaults.assets.fields.caption.label": "Untertitel",
413
423
  "defaults.assets.fields.caption.placeholder": "Untertitel hinzufügen...",
424
+ "defaults.assets.fields.caption.description": "Optionale Beschriftung, die mit dem Medium angezeigt wird",
414
425
  "defaults.assets.fields.visibility.label": "Sichtbarkeit",
415
426
  "defaults.assets.fields.visibility.options.public": "Öffentlich",
416
427
  "defaults.assets.fields.visibility.options.private": "Privat",
@@ -552,7 +552,11 @@ var en_default = {
552
552
  "defaults.users.fields.name.placeholder": "Enter user name",
553
553
  "defaults.users.fields.email.label": "Email",
554
554
  "defaults.users.fields.email.description": "Email address (read-only)",
555
+ "defaults.users.fields.image.label": "Image URL",
556
+ "defaults.users.fields.avatar.label": "Profile photo",
555
557
  "defaults.users.fields.role.label": "Role",
558
+ "defaults.users.fields.role.description": "Admins can manage the whole admin area; users have limited access.",
559
+ "defaults.users.fields.role.placeholder": "Select a role",
556
560
  "defaults.users.fields.role.options.admin": "Admin",
557
561
  "defaults.users.fields.role.options.user": "User",
558
562
  "defaults.users.fields.emailVerified.label": "Email Verified",
@@ -561,6 +565,8 @@ var en_default = {
561
565
  "defaults.users.fields.banned.description": "Prevent user from accessing the system",
562
566
  "defaults.users.fields.banReason.label": "Ban Reason",
563
567
  "defaults.users.fields.banReason.placeholder": "Enter reason for banning...",
568
+ "defaults.users.fields.banExpires.label": "Ban Expires",
569
+ "defaults.users.fields.banExpires.description": "When the user's ban should expire",
564
570
  "defaults.users.sections.basicInfo": "Basic Information",
565
571
  "defaults.users.sections.permissions": "Permissions",
566
572
  "defaults.users.sections.accessControl": "Access Control",
@@ -594,11 +600,16 @@ var en_default = {
594
600
  "defaults.assets.fields.mimeType.description": "MIME type of the file",
595
601
  "defaults.assets.fields.size.label": "Size (bytes)",
596
602
  "defaults.assets.fields.size.description": "File size in bytes",
603
+ "defaults.assets.fields.width.label": "Width",
604
+ "defaults.assets.fields.width.description": "Image width in pixels",
605
+ "defaults.assets.fields.height.label": "Height",
606
+ "defaults.assets.fields.height.description": "Image height in pixels",
597
607
  "defaults.assets.fields.alt.label": "Alt Text",
598
608
  "defaults.assets.fields.alt.placeholder": "Describe the image for accessibility",
599
609
  "defaults.assets.fields.alt.description": "Alternative text for screen readers",
600
610
  "defaults.assets.fields.caption.label": "Caption",
601
611
  "defaults.assets.fields.caption.placeholder": "Add a caption...",
612
+ "defaults.assets.fields.caption.description": "Optional caption shown with the asset",
602
613
  "defaults.assets.fields.visibility.label": "Visibility",
603
614
  "defaults.assets.fields.visibility.options.public": "Public",
604
615
  "defaults.assets.fields.visibility.options.private": "Private",
@@ -366,7 +366,11 @@ var es_default = {
366
366
  "defaults.users.fields.name.placeholder": "Ingrese nombre de usuario",
367
367
  "defaults.users.fields.email.label": "Correo electrónico",
368
368
  "defaults.users.fields.email.description": "Dirección de correo (solo lectura)",
369
+ "defaults.users.fields.image.label": "URL de imagen",
370
+ "defaults.users.fields.avatar.label": "Foto de perfil",
369
371
  "defaults.users.fields.role.label": "Rol",
372
+ "defaults.users.fields.role.description": "Los administradores pueden gestionar toda el área de administración; los usuarios tienen acceso limitado.",
373
+ "defaults.users.fields.role.placeholder": "Seleccionar un rol",
370
374
  "defaults.users.fields.role.options.admin": "Administrador",
371
375
  "defaults.users.fields.role.options.user": "Usuario",
372
376
  "defaults.users.fields.emailVerified.label": "Correo verificado",
@@ -375,6 +379,8 @@ var es_default = {
375
379
  "defaults.users.fields.banned.description": "Evitar que el usuario acceda al sistema",
376
380
  "defaults.users.fields.banReason.label": "Motivo de bloqueo",
377
381
  "defaults.users.fields.banReason.placeholder": "Ingrese motivo del bloqueo...",
382
+ "defaults.users.fields.banExpires.label": "Fin del bloqueo",
383
+ "defaults.users.fields.banExpires.description": "Cuándo debe expirar el bloqueo del usuario",
378
384
  "defaults.users.sections.basicInfo": "Información básica",
379
385
  "defaults.users.sections.permissions": "Permisos",
380
386
  "defaults.users.sections.accessControl": "Control de acceso",
@@ -406,11 +412,16 @@ var es_default = {
406
412
  "defaults.assets.fields.mimeType.description": "Tipo MIME del archivo",
407
413
  "defaults.assets.fields.size.label": "Tamaño (bytes)",
408
414
  "defaults.assets.fields.size.description": "Tamaño del archivo en bytes",
415
+ "defaults.assets.fields.width.label": "Ancho",
416
+ "defaults.assets.fields.width.description": "Ancho de la imagen en píxeles",
417
+ "defaults.assets.fields.height.label": "Alto",
418
+ "defaults.assets.fields.height.description": "Alto de la imagen en píxeles",
409
419
  "defaults.assets.fields.alt.label": "Texto alternativo",
410
420
  "defaults.assets.fields.alt.placeholder": "Describa la imagen para accesibilidad",
411
421
  "defaults.assets.fields.alt.description": "Texto alternativo para lectores de pantalla",
412
422
  "defaults.assets.fields.caption.label": "Leyenda",
413
423
  "defaults.assets.fields.caption.placeholder": "Añadir una leyenda...",
424
+ "defaults.assets.fields.caption.description": "Leyenda opcional mostrada con el medio",
414
425
  "defaults.assets.fields.visibility.label": "Visibilidad",
415
426
  "defaults.assets.fields.visibility.options.public": "Público",
416
427
  "defaults.assets.fields.visibility.options.private": "Privado",