@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.
Files changed (95) 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/builder/page/page.d.mts +29 -1
  4. package/dist/client/components/blocks/block-editor-context.mjs +11 -1
  5. package/dist/client/components/blocks/block-editor-provider.mjs +68 -26
  6. package/dist/client/components/blocks/block-item.mjs +181 -170
  7. package/dist/client/components/blocks/utils/tree-utils.mjs +13 -1
  8. package/dist/client/components/fields/array-field.mjs +177 -118
  9. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +305 -310
  10. package/dist/client/components/filter-builder/filters-tab.mjs +1 -1
  11. package/dist/client/components/history-sidebar.mjs +121 -114
  12. package/dist/client/components/preview/live-preview-mode.mjs +140 -114
  13. package/dist/client/components/preview/preview-pane.mjs +288 -333
  14. package/dist/client/components/primitives/option-label.mjs +44 -0
  15. package/dist/client/components/primitives/select-multi.mjs +408 -383
  16. package/dist/client/components/primitives/select-single.mjs +387 -357
  17. package/dist/client/components/widgets/chart-widget.mjs +168 -143
  18. package/dist/client/contexts/focus-context.d.mts +11 -0
  19. package/dist/client/contexts/focus-context.mjs +51 -34
  20. package/dist/client/hooks/use-audit-history.mjs +10 -17
  21. package/dist/client/hooks/use-brand.mjs +2 -1
  22. package/dist/client/hooks/use-transition-stage.mjs +34 -41
  23. package/dist/client/preview/block-scope-context.d.mts +2 -2
  24. package/dist/client/preview/block-scope-context.mjs +10 -20
  25. package/dist/client/preview/index.d.mts +1 -1
  26. package/dist/client/preview/patch.mjs +100 -0
  27. package/dist/client/preview/preview-banner.d.mts +2 -2
  28. package/dist/client/preview/preview-field.d.mts +38 -9
  29. package/dist/client/preview/preview-field.mjs +385 -118
  30. package/dist/client/preview/types.d.mts +82 -3
  31. package/dist/client/preview/types.mjs +85 -6
  32. package/dist/client/preview/use-collection-preview.d.mts +19 -1
  33. package/dist/client/preview/use-collection-preview.mjs +182 -58
  34. package/dist/client/runtime/index.d.mts +2 -2
  35. package/dist/client/runtime/index.mjs +2 -2
  36. package/dist/client/runtime/provider.d.mts +5 -5
  37. package/dist/client/scope/picker.d.mts +2 -2
  38. package/dist/client/scope/provider.d.mts +2 -2
  39. package/dist/client/utils/build-field-definitions-from-schema.mjs +8 -3
  40. package/dist/client/views/auth/login-form.d.mts +2 -2
  41. package/dist/client/views/auth/reset-password-form.d.mts +2 -2
  42. package/dist/client/views/collection/bulk-action-toolbar.mjs +23 -25
  43. package/dist/client/views/collection/cells/primitive-cells.mjs +63 -13
  44. package/dist/client/views/collection/columns/build-columns.mjs +1 -0
  45. package/dist/client/views/collection/form-view.mjs +262 -33
  46. package/dist/client/views/collection/table-view.mjs +16 -11
  47. package/dist/client/views/layout/admin-layout-provider.d.mts +5 -5
  48. package/dist/client/views/layout/admin-layout-provider.mjs +107 -16
  49. package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
  50. package/dist/client/views/pages/dashboard-page.d.mts +2 -2
  51. package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
  52. package/dist/client/views/pages/reset-password-page.d.mts +2 -2
  53. package/dist/client/views/pages/setup-page.d.mts +2 -2
  54. package/dist/client.d.mts +3 -2
  55. package/dist/client.mjs +3 -2
  56. package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
  57. package/dist/index.d.mts +3 -2
  58. package/dist/index.mjs +3 -2
  59. package/dist/server/augmentation/common.d.mts +8 -4
  60. package/dist/server/augmentation/form-layout.d.mts +1 -1
  61. package/dist/server/i18n/messages/cs.mjs +11 -0
  62. package/dist/server/i18n/messages/de.mjs +11 -0
  63. package/dist/server/i18n/messages/en.mjs +11 -0
  64. package/dist/server/i18n/messages/es.mjs +11 -0
  65. package/dist/server/i18n/messages/fr.mjs +11 -0
  66. package/dist/server/i18n/messages/pl.mjs +11 -0
  67. package/dist/server/i18n/messages/pt.mjs +11 -0
  68. package/dist/server/i18n/messages/sk.mjs +11 -0
  69. package/dist/server/modules/admin/block/block-builder.d.mts +7 -10
  70. package/dist/server/modules/admin/block/block-builder.mjs +7 -10
  71. package/dist/server/modules/admin/collections/account.d.mts +50 -50
  72. package/dist/server/modules/admin/collections/admin-locks.d.mts +49 -49
  73. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  74. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  75. package/dist/server/modules/admin/collections/apikey.d.mts +64 -64
  76. package/dist/server/modules/admin/collections/assets.d.mts +57 -20
  77. package/dist/server/modules/admin/collections/session.d.mts +42 -42
  78. package/dist/server/modules/admin/collections/user.d.mts +100 -34
  79. package/dist/server/modules/admin/collections/user.mjs +4 -4
  80. package/dist/server/modules/admin/collections/verification.d.mts +32 -32
  81. package/dist/server/modules/admin/index.d.mts +3 -3
  82. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  83. package/dist/server/modules/admin/routes/admin-config.mjs +9 -12
  84. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  85. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  86. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  87. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  88. package/dist/server/modules/admin/routes/setup.d.mts +7 -7
  89. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  90. package/dist/server/modules/admin/routes/translations.mjs +1 -1
  91. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  92. package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +4 -6
  93. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +27 -29
  94. package/dist/server/modules/admin-preferences/collections/saved-views.mjs +4 -6
  95. package/package.json +4 -4
@@ -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_runtime9 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime7 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_runtime9.JSX.Element;
64
+ }: AcceptInvitePageProps): react_jsx_runtime7.JSX.Element;
65
65
  //#endregion
66
66
  export { AcceptInvitePage };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime7 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime8 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_runtime7.JSX.Element;
41
+ }: DashboardPageProps): react_jsx_runtime8.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_runtime8 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime9 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_runtime8.JSX.Element;
54
+ }: ForgotPasswordPageProps): react_jsx_runtime9.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_runtime12 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime13 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_runtime12.JSX.Element;
61
+ }: ResetPasswordPageProps): react_jsx_runtime13.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_runtime13 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime12 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_runtime13.JSX.Element;
59
+ }: SetupPageProps): react_jsx_runtime12.JSX.Element;
60
60
  //#endregion
61
61
  export { SetupPage, SetupPageProps };
package/dist/client.d.mts CHANGED
@@ -2,6 +2,7 @@ import { BaseWidgetAdminMeta, WidgetTypeRegistry } from "./augmentation.mjs";
2
2
  import { I18nContext, I18nText } from "./client/i18n/types.mjs";
3
3
  import { BaseFieldProps, IconComponent, MaybeLazyComponent } from "./client/builder/types/common.mjs";
4
4
  import { FieldDefinition, FieldInstance, configureField, field } from "./client/builder/field/field.mjs";
5
+ import { PageDefinition, page } from "./client/builder/page/page.mjs";
5
6
  import { AnyWidgetConfig, BaseWidgetConfig, ChartWidgetConfig, CustomWidgetConfig, ProgressWidgetConfig, QuickActionsWidgetConfig, RecentItemsWidgetConfig, StatsWidgetConfig, TableWidgetConfig, TimelineWidgetConfig, ValueWidgetConfig, WidgetComponentProps, WidgetConfig } from "./client/builder/types/widget-types.mjs";
6
7
  import { FormViewDefinition, ListViewDefinition, ViewDefinition, ViewKind, view } from "./client/builder/view/view.mjs";
7
8
  import { WidgetDefinition, widget } from "./client/builder/widget/widget.mjs";
@@ -27,7 +28,7 @@ import { RichTextEditor } from "./client/components/fields/rich-text-editor/inde
27
28
  import { BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, useBlockScope, useResolveFieldPath } from "./client/preview/block-scope-context.mjs";
28
29
  import { PreviewBanner, PreviewBannerProps } from "./client/preview/preview-banner.mjs";
29
30
  import { PreviewField, PreviewFieldProps, PreviewProvider, StandalonePreviewField, usePreviewContext } from "./client/preview/preview-field.mjs";
30
- 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";
31
32
  import { UseCollectionPreviewOptions, UseCollectionPreviewResult, useCollectionPreview } from "./client/preview/use-collection-preview.mjs";
32
33
  import "./client/preview/index.mjs";
33
34
  import { AuthGuard } from "./client/components/auth/auth-guard.mjs";
@@ -104,4 +105,4 @@ type CollectionFieldKeys<TApp extends QuestpieApp, TCollectionName extends strin
104
105
  select: infer TSelect;
105
106
  } ? keyof TSelect : never : never : never;
106
107
  //#endregion
107
- 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, 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, 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";
@@ -18,6 +18,7 @@ import { createAdminAuthClient, useAuthClient } from "./client/hooks/use-auth.mj
18
18
  import { useCurrentUser } from "./client/hooks/use-current-user.mjs";
19
19
  import { useReactiveFields } from "./client/hooks/use-reactive-fields.mjs";
20
20
  import { AdminLink } from "./client/components/admin-link.mjs";
21
+ import { page } from "./client/builder/page/page.mjs";
21
22
  import { widget } from "./client/builder/widget/widget.mjs";
22
23
  import { createAdminClient } from "./client/create-admin-client.mjs";
23
24
  import { createTypedHooks } from "./client/hooks/typed-hooks.mjs";
@@ -54,4 +55,4 @@ import { useServerWidgetData } from "./client/hooks/use-server-widget-data.mjs";
54
55
  import { ScopeProvider, createScopedFetch, useScope, useScopeSafe, useScopedFetch } from "./client/scope/provider.mjs";
55
56
  import { ScopePicker } from "./client/scope/picker.mjs";
56
57
 
57
- export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminRouter, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLoading, Badge, BlockRenderer, BlockScopeProvider, BrandLogoMark, ComponentRenderer, DashboardPage, EMPTY_BLOCK_CONTENT, FocusProvider, ForgotPasswordForm, ForgotPasswordPage, IconifyIcon, InvitePage, LoginForm, LoginPage, PreviewBanner, PreviewField, PreviewProvider, ResetPasswordForm, ResetPasswordPage, RichTextEditor, RichTextRenderer, ScopePicker, ScopeProvider, SetupForm, SetupPage, StandalonePreviewField, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, 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 };
58
+ export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminRouter, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLoading, Badge, BlockRenderer, BlockScopeProvider, BrandLogoMark, ComponentRenderer, DashboardPage, EMPTY_BLOCK_CONTENT, FocusProvider, ForgotPasswordForm, ForgotPasswordPage, IconifyIcon, InvitePage, LoginForm, LoginPage, PreviewBanner, PreviewField, PreviewProvider, ResetPasswordForm, ResetPasswordPage, RichTextEditor, RichTextRenderer, ScopePicker, ScopeProvider, SetupForm, SetupPage, StandalonePreviewField, 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 };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime20 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime19 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/rich-text/rich-text-renderer.d.ts
4
4
  /**
@@ -98,6 +98,6 @@ declare function RichTextRenderer({
98
98
  content,
99
99
  styles: customStyles,
100
100
  className
101
- }: RichTextRendererProps): react_jsx_runtime20.JSX.Element | null;
101
+ }: RichTextRendererProps): react_jsx_runtime19.JSX.Element | null;
102
102
  //#endregion
103
103
  export { RichTextRenderer, RichTextStyles, TipTapDoc, TipTapNode };
package/dist/index.d.mts CHANGED
@@ -2,6 +2,7 @@ import { AnyAdminMeta, ArrayFieldAdminMeta, BaseAdminMeta, BaseWidgetAdminMeta,
2
2
  import { I18nContext, I18nText } from "./client/i18n/types.mjs";
3
3
  import { BaseFieldProps, IconComponent, MaybeLazyComponent } from "./client/builder/types/common.mjs";
4
4
  import { FieldDefinition, FieldInstance, configureField, field } from "./client/builder/field/field.mjs";
5
+ import { PageDefinition, page } from "./client/builder/page/page.mjs";
5
6
  import { AnyWidgetConfig, BaseWidgetConfig, ChartWidgetConfig, CustomWidgetConfig, ProgressWidgetConfig, QuickActionsWidgetConfig, RecentItemsWidgetConfig, StatsWidgetConfig, TableWidgetConfig, TimelineWidgetConfig, ValueWidgetConfig, WidgetComponentProps, WidgetConfig } from "./client/builder/types/widget-types.mjs";
6
7
  import { FormViewDefinition, ListViewDefinition, ViewDefinition, ViewKind, view } from "./client/builder/view/view.mjs";
7
8
  import { WidgetDefinition, widget } from "./client/builder/widget/widget.mjs";
@@ -25,7 +26,7 @@ import { RichTextEditor } from "./client/components/fields/rich-text-editor/inde
25
26
  import { BlockScopeContextValue, BlockScopeProvider, BlockScopeProviderProps, useBlockScope, useResolveFieldPath } from "./client/preview/block-scope-context.mjs";
26
27
  import { PreviewBanner, PreviewBannerProps } from "./client/preview/preview-banner.mjs";
27
28
  import { PreviewField, PreviewFieldProps, PreviewProvider, StandalonePreviewField, usePreviewContext } from "./client/preview/preview-field.mjs";
28
- 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";
29
30
  import { UseCollectionPreviewOptions, UseCollectionPreviewResult, useCollectionPreview } from "./client/preview/use-collection-preview.mjs";
30
31
  import { AuthGuard } from "./client/components/auth/auth-guard.mjs";
31
32
  import { AuthLoading } from "./client/components/auth/auth-loading.mjs";
@@ -64,4 +65,4 @@ import { ScopeContextValue, ScopeOption, ScopePickerProps, ScopeProviderProps }
64
65
  import { ScopePicker } from "./client/scope/picker.mjs";
65
66
  import { ScopeProvider, createScopedFetch, useScope, useScopeSafe, useScopedFetch } from "./client/scope/provider.mjs";
66
67
  import { AnyQuestpieClient, CollectionFieldKeys, CollectionItem, CollectionNames, GlobalNames } from "./client.mjs";
67
- 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, 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, 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";
@@ -18,6 +18,7 @@ import { createAdminAuthClient, useAuthClient } from "./client/hooks/use-auth.mj
18
18
  import { useCurrentUser } from "./client/hooks/use-current-user.mjs";
19
19
  import { useReactiveFields } from "./client/hooks/use-reactive-fields.mjs";
20
20
  import { AdminLink } from "./client/components/admin-link.mjs";
21
+ import { page } from "./client/builder/page/page.mjs";
21
22
  import { widget } from "./client/builder/widget/widget.mjs";
22
23
  import { createAdminClient } from "./client/create-admin-client.mjs";
23
24
  import { createTypedHooks } from "./client/hooks/typed-hooks.mjs";
@@ -54,4 +55,4 @@ import { useServerWidgetData } from "./client/hooks/use-server-widget-data.mjs";
54
55
  import { ScopeProvider, createScopedFetch, useScope, useScopeSafe, useScopedFetch } from "./client/scope/provider.mjs";
55
56
  import { ScopePicker } from "./client/scope/picker.mjs";
56
57
 
57
- export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminRouter, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLoading, Badge, BlockRenderer, BlockScopeProvider, BrandLogoMark, ComponentRenderer, DashboardPage, EMPTY_BLOCK_CONTENT, FocusProvider, ForgotPasswordForm, ForgotPasswordPage, IconifyIcon, InvitePage, LoginForm, LoginPage, PreviewBanner, PreviewField, PreviewProvider, ResetPasswordForm, ResetPasswordPage, RichTextEditor, RichTextRenderer, ScopePicker, ScopeProvider, SetupForm, SetupPage, StandalonePreviewField, buildValidationSchema, buildZodFromIntrospection, configureField, createAdminAuthClient, createAdminClient, createFormSchema, createIconRenderer, createScopedFetch, createTypedHooks, field, getCountryCode, getFlagConfig, getFlagUrl, isAdminToPreviewMessage, isBlockContent, isComponentReference, isPreviewToAdminMessage, 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 };
58
+ export { AcceptInviteForm, AcceptInvitePage, Admin, AdminLayout, AdminLayoutProvider, AdminLink, AdminProvider, AdminRouter, AuthDefaultLogo, AuthGuard, AuthLayout, AuthLoading, Badge, BlockRenderer, BlockScopeProvider, BrandLogoMark, ComponentRenderer, DashboardPage, EMPTY_BLOCK_CONTENT, FocusProvider, ForgotPasswordForm, ForgotPasswordPage, IconifyIcon, InvitePage, LoginForm, LoginPage, PreviewBanner, PreviewField, PreviewProvider, ResetPasswordForm, ResetPasswordPage, RichTextEditor, RichTextRenderer, ScopePicker, ScopeProvider, SetupForm, SetupPage, StandalonePreviewField, 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 };
@@ -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",