rimecms 0.26.7 → 0.26.9

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 (280) hide show
  1. package/dist/adapter-sqlite/where.js +7 -1
  2. package/dist/core/areas/api/get.server.js +6 -2
  3. package/dist/core/collections/nested/hooks/index.server.js +3 -1
  4. package/dist/core/collections/upload/upload.d.ts +8 -8
  5. package/dist/core/collections/upload/util/path.js +2 -1
  6. package/dist/core/config/types.d.ts +1 -1
  7. package/dist/core/dev/generate/sanitize/index.js +707 -707
  8. package/dist/core/errors/handler.server.js +3 -3
  9. package/dist/core/fields/util.js +2 -1
  10. package/dist/core/i18n/en/common.js +60 -60
  11. package/dist/core/i18n/en/errors.js +13 -12
  12. package/dist/core/i18n/en/fields.js +11 -11
  13. package/dist/core/i18n/en/mail.js +2 -2
  14. package/dist/core/i18n/fr/common.js +64 -64
  15. package/dist/core/i18n/fr/errors.js +11 -11
  16. package/dist/core/i18n/fr/fields.js +11 -11
  17. package/dist/core/i18n/fr/mail.js +2 -2
  18. package/dist/core/logger/index.server.js +136 -136
  19. package/dist/core/operations/hooks/before-upsert/validate-fields.server.js +5 -5
  20. package/dist/core/plugins/cache/HeaderButton.svelte +11 -11
  21. package/dist/fields/blocks/component/AddBlockButton.svelte +161 -161
  22. package/dist/fields/blocks/component/Block.svelte +157 -157
  23. package/dist/fields/blocks/component/BlockActions.svelte +36 -36
  24. package/dist/fields/blocks/component/Blocks.svelte +154 -154
  25. package/dist/fields/blocks/component/Cell.svelte +12 -12
  26. package/dist/fields/blocks/component/ToggleBlockButton.svelte +11 -11
  27. package/dist/fields/checkbox/component/Checkbox.svelte +51 -51
  28. package/dist/fields/combobox/component/ComboBox.svelte +88 -88
  29. package/dist/fields/combobox/component/combobox.css +24 -24
  30. package/dist/fields/date/component/Cell.svelte +5 -5
  31. package/dist/fields/date/component/Date.svelte +92 -92
  32. package/dist/fields/email/component/Email.svelte +58 -58
  33. package/dist/fields/group/component/Group.svelte +131 -131
  34. package/dist/fields/link/component/Cell.svelte +9 -9
  35. package/dist/fields/link/component/Link.svelte +269 -269
  36. package/dist/fields/link/component/RessourceInput.svelte +183 -183
  37. package/dist/fields/number/component/Number.svelte +118 -118
  38. package/dist/fields/number/component/number.css +52 -52
  39. package/dist/fields/radio/component/Radio.svelte +56 -53
  40. package/dist/fields/relation/component/Cell.svelte +51 -51
  41. package/dist/fields/relation/component/Relation.svelte +226 -226
  42. package/dist/fields/relation/component/default/Default.svelte +218 -218
  43. package/dist/fields/relation/component/upload/Browse.svelte +227 -227
  44. package/dist/fields/relation/component/upload/Upload.svelte +112 -112
  45. package/dist/fields/relation/component/upload/upload.css +72 -72
  46. package/dist/fields/rich-text/component/Cell.svelte +5 -5
  47. package/dist/fields/rich-text/component/RichText.svelte +95 -95
  48. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.css +15 -15
  49. package/dist/fields/rich-text/component/bubble-menu/bubble-menu.svelte +148 -148
  50. package/dist/fields/rich-text/component/bubble-menu/icon-button/icon-button.css +10 -10
  51. package/dist/fields/rich-text/component/bubble-menu/icon-button/icon-button.svelte +23 -17
  52. package/dist/fields/rich-text/component/bubble-menu/node-selector/node-selector.css +37 -37
  53. package/dist/fields/rich-text/component/bubble-menu/node-selector/node-selector.svelte +93 -89
  54. package/dist/fields/rich-text/component/drag-handle/drag-handle.css +12 -12
  55. package/dist/fields/rich-text/component/drag-handle/drag-handle.svelte +27 -27
  56. package/dist/fields/rich-text/component/styles/rich-text.css +142 -142
  57. package/dist/fields/rich-text/component/suggestion/suggestion.svelte +79 -79
  58. package/dist/fields/rich-text/core/extensions/current-node/current-node.css +3 -3
  59. package/dist/fields/rich-text/core/extensions/drag-handle/drag-handle.js +10 -7
  60. package/dist/fields/rich-text/core/extensions/drag-handle/helpers/cloneElement.js +4 -1
  61. package/dist/fields/rich-text/core/extensions/drag-handle/helpers/dragHandler.js +4 -4
  62. package/dist/fields/rich-text/core/extensions/drag-handle/helpers/findNextElementFromCursor.js +4 -4
  63. package/dist/fields/rich-text/core/extensions/drag-handle/helpers/getInnerCoords.js +1 -1
  64. package/dist/fields/rich-text/core/features/fields/fields.css +16 -16
  65. package/dist/fields/rich-text/core/features/fields/fields.svelte +50 -50
  66. package/dist/fields/rich-text/core/features/hr/hr.css +15 -15
  67. package/dist/fields/rich-text/core/features/link/component/link-selector.css +2 -2
  68. package/dist/fields/rich-text/core/features/link/component/link-selector.svelte +266 -266
  69. package/dist/fields/rich-text/core/features/resource/resource.svelte +134 -134
  70. package/dist/fields/rich-text/core/features/upload/upload.svelte +230 -230
  71. package/dist/fields/rich-text/core/render-rich-text.svelte +162 -162
  72. package/dist/fields/rich-text/core/svelte/node-view-wrapper.svelte +25 -18
  73. package/dist/fields/rich-text/util.js +2 -1
  74. package/dist/fields/select/component/Select.svelte +194 -194
  75. package/dist/fields/separator/component/Separator.svelte +5 -5
  76. package/dist/fields/slug/component/Cell.svelte +4 -4
  77. package/dist/fields/slug/component/Slug.svelte +99 -99
  78. package/dist/fields/tabs/component/Tabs.svelte +96 -96
  79. package/dist/fields/text/component/Text.svelte +54 -54
  80. package/dist/fields/textarea/component/TextArea.svelte +51 -51
  81. package/dist/fields/time/component/Time.svelte +44 -44
  82. package/dist/fields/toggle/component/Cell.svelte +10 -10
  83. package/dist/fields/toggle/component/Toggle.svelte +36 -36
  84. package/dist/fields/tree/component/AddItemButton.svelte +35 -29
  85. package/dist/fields/tree/component/Cell.svelte +12 -12
  86. package/dist/fields/tree/component/ToggleBlockButton.svelte +11 -11
  87. package/dist/fields/tree/component/Tree.svelte +150 -150
  88. package/dist/fields/tree/component/TreeBlock.svelte +174 -174
  89. package/dist/fields/tree/component/TreeBlockActions.svelte +13 -13
  90. package/dist/fields/tree/index.js +3 -2
  91. package/dist/live.d.ts +2 -2
  92. package/dist/live.js +2 -2
  93. package/dist/panel/components/Root.svelte +70 -70
  94. package/dist/panel/components/fields/Error.svelte +35 -35
  95. package/dist/panel/components/fields/FieldsPreview.svelte +71 -71
  96. package/dist/panel/components/fields/FieldsPreviewTrigger.svelte +11 -11
  97. package/dist/panel/components/fields/Hint.svelte +12 -12
  98. package/dist/panel/components/fields/Label.svelte +31 -26
  99. package/dist/panel/components/fields/LabelFor.svelte +26 -26
  100. package/dist/panel/components/fields/RenderFields.svelte +102 -102
  101. package/dist/panel/components/sections/auth/AuthForm.svelte +102 -102
  102. package/dist/panel/components/sections/collection/Empty.svelte +18 -18
  103. package/dist/panel/components/sections/collection/StatusDot.svelte +13 -13
  104. package/dist/panel/components/sections/collection/bulk-upload/BulkUploadDialog.svelte +30 -28
  105. package/dist/panel/components/sections/collection/bulk-upload/DropZone.svelte +176 -169
  106. package/dist/panel/components/sections/collection/folder/Folder.svelte +38 -38
  107. package/dist/panel/components/sections/collection/folder/FolderEdit.svelte +57 -57
  108. package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +223 -223
  109. package/dist/panel/components/sections/collection/grid/CollectionGrid.svelte +102 -102
  110. package/dist/panel/components/sections/collection/grid/create-directory-dialog/CreateDirectoryDialog.svelte +50 -50
  111. package/dist/panel/components/sections/collection/grid/grid-item/GridItem.svelte +56 -56
  112. package/dist/panel/components/sections/collection/header/ButtonCreate.svelte +29 -29
  113. package/dist/panel/components/sections/collection/header/DisplayMode.svelte +59 -59
  114. package/dist/panel/components/sections/collection/header/Header.svelte +11 -11
  115. package/dist/panel/components/sections/collection/header/SearchInput.svelte +41 -41
  116. package/dist/panel/components/sections/collection/header/SelectUI.svelte +51 -51
  117. package/dist/panel/components/sections/collection/header/Separator.svelte +4 -4
  118. package/dist/panel/components/sections/collection/list/CollectionList.svelte +46 -46
  119. package/dist/panel/components/sections/collection/list/header/Header.svelte +56 -56
  120. package/dist/panel/components/sections/collection/list/row/Row.svelte +115 -115
  121. package/dist/panel/components/sections/collection/tree/CollectionTree.svelte +139 -139
  122. package/dist/panel/components/sections/collection/tree/CollectionTreeNode.svelte +56 -56
  123. package/dist/panel/components/sections/collection/upload-thumb-cell/UploadThumbCell.svelte +64 -64
  124. package/dist/panel/components/sections/document/AuthAPIKeyDialog.svelte +66 -66
  125. package/dist/panel/components/sections/document/AuthFooter.svelte +81 -81
  126. package/dist/panel/components/sections/document/ButtonSave.svelte +34 -27
  127. package/dist/panel/components/sections/document/ButtonStatus.svelte +79 -79
  128. package/dist/panel/components/sections/document/CurrentlyEdited.svelte +36 -36
  129. package/dist/panel/components/sections/document/Document.svelte +223 -223
  130. package/dist/panel/components/sections/document/FloatingUI.svelte +69 -69
  131. package/dist/panel/components/sections/document/Header.svelte +105 -105
  132. package/dist/panel/components/sections/document/Settings.svelte +167 -167
  133. package/dist/panel/components/sections/document/Versions.svelte +89 -89
  134. package/dist/panel/components/sections/document/upload-header/UploadHeader.svelte +205 -205
  135. package/dist/panel/components/sections/document/upload-header/drop-zone/DropZone.svelte +141 -141
  136. package/dist/panel/components/sections/live/Consumer.svelte +14 -14
  137. package/dist/panel/components/sections/live/Provider.svelte +10 -10
  138. package/dist/panel/components/sections/live/SidePanel.svelte +56 -56
  139. package/dist/panel/components/sections/live/side-panel.css +10 -8
  140. package/dist/panel/components/sections/page-layout/Page.svelte +23 -23
  141. package/dist/panel/components/sections/unauthorized/Unauthorized.svelte +22 -22
  142. package/dist/panel/components/ui/breadcrumb/BreadCrumb.svelte +40 -40
  143. package/dist/panel/components/ui/button/button.svelte +226 -226
  144. package/dist/panel/components/ui/calendar/calendar-cell.svelte +6 -2
  145. package/dist/panel/components/ui/calendar/calendar-day.svelte +6 -2
  146. package/dist/panel/components/ui/calendar/calendar-grid-body.svelte +6 -2
  147. package/dist/panel/components/ui/calendar/calendar-grid-head.svelte +6 -2
  148. package/dist/panel/components/ui/calendar/calendar-grid-row.svelte +6 -2
  149. package/dist/panel/components/ui/calendar/calendar-grid.svelte +6 -2
  150. package/dist/panel/components/ui/calendar/calendar-head-cell.svelte +6 -2
  151. package/dist/panel/components/ui/calendar/calendar-header.svelte +6 -2
  152. package/dist/panel/components/ui/calendar/calendar-heading.svelte +6 -2
  153. package/dist/panel/components/ui/calendar/calendar-months.svelte +21 -16
  154. package/dist/panel/components/ui/calendar/calendar-next-button.svelte +13 -8
  155. package/dist/panel/components/ui/calendar/calendar-prev-button.svelte +13 -8
  156. package/dist/panel/components/ui/calendar/calendar.css +88 -88
  157. package/dist/panel/components/ui/calendar/calendar.svelte +50 -50
  158. package/dist/panel/components/ui/card/card-content.svelte +17 -12
  159. package/dist/panel/components/ui/card/card-description.svelte +14 -9
  160. package/dist/panel/components/ui/card/card-footer.svelte +17 -12
  161. package/dist/panel/components/ui/card/card-header.svelte +15 -10
  162. package/dist/panel/components/ui/card/card-title.svelte +25 -19
  163. package/dist/panel/components/ui/card/card.svelte +19 -14
  164. package/dist/panel/components/ui/card-document/card-document.svelte +73 -73
  165. package/dist/panel/components/ui/card-resource/card-resource.svelte +108 -108
  166. package/dist/panel/components/ui/checkbox/checkbox.css +28 -28
  167. package/dist/panel/components/ui/checkbox/checkbox.svelte +13 -13
  168. package/dist/panel/components/ui/command/command-dialog.css +24 -24
  169. package/dist/panel/components/ui/command/command-dialog.svelte +28 -18
  170. package/dist/panel/components/ui/command/command-empty.css +2 -2
  171. package/dist/panel/components/ui/command/command-empty.svelte +7 -3
  172. package/dist/panel/components/ui/command/command-group.css +20 -20
  173. package/dist/panel/components/ui/command/command-group.svelte +17 -17
  174. package/dist/panel/components/ui/command/command-input-select.svelte +50 -45
  175. package/dist/panel/components/ui/command/command-input.svelte +57 -57
  176. package/dist/panel/components/ui/command/command-item.css +18 -18
  177. package/dist/panel/components/ui/command/command-item.svelte +7 -3
  178. package/dist/panel/components/ui/command/command-list.css +4 -4
  179. package/dist/panel/components/ui/command/command-list.svelte +7 -3
  180. package/dist/panel/components/ui/command/command-separator.css +4 -4
  181. package/dist/panel/components/ui/command/command-separator.svelte +7 -3
  182. package/dist/panel/components/ui/command/command.css +5 -5
  183. package/dist/panel/components/ui/command/command.svelte +8 -8
  184. package/dist/panel/components/ui/context-menu/ContextMenu.svelte +10 -5
  185. package/dist/panel/components/ui/context-menu/ContextMenu.svelte.d.ts +2 -2
  186. package/dist/panel/components/ui/context-menu/ContextMenuItem.svelte +8 -8
  187. package/dist/panel/components/ui/context-menu/context-menu-item.css +20 -20
  188. package/dist/panel/components/ui/context-menu/context-menu.css +12 -12
  189. package/dist/panel/components/ui/dialog/dialog-content.css +45 -45
  190. package/dist/panel/components/ui/dialog/dialog-content.svelte +33 -33
  191. package/dist/panel/components/ui/dialog/dialog-description.css +2 -2
  192. package/dist/panel/components/ui/dialog/dialog-description.svelte +7 -3
  193. package/dist/panel/components/ui/dialog/dialog-footer.svelte +20 -20
  194. package/dist/panel/components/ui/dialog/dialog-header.svelte +22 -22
  195. package/dist/panel/components/ui/dialog/dialog-overlay.css +6 -6
  196. package/dist/panel/components/ui/dialog/dialog-overlay.svelte +7 -3
  197. package/dist/panel/components/ui/dialog/dialog-title.css +3 -3
  198. package/dist/panel/components/ui/dialog/dialog-title.svelte +7 -3
  199. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +55 -55
  200. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-content.css +8 -8
  201. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-content.svelte +14 -9
  202. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-group-heading.css +5 -5
  203. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +10 -10
  204. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-item.css +19 -19
  205. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-item.svelte +9 -9
  206. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-radio-item.css +17 -17
  207. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +17 -17
  208. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-separator.css +3 -3
  209. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-separator.svelte +12 -4
  210. package/dist/panel/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +6 -2
  211. package/dist/panel/components/ui/input/input.svelte +93 -93
  212. package/dist/panel/components/ui/label/label.css +7 -7
  213. package/dist/panel/components/ui/label/label.svelte +8 -8
  214. package/dist/panel/components/ui/language-switcher/LanguageSwitcher.svelte +48 -48
  215. package/dist/panel/components/ui/nav/Nav.svelte +151 -151
  216. package/dist/panel/components/ui/nav/NavGroup.svelte +85 -85
  217. package/dist/panel/components/ui/nav/NavItem.svelte +42 -42
  218. package/dist/panel/components/ui/nav/NavItemButton.svelte +39 -38
  219. package/dist/panel/components/ui/nav/NavItemButtonCaret.svelte +8 -8
  220. package/dist/panel/components/ui/nav/UserButton.svelte +90 -90
  221. package/dist/panel/components/ui/page-header/PageHeader.svelte +80 -80
  222. package/dist/panel/components/ui/pane/pane-resizer.svelte +12 -12
  223. package/dist/panel/components/ui/popover/popover-content.css +7 -7
  224. package/dist/panel/components/ui/popover/popover-content.svelte +16 -10
  225. package/dist/panel/components/ui/radio-group/radio-group-item.svelte +8 -7
  226. package/dist/panel/components/ui/radio-group/radio-group.css +23 -23
  227. package/dist/panel/components/ui/radio-group/radio-group.svelte +8 -8
  228. package/dist/panel/components/ui/radio-row-group/radio-row-group-item.svelte +9 -9
  229. package/dist/panel/components/ui/radio-row-group/radio-row-group.css +27 -27
  230. package/dist/panel/components/ui/radio-row-group/radio-row-group.svelte +14 -9
  231. package/dist/panel/components/ui/scroll-area/scroll-area-scrollbar.svelte +14 -14
  232. package/dist/panel/components/ui/scroll-area/scroll-area.css +21 -21
  233. package/dist/panel/components/ui/scroll-area/scroll-area.svelte +26 -26
  234. package/dist/panel/components/ui/separator/separator.svelte +25 -25
  235. package/dist/panel/components/ui/sheet/sheet-content.svelte +33 -33
  236. package/dist/panel/components/ui/sheet/sheet-description.svelte +6 -2
  237. package/dist/panel/components/ui/sheet/sheet-footer.svelte +10 -5
  238. package/dist/panel/components/ui/sheet/sheet-header.svelte +10 -5
  239. package/dist/panel/components/ui/sheet/sheet-overlay.svelte +7 -3
  240. package/dist/panel/components/ui/sheet/sheet-title.svelte +6 -2
  241. package/dist/panel/components/ui/sheet/sheet.css +81 -81
  242. package/dist/panel/components/ui/sheet/sheet.svelte +5 -5
  243. package/dist/panel/components/ui/sonner/sonner.css +12 -12
  244. package/dist/panel/components/ui/sonner/sonner.svelte +15 -15
  245. package/dist/panel/components/ui/spin-loader/SpinLoader.svelte +2 -2
  246. package/dist/panel/components/ui/spin-loader/spin-loader.css +10 -10
  247. package/dist/panel/components/ui/switch/switch.css +36 -36
  248. package/dist/panel/components/ui/switch/switch.svelte +9 -9
  249. package/dist/panel/components/ui/tabs/tabs-content.svelte +6 -2
  250. package/dist/panel/components/ui/tabs/tabs-list.svelte +2 -2
  251. package/dist/panel/components/ui/tabs/tabs-trigger.svelte +6 -2
  252. package/dist/panel/components/ui/tabs/tabs.css +47 -49
  253. package/dist/panel/components/ui/tabs/tabs.svelte +5 -5
  254. package/dist/panel/components/ui/tag/tag.svelte +49 -45
  255. package/dist/panel/components/ui/tooltip/tooltip-content.svelte +31 -31
  256. package/dist/panel/pages/area/Area.svelte +17 -17
  257. package/dist/panel/pages/area/AreaVersionsDoc.svelte +19 -19
  258. package/dist/panel/pages/area/load.server.js +10 -2
  259. package/dist/panel/pages/auth/forgot-password/ForgotPassword.svelte +46 -46
  260. package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +54 -54
  261. package/dist/panel/pages/auth/sign-in/SignIn.svelte +41 -41
  262. package/dist/panel/pages/collection/Collection.svelte +121 -121
  263. package/dist/panel/pages/collection/load.server.js +8 -2
  264. package/dist/panel/pages/collection-document/CollectionDocVersions.svelte +26 -26
  265. package/dist/panel/pages/collection-document/CollectionDocument.svelte +20 -20
  266. package/dist/panel/pages/collection-document/actions.server.js +3 -1
  267. package/dist/panel/pages/collection-document/load.server.js +4 -1
  268. package/dist/panel/pages/dashboard/Dashboard.svelte +109 -109
  269. package/dist/panel/pages/index.actions.server.js +1 -1
  270. package/dist/panel/pages/index.load.server.js +1 -1
  271. package/dist/panel/pages/live/Live.svelte +199 -192
  272. package/dist/panel/style/font.css +32 -32
  273. package/dist/panel/style/index.css +81 -81
  274. package/dist/panel/style/palette.css +27 -28
  275. package/dist/panel/style/radius.css +8 -8
  276. package/dist/panel/style/shadow.css +8 -8
  277. package/dist/panel/style/size.css +41 -41
  278. package/dist/panel/style/util.css +1 -1
  279. package/dist/util/cases.d.ts +1 -1
  280. package/package.json +233 -233
@@ -1,214 +1,214 @@
1
1
  <script lang="ts">
2
- import { beforeNavigate, goto } from '$app/navigation';
3
- import { isAuthConfig } from '../../../../core/collections/auth/util';
4
- import { isUploadConfig } from '../../../../core/collections/upload/util/config';
5
- import { t__ } from '../../../../core/i18n/index.js';
6
- import type { GenericDoc } from '../../../../core/types/doc';
7
- import * as Dialog from '../../ui/dialog/index.js';
8
- import { getConfigContext } from '../../../context/config.svelte.js';
9
- import {
10
- setDocumentFormContext,
11
- type FormSuccessData
12
- } from '../../../context/documentForm.svelte.js';
13
- import { getLocaleContext } from '../../../context/locale.svelte.js';
14
- import { getUserContext } from '../../../context/user.svelte.js';
15
- import RenderFields from '../../fields/RenderFields.svelte';
16
- import Button from '../../ui/button/button.svelte';
17
- import AuthApiKeyDialog from './AuthAPIKeyDialog.svelte';
18
- import AuthFooter from './AuthFooter.svelte';
19
- import CurrentlyEdited from './CurrentlyEdited.svelte';
20
- import FloatingUI from './FloatingUI.svelte';
21
- import Header from './Header.svelte';
22
- import UploadHeader from './upload-header/UploadHeader.svelte';
23
-
24
- type Props = {
25
- doc: GenericDoc;
26
- operation: 'update' | 'create';
27
- class?: string;
28
- onDataChange?: any;
29
- onFieldFocus?: any;
30
- readOnly: boolean;
31
- onClose?: any;
32
- nestedLevel?: number;
33
- onNestedDocumentCreated?: any;
34
- };
35
-
36
- const {
37
- doc: initial,
38
- operation,
39
- readOnly,
40
- onClose,
41
- onNestedDocumentCreated,
42
- nestedLevel = 0,
43
- onDataChange = null,
44
- onFieldFocus = null,
45
- class: className
46
- }: Props = $props();
47
-
48
- const { getDocumentConfig } = getConfigContext();
49
-
50
- const user = getUserContext();
51
- const config = $derived(
52
- getDocumentConfig({
53
- prototype: initial._prototype,
54
- slug: initial._type
55
- })
56
- );
57
-
58
- let formElement = $state<HTMLFormElement>();
59
- // This is used to intercept navigation when there are unsaved changes in the form
60
- // It stores the URL the user is trying to navigate to, so we can redirect them there after they confirm they want to leave
61
- let interceptedLeave = $state<{ url: string } | null>(null);
62
- // This is used to prevent the beforeNavigate from triggering when we programmatically navigate
63
- let isRedirect = $state(false);
64
- // Dialog for unsaved changes confirmation
65
- const isConfirmLeaveOpen = $derived(!!interceptedLeave);
66
- const locale = getLocaleContext();
67
- const liveEditing = $derived(!!onDataChange);
68
- // This is used to show the API key after creating a document in a collection with API key auth
69
- let apiKey = $state<string | null>('');
70
-
71
- // Intercept navigation when there are unsaved changes in the form
72
- beforeNavigate(async ({ cancel, to }) => {
73
- const hasCHanges = Object.keys(form.changes).length > 0;
74
- if (!hasCHanges) return;
75
- if (isRedirect) return;
76
- if (interceptedLeave) return;
77
- if (!to) return;
78
- cancel();
79
- interceptedLeave = { url: to.url.href };
80
- });
81
-
82
- // svelte-ignore state_referenced_locally
83
- const form = setDocumentFormContext({
84
- initial,
85
- config,
86
- readOnly,
87
- onNestedDocumentCreated,
88
- onDataChange,
89
- onFieldFocus,
90
- key: `${initial._type}_${nestedLevel}`,
91
- beforeRedirect: beforeRedirect
92
- });
93
-
94
- function handleKeyDown(event: KeyboardEvent) {
95
- if (!formElement) throw Error('formElement is not defined');
96
- if ((event.ctrlKey || event.metaKey) && event.key === 's') {
97
- event.preventDefault();
98
- if (!form.canSubmit) return;
99
- const saveButton = formElement.querySelector('button[data-submit]');
100
- if (saveButton) {
101
- formElement.requestSubmit(saveButton as HTMLButtonElement);
102
- } else {
103
- // Fallback to default submit if no specific button found
104
- formElement.requestSubmit();
105
- }
106
- }
107
- }
108
-
109
- async function beforeRedirect(data?: FormSuccessData) {
110
- const IS_API_AUTH = config.type === 'collection' && config.auth?.type === 'apiKey';
111
- if (IS_API_AUTH) {
112
- apiKey = data?.document?.apiKey || null;
113
- return new Promise<boolean>((resolve) => {
114
- function checkAndResolve() {
115
- if (!apiKey) {
116
- isRedirect = !!data?.redirectUrl;
117
- resolve(true);
118
- clearInterval(intervalId);
119
- }
120
- }
121
- const intervalId = setInterval(checkAndResolve, 100);
122
- });
123
- }
124
- isRedirect = !!data?.redirectUrl;
125
- return true;
126
- }
2
+ import { beforeNavigate, goto } from '$app/navigation';
3
+ import { isAuthConfig } from '../../../../core/collections/auth/util';
4
+ import { isUploadConfig } from '../../../../core/collections/upload/util/config';
5
+ import { t__ } from '../../../../core/i18n/index.js';
6
+ import type { GenericDoc } from '../../../../core/types/doc';
7
+ import * as Dialog from '../../ui/dialog/index.js';
8
+ import { getConfigContext } from '../../../context/config.svelte.js';
9
+ import {
10
+ setDocumentFormContext,
11
+ type FormSuccessData
12
+ } from '../../../context/documentForm.svelte.js';
13
+ import { getLocaleContext } from '../../../context/locale.svelte.js';
14
+ import { getUserContext } from '../../../context/user.svelte.js';
15
+ import RenderFields from '../../fields/RenderFields.svelte';
16
+ import Button from '../../ui/button/button.svelte';
17
+ import AuthApiKeyDialog from './AuthAPIKeyDialog.svelte';
18
+ import AuthFooter from './AuthFooter.svelte';
19
+ import CurrentlyEdited from './CurrentlyEdited.svelte';
20
+ import FloatingUI from './FloatingUI.svelte';
21
+ import Header from './Header.svelte';
22
+ import UploadHeader from './upload-header/UploadHeader.svelte';
23
+
24
+ type Props = {
25
+ doc: GenericDoc;
26
+ operation: 'update' | 'create';
27
+ class?: string;
28
+ onDataChange?: any;
29
+ onFieldFocus?: any;
30
+ readOnly: boolean;
31
+ onClose?: any;
32
+ nestedLevel?: number;
33
+ onNestedDocumentCreated?: any;
34
+ };
35
+
36
+ const {
37
+ doc: initial,
38
+ operation,
39
+ readOnly,
40
+ onClose,
41
+ onNestedDocumentCreated,
42
+ nestedLevel = 0,
43
+ onDataChange = null,
44
+ onFieldFocus = null,
45
+ class: className
46
+ }: Props = $props();
47
+
48
+ const { getDocumentConfig } = getConfigContext();
49
+
50
+ const user = getUserContext();
51
+ const config = $derived(
52
+ getDocumentConfig({
53
+ prototype: initial._prototype,
54
+ slug: initial._type
55
+ })
56
+ );
57
+
58
+ let formElement = $state<HTMLFormElement>();
59
+ // This is used to intercept navigation when there are unsaved changes in the form
60
+ // It stores the URL the user is trying to navigate to, so we can redirect them there after they confirm they want to leave
61
+ let interceptedLeave = $state<{ url: string } | null>(null);
62
+ // This is used to prevent the beforeNavigate from triggering when we programmatically navigate
63
+ let isRedirect = $state(false);
64
+ // Dialog for unsaved changes confirmation
65
+ const isConfirmLeaveOpen = $derived(!!interceptedLeave);
66
+ const locale = getLocaleContext();
67
+ const liveEditing = $derived(!!onDataChange);
68
+ // This is used to show the API key after creating a document in a collection with API key auth
69
+ let apiKey = $state<string | null>('');
70
+
71
+ // Intercept navigation when there are unsaved changes in the form
72
+ beforeNavigate(async ({ cancel, to }) => {
73
+ const hasCHanges = Object.keys(form.changes).length > 0;
74
+ if (!hasCHanges) return;
75
+ if (isRedirect) return;
76
+ if (interceptedLeave) return;
77
+ if (!to) return;
78
+ cancel();
79
+ interceptedLeave = { url: to.url.href };
80
+ });
81
+
82
+ // svelte-ignore state_referenced_locally
83
+ const form = setDocumentFormContext({
84
+ initial,
85
+ config,
86
+ readOnly,
87
+ onNestedDocumentCreated,
88
+ onDataChange,
89
+ onFieldFocus,
90
+ key: `${initial._type}_${nestedLevel}`,
91
+ beforeRedirect: beforeRedirect
92
+ });
93
+
94
+ function handleKeyDown(event: KeyboardEvent) {
95
+ if (!formElement) throw Error('formElement is not defined');
96
+ if ((event.ctrlKey || event.metaKey) && event.key === 's') {
97
+ event.preventDefault();
98
+ if (!form.canSubmit) return;
99
+ const saveButton = formElement.querySelector('button[data-submit]');
100
+ if (saveButton) {
101
+ formElement.requestSubmit(saveButton as HTMLButtonElement);
102
+ } else {
103
+ // Fallback to default submit if no specific button found
104
+ formElement.requestSubmit();
105
+ }
106
+ }
107
+ }
108
+
109
+ async function beforeRedirect(data?: FormSuccessData) {
110
+ const IS_API_AUTH = config.type === 'collection' && config.auth?.type === 'apiKey';
111
+ if (IS_API_AUTH) {
112
+ apiKey = data?.document?.apiKey || null;
113
+ return new Promise<boolean>((resolve) => {
114
+ function checkAndResolve() {
115
+ if (!apiKey) {
116
+ isRedirect = !!data?.redirectUrl;
117
+ resolve(true);
118
+ clearInterval(intervalId);
119
+ }
120
+ }
121
+ const intervalId = setInterval(checkAndResolve, 100);
122
+ });
123
+ }
124
+ isRedirect = !!data?.redirectUrl;
125
+ return true;
126
+ }
127
127
  </script>
128
128
 
129
129
  <svelte:window onkeydown={handleKeyDown} />
130
130
 
131
131
  {#snippet meta(label: string, value: string)}
132
- <p class="rz-document__metas">
133
- <span>{label} : </span>
134
- {value}
135
- </p>
132
+ <p class="rz-document__metas">
133
+ <span>{label} : </span>
134
+ {value}
135
+ </p>
136
136
  {/snippet}
137
137
 
138
138
  <form
139
- class="rz-document {className}"
140
- bind:this={formElement}
141
- use:form.enhance
142
- enctype="multipart/form-data"
143
- method="post"
139
+ class="rz-document {className}"
140
+ bind:this={formElement}
141
+ use:form.enhance
142
+ enctype="multipart/form-data"
143
+ method="post"
144
144
  >
145
- {#if !liveEditing}
146
- <Header {form} {config} {onClose}></Header>
147
- {/if}
148
-
149
- {#if form.values.editedBy && form.values.editedBy !== user.attributes.id}
150
- <CurrentlyEdited by={form.values.editedBy} doc={form.values} user={user.attributes} />
151
- {/if}
152
-
153
- <div class="rz-document__fields">
154
- {#if config.type === 'collection' && isUploadConfig(config)}
155
- <UploadHeader accept={config.upload.accept} create={operation === 'create'} {form} />
156
- {/if}
157
- <RenderFields fields={config.fields} {form} />
158
- <!-- -->
159
- {#if config.type === 'collection' && isAuthConfig(config) && config.auth.type === 'password'}
160
- <AuthFooter collection={config} {operation} {form} />
161
- {/if}
162
- </div>
163
-
164
- {#if !form.isLive}
165
- <div class="rz-document__infos">
166
- {#if form.values.createdAt}
167
- {@render meta(t__('common.created_at'), locale.dateFormat(form.values.createdAt))}
168
- {/if}
169
- {#if form.values.updatedAt}
170
- {@render meta(t__('common.last_update'), locale.dateFormat(form.values.updatedAt))}
171
- {/if}
172
- {#if form.values.editedBy}
173
- {@render meta(t__('common.edited_by'), locale.dateFormat(form.values.editedBy))}
174
- {/if}
175
- {#if form.values.id}
176
- {@render meta('id', form.values.id)}
177
- {/if}
178
- </div>
179
- {:else}
180
- <FloatingUI {form} {onClose} />
181
- {/if}
182
-
183
- <!-- This shows the create API Key after creation, for apiKey auth type collection -->
184
- {#if !form.isLive && apiKey}
185
- <AuthApiKeyDialog bind:apiKey />
186
- {/if}
187
-
188
- <Dialog.Root
189
- open={isConfirmLeaveOpen}
190
- onOpenChange={(open) => {
191
- if (!open) {
192
- interceptedLeave = null;
193
- }
194
- }}
195
- >
196
- <Dialog.Content>
197
- <Dialog.Header>
198
- {t__('common.leave_confirm_title')}
199
- </Dialog.Header>
200
- <p>{t__('common.leave_confirm_text')}</p>
201
- <!-- -->
202
- <Dialog.Footer --rz-justify-content="space-between">
203
- <Button onclick={() => interceptedLeave && goto(interceptedLeave.url)}>
204
- {t__('common.confirm')}
205
- </Button>
206
- <Button onclick={() => (interceptedLeave = null)} variant="secondary">
207
- {t__('common.cancel')}
208
- </Button>
209
- </Dialog.Footer>
210
- </Dialog.Content>
211
- </Dialog.Root>
145
+ {#if !liveEditing}
146
+ <Header {form} {config} {onClose}></Header>
147
+ {/if}
148
+
149
+ {#if form.values.editedBy && form.values.editedBy !== user.attributes.id}
150
+ <CurrentlyEdited by={form.values.editedBy} doc={form.values} user={user.attributes} />
151
+ {/if}
152
+
153
+ <div class="rz-document__fields">
154
+ {#if config.type === 'collection' && isUploadConfig(config)}
155
+ <UploadHeader accept={config.upload.accept} create={operation === 'create'} {form} />
156
+ {/if}
157
+ <RenderFields fields={config.fields} {form} />
158
+ <!-- -->
159
+ {#if config.type === 'collection' && isAuthConfig(config) && config.auth.type === 'password'}
160
+ <AuthFooter collection={config} {operation} {form} />
161
+ {/if}
162
+ </div>
163
+
164
+ {#if !form.isLive}
165
+ <div class="rz-document__infos">
166
+ {#if form.values.createdAt}
167
+ {@render meta(t__('common.created_at'), locale.dateFormat(form.values.createdAt))}
168
+ {/if}
169
+ {#if form.values.updatedAt}
170
+ {@render meta(t__('common.last_update'), locale.dateFormat(form.values.updatedAt))}
171
+ {/if}
172
+ {#if form.values.editedBy}
173
+ {@render meta(t__('common.edited_by'), locale.dateFormat(form.values.editedBy))}
174
+ {/if}
175
+ {#if form.values.id}
176
+ {@render meta('id', form.values.id)}
177
+ {/if}
178
+ </div>
179
+ {:else}
180
+ <FloatingUI {form} {onClose} />
181
+ {/if}
182
+
183
+ <!-- This shows the create API Key after creation, for apiKey auth type collection -->
184
+ {#if !form.isLive && apiKey}
185
+ <AuthApiKeyDialog bind:apiKey />
186
+ {/if}
187
+
188
+ <Dialog.Root
189
+ open={isConfirmLeaveOpen}
190
+ onOpenChange={(open) => {
191
+ if (!open) {
192
+ interceptedLeave = null;
193
+ }
194
+ }}
195
+ >
196
+ <Dialog.Content>
197
+ <Dialog.Header>
198
+ {t__('common.leave_confirm_title')}
199
+ </Dialog.Header>
200
+ <p>{t__('common.leave_confirm_text')}</p>
201
+ <!-- -->
202
+ <Dialog.Footer --rz-justify-content="space-between">
203
+ <Button onclick={() => interceptedLeave && goto(interceptedLeave.url)}>
204
+ {t__('common.confirm')}
205
+ </Button>
206
+ <Button onclick={() => (interceptedLeave = null)} variant="secondary">
207
+ {t__('common.cancel')}
208
+ </Button>
209
+ </Dialog.Footer>
210
+ </Dialog.Content>
211
+ </Dialog.Root>
212
212
  </form>
213
213
 
214
214
  <style>/**************************************/
@@ -218,34 +218,34 @@
218
218
  /**************************************/
219
219
 
220
220
  .rz-document {
221
- container: rz-document / inline-size;
222
- min-height: 100vh;
223
- position: relative;
224
- }
221
+ container: rz-document / inline-size;
222
+ min-height: 100vh;
223
+ position: relative;
224
+ }
225
225
 
226
226
  .rz-document__fields {
227
- display: grid;
228
- gap: var(--rz-size-4);
229
- min-height: calc(100vh - var(--rz-size-14));
230
- align-content: flex-start;
231
- margin-left: calc(-1 * var(--rz-fields-padding));
232
- margin-right: calc(-1 * var(--rz-fields-padding));
233
- padding: var(--rz-size-5) var(--rz-page-gutter);
234
- padding-bottom: var(--rz-size-24);
235
- }
227
+ display: grid;
228
+ gap: var(--rz-size-4);
229
+ min-height: calc(100vh - var(--rz-size-14));
230
+ align-content: flex-start;
231
+ margin-left: calc(-1 * var(--rz-fields-padding));
232
+ margin-right: calc(-1 * var(--rz-fields-padding));
233
+ padding: var(--rz-size-5) var(--rz-page-gutter);
234
+ padding-bottom: var(--rz-size-24);
235
+ }
236
236
 
237
237
  .rz-document__infos {
238
- border-top: var(--rz-border);
239
- padding-inline: var(--rz-page-gutter);
240
- padding-block: var(--rz-size-6);
241
- }
238
+ border-top: var(--rz-border);
239
+ padding-inline: var(--rz-page-gutter);
240
+ padding-block: var(--rz-size-6);
241
+ }
242
242
 
243
243
  .rz-document__metas {
244
- font-size: var(--rz-text-xs);
245
- }
244
+ font-size: var(--rz-text-xs);
245
+ }
246
246
 
247
247
  .rz-document__metas span {
248
- font-variation-settings: 'wght' 600;
249
- font-weight: 600;
250
- }
248
+ font-variation-settings: 'wght' 600;
249
+ font-weight: 600;
250
+ }
251
251
  </style>
@@ -1,81 +1,81 @@
1
1
  <script lang="ts">
2
- import { apiUrl } from '../../../../core/api/index.js';
3
- import type { GenericDoc } from '../../../../core/types/doc.js';
4
- import type { DocumentFormContext } from '../../../context/documentForm.svelte.js';
5
- import { ChevronLeft } from '@lucide/svelte';
6
- import { toast } from 'svelte-sonner';
7
- import { t__ } from '../../../../core/i18n/index.js';
8
- import Button from '../../ui/button/button.svelte';
9
- import LanguageSwitcher from '../../ui/language-switcher/LanguageSwitcher.svelte';
10
- import ButtonSave from './ButtonSave.svelte';
2
+ import { apiUrl } from '../../../../core/api/index.js';
3
+ import type { GenericDoc } from '../../../../core/types/doc.js';
4
+ import type { DocumentFormContext } from '../../../context/documentForm.svelte.js';
5
+ import { ChevronLeft } from '@lucide/svelte';
6
+ import { toast } from 'svelte-sonner';
7
+ import { t__ } from '../../../../core/i18n/index.js';
8
+ import Button from '../../ui/button/button.svelte';
9
+ import LanguageSwitcher from '../../ui/language-switcher/LanguageSwitcher.svelte';
10
+ import ButtonSave from './ButtonSave.svelte';
11
11
 
12
- type Props = { form: DocumentFormContext; onClose: any };
13
- const { form, onClose }: Props = $props();
12
+ type Props = { form: DocumentFormContext; onClose: any };
13
+ const { form, onClose }: Props = $props();
14
14
 
15
- function onLocaleClick(code: string) {
16
- fetch(
17
- `${apiUrl(form.config.kebab)}?where[id][equals]=${form.values.id}&select=url&locale=${code}`
18
- )
19
- .then((response) => response.json())
20
- .then((data: { docs: GenericDoc[] }) => {
21
- if (Array.isArray(data.docs) && data.docs.length) {
22
- const url = data.docs[0].url;
23
- window.location.href = url + '?live=1';
24
- }
25
- })
26
- .catch((err) => {
27
- toast.error(`an error occured getting ${code} url`);
28
- console.error(err);
29
- });
30
- }
15
+ function onLocaleClick(code: string) {
16
+ fetch(
17
+ `${apiUrl(form.config.kebab)}?where[id][equals]=${form.values.id}&select=url&locale=${code}`
18
+ )
19
+ .then((response) => response.json())
20
+ .then((data: { docs: GenericDoc[] }) => {
21
+ if (Array.isArray(data.docs) && data.docs.length) {
22
+ const url = data.docs[0].url;
23
+ window.location.href = url + '?live=1';
24
+ }
25
+ })
26
+ .catch((err) => {
27
+ toast.error(`an error occured getting ${code} url`);
28
+ console.error(err);
29
+ });
30
+ }
31
31
  </script>
32
32
 
33
33
  <div class="rz-floating-ui">
34
- <Button icon={ChevronLeft} onclick={onClose} variant="secondary" size="icon"></Button>
35
- {#if form.config.versions && form.config.versions.draft && form.values.status === 'published'}
36
- <ButtonSave
37
- label={t__('common.save')}
38
- class="rz-floating-ui__save"
39
- disabled={!form.canSubmit}
40
- processing={form.processing}
41
- />
42
- {:else if form.config.versions && form.config.versions.draft && form.values.status === 'draft'}
43
- <ButtonSave
44
- label={t__('common.save_draft')}
45
- class="rz-floating-ui__save"
46
- disabled={!form.canSubmit}
47
- processing={form.processing}
48
- data-draft
49
- />
50
- {:else}
51
- <ButtonSave
52
- label={t__('common.save')}
53
- class="rz-floating-ui__save"
54
- disabled={!form.canSubmit}
55
- processing={form.processing}
56
- />
57
- {/if}
34
+ <Button icon={ChevronLeft} onclick={onClose} variant="secondary" size="icon"></Button>
35
+ {#if form.config.versions && form.config.versions.draft && form.values.status === 'published'}
36
+ <ButtonSave
37
+ label={t__('common.save')}
38
+ class="rz-floating-ui__save"
39
+ disabled={!form.canSubmit}
40
+ processing={form.processing}
41
+ />
42
+ {:else if form.config.versions && form.config.versions.draft && form.values.status === 'draft'}
43
+ <ButtonSave
44
+ label={t__('common.save_draft')}
45
+ class="rz-floating-ui__save"
46
+ disabled={!form.canSubmit}
47
+ processing={form.processing}
48
+ data-draft
49
+ />
50
+ {:else}
51
+ <ButtonSave
52
+ label={t__('common.save')}
53
+ class="rz-floating-ui__save"
54
+ disabled={!form.canSubmit}
55
+ processing={form.processing}
56
+ />
57
+ {/if}
58
58
 
59
- <LanguageSwitcher onLocalClick={onLocaleClick} />
59
+ <LanguageSwitcher onLocalClick={onLocaleClick} />
60
60
  </div>
61
61
 
62
62
  <style>
63
- .rz-floating-ui {
64
- position: sticky;
65
- width: calc(100% - var(--rz-size-4));
66
- bottom: var(--rz-size-2);
67
- margin-left: var(--rz-size-2);
68
- margin-right: var(--rz-size-2);
69
- height: var(--rz-size-14);
70
- background-color: hsl(var(--rz-color-bg));
71
- padding: var(--rz-size-2);
72
- border-radius: var(--rz-radius-md);
73
- z-index: 1000;
74
- display: flex;
75
- gap: var(--rz-size-2);
63
+ .rz-floating-ui {
64
+ position: sticky;
65
+ width: calc(100% - var(--rz-size-4));
66
+ bottom: var(--rz-size-2);
67
+ margin-left: var(--rz-size-2);
68
+ margin-right: var(--rz-size-2);
69
+ height: var(--rz-size-14);
70
+ background-color: hsl(var(--rz-color-bg));
71
+ padding: var(--rz-size-2);
72
+ border-radius: var(--rz-radius-md);
73
+ z-index: 1000;
74
+ display: flex;
75
+ gap: var(--rz-size-2);
76
76
 
77
- :global(.rz-floating-ui__save) {
78
- flex: 1;
79
- }
80
- }
77
+ :global(.rz-floating-ui__save) {
78
+ flex: 1;
79
+ }
80
+ }
81
81
  </style>