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,257 +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
- }
112
- return url.href + url.search;
113
- }
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
+ }
114
114
 
115
- const ressourceURL = makeRessourceURL();
115
+ const ressourceURL = makeRessourceURL();
116
116
 
117
- // Fetch the collection data
118
- const ressource = APIProxy.getRessource<{ docs: GenericDoc[] }>(ressourceURL);
117
+ // Fetch the collection data
118
+ const ressource = APIProxy.getRessource<{ docs: GenericDoc[] }>(ressourceURL);
119
119
 
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
+ // 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
+ });
133
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
+ 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
+ };
144
144
 
145
- const getAvailableItems = () => {
146
- return initialItems.filter(
147
- (initialItem) =>
148
- !selectedItems.some((selectedItem) => selectedItem.documentId === initialItem.documentId)
149
- );
150
- };
145
+ const getAvailableItems = () => {
146
+ return initialItems.filter(
147
+ (initialItem) =>
148
+ !selectedItems.some((selectedItem) => selectedItem.documentId === initialItem.documentId)
149
+ );
150
+ };
151
151
 
152
- $effect(() => {
153
- availableItems = getAvailableItems();
154
- });
152
+ $effect(() => {
153
+ availableItems = getAvailableItems();
154
+ });
155
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
+ // 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
+ });
176
176
 
177
- return relations;
178
- };
177
+ return relations;
178
+ };
179
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
+ // 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
+ };
186
186
 
187
- // Enable the form on cancel
188
- const onRelationCreationCanceled = () => {
189
- form.isDisabled = false;
190
- };
187
+ // Enable the form on cancel
188
+ const onRelationCreationCanceled = () => {
189
+ form.isDisabled = false;
190
+ };
191
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
+ 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
+ };
206
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
+ const onOrderChange = async (oldIndex: number, newIndex: number) => {
208
+ selectedItems = moveItem(selectedItems, oldIndex, newIndex);
209
+ field.value = buildRelationFieldValue();
210
+ stamp = new Date().getTime().toString();
211
+ };
212
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
+ 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
+ };
222
222
 
223
- const removeValue = async (incomingId: string) => {
224
- selectedItems = selectedItems.filter((item) => item.documentId !== incomingId);
225
- field.value = buildRelationFieldValue();
226
- };
223
+ const removeValue = async (incomingId: string) => {
224
+ selectedItems = selectedItems.filter((item) => item.documentId !== incomingId);
225
+ field.value = buildRelationFieldValue();
226
+ };
227
227
 
228
- const isRelationToUpload = isUploadConfig(relationConfig);
229
- const RelationComponent = isRelationToUpload ? Upload : Default;
228
+ const isRelationToUpload = isUploadConfig(relationConfig);
229
+ const RelationComponent = isRelationToUpload ? Upload : Default;
230
230
  </script>
231
231
 
232
232
  <fieldset class="rz-field-relation {config.className || ''}" use:root={field}>
233
- <Field.Label {config} for={path || config.name} />
234
- <Field.Hint {config} />
233
+ <Field.Label {config} for={path || config.name} />
234
+ <Field.Hint {config} />
235
235
 
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
- />
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
+ />
255
255
 
256
- <Field.Error error={field.error} />
256
+ <Field.Error error={field.error} />
257
257
  </fieldset>