@questpie/admin 3.0.2 → 3.0.4

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 (249) hide show
  1. package/README.md +34 -5
  2. package/dist/client/blocks/block-renderer.d.mts +2 -2
  3. package/dist/client/blocks/block-renderer.mjs +4 -1
  4. package/dist/client/builder/types/action-types.d.mts +31 -3
  5. package/dist/client/builder/types/collection-types.d.mts +140 -0
  6. package/dist/client/builder/types/ui-config.d.mts +16 -2
  7. package/dist/client/builder/types/views.d.mts +57 -0
  8. package/dist/client/builder/types/widget-types.d.mts +5 -0
  9. package/dist/client/components/actions/action-button.mjs +137 -199
  10. package/dist/client/components/actions/action-dialog.mjs +198 -156
  11. package/dist/client/components/actions/confirmation-dialog.mjs +2 -2
  12. package/dist/client/components/actions/header-actions.mjs +52 -53
  13. package/dist/client/components/admin-link.d.mts +2 -2
  14. package/dist/client/components/auth/auth-loading.mjs +41 -18
  15. package/dist/client/components/blocks/block-fields-renderer.mjs +64 -28
  16. package/dist/client/components/blocks/block-insert-button.mjs +4 -4
  17. package/dist/client/components/blocks/block-item.mjs +2 -2
  18. package/dist/client/components/blocks/block-library-sidebar.mjs +2 -2
  19. package/dist/client/components/component-renderer.mjs +1 -1
  20. package/dist/client/components/fields/array-field.mjs +14 -14
  21. package/dist/client/components/fields/asset-preview-field.mjs +1 -1
  22. package/dist/client/components/fields/blocks-field/blocks-field.mjs +84 -104
  23. package/dist/client/components/fields/json-field.mjs +2 -2
  24. package/dist/client/components/fields/object-array-field.mjs +22 -22
  25. package/dist/client/components/fields/object-field.mjs +5 -5
  26. package/dist/client/components/fields/relation/displays/cards-display.mjs +16 -9
  27. package/dist/client/components/fields/relation/displays/chips-display.mjs +15 -12
  28. package/dist/client/components/fields/relation/displays/grid-display.mjs +15 -11
  29. package/dist/client/components/fields/relation/displays/list-display.mjs +33 -20
  30. package/dist/client/components/fields/relation/displays/table-display.mjs +62 -93
  31. package/dist/client/components/fields/relation/relation-items-display.mjs +1 -1
  32. package/dist/client/components/fields/relation-picker.mjs +7 -6
  33. package/dist/client/components/fields/relation-select.mjs +71 -47
  34. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +392 -82
  35. package/dist/client/components/fields/rich-text-editor/extensions.mjs +54 -23
  36. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +24 -50
  37. package/dist/client/components/fields/rich-text-editor/image-upload.mjs +66 -0
  38. package/dist/client/components/fields/rich-text-editor/index.d.mts +38 -0
  39. package/dist/client/components/fields/rich-text-editor/index.mjs +637 -376
  40. package/dist/client/components/fields/rich-text-editor/link-utils.mjs +26 -0
  41. package/dist/client/components/fields/rich-text-editor/presets.d.mts +10 -0
  42. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +27 -6
  43. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +464 -346
  44. package/dist/client/components/fields/rich-text-editor/types.d.mts +77 -0
  45. package/dist/client/components/fields/upload-field.mjs +45 -49
  46. package/dist/client/components/filter-builder/columns-tab.mjs +69 -62
  47. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +473 -308
  48. package/dist/client/components/filter-builder/filters-tab.mjs +109 -82
  49. package/dist/client/components/filter-builder/saved-views-tab.mjs +300 -198
  50. package/dist/client/components/history-sidebar.mjs +850 -340
  51. package/dist/client/components/layout/field-layout-renderer.mjs +6 -5
  52. package/dist/client/components/locale-switcher.mjs +8 -8
  53. package/dist/client/components/media/media-grid.mjs +12 -9
  54. package/dist/client/components/media/media-picker-dialog.mjs +242 -230
  55. package/dist/client/components/preview/live-preview-mode.mjs +1 -1
  56. package/dist/client/components/primitives/asset-preview.mjs +37 -22
  57. package/dist/client/components/primitives/date-input.mjs +212 -249
  58. package/dist/client/components/primitives/dropzone.mjs +192 -159
  59. package/dist/client/components/primitives/field-select-control.mjs +93 -0
  60. package/dist/client/components/primitives/select-multi.mjs +251 -230
  61. package/dist/client/components/primitives/select-single.mjs +345 -290
  62. package/dist/client/components/primitives/time-input.mjs +2 -2
  63. package/dist/client/components/sheets/resource-sheet.mjs +2 -0
  64. package/dist/client/components/ui/accordion.mjs +4 -4
  65. package/dist/client/components/ui/alert.mjs +3 -3
  66. package/dist/client/components/ui/badge.mjs +4 -4
  67. package/dist/client/components/ui/button.mjs +47 -37
  68. package/dist/client/components/ui/card.mjs +2 -2
  69. package/dist/client/components/ui/checkbox.mjs +1 -1
  70. package/dist/client/components/ui/command.mjs +5 -5
  71. package/dist/client/components/ui/dialog.mjs +3 -3
  72. package/dist/client/components/ui/drawer.mjs +1 -1
  73. package/dist/client/components/ui/dropdown-menu.mjs +157 -15
  74. package/dist/client/components/ui/empty-state.mjs +88 -59
  75. package/dist/client/components/ui/field.mjs +2 -2
  76. package/dist/client/components/ui/input-group.mjs +3 -3
  77. package/dist/client/components/ui/input.mjs +1 -1
  78. package/dist/client/components/ui/kbd.mjs +1 -1
  79. package/dist/client/components/ui/label.mjs +1 -1
  80. package/dist/client/components/ui/popover.mjs +19 -11
  81. package/dist/client/components/ui/scroll-fade.mjs +170 -0
  82. package/dist/client/components/ui/search-input.mjs +1 -1
  83. package/dist/client/components/ui/select.mjs +129 -27
  84. package/dist/client/components/ui/sheet.mjs +54 -34
  85. package/dist/client/components/ui/sidebar.mjs +15 -14
  86. package/dist/client/components/ui/skeleton.mjs +28 -12
  87. package/dist/client/components/ui/switch.mjs +2 -2
  88. package/dist/client/components/ui/table.mjs +82 -74
  89. package/dist/client/components/ui/tabs.mjs +26 -31
  90. package/dist/client/components/ui/textarea.mjs +1 -1
  91. package/dist/client/components/ui/tooltip.mjs +1 -1
  92. package/dist/client/components/widgets/chart-widget.mjs +134 -96
  93. package/dist/client/components/widgets/progress-widget.mjs +59 -34
  94. package/dist/client/components/widgets/quick-actions-widget.mjs +184 -113
  95. package/dist/client/components/widgets/recent-items-widget.mjs +144 -102
  96. package/dist/client/components/widgets/stats-widget.mjs +91 -72
  97. package/dist/client/components/widgets/table-widget.mjs +159 -246
  98. package/dist/client/components/widgets/timeline-widget.mjs +66 -43
  99. package/dist/client/components/widgets/value-widget.mjs +261 -152
  100. package/dist/client/components/widgets/widget-empty-state.mjs +88 -0
  101. package/dist/client/components/widgets/widget-skeletons.mjs +53 -20
  102. package/dist/client/contexts/focus-context.d.mts +2 -2
  103. package/dist/client/hooks/use-action.mjs +63 -55
  104. package/dist/client/hooks/use-audit-history.mjs +1 -65
  105. package/dist/client/hooks/use-collection-validation.mjs +36 -23
  106. package/dist/client/hooks/use-collection.mjs +96 -1
  107. package/dist/client/hooks/use-saved-views.mjs +70 -49
  108. package/dist/client/hooks/use-server-actions.mjs +59 -40
  109. package/dist/client/hooks/use-server-validation.mjs +156 -41
  110. package/dist/client/hooks/use-server-widget-data.mjs +1 -1
  111. package/dist/client/hooks/use-setup-status.d.mts +3 -3
  112. package/dist/client/hooks/use-setup-status.mjs +2 -2
  113. package/dist/client/hooks/use-transition-stage.mjs +2 -10
  114. package/dist/client/hooks/use-validation-error-map.mjs +31 -13
  115. package/dist/client/hooks/use-view-state.mjs +238 -174
  116. package/dist/client/i18n/date-locale.mjs +33 -0
  117. package/dist/client/i18n/hooks.mjs +17 -1
  118. package/dist/client/lib/utils.mjs +3 -2
  119. package/dist/client/preview/block-scope-context.d.mts +2 -2
  120. package/dist/client/preview/preview-banner.d.mts +2 -2
  121. package/dist/client/preview/preview-field.d.mts +4 -4
  122. package/dist/client/preview/preview-field.mjs +2 -2
  123. package/dist/client/runtime/provider.mjs +8 -1
  124. package/dist/client/runtime/translations-provider.mjs +1 -1
  125. package/dist/client/scope/picker.d.mts +2 -2
  126. package/dist/client/scope/provider.d.mts +2 -2
  127. package/dist/client/styles/base.css +1022 -0
  128. package/dist/client/styles/index.css +3 -589
  129. package/dist/client/utils/auto-expand-fields.mjs +4 -2
  130. package/dist/client/utils/keyboard-shortcuts.mjs +26 -0
  131. package/dist/client/utils/use-lazy-component.mjs +80 -0
  132. package/dist/client/views/auth/auth-layout.d.mts +18 -11
  133. package/dist/client/views/auth/auth-layout.mjs +291 -80
  134. package/dist/client/views/auth/forgot-password-form.d.mts +2 -2
  135. package/dist/client/views/auth/forgot-password-form.mjs +2 -2
  136. package/dist/client/views/auth/login-form.d.mts +2 -2
  137. package/dist/client/views/auth/login-form.mjs +1 -1
  138. package/dist/client/views/auth/reset-password-form.d.mts +2 -2
  139. package/dist/client/views/auth/reset-password-form.mjs +2 -2
  140. package/dist/client/views/auth/setup-form.d.mts +2 -2
  141. package/dist/client/views/collection/auto-form-fields.mjs +11 -9
  142. package/dist/client/views/collection/bulk-action-toolbar.mjs +173 -138
  143. package/dist/client/views/collection/cells/complex-cells.mjs +22 -22
  144. package/dist/client/views/collection/cells/primitive-cells.mjs +1 -1
  145. package/dist/client/views/collection/cells/relation-cells.mjs +147 -129
  146. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +224 -278
  147. package/dist/client/views/collection/cells/shared/relation-chip.mjs +64 -36
  148. package/dist/client/views/collection/cells/upload-cells.mjs +199 -9
  149. package/dist/client/views/collection/columns/build-columns.mjs +29 -9
  150. package/dist/client/views/collection/columns/column-defaults.mjs +2 -2
  151. package/dist/client/views/collection/field-renderer.mjs +50 -89
  152. package/dist/client/views/collection/form-view.mjs +237 -227
  153. package/dist/client/views/collection/table-view.mjs +1162 -229
  154. package/dist/client/views/collection/view-skeletons.mjs +222 -79
  155. package/dist/client/views/common/global-search.mjs +29 -18
  156. package/dist/client/views/dashboard/dashboard-grid.mjs +678 -501
  157. package/dist/client/views/dashboard/dashboard-widget.mjs +6 -3
  158. package/dist/client/views/dashboard/widget-card.mjs +23 -14
  159. package/dist/client/views/globals/global-form-view.mjs +634 -589
  160. package/dist/client/views/layout/admin-layout-provider.mjs +67 -70
  161. package/dist/client/views/layout/admin-layout.d.mts +3 -6
  162. package/dist/client/views/layout/admin-layout.mjs +149 -172
  163. package/dist/client/views/layout/admin-router.mjs +747 -544
  164. package/dist/client/views/layout/admin-sidebar.d.mts +38 -1
  165. package/dist/client/views/layout/admin-sidebar.mjs +751 -591
  166. package/dist/client/views/layout/admin-theme.d.mts +10 -0
  167. package/dist/client/views/layout/admin-theme.mjs +84 -0
  168. package/dist/client/views/layout/admin-view-layout.mjs +161 -0
  169. package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
  170. package/dist/client/views/pages/accept-invite-page.mjs +49 -26
  171. package/dist/client/views/pages/dashboard-page.d.mts +2 -2
  172. package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
  173. package/dist/client/views/pages/forgot-password-page.mjs +2 -19
  174. package/dist/client/views/pages/invite-page.d.mts +2 -2
  175. package/dist/client/views/pages/invite-page.mjs +2 -19
  176. package/dist/client/views/pages/login-page.d.mts +3 -3
  177. package/dist/client/views/pages/login-page.mjs +4 -21
  178. package/dist/client/views/pages/reset-password-page.d.mts +2 -2
  179. package/dist/client/views/pages/reset-password-page.mjs +3 -20
  180. package/dist/client/views/pages/setup-page.d.mts +2 -2
  181. package/dist/client/views/pages/setup-page.mjs +3 -20
  182. package/dist/client.d.mts +6 -2
  183. package/dist/client.mjs +2 -1
  184. package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
  185. package/dist/index.d.mts +6 -2
  186. package/dist/index.mjs +2 -1
  187. package/dist/server/augmentation/dashboard.d.mts +67 -3
  188. package/dist/server/augmentation/form-layout.d.mts +21 -0
  189. package/dist/server/augmentation/index.d.mts +1 -1
  190. package/dist/server/codegen/admin-client-template.mjs +4 -0
  191. package/dist/server/fields/blocks.d.mts +1 -1
  192. package/dist/server/fields/blocks.mjs +12 -0
  193. package/dist/server/fields/rich-text.d.mts +1 -1
  194. package/dist/server/fields/rich-text.mjs +8 -0
  195. package/dist/server/i18n/index.mjs +17 -1
  196. package/dist/server/i18n/messages/cs.mjs +23 -0
  197. package/dist/server/i18n/messages/de.mjs +23 -0
  198. package/dist/server/i18n/messages/en.mjs +64 -1
  199. package/dist/server/i18n/messages/es.mjs +23 -0
  200. package/dist/server/i18n/messages/fr.mjs +23 -0
  201. package/dist/server/i18n/messages/pl.mjs +23 -0
  202. package/dist/server/i18n/messages/pt.mjs +23 -0
  203. package/dist/server/i18n/messages/sk.mjs +83 -1
  204. package/dist/server/modules/admin/block/introspection.mjs +4 -1
  205. package/dist/server/modules/admin/block/prefetch.mjs +12 -2
  206. package/dist/server/modules/admin/collections/account.d.mts +50 -50
  207. package/dist/server/modules/admin/collections/admin-locks.d.mts +54 -54
  208. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  209. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  210. package/dist/server/modules/admin/collections/apikey.d.mts +64 -64
  211. package/dist/server/modules/admin/collections/assets.d.mts +20 -20
  212. package/dist/server/modules/admin/collections/assets.mjs +0 -1
  213. package/dist/server/modules/admin/collections/session.d.mts +42 -42
  214. package/dist/server/modules/admin/collections/user.d.mts +40 -28
  215. package/dist/server/modules/admin/collections/user.mjs +40 -9
  216. package/dist/server/modules/admin/collections/verification.d.mts +36 -36
  217. package/dist/server/modules/admin/dto/admin-config.dto.mjs +2 -0
  218. package/dist/server/modules/admin/factories.mjs +7 -18
  219. package/dist/server/modules/admin/index.d.mts +1 -1
  220. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  221. package/dist/server/modules/admin/routes/admin-config.mjs +34 -16
  222. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  223. package/dist/server/modules/admin/routes/execute-action.mjs +33 -0
  224. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  225. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  226. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  227. package/dist/server/modules/admin/routes/setup.d.mts +10 -10
  228. package/dist/server/modules/admin/routes/setup.mjs +7 -7
  229. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  230. package/dist/server/modules/admin/routes/translations.mjs +5 -1
  231. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  232. package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +1 -1
  233. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +25 -25
  234. package/dist/server/modules/audit/.generated/module.d.mts +7 -7
  235. package/dist/server/modules/audit/.generated/module.mjs +1 -1
  236. package/dist/server/modules/audit/collections/audit-log.d.mts +39 -39
  237. package/dist/server/modules/audit/collections/audit-log.mjs +1 -1
  238. package/dist/server/modules/audit/config/app.mjs +99 -42
  239. package/dist/server/modules/audit/jobs/audit-cleanup.mjs +1 -1
  240. package/dist/server/plugin.mjs +4 -2
  241. package/dist/server/proxy-factories.d.mts +4 -3
  242. package/dist/server/proxy-factories.mjs +34 -8
  243. package/dist/shared/types/saved-views.types.d.mts +2 -0
  244. package/package.json +6 -4
  245. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +0 -85
  246. package/dist/client/components/ui/spinner.mjs +0 -52
  247. package/dist/client/components/ui/toolbar.mjs +0 -136
  248. package/dist/client/contexts/breadcrumb-context.mjs +0 -60
  249. package/dist/client/views/layout/admin-topbar.mjs +0 -236
@@ -1,63 +1,63 @@
1
- import * as questpie_shared33 from "questpie/shared";
2
- import * as questpie342 from "questpie";
3
- import * as drizzle_orm_pg_core101 from "drizzle-orm/pg-core";
4
- import * as drizzle_orm57 from "drizzle-orm";
5
- import * as questpie_src_server_modules_core_fields_email_js6 from "questpie/src/server/modules/core/fields/email.js";
6
- import * as questpie_src_server_modules_core_fields_json_js6 from "questpie/src/server/modules/core/fields/json.js";
1
+ import * as questpie_shared42 from "questpie/shared";
2
+ import * as questpie373 from "questpie";
3
+ import * as questpie_src_server_modules_core_fields_email_js8 from "questpie/src/server/modules/core/fields/email.js";
4
+ import * as questpie_src_server_modules_core_fields_json_js8 from "questpie/src/server/modules/core/fields/json.js";
5
+ import * as drizzle_orm_pg_core106 from "drizzle-orm/pg-core";
6
+ import * as drizzle_orm65 from "drizzle-orm";
7
7
 
8
8
  //#region src/server/modules/admin/collections/session.d.ts
9
- declare const _default: questpie342.CollectionBuilder<questpie_shared33.Override<questpie342.EmptyCollectionState<"session", undefined, {
10
- readonly text: typeof questpie342.text;
11
- readonly textarea: typeof questpie342.textarea;
12
- readonly email: typeof questpie_src_server_modules_core_fields_email_js6.email;
13
- readonly url: typeof questpie342.url;
14
- readonly number: typeof questpie342.number;
15
- readonly boolean: typeof questpie342.boolean;
16
- readonly date: typeof questpie342.date;
17
- readonly datetime: typeof questpie342.datetime;
18
- readonly time: typeof questpie342.time;
19
- readonly select: typeof questpie342.select;
20
- readonly upload: typeof questpie342.upload;
21
- readonly relation: typeof questpie342.relation;
22
- readonly object: typeof questpie342.object;
23
- readonly json: typeof questpie_src_server_modules_core_fields_json_js6.json;
24
- readonly from: typeof questpie342.from;
9
+ declare const _default: questpie373.CollectionBuilder<questpie_shared42.Override<questpie373.EmptyCollectionState<"session", undefined, {
10
+ readonly text: typeof questpie373.text;
11
+ readonly textarea: typeof questpie373.textarea;
12
+ readonly email: typeof questpie_src_server_modules_core_fields_email_js8.email;
13
+ readonly url: typeof questpie373.url;
14
+ readonly number: typeof questpie373.number;
15
+ readonly boolean: typeof questpie373.boolean;
16
+ readonly date: typeof questpie373.date;
17
+ readonly datetime: typeof questpie373.datetime;
18
+ readonly time: typeof questpie373.time;
19
+ readonly select: typeof questpie373.select;
20
+ readonly upload: typeof questpie373.upload;
21
+ readonly relation: typeof questpie373.relation;
22
+ readonly object: typeof questpie373.object;
23
+ readonly json: typeof questpie_src_server_modules_core_fields_json_js8.json;
24
+ readonly from: typeof questpie373.from;
25
25
  }>, {
26
26
  name: "session";
27
27
  fields: Record<string, any> & {
28
- readonly userId: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>>;
29
- readonly token: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>>;
30
- readonly expiresAt: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgTimestampBuilder>;
31
- readonly ipAddress: drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>;
32
- readonly userAgent: drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>;
33
- readonly impersonatedBy: drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>;
28
+ readonly userId: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>>;
29
+ readonly token: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>>;
30
+ readonly expiresAt: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgTimestampBuilder>;
31
+ readonly ipAddress: drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>;
32
+ readonly userAgent: drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>;
33
+ readonly impersonatedBy: drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>;
34
34
  };
35
35
  virtuals: undefined;
36
- relations: Record<string, questpie342.RelationConfig>;
36
+ relations: Record<string, questpie373.RelationConfig>;
37
37
  indexes: Record<string, any>;
38
38
  title: "token";
39
- options: questpie342.CollectionOptions & {
39
+ options: questpie373.CollectionOptions & {
40
40
  timestamps: true;
41
41
  };
42
42
  hooks: Record<string, any>;
43
43
  access: Record<string, any>;
44
44
  searchable: undefined;
45
45
  fieldDefinitions: {
46
- readonly userId: questpie342.FieldWithMethods<Omit<questpie342.TextFieldState, "notNull" | "column"> & {
46
+ readonly userId: questpie373.FieldWithMethods<Omit<questpie373.TextFieldState, "notNull" | "column"> & {
47
47
  notNull: true;
48
- column: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>>;
49
- }, questpie342.TextFieldMethods>;
50
- readonly token: questpie342.FieldWithMethods<Omit<questpie342.TextFieldState, "notNull" | "column"> & {
48
+ column: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>>;
49
+ }, questpie373.TextFieldMethods>;
50
+ readonly token: questpie373.FieldWithMethods<Omit<questpie373.TextFieldState, "notNull" | "column"> & {
51
51
  notNull: true;
52
- column: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgVarcharBuilder<[string, ...string[]]>>;
53
- }, questpie342.TextFieldMethods>;
54
- readonly expiresAt: questpie342.FieldWithMethods<Omit<questpie342.DatetimeFieldState, "notNull" | "column"> & {
52
+ column: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgVarcharBuilder<[string, ...string[]]>>;
53
+ }, questpie373.TextFieldMethods>;
54
+ readonly expiresAt: questpie373.FieldWithMethods<Omit<questpie373.DatetimeFieldState, "notNull" | "column"> & {
55
55
  notNull: true;
56
- column: drizzle_orm57.NotNull<drizzle_orm_pg_core101.PgTimestampBuilder>;
57
- }, questpie342.DatetimeFieldMethods>;
58
- readonly ipAddress: questpie342.FieldWithMethods<questpie342.TextFieldState, questpie342.TextFieldMethods>;
59
- readonly userAgent: questpie342.FieldWithMethods<questpie342.TextFieldState, questpie342.TextFieldMethods>;
60
- readonly impersonatedBy: questpie342.FieldWithMethods<questpie342.TextFieldState, questpie342.TextFieldMethods>;
56
+ column: drizzle_orm65.NotNull<drizzle_orm_pg_core106.PgTimestampBuilder>;
57
+ }, questpie373.DatetimeFieldMethods>;
58
+ readonly ipAddress: questpie373.FieldWithMethods<questpie373.TextFieldState, questpie373.TextFieldMethods>;
59
+ readonly userAgent: questpie373.FieldWithMethods<questpie373.TextFieldState, questpie373.TextFieldMethods>;
60
+ readonly impersonatedBy: questpie373.FieldWithMethods<questpie373.TextFieldState, questpie373.TextFieldMethods>;
61
61
  };
62
62
  upload: undefined;
63
63
  output: {};
@@ -1,7 +1,8 @@
1
- import * as questpie_shared32 from "questpie/shared";
2
- import * as questpie318 from "questpie";
3
- import * as drizzle_orm_pg_core89 from "drizzle-orm/pg-core";
4
- import * as drizzle_orm49 from "drizzle-orm";
1
+ import * as questpie_shared44 from "questpie/shared";
2
+ import * as questpie434 from "questpie";
3
+ import * as drizzle_orm_pg_core121 from "drizzle-orm/pg-core";
4
+ import * as drizzle_orm77 from "drizzle-orm";
5
+ import * as questpie_src_server_fields_operators_builtin_js7 from "questpie/src/server/fields/operators/builtin.js";
5
6
 
6
7
  //#region src/server/modules/admin/collections/user.d.ts
7
8
 
@@ -17,7 +18,7 @@ import * as drizzle_orm49 from "drizzle-orm";
17
18
  * @see account.ts for explanation of the collection().merge().set() pattern.
18
19
  * stateKey mapping: admin=".admin()", adminList=".list()", adminForm=".form()", adminActions=".actions()"
19
20
  */
20
- declare const adminUserCollection: questpie318.CollectionBuilder<questpie_shared32.Override<{
21
+ declare const adminUserCollection: questpie434.CollectionBuilder<questpie_shared44.Override<{
21
22
  name: "user";
22
23
  fields: Record<string, never>;
23
24
  localized: [];
@@ -37,17 +38,18 @@ declare const adminUserCollection: questpie318.CollectionBuilder<questpie_shared
37
38
  }, {
38
39
  name: "user";
39
40
  fields: Record<string, never> & {
40
- readonly name: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>>;
41
- readonly email: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>>;
42
- readonly emailVerified: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgBooleanBuilder>;
43
- readonly image: drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>;
44
- readonly role: drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>;
45
- readonly banned: drizzle_orm49.HasDefault<drizzle_orm_pg_core89.PgBooleanBuilder>;
46
- readonly banReason: drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>;
47
- readonly banExpires: drizzle_orm_pg_core89.PgTimestampBuilder;
41
+ readonly name: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>>;
42
+ readonly email: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>>;
43
+ readonly emailVerified: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgBooleanBuilder>;
44
+ readonly image: drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>;
45
+ readonly avatar: drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>;
46
+ readonly role: drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>;
47
+ readonly banned: drizzle_orm77.HasDefault<drizzle_orm_pg_core121.PgBooleanBuilder>;
48
+ readonly banReason: drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>;
49
+ readonly banExpires: drizzle_orm_pg_core121.PgTimestampBuilder;
48
50
  };
49
51
  virtuals: undefined;
50
- relations: Record<string, never> & Record<string, questpie318.RelationConfig>;
52
+ relations: Record<string, never> & Record<string, questpie434.RelationConfig>;
51
53
  indexes: Record<string, never> & Record<string, any>;
52
54
  title: "name";
53
55
  options: Record<string, never> & {
@@ -57,26 +59,36 @@ declare const adminUserCollection: questpie318.CollectionBuilder<questpie_shared
57
59
  access: Record<string, any>;
58
60
  searchable: undefined;
59
61
  fieldDefinitions: {
60
- readonly name: questpie318.FieldWithMethods<Omit<questpie318.TextFieldState, "notNull" | "column"> & {
62
+ readonly name: questpie434.FieldWithMethods<Omit<questpie434.TextFieldState, "notNull" | "column"> & {
61
63
  notNull: true;
62
- column: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>>;
63
- }, questpie318.TextFieldMethods>;
64
- readonly email: questpie318.FieldWithMethods<Omit<questpie318.EmailFieldState, "notNull" | "column"> & {
64
+ column: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>>;
65
+ }, questpie434.TextFieldMethods>;
66
+ readonly email: questpie434.FieldWithMethods<Omit<questpie434.EmailFieldState, "notNull" | "column"> & {
65
67
  notNull: true;
66
- column: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgVarcharBuilder<[string, ...string[]]>>;
67
- }, questpie318.EmailFieldMethods>;
68
- readonly emailVerified: questpie318.Field<Omit<questpie318.BooleanFieldState, "notNull" | "column"> & {
68
+ column: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>>;
69
+ }, questpie434.EmailFieldMethods>;
70
+ readonly emailVerified: questpie434.Field<Omit<questpie434.BooleanFieldState, "notNull" | "column"> & {
69
71
  notNull: true;
70
- column: drizzle_orm49.NotNull<drizzle_orm_pg_core89.PgBooleanBuilder>;
72
+ column: drizzle_orm77.NotNull<drizzle_orm_pg_core121.PgBooleanBuilder>;
71
73
  }>;
72
- readonly image: questpie318.FieldWithMethods<questpie318.UrlFieldState, questpie318.UrlFieldMethods>;
73
- readonly role: questpie318.FieldWithMethods<questpie318.TextFieldState, questpie318.TextFieldMethods>;
74
- readonly banned: questpie318.Field<Omit<questpie318.BooleanFieldState, "column" | "hasDefault"> & {
74
+ readonly image: questpie434.FieldWithMethods<questpie434.UrlFieldState, questpie434.UrlFieldMethods>;
75
+ readonly avatar: questpie434.Field<questpie434.DefaultFieldState & {
76
+ type: "upload";
77
+ data: string;
78
+ column: drizzle_orm_pg_core121.PgVarcharBuilder<[string, ...string[]]>;
79
+ operators: typeof questpie_src_server_fields_operators_builtin_js7.belongsToOps;
80
+ relationTo: "assets";
81
+ relationKind: "one";
82
+ } & {
83
+ label: questpie_shared44.I18nText;
84
+ }>;
85
+ readonly role: questpie434.FieldWithMethods<questpie434.TextFieldState, questpie434.TextFieldMethods>;
86
+ readonly banned: questpie434.Field<Omit<questpie434.BooleanFieldState, "column" | "hasDefault"> & {
75
87
  hasDefault: true;
76
- column: drizzle_orm49.HasDefault<drizzle_orm_pg_core89.PgBooleanBuilder>;
88
+ column: drizzle_orm77.HasDefault<drizzle_orm_pg_core121.PgBooleanBuilder>;
77
89
  }>;
78
- readonly banReason: questpie318.FieldWithMethods<questpie318.TextFieldState, questpie318.TextFieldMethods>;
79
- readonly banExpires: questpie318.FieldWithMethods<questpie318.DatetimeFieldState, questpie318.DatetimeFieldMethods>;
90
+ readonly banReason: questpie434.FieldWithMethods<questpie434.TextFieldState, questpie434.TextFieldMethods>;
91
+ readonly banExpires: questpie434.FieldWithMethods<questpie434.DatetimeFieldState, questpie434.DatetimeFieldMethods>;
80
92
  };
81
93
  upload: undefined;
82
94
  output: {};
@@ -21,6 +21,7 @@ const adminUserCollection = collection$1("user").merge(starterModule.collections
21
21
  group: "administration"
22
22
  })).list(({ v, f, a }) => v.collectionTable({
23
23
  columns: [
24
+ f.avatar,
24
25
  f.name,
25
26
  f.email,
26
27
  f.role,
@@ -36,14 +37,13 @@ const adminUserCollection = collection$1("user").merge(starterModule.collections
36
37
  primary: [],
37
38
  secondary: []
38
39
  },
39
- row: [a.delete],
40
40
  bulk: [a.deleteMany]
41
41
  }
42
42
  })).form(({ v, f }) => v.collectionForm({
43
43
  sidebar: {
44
44
  position: "right",
45
45
  fields: [
46
- f.image,
46
+ f.avatar,
47
47
  f.role,
48
48
  f.emailVerified
49
49
  ]
@@ -99,11 +99,36 @@ const adminUserCollection = collection$1("user").merge(starterModule.collections
99
99
  description: { key: "defaults.users.actions.createUser.description" },
100
100
  submitLabel: { key: "defaults.users.actions.createUser.submit" },
101
101
  fields: {
102
- name: f.text().label({ key: "defaults.users.fields.name.label" }).required(),
103
- email: f.email().label({ key: "defaults.users.fields.email.label" }).required(),
104
- password: f.text().label({ key: "defaults.users.actions.createUser.fields.password.label" }).required().admin({
102
+ name: f.text().label({ key: "defaults.users.fields.name.label" }).description({
103
+ en: "Shown in the admin panel and account profile.",
104
+ sk: "Zobrazí sa v administrácii a profile účtu."
105
+ }).required().set("admin", {
106
+ placeholder: {
107
+ key: "defaults.users.fields.name.placeholder",
108
+ fallback: "Enter the user's full name"
109
+ },
110
+ autoComplete: "name"
111
+ }),
112
+ email: f.email().label({ key: "defaults.users.fields.email.label" }).description({
113
+ en: "The address this user will use to sign in.",
114
+ sk: "Adresa, ktorú bude používateľ používať na prihlásenie."
115
+ }).required().set("admin", {
116
+ placeholder: {
117
+ en: "name@example.com",
118
+ sk: "meno@example.com"
119
+ },
120
+ autoComplete: "email"
121
+ }),
122
+ password: f.text().label({ key: "defaults.users.actions.createUser.fields.password.label" }).description({
123
+ en: "Share this password securely with the new user.",
124
+ sk: "Toto heslo bezpečne odovzdajte novému používateľovi."
125
+ }).required().set("admin", {
105
126
  type: "password",
106
- autoComplete: "new-password"
127
+ autoComplete: "new-password",
128
+ placeholder: {
129
+ key: "defaults.users.actions.createUser.fields.password.placeholder",
130
+ fallback: "Enter a temporary password"
131
+ }
107
132
  }),
108
133
  role: f.select([{
109
134
  value: "admin",
@@ -111,7 +136,13 @@ const adminUserCollection = collection$1("user").merge(starterModule.collections
111
136
  }, {
112
137
  value: "user",
113
138
  label: { key: "defaults.users.fields.role.options.user" }
114
- }]).label({ key: "defaults.users.fields.role.label" }).default("user")
139
+ }]).label({ key: "defaults.users.fields.role.label" }).description({
140
+ en: "Admins can manage the whole admin area; users have limited access.",
141
+ sk: "Administrátori môžu spravovať celú administráciu; používatelia majú obmedzený prístup."
142
+ }).default("user").set("admin", { placeholder: {
143
+ en: "Select a role",
144
+ sk: "Vyberte rolu"
145
+ } })
115
146
  }
116
147
  },
117
148
  handler: async ({ data, auth, session }) => {
@@ -156,11 +187,11 @@ const adminUserCollection = collection$1("user").merge(starterModule.collections
156
187
  description: { key: "defaults.users.actions.resetPassword.description" },
157
188
  submitLabel: { key: "defaults.users.actions.resetPassword.submit" },
158
189
  fields: {
159
- newPassword: f.text().label({ key: "defaults.users.actions.resetPassword.fields.newPassword.label" }).required().admin({
190
+ newPassword: f.text().label({ key: "defaults.users.actions.resetPassword.fields.newPassword.label" }).required().set("admin", {
160
191
  type: "password",
161
192
  autoComplete: "new-password"
162
193
  }),
163
- confirmPassword: f.text().label({ key: "defaults.users.actions.resetPassword.fields.confirmPassword.label" }).required().admin({
194
+ confirmPassword: f.text().label({ key: "defaults.users.actions.resetPassword.fields.confirmPassword.label" }).required().set("admin", {
164
195
  type: "password",
165
196
  autoComplete: "new-password"
166
197
  })
@@ -1,57 +1,57 @@
1
- import * as questpie_shared38 from "questpie/shared";
2
- import * as questpie404 from "questpie";
3
- import * as drizzle_orm_pg_core117 from "drizzle-orm/pg-core";
4
- import * as drizzle_orm69 from "drizzle-orm";
5
- import * as questpie_src_server_modules_core_fields_email_js8 from "questpie/src/server/modules/core/fields/email.js";
6
- import * as questpie_src_server_modules_core_fields_json_js8 from "questpie/src/server/modules/core/fields/json.js";
1
+ import * as questpie_shared43 from "questpie/shared";
2
+ import * as questpie408 from "questpie";
3
+ import * as questpie_src_server_modules_core_fields_email_js9 from "questpie/src/server/modules/core/fields/email.js";
4
+ import * as questpie_src_server_modules_core_fields_json_js9 from "questpie/src/server/modules/core/fields/json.js";
5
+ import * as drizzle_orm_pg_core115 from "drizzle-orm/pg-core";
6
+ import * as drizzle_orm71 from "drizzle-orm";
7
7
 
8
8
  //#region src/server/modules/admin/collections/verification.d.ts
9
- declare const _default: questpie404.CollectionBuilder<questpie_shared38.Override<questpie404.EmptyCollectionState<"verification", undefined, {
10
- readonly text: typeof questpie404.text;
11
- readonly textarea: typeof questpie404.textarea;
12
- readonly email: typeof questpie_src_server_modules_core_fields_email_js8.email;
13
- readonly url: typeof questpie404.url;
14
- readonly number: typeof questpie404.number;
15
- readonly boolean: typeof questpie404.boolean;
16
- readonly date: typeof questpie404.date;
17
- readonly datetime: typeof questpie404.datetime;
18
- readonly time: typeof questpie404.time;
19
- readonly select: typeof questpie404.select;
20
- readonly upload: typeof questpie404.upload;
21
- readonly relation: typeof questpie404.relation;
22
- readonly object: typeof questpie404.object;
23
- readonly json: typeof questpie_src_server_modules_core_fields_json_js8.json;
24
- readonly from: typeof questpie404.from;
9
+ declare const _default: questpie408.CollectionBuilder<questpie_shared43.Override<questpie408.EmptyCollectionState<"verification", undefined, {
10
+ readonly text: typeof questpie408.text;
11
+ readonly textarea: typeof questpie408.textarea;
12
+ readonly email: typeof questpie_src_server_modules_core_fields_email_js9.email;
13
+ readonly url: typeof questpie408.url;
14
+ readonly number: typeof questpie408.number;
15
+ readonly boolean: typeof questpie408.boolean;
16
+ readonly date: typeof questpie408.date;
17
+ readonly datetime: typeof questpie408.datetime;
18
+ readonly time: typeof questpie408.time;
19
+ readonly select: typeof questpie408.select;
20
+ readonly upload: typeof questpie408.upload;
21
+ readonly relation: typeof questpie408.relation;
22
+ readonly object: typeof questpie408.object;
23
+ readonly json: typeof questpie_src_server_modules_core_fields_json_js9.json;
24
+ readonly from: typeof questpie408.from;
25
25
  }>, {
26
26
  name: "verification";
27
27
  fields: Record<string, any> & {
28
- readonly identifier: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgVarcharBuilder<[string, ...string[]]>>;
29
- readonly value: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgVarcharBuilder<[string, ...string[]]>>;
30
- readonly expiresAt: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgTimestampBuilder>;
28
+ readonly identifier: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgVarcharBuilder<[string, ...string[]]>>;
29
+ readonly value: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgVarcharBuilder<[string, ...string[]]>>;
30
+ readonly expiresAt: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgTimestampBuilder>;
31
31
  };
32
32
  virtuals: undefined;
33
- relations: Record<string, questpie404.RelationConfig>;
33
+ relations: Record<string, questpie408.RelationConfig>;
34
34
  indexes: Record<string, any>;
35
35
  title: "identifier";
36
- options: questpie404.CollectionOptions & {
36
+ options: questpie408.CollectionOptions & {
37
37
  timestamps: true;
38
38
  };
39
39
  hooks: Record<string, any>;
40
40
  access: Record<string, any>;
41
41
  searchable: undefined;
42
42
  fieldDefinitions: {
43
- readonly identifier: questpie404.FieldWithMethods<Omit<questpie404.TextFieldState, "notNull" | "column"> & {
43
+ readonly identifier: questpie408.FieldWithMethods<Omit<questpie408.TextFieldState, "notNull" | "column"> & {
44
44
  notNull: true;
45
- column: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgVarcharBuilder<[string, ...string[]]>>;
46
- }, questpie404.TextFieldMethods>;
47
- readonly value: questpie404.FieldWithMethods<Omit<questpie404.TextFieldState, "notNull" | "column"> & {
45
+ column: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgVarcharBuilder<[string, ...string[]]>>;
46
+ }, questpie408.TextFieldMethods>;
47
+ readonly value: questpie408.FieldWithMethods<Omit<questpie408.TextFieldState, "notNull" | "column"> & {
48
48
  notNull: true;
49
- column: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgVarcharBuilder<[string, ...string[]]>>;
50
- }, questpie404.TextFieldMethods>;
51
- readonly expiresAt: questpie404.FieldWithMethods<Omit<questpie404.DatetimeFieldState, "notNull" | "column"> & {
49
+ column: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgVarcharBuilder<[string, ...string[]]>>;
50
+ }, questpie408.TextFieldMethods>;
51
+ readonly expiresAt: questpie408.FieldWithMethods<Omit<questpie408.DatetimeFieldState, "notNull" | "column"> & {
52
52
  notNull: true;
53
- column: drizzle_orm69.NotNull<drizzle_orm_pg_core117.PgTimestampBuilder>;
54
- }, questpie404.DatetimeFieldMethods>;
53
+ column: drizzle_orm71.NotNull<drizzle_orm_pg_core115.PgTimestampBuilder>;
54
+ }, questpie408.DatetimeFieldMethods>;
55
55
  };
56
56
  upload: undefined;
57
57
  output: {};
@@ -80,6 +80,8 @@ const dashboardConfigSchema = z.object({
80
80
  title: z.record(z.string(), z.string()).optional(),
81
81
  description: z.record(z.string(), z.string()).optional(),
82
82
  columns: z.number().optional(),
83
+ rowHeight: z.union([z.number(), z.string()]).optional(),
84
+ gap: z.number().optional(),
83
85
  realtime: z.boolean().optional(),
84
86
  actions: z.array(z.any()).optional(),
85
87
  items: z.array(z.record(z.string(), z.any())).optional()
@@ -1,3 +1,4 @@
1
+ import { createActionCallbackProxy } from "../../proxy-factories.mjs";
1
2
  import { CollectionBuilder } from "questpie";
2
3
 
3
4
  //#region src/server/modules/admin/factories.ts
@@ -46,30 +47,18 @@ function _chainable(def) {
46
47
  return new Proxy(def, { get: (target, prop) => {
47
48
  if (typeof prop !== "string") return Reflect.get(target, prop);
48
49
  if (prop in target) return target[prop];
50
+ if (prop === "set") return (key, value) => _chainable({
51
+ ...target,
52
+ [key]: value
53
+ });
49
54
  return (...args) => _chainable({
50
55
  ...target,
51
56
  [prop]: args.length === 0 ? true : args[0]
52
57
  });
53
58
  } });
54
59
  }
55
- /**
56
- * Action proxy for actions context.
57
- * Supports both `a.save()` (builtin) and `a.headerAction({...})` (custom).
58
- */
59
- const _actionBuilderProxy = new Proxy({}, { get: (_, prop) => {
60
- if (typeof prop !== "string") return void 0;
61
- return (...args) => {
62
- if (args.length === 0) return prop;
63
- return {
64
- id: prop,
65
- ...args[0]
66
- };
67
- };
68
- } });
69
- const _simpleActionProxy = new Proxy({ custom: (name, config) => ({
70
- id: name,
71
- ...config
72
- }) }, { get: (target, prop) => target[prop] ?? String(prop) });
60
+ const _actionBuilderProxy = createActionCallbackProxy();
61
+ const _simpleActionProxy = createActionCallbackProxy();
73
62
  const _collExt = {
74
63
  admin: {
75
64
  stateKey: "admin",
@@ -928,7 +928,7 @@ declare const adminModule: {
928
928
  $Infer: {
929
929
  body: {
930
930
  permissions: {
931
- readonly user?: ("delete" | "list" | "create" | "set-role" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "get" | "update")[] | undefined;
931
+ readonly user?: ("delete" | "create" | "update" | "list" | "set-role" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "get")[] | undefined;
932
932
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
933
933
  };
934
934
  } & {
@@ -1,4 +1,4 @@
1
- import * as questpie434 from "questpie";
1
+ import * as questpie460 from "questpie";
2
2
 
3
3
  //#region src/server/modules/admin/routes/admin-config.d.ts
4
4
 
@@ -22,7 +22,7 @@ import * as questpie434 from "questpie";
22
22
  * Registered via module routes and exposed through the fetch handler.
23
23
  */
24
24
  declare const adminConfigFunctions: {
25
- readonly getAdminConfig: questpie434.JsonRouteDefinition<Record<string, never> | undefined, any, questpie434.JsonRouteParams>;
25
+ readonly getAdminConfig: questpie460.JsonRouteDefinition<Record<string, never> | undefined, any, questpie460.JsonRouteParams>;
26
26
  };
27
27
  //#endregion
28
28
  export { adminConfigFunctions };
@@ -316,32 +316,42 @@ function mergeDashboardContributions(contributions) {
316
316
  let title;
317
317
  let description;
318
318
  let columns;
319
+ let rowHeight;
320
+ let gap;
319
321
  let realtime;
320
322
  const allActions = [];
321
323
  const sectionOrder = [];
322
324
  const sectionDefs = /* @__PURE__ */ new Map();
323
325
  const sectionItems = /* @__PURE__ */ new Map();
326
+ const directItems = [];
324
327
  for (const contrib of contributions) {
325
328
  if (contrib.title !== void 0) title = contrib.title;
326
329
  if (contrib.description !== void 0) description = contrib.description;
327
330
  if (contrib.columns !== void 0) columns = contrib.columns;
331
+ if (contrib.rowHeight !== void 0) rowHeight = contrib.rowHeight;
332
+ if (contrib.gap !== void 0) gap = contrib.gap;
328
333
  if (contrib.realtime !== void 0) realtime = contrib.realtime;
329
334
  if (contrib.actions) allActions.push(...contrib.actions);
330
335
  if (contrib.sections) for (const sec of contrib.sections) {
336
+ const { id: _id, ...sectionMeta } = sec;
331
337
  const existingIdx = sectionOrder.indexOf(sec.id);
332
338
  if (existingIdx !== -1) sectionOrder.splice(existingIdx, 1);
333
339
  sectionOrder.push(sec.id);
334
340
  sectionDefs.set(sec.id, {
335
- label: sec.label ?? sectionDefs.get(sec.id)?.label,
336
- layout: sec.layout ?? sectionDefs.get(sec.id)?.layout,
337
- columns: sec.columns ?? sectionDefs.get(sec.id)?.columns
341
+ ...sectionDefs.get(sec.id) ?? {},
342
+ ...sectionMeta
338
343
  });
339
344
  }
340
345
  if (contrib.items) for (const item of contrib.items) {
341
- const sid = item.sectionId;
346
+ const record = item;
347
+ const sid = record.sectionId;
348
+ if (!sid) {
349
+ directItems.push(item);
350
+ continue;
351
+ }
342
352
  if (!sectionItems.has(sid)) sectionItems.set(sid, []);
343
353
  const items = sectionItems.get(sid) ?? [];
344
- if (item.position === "start") items.unshift(item);
354
+ if (record.position === "start") items.unshift(item);
345
355
  else items.push(item);
346
356
  sectionItems.set(sid, items);
347
357
  if (!sectionDefs.has(sid)) {
@@ -350,15 +360,15 @@ function mergeDashboardContributions(contributions) {
350
360
  }
351
361
  }
352
362
  }
353
- const dashboardItems = [];
363
+ const dashboardItems = [...directItems];
354
364
  for (const sectionId of sectionOrder) {
355
365
  const def = sectionDefs.get(sectionId);
356
366
  const items = sectionItems.get(sectionId) ?? [];
357
367
  if (items.length > 0 || def?.label) dashboardItems.push({
358
368
  type: "section",
359
- label: def?.label,
369
+ id: sectionId,
370
+ ...def,
360
371
  layout: def?.layout ?? "grid",
361
- columns: def?.columns,
362
372
  items: items.map(({ sectionId: _sid, position: _pos, ...rest }) => rest)
363
373
  });
364
374
  }
@@ -366,6 +376,8 @@ function mergeDashboardContributions(contributions) {
366
376
  title,
367
377
  description,
368
378
  columns,
379
+ rowHeight,
380
+ gap,
369
381
  realtime,
370
382
  actions: allActions.length > 0 ? allActions : void 0,
371
383
  items: dashboardItems.length > 0 ? dashboardItems : void 0
@@ -425,17 +437,20 @@ async function processDashboardItems(items, accessibleCollections, accessCtx) {
425
437
  }
426
438
  if (item.type === "tabs") {
427
439
  const rawTabs = rec.tabs || [];
428
- const tabs = await Promise.all(rawTabs.map(async (tab) => {
440
+ const visibleTabs = (await Promise.all(rawTabs.map(async (tab) => {
429
441
  const filtered = await processDashboardItems(tab.items || [], accessibleCollections, accessCtx);
430
442
  return {
431
443
  ...tab,
432
444
  items: filtered
433
445
  };
434
- }));
435
- result.push({
436
- ...item,
437
- tabs
438
- });
446
+ }))).filter((tab) => tab.items.length > 0);
447
+ if (visibleTabs.length > 0) {
448
+ const { variant: _variant, ...serializableTabs } = item;
449
+ result.push({
450
+ ...serializableTabs,
451
+ tabs: visibleTabs
452
+ });
453
+ }
439
454
  continue;
440
455
  }
441
456
  const widget = rec;
@@ -453,10 +468,13 @@ async function processDashboardItems(items, accessibleCollections, accessCtx) {
453
468
  if (action.action?.type === "create") return accessibleCollections.has(action.action.collection);
454
469
  return true;
455
470
  });
456
- const { loader: loader$1, access: access$1, ...serializable$1 } = widget;
471
+ const { loader: loader$1, access: access$1, filterFn: filterFn$1, ...serializable$1 } = widget;
472
+ if (loader$1) serializable$1.hasLoader = true;
473
+ if (serializable$1.label && !serializable$1.title) serializable$1.title = serializable$1.label;
457
474
  result.push({
458
475
  ...serializable$1,
459
- actions
476
+ actions,
477
+ quickActions: serializable$1.quickActions ?? actions
460
478
  });
461
479
  continue;
462
480
  }