rimecms 0.26.6 → 0.26.8

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 (282) 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 -227
  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 +135 -138
  70. package/dist/fields/rich-text/core/features/upload/upload.svelte +231 -235
  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/context/api-proxy.svelte.d.ts +12 -11
  257. package/dist/panel/context/api-proxy.svelte.js +6 -5
  258. package/dist/panel/pages/area/Area.svelte +17 -17
  259. package/dist/panel/pages/area/AreaVersionsDoc.svelte +19 -19
  260. package/dist/panel/pages/area/load.server.js +10 -2
  261. package/dist/panel/pages/auth/forgot-password/ForgotPassword.svelte +58 -54
  262. package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +54 -54
  263. package/dist/panel/pages/auth/sign-in/SignIn.svelte +41 -41
  264. package/dist/panel/pages/collection/Collection.svelte +121 -121
  265. package/dist/panel/pages/collection/load.server.js +8 -2
  266. package/dist/panel/pages/collection-document/CollectionDocVersions.svelte +26 -26
  267. package/dist/panel/pages/collection-document/CollectionDocument.svelte +20 -20
  268. package/dist/panel/pages/collection-document/actions.server.js +3 -1
  269. package/dist/panel/pages/collection-document/load.server.js +4 -1
  270. package/dist/panel/pages/dashboard/Dashboard.svelte +109 -109
  271. package/dist/panel/pages/index.actions.server.js +1 -1
  272. package/dist/panel/pages/index.load.server.js +1 -1
  273. package/dist/panel/pages/live/Live.svelte +199 -192
  274. package/dist/panel/style/font.css +32 -32
  275. package/dist/panel/style/index.css +81 -81
  276. package/dist/panel/style/palette.css +27 -28
  277. package/dist/panel/style/radius.css +8 -8
  278. package/dist/panel/style/shadow.css +8 -8
  279. package/dist/panel/style/size.css +41 -41
  280. package/dist/panel/style/util.css +1 -1
  281. package/dist/util/cases.d.ts +1 -1
  282. package/package.json +5 -5
@@ -1,258 +1,257 @@
1
1
  <script lang="ts">
2
- import { apiUrl } from '../../../core/api/index.js';
3
- import { isUploadConfig } from '../../../core/collections/upload/util/config.js';
4
- import type { GenericDoc } from '../../../core/types/doc.js';
5
- import { Field } from '../../../panel/components/fields/index.js';
6
- import { root } from '../../../panel/components/fields/root.svelte.js';
7
- import { getCollectionContext } from '../../../panel/context/collection.svelte.js';
8
- import { getConfigContext } from '../../../panel/context/config.svelte.js';
9
- import { type DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
10
- import { getLocaleContext } from '../../../panel/context/locale.svelte';
11
- import { panelUrl } from '../../../panel/util/url.js';
12
- import { moveItem } from '../../../util/array.js';
13
- import { snapshot } from '../../../util/state.js';
14
- import { API_PROXY, getAPIProxyContext } from '../../../panel/context/api-proxy.svelte.js';
15
- import type { Relation, RelationField } from '../index.js';
16
- import Default from './default/Default.svelte';
17
- import type { RelationFieldItem } from './types.js';
18
- import Upload from './upload/Upload.svelte';
2
+ import { apiUrl } from '../../../core/api/index.js';
3
+ import { isUploadConfig } from '../../../core/collections/upload/util/config.js';
4
+ import type { GenericDoc } from '../../../core/types/doc.js';
5
+ import { Field } from '../../../panel/components/fields/index.js';
6
+ import { root } from '../../../panel/components/fields/root.svelte.js';
7
+ import { getCollectionContext } from '../../../panel/context/collection.svelte.js';
8
+ import { getConfigContext } from '../../../panel/context/config.svelte.js';
9
+ import { type DocumentFormContext } from '../../../panel/context/documentForm.svelte.js';
10
+ import { getLocaleContext } from '../../../panel/context/locale.svelte';
11
+ import { panelUrl } from '../../../panel/util/url.js';
12
+ import { moveItem } from '../../../util/array.js';
13
+ import { snapshot } from '../../../util/state.js';
14
+ import { API_PROXY, getAPIProxyContext } from '../../../panel/context/api-proxy.svelte.js';
15
+ import type { Relation, RelationField } from '../index.js';
16
+ import Default from './default/Default.svelte';
17
+ import type { RelationFieldItem } from './types.js';
18
+ import Upload from './upload/Upload.svelte';
19
19
 
20
- // Props
21
- type Props = { path: string; config: RelationField; form: DocumentFormContext };
22
- const { path, config, form }: Props = $props();
20
+ // Props
21
+ type Props = { path: string; config: RelationField; form: DocumentFormContext };
22
+ const { path, config, form }: Props = $props();
23
23
 
24
- // Context
25
- const { getCollection } = getConfigContext();
26
- const locale = getLocaleContext();
27
- const APIProxy = getAPIProxyContext(API_PROXY.DOCUMENT);
28
- const field = $derived(form.useField(path, config));
29
- // svelte-ignore state_referenced_locally
30
- const relationConfig = getCollection(config.relationTo);
31
- const relationCollectionCtx = getCollectionContext(relationConfig.slug);
24
+ // Context
25
+ const { getCollection } = getConfigContext();
26
+ const locale = getLocaleContext();
27
+ const APIProxy = getAPIProxyContext(API_PROXY.DOCUMENT);
28
+ const field = $derived(form.useField(path, config));
29
+ // svelte-ignore state_referenced_locally
30
+ const relationConfig = getCollection(config.relationTo);
31
+ const relationCollectionCtx = getCollectionContext(relationConfig.slug);
32
32
 
33
- let initialized = $state(false);
34
- // the fetched items
35
- let initialItems: RelationFieldItem[] = $state([]);
36
- // value from the form
37
- let initialValue = $derived(form.getRawValue<Relation[]>(path) || []);
38
- // timestamp to force re-render
39
- let stamp = $state(new Date().getTime().toString());
33
+ let initialized = $state(false);
34
+ // the fetched items
35
+ let initialItems: RelationFieldItem[] = $state([]);
36
+ // value from the form
37
+ let initialValue = $derived(form.getRawValue<Relation[]>(path) || []);
38
+ // timestamp to force re-render
39
+ let stamp = $state(new Date().getTime().toString());
40
40
 
41
- let selectedItems = $state<RelationFieldItem[]>([]);
42
- // fetched items minus selected items
43
- let availableItems = $state<RelationFieldItem[]>([]);
44
- const nothingToSelect = $derived(initialItems.length === 0);
41
+ let selectedItems = $state<RelationFieldItem[]>([]);
42
+ // fetched items minus selected items
43
+ let availableItems = $state<RelationFieldItem[]>([]);
44
+ const nothingToSelect = $derived(initialItems.length === 0);
45
45
 
46
- let isFull = $derived.by(() => {
47
- if (!config.many) {
48
- if (selectedItems.length === 1) return true;
49
- } else {
50
- if (availableItems.length === 0 && selectedItems.length > 0) {
51
- return true;
52
- }
53
- }
54
- return false;
55
- });
46
+ let isFull = $derived.by(() => {
47
+ if (!config.many) {
48
+ if (selectedItems.length === 1) return true;
49
+ } else {
50
+ if (availableItems.length === 0 && selectedItems.length > 0) {
51
+ return true;
52
+ }
53
+ }
54
+ return false;
55
+ });
56
56
 
57
- // Convert a document to a relation field item value
58
- function documentToRelationFieldItem(doc: GenericDoc) {
59
- const itemInFieldValue = retreiveRelation(doc.id);
60
- const item: RelationFieldItem = {
61
- documentId: doc.id,
62
- title: doc.title,
63
- editUrl: panelUrl(relationConfig.kebab, doc.id),
64
- _type: doc._type,
65
- _prototype: doc._prototype
66
- };
67
- if (itemInFieldValue) {
68
- item.id = itemInFieldValue.id;
69
- }
70
- if (isUploadConfig(relationConfig)) {
71
- const isRelationToImage = doc.mimeType?.includes('image');
72
- item.isImage = isRelationToImage;
73
- item.filename = doc.filename;
74
- item.filesize = doc.filesize;
75
- item.mimeType = doc.mimeType;
76
- if (isRelationToImage) {
77
- item.url = doc._thumbnail;
78
- }
79
- }
80
- if (form.isLive) {
81
- item.livePreview = doc;
82
- }
83
- return item;
84
- }
57
+ // Convert a document to a relation field item value
58
+ function documentToRelationFieldItem(doc: GenericDoc) {
59
+ const itemInFieldValue = retreiveRelation(doc.id);
60
+ const item: RelationFieldItem = {
61
+ documentId: doc.id,
62
+ title: doc.title,
63
+ editUrl: panelUrl(relationConfig.kebab, doc.id),
64
+ _type: doc._type,
65
+ _prototype: doc._prototype
66
+ };
67
+ if (itemInFieldValue) {
68
+ item.id = itemInFieldValue.id;
69
+ }
70
+ if (isUploadConfig(relationConfig)) {
71
+ const isRelationToImage = doc.mimeType?.includes('image');
72
+ item.isImage = isRelationToImage;
73
+ item.filename = doc.filename;
74
+ item.filesize = doc.filesize;
75
+ item.mimeType = doc.mimeType;
76
+ if (isRelationToImage) {
77
+ item.url = doc._thumbnail;
78
+ }
79
+ }
80
+ if (form.isLive) {
81
+ item.livePreview = doc;
82
+ }
83
+ return item;
84
+ }
85
85
 
86
- // Build the API URL for fetching the collection
87
- function makeRessourceURL() {
88
- const url = new URL(apiUrl(relationConfig.kebab));
86
+ // Build the API URL for fetching the collection
87
+ function makeRessourceURL() {
88
+ const url = new URL(apiUrl(relationConfig.kebab));
89
89
 
90
- // Add depth parameter if in live context
91
- if (form.isLive) {
92
- url.searchParams.append('depth', '1');
93
- }
90
+ // Add depth parameter if in live context
91
+ if (form.isLive) {
92
+ url.searchParams.append('depth', '1');
93
+ }
94
94
 
95
- // Add custom query parameters if provided
96
- if (config.query) {
97
- if (typeof config.query === 'string') {
98
- // Parse the query string and add each parameter
99
- const queryParams = new URLSearchParams(config.query);
100
- queryParams.forEach((value, key) => {
101
- url.searchParams.append(key, value);
102
- });
103
- } else if (typeof config.query === 'function') {
104
- // Parse the function result and add each parameter
105
- const queryString = config.query(form.values);
106
- const queryParams = new URLSearchParams(queryString);
107
- queryParams.forEach((value, key) => {
108
- url.searchParams.append(key, value);
109
- });
110
- }
111
- }
95
+ // Add custom query parameters if provided
96
+ if (config.query) {
97
+ if (typeof config.query === 'string') {
98
+ // Parse the query string and add each parameter
99
+ const queryParams = new URLSearchParams(config.query);
100
+ queryParams.forEach((value, key) => {
101
+ url.searchParams.append(key, value);
102
+ });
103
+ } else if (typeof config.query === 'function') {
104
+ // Parse the function result and add each parameter
105
+ const queryString = config.query(form.values);
106
+ const queryParams = new URLSearchParams(queryString);
107
+ queryParams.forEach((value, key) => {
108
+ url.searchParams.append(key, value);
109
+ });
110
+ }
111
+ }
112
+ return url.href + url.search;
113
+ }
112
114
 
113
- return url.pathname + url.search;
114
- }
115
+ const ressourceURL = makeRessourceURL();
115
116
 
116
- const ressourceURL = makeRessourceURL();
117
+ // Fetch the collection data
118
+ const ressource = APIProxy.getRessource<{ docs: GenericDoc[] }>(ressourceURL);
117
119
 
118
- // Fetch the collection data
119
- const ressource = APIProxy.getRessource<{ docs: GenericDoc[] }>(ressourceURL);
120
+ // Initialize the initial items and selected items
121
+ $effect(() => {
122
+ if (ressource.data) {
123
+ initialItems = ressource.data.docs.map((doc: GenericDoc) => documentToRelationFieldItem(doc));
124
+ if (!initialized) {
125
+ const findItem = (relation: Relation) => {
126
+ return initialItems.find((item) => item.documentId === relation.documentId);
127
+ };
128
+ selectedItems = initialValue.map(findItem).filter((item) => !!item);
129
+ initialized = true;
130
+ }
131
+ }
132
+ });
120
133
 
121
- // Initialize the initial items and selected items
122
- $effect(() => {
123
- if (ressource.data) {
124
- initialItems = ressource.data.docs.map((doc: GenericDoc) => documentToRelationFieldItem(doc));
125
- if (!initialized) {
126
- const findItem = (relation: Relation) => {
127
- return initialItems.find((item) => item.documentId === relation.documentId);
128
- };
129
- selectedItems = initialValue.map(findItem).filter((item) => !!item);
130
- initialized = true;
131
- }
132
- }
133
- });
134
+ const retreiveRelation = (documentId: string) => {
135
+ if (initialValue && Array.isArray(initialValue) && initialValue.length) {
136
+ for (const relation of initialValue) {
137
+ if (relation.documentId === documentId) {
138
+ return relation;
139
+ }
140
+ }
141
+ }
142
+ return null;
143
+ };
134
144
 
135
- const retreiveRelation = (documentId: string) => {
136
- if (initialValue && Array.isArray(initialValue) && initialValue.length) {
137
- for (const relation of initialValue) {
138
- if (relation.documentId === documentId) {
139
- return relation;
140
- }
141
- }
142
- }
143
- return null;
144
- };
145
+ const getAvailableItems = () => {
146
+ return initialItems.filter(
147
+ (initialItem) =>
148
+ !selectedItems.some((selectedItem) => selectedItem.documentId === initialItem.documentId)
149
+ );
150
+ };
145
151
 
146
- const getAvailableItems = () => {
147
- return initialItems.filter(
148
- (initialItem) =>
149
- !selectedItems.some((selectedItem) => selectedItem.documentId === initialItem.documentId)
150
- );
151
- };
152
+ $effect(() => {
153
+ availableItems = getAvailableItems();
154
+ });
152
155
 
153
- $effect(() => {
154
- availableItems = getAvailableItems();
155
- });
156
+ // Actions
157
+ const buildRelationFieldValue = () => {
158
+ const relations = selectedItems.map((item, index) => {
159
+ let relation: Omit<Relation, 'ownerId'> = {
160
+ id: item.id,
161
+ relationTo: config.relationTo,
162
+ path,
163
+ position: index,
164
+ documentId: item.documentId
165
+ };
166
+ if (config.localized) {
167
+ relation.locale = locale.code;
168
+ }
169
+ if (form.isLive) {
170
+ if (item && item.livePreview) {
171
+ relation.livePreview = snapshot(item.livePreview);
172
+ }
173
+ }
174
+ return relation;
175
+ });
156
176
 
157
- // Actions
158
- const buildRelationFieldValue = () => {
159
- const relations = selectedItems.map((item, index) => {
160
- let relation: Omit<Relation, 'ownerId'> = {
161
- id: item.id,
162
- relationTo: config.relationTo,
163
- path,
164
- position: index,
165
- documentId: item.documentId
166
- };
167
- if (config.localized) {
168
- relation.locale = locale.code;
169
- }
170
- if (form.isLive) {
171
- if (item && item.livePreview) {
172
- relation.livePreview = snapshot(item.livePreview);
173
- }
174
- }
175
- return relation;
176
- });
177
+ return relations;
178
+ };
177
179
 
178
- return relations;
179
- };
180
+ // Disabled the parent form (this one)
181
+ // So when user save the nested doc
182
+ // it doesn't save this one
183
+ const onRelationCreation = () => {
184
+ form.isDisabled = true;
185
+ };
180
186
 
181
- // Disabled the parent form (this one)
182
- // So when user save the nested doc
183
- // it doesn't save this one
184
- const onRelationCreation = () => {
185
- form.isDisabled = true;
186
- };
187
+ // Enable the form on cancel
188
+ const onRelationCreationCanceled = () => {
189
+ form.isDisabled = false;
190
+ };
187
191
 
188
- // Enable the form on cancel
189
- const onRelationCreationCanceled = () => {
190
- form.isDisabled = false;
191
- };
192
+ const onRelationCreated = async (doc: GenericDoc) => {
193
+ // Enabled the form
194
+ form.isDisabled = false;
195
+ // update resssource
196
+ ressource.data?.docs.push(doc);
197
+ // update collection if present
198
+ if (relationCollectionCtx) {
199
+ relationCollectionCtx.addDoc(doc);
200
+ }
201
+ // Set value if not full
202
+ if (isFull) return;
203
+ selectedItems = [...selectedItems, documentToRelationFieldItem(doc)];
204
+ field.value = buildRelationFieldValue();
205
+ };
192
206
 
193
- const onRelationCreated = async (doc: GenericDoc) => {
194
- // Enabled the form
195
- form.isDisabled = false;
196
- // update resssource
197
- ressource.data?.docs.push(doc);
198
- // update collection if present
199
- if (relationCollectionCtx) {
200
- relationCollectionCtx.addDoc(doc);
201
- }
202
- // Set value if not full
203
- if (isFull) return;
204
- selectedItems = [...selectedItems, documentToRelationFieldItem(doc)];
205
- field.value = buildRelationFieldValue();
206
- };
207
+ const onOrderChange = async (oldIndex: number, newIndex: number) => {
208
+ selectedItems = moveItem(selectedItems, oldIndex, newIndex);
209
+ field.value = buildRelationFieldValue();
210
+ stamp = new Date().getTime().toString();
211
+ };
207
212
 
208
- const onOrderChange = async (oldIndex: number, newIndex: number) => {
209
- selectedItems = moveItem(selectedItems, oldIndex, newIndex);
210
- field.value = buildRelationFieldValue();
211
- stamp = new Date().getTime().toString();
212
- };
213
+ const addValue = async (documentId: string) => {
214
+ if (isFull) return;
215
+ const itemToAdd = availableItems.find((item) => item.documentId === documentId);
216
+ if (!itemToAdd) {
217
+ throw new Error(`Can't find relation at ${path}`);
218
+ }
219
+ selectedItems = [...selectedItems, itemToAdd];
220
+ field.value = buildRelationFieldValue();
221
+ };
213
222
 
214
- const addValue = async (documentId: string) => {
215
- if (isFull) return;
216
- const itemToAdd = availableItems.find((item) => item.documentId === documentId);
217
- if (!itemToAdd) {
218
- throw new Error(`Can't find relation at ${path}`);
219
- }
220
- selectedItems = [...selectedItems, itemToAdd];
221
- field.value = buildRelationFieldValue();
222
- };
223
+ const removeValue = async (incomingId: string) => {
224
+ selectedItems = selectedItems.filter((item) => item.documentId !== incomingId);
225
+ field.value = buildRelationFieldValue();
226
+ };
223
227
 
224
- const removeValue = async (incomingId: string) => {
225
- selectedItems = selectedItems.filter((item) => item.documentId !== incomingId);
226
- field.value = buildRelationFieldValue();
227
- };
228
-
229
- const isRelationToUpload = isUploadConfig(relationConfig);
230
- const RelationComponent = isRelationToUpload ? Upload : Default;
228
+ const isRelationToUpload = isUploadConfig(relationConfig);
229
+ const RelationComponent = isRelationToUpload ? Upload : Default;
231
230
  </script>
232
231
 
233
232
  <fieldset class="rz-field-relation {config.className || ''}" use:root={field}>
234
- <Field.Label {config} for={path || config.name} />
235
- <Field.Hint {config} />
233
+ <Field.Label {config} for={path || config.name} />
234
+ <Field.Hint {config} />
236
235
 
237
- <RelationComponent
238
- {path}
239
- many={!!config.many}
240
- hasError={!!field.error}
241
- formNestedLevel={form.nestedLevel}
242
- readOnly={form.readOnly}
243
- {nothingToSelect}
244
- {onRelationCreated}
245
- {onRelationCreationCanceled}
246
- {onRelationCreation}
247
- {isFull}
248
- {stamp}
249
- {addValue}
250
- {availableItems}
251
- {selectedItems}
252
- {removeValue}
253
- {relationConfig}
254
- {onOrderChange}
255
- />
236
+ <RelationComponent
237
+ {path}
238
+ many={!!config.many}
239
+ hasError={!!field.error}
240
+ formNestedLevel={form.nestedLevel}
241
+ readOnly={form.readOnly}
242
+ {nothingToSelect}
243
+ {onRelationCreated}
244
+ {onRelationCreationCanceled}
245
+ {onRelationCreation}
246
+ {isFull}
247
+ {stamp}
248
+ {addValue}
249
+ {availableItems}
250
+ {selectedItems}
251
+ {removeValue}
252
+ {relationConfig}
253
+ {onOrderChange}
254
+ />
256
255
 
257
- <Field.Error error={field.error} />
256
+ <Field.Error error={field.error} />
258
257
  </fieldset>