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,178 +1,185 @@
1
1
  <script lang="ts">
2
- import { PARAMS } from '../../../../../core/constant';
3
- import { t__ } from '../../../../../core/i18n/index.js';
4
- import SpinLoader from '../../../ui/spin-loader/SpinLoader.svelte';
5
- import type { CollectionContext } from '../../../../context/collection.svelte';
6
- import { trycatch, trycatchFetch } from '../../../../../util/function.js';
7
-
8
- type Props = {
9
- collection: CollectionContext;
10
- onStart: () => void;
11
- onFinish: (hasError: boolean) => void;
12
- };
13
-
14
- let { collection, onFinish, onStart }: Props = $props();
15
-
16
- let input = $state<HTMLInputElement>();
17
- let dragOver = $state(false);
18
- let processingFile = $state(false);
19
- let files = $state<File[]>([]);
20
- let currentlyProcessing = $state('');
21
- let processed = $state(0);
22
- let errors = $state<string[]>([]);
23
-
24
- const handleDragOver = (event: DragEvent) => {
25
- dragOver = true;
26
- event.preventDefault();
27
- };
28
-
29
- const handleDragLeave = (event: DragEvent) => {
30
- dragOver = false;
31
- event.preventDefault();
32
- };
33
-
34
- const handleDrop = (event: DragEvent) => {
35
- dragOver = false;
36
- event.preventDefault();
37
-
38
- if ('dataTransfer' in event && event.dataTransfer && event.dataTransfer.files) {
39
- files = Array.from(event.dataTransfer.files);
40
- processFiles(files);
41
- }
42
- };
43
-
44
- async function processFiles(files: File[]) {
45
- onStart();
46
- for (const file of files) {
47
- currentlyProcessing = file.name;
48
- const [conversionError, base64] = await trycatch(getBase64(file));
49
-
50
- if (conversionError) {
51
- errors.push(file.name);
52
- continue;
53
- }
54
-
55
- const createUploadURL = `${collection.apiUrl}?${PARAMS.SKIP_VALIDATION}=true`;
56
- const [error, success] = await trycatchFetch(createUploadURL, {
57
- method: 'POST',
58
- body: JSON.stringify({
59
- _path: collection.upload.currentPath,
60
- file: {
61
- base64,
62
- filename: file.name
63
- }
64
- })
65
- });
66
- if (error) {
67
- errors.push(file.name);
68
- } else if (success) {
69
- processed++;
70
- }
71
- }
72
-
73
- onFinish(!!errors.length);
74
- }
75
-
76
- async function getBase64(file: File): Promise<string> {
77
- return new Promise((resolve, reject) => {
78
- const reader = new FileReader();
79
- reader.onload = () => {
80
- const result = reader.result;
81
- if (typeof result === 'string') {
82
- resolve(result);
83
- } else {
84
- reject(new Error('Failed to read file as string'));
85
- }
86
- };
87
- reader.readAsDataURL(file);
88
- });
89
- }
90
-
91
- const dragOverClassModifier = $derived(dragOver ? 'rz-bulk-dropzone--dragover' : '');
2
+ import { PARAMS } from '../../../../../core/constant';
3
+ import { t__ } from '../../../../../core/i18n/index.js';
4
+ import SpinLoader from '../../../ui/spin-loader/SpinLoader.svelte';
5
+ import type { CollectionContext } from '../../../../context/collection.svelte';
6
+ import { trycatch, trycatchFetch } from '../../../../../util/function.js';
7
+
8
+ type Props = {
9
+ collection: CollectionContext;
10
+ onStart: () => void;
11
+ onFinish: (hasError: boolean) => void;
12
+ };
13
+
14
+ let { collection, onFinish, onStart }: Props = $props();
15
+
16
+ let input = $state<HTMLInputElement>();
17
+ let dragOver = $state(false);
18
+ let processingFile = $state(false);
19
+ let files = $state<File[]>([]);
20
+ let currentlyProcessing = $state('');
21
+ let processed = $state(0);
22
+ let errors = $state<string[]>([]);
23
+
24
+ const handleDragOver = (event: DragEvent) => {
25
+ dragOver = true;
26
+ event.preventDefault();
27
+ };
28
+
29
+ const handleDragLeave = (event: DragEvent) => {
30
+ dragOver = false;
31
+ event.preventDefault();
32
+ };
33
+
34
+ const handleDrop = (event: DragEvent) => {
35
+ dragOver = false;
36
+ event.preventDefault();
37
+
38
+ if ('dataTransfer' in event && event.dataTransfer && event.dataTransfer.files) {
39
+ files = Array.from(event.dataTransfer.files);
40
+ processFiles(files);
41
+ }
42
+ };
43
+
44
+ async function processFiles(files: File[]) {
45
+ onStart();
46
+ for (const file of files) {
47
+ currentlyProcessing = file.name;
48
+ const [conversionError, base64] = await trycatch(getBase64(file));
49
+
50
+ if (conversionError) {
51
+ errors.push(file.name);
52
+ continue;
53
+ }
54
+
55
+ const createUploadURL = `${collection.apiUrl}?${PARAMS.SKIP_VALIDATION}=true`;
56
+ const [error, success] = await trycatchFetch(createUploadURL, {
57
+ method: 'POST',
58
+ body: JSON.stringify({
59
+ _path: collection.upload.currentPath,
60
+ file: {
61
+ base64,
62
+ filename: file.name
63
+ }
64
+ })
65
+ });
66
+ if (error) {
67
+ errors.push(file.name);
68
+ } else if (success) {
69
+ processed++;
70
+ }
71
+ }
72
+
73
+ onFinish(!!errors.length);
74
+ }
75
+
76
+ async function getBase64(file: File): Promise<string> {
77
+ return new Promise((resolve, reject) => {
78
+ const reader = new FileReader();
79
+ reader.onload = () => {
80
+ const result = reader.result;
81
+ if (typeof result === 'string') {
82
+ resolve(result);
83
+ } else {
84
+ reject(new Error('Failed to read file as string'));
85
+ }
86
+ };
87
+ reader.readAsDataURL(file);
88
+ });
89
+ }
90
+
91
+ const dragOverClassModifier = $derived(dragOver ? 'rz-bulk-dropzone--dragover' : '');
92
92
  </script>
93
93
 
94
94
  {#if files.length}
95
- <div class="rz-bulk-infos">
96
- <div class="rz-bulk-infos__current"><SpinLoader />{currentlyProcessing}</div>
97
- <div class="rz-bulk-infos__processed">
98
- {processed} / {files.length} created<br />
99
- </div>
100
- {#if errors.length}
101
- <div class="rz-bulk-infos__errors">
102
- {errors.length} errors.
103
- </div>
104
- {/if}
105
- </div>
95
+ <div class="rz-bulk-infos">
96
+ <div class="rz-bulk-infos__current"><SpinLoader />{currentlyProcessing}</div>
97
+ <div class="rz-bulk-infos__processed">
98
+ {processed} / {files.length} created<br />
99
+ </div>
100
+ {#if errors.length}
101
+ <div class="rz-bulk-infos__errors">
102
+ {errors.length} errors.
103
+ </div>
104
+ {/if}
105
+ </div>
106
106
  {:else}
107
- <label
108
- for="file"
109
- class="rz-bulk-dropzone {dragOverClassModifier}"
110
- ondragover={handleDragOver}
111
- ondragleave={handleDragLeave}
112
- ondrop={handleDrop}
113
- >
114
- <p>{t__('common.drop_files')} {t__('common.or')} <strong>{t__('common.browse')}</strong></p>
115
- {#if collection.config.upload?.accept}
116
- <p class="rz-bulk-dropzone__accept">{collection.config.upload.accept.join(', ')} accepted</p>
117
- {/if}
118
-
119
- <input disabled={processingFile} bind:this={input} id="file" name="file" type="file" placeholder="upload" />
120
- </label>
107
+ <label
108
+ for="file"
109
+ class="rz-bulk-dropzone {dragOverClassModifier}"
110
+ ondragover={handleDragOver}
111
+ ondragleave={handleDragLeave}
112
+ ondrop={handleDrop}
113
+ >
114
+ <p>{t__('common.drop_files')} {t__('common.or')} <strong>{t__('common.browse')}</strong></p>
115
+ {#if collection.config.upload?.accept}
116
+ <p class="rz-bulk-dropzone__accept">{collection.config.upload.accept.join(', ')} accepted</p>
117
+ {/if}
118
+
119
+ <input
120
+ disabled={processingFile}
121
+ bind:this={input}
122
+ id="file"
123
+ name="file"
124
+ type="file"
125
+ placeholder="upload"
126
+ />
127
+ </label>
121
128
  {/if}
122
129
 
123
130
  <style>
124
- .rz-bulk-dropzone {
125
- display: grid;
126
- cursor: pointer;
127
- height: var(--rz-size-32);
128
- place-content: center;
129
- border-radius: var(--rz-radius-lg);
130
- border: 2px dashed light-dark(hsl(var(--rz-gray-12)), hsl(var(--rz-gray-6)));
131
- background: transparent;
132
- text-align: center;
133
- font-size: var(--rz-text-sm);
134
- }
135
-
136
- .rz-bulk-dropzone__processing {
137
- display: flex;
138
- align-items: center;
139
- gap: var(--rz-size-2);
140
- }
141
-
142
- .rz-bulk-dropzone:focus-visible {
143
- outline: none;
144
- --ring-offset: 1px;
145
- box-shadow:
146
- 0 0 0 var(--rz-ring-offset, 0px) hsl(var(--rz-ring-offset-bg, var(--rz-gray-6)) / 1),
147
- 0 0 0 calc(var(--rz-ring-offset, 0px) + 1px) hsl(var(--rz-color-ring) / var(--rz-ring-opacity, 1));
148
- }
149
-
150
- .rz-bulk-dropzone--dragover {
151
- border-color: hsl(var(--rz-color-ring) / 1);
152
- }
153
-
154
- .rz-bulk-dropzone input {
155
- display: none;
156
- }
157
-
158
- .rz-bulk-dropzone__accept {
159
- opacity: 0.5;
160
- font-size: var(--rz-text-xs);
161
- }
162
-
163
- .rz-bulk-infos__current {
164
- display: flex;
165
- align-items: center;
166
- gap: var(--rz-size-2);
167
- margin-bottom: var(--rz-size-2);
168
- }
169
-
170
- .rz-bulk-infos__errors {
171
- color: hsl(var(--rz-color-error));
172
- }
173
-
174
- .rz-bulk-infos__processed {
175
- font-variation-settings: 'wght' 500;
176
- font-weight: 500;
177
- }
131
+ .rz-bulk-dropzone {
132
+ display: grid;
133
+ cursor: pointer;
134
+ height: var(--rz-size-32);
135
+ place-content: center;
136
+ border-radius: var(--rz-radius-lg);
137
+ border: 2px dashed light-dark(hsl(var(--rz-gray-12)), hsl(var(--rz-gray-6)));
138
+ background: transparent;
139
+ text-align: center;
140
+ font-size: var(--rz-text-sm);
141
+ }
142
+
143
+ .rz-bulk-dropzone__processing {
144
+ display: flex;
145
+ align-items: center;
146
+ gap: var(--rz-size-2);
147
+ }
148
+
149
+ .rz-bulk-dropzone:focus-visible {
150
+ outline: none;
151
+ --ring-offset: 1px;
152
+ box-shadow:
153
+ 0 0 0 var(--rz-ring-offset, 0px) hsl(var(--rz-ring-offset-bg, var(--rz-gray-6)) / 1),
154
+ 0 0 0 calc(var(--rz-ring-offset, 0px) + 1px) hsl(var(--rz-color-ring) / var(--rz-ring-opacity, 1));
155
+ }
156
+
157
+ .rz-bulk-dropzone--dragover {
158
+ border-color: hsl(var(--rz-color-ring) / 1);
159
+ }
160
+
161
+ .rz-bulk-dropzone input {
162
+ display: none;
163
+ }
164
+
165
+ .rz-bulk-dropzone__accept {
166
+ opacity: 0.5;
167
+ font-size: var(--rz-text-xs);
168
+ }
169
+
170
+ .rz-bulk-infos__current {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: var(--rz-size-2);
174
+ margin-bottom: var(--rz-size-2);
175
+ }
176
+
177
+ .rz-bulk-infos__errors {
178
+ color: hsl(var(--rz-color-error));
179
+ }
180
+
181
+ .rz-bulk-infos__processed {
182
+ font-variation-settings: 'wght' 500;
183
+ font-weight: 500;
184
+ }
178
185
  </style>
@@ -1,32 +1,32 @@
1
1
  <script lang="ts">
2
- import type { Snippet } from 'svelte';
2
+ import type { Snippet } from 'svelte';
3
3
 
4
- type Props = { children: Snippet };
5
- const { children }: Props = $props();
4
+ type Props = { children: Snippet };
5
+ const { children }: Props = $props();
6
6
  </script>
7
7
 
8
8
  <svg
9
- class="rz-folder-svg"
10
- version="1.1"
11
- xmlns="http://www.w3.org/2000/svg"
12
- xmlns:xlink="http://www.w3.org/1999/xlink"
13
- x="0px"
14
- y="0px"
15
- viewBox="0 0 500 400"
16
- xml:space="preserve"
9
+ class="rz-folder-svg"
10
+ version="1.1"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ xmlns:xlink="http://www.w3.org/1999/xlink"
13
+ x="0px"
14
+ y="0px"
15
+ viewBox="0 0 500 400"
16
+ xml:space="preserve"
17
17
  >
18
- <path
19
- d="M465.4,400H34.6C15.5,400,0,384.5,0,365.4V34.6C0,15.5,15.5,0,34.6,0c0,0,69,0,103,0c43.6,0,40.7,40,80.9,40
18
+ <path
19
+ d="M465.4,400H34.6C15.5,400,0,384.5,0,365.4V34.6C0,15.5,15.5,0,34.6,0c0,0,69,0,103,0c43.6,0,40.7,40,80.9,40
20
20
  c27.6,0,247,0,247,0c19.1,0,34.6,15.5,34.6,34.6v290.9C500,384.5,484.5,400,465.4,400z"
21
- />
21
+ />
22
22
 
23
- <path
24
- d="M465.4,400H34.6C15.5,400,0,384.5,0,365.4V106.5C0,87.4,15.5,72,34.6,72h430.9c19.1,0,34.6,15.5,34.6,34.6
23
+ <path
24
+ d="M465.4,400H34.6C15.5,400,0,384.5,0,365.4V106.5C0,87.4,15.5,72,34.6,72h430.9c19.1,0,34.6,15.5,34.6,34.6
25
25
  v258.9C500,384.5,484.5,400,465.4,400z"
26
- />
26
+ />
27
27
  </svg>
28
28
  <h3>
29
- {@render children()}
29
+ {@render children()}
30
30
  </h3>
31
31
 
32
32
  <style>/**************************************/
@@ -36,32 +36,32 @@
36
36
  /**************************************/
37
37
 
38
38
  :root {
39
- --rz-folder-light: light-dark(hsl(var(--rz-gray-12)), hsl(var(--rz-gray-6)));
40
- --rz-folder-dark: light-dark(hsl(var(--rz-gray-10)), hsl(var(--rz-gray-4)));
41
- }
39
+ --rz-folder-light: light-dark(hsl(var(--rz-gray-12)), hsl(var(--rz-gray-6)));
40
+ --rz-folder-dark: light-dark(hsl(var(--rz-gray-10)), hsl(var(--rz-gray-4)));
41
+ }
42
42
 
43
43
  h3 {
44
- font-variation-settings: 'wght' 600;
45
- font-weight: 600;
46
- overflow: hidden;
47
- display: -webkit-box;
48
- -webkit-box-orient: vertical;
49
- -webkit-line-clamp: 1;
50
- font-size: var(--rz-text-sm);
51
- text-align: center;
52
- margin-block: var(--rz-size-3);
53
- }
44
+ font-variation-settings: 'wght' 600;
45
+ font-weight: 600;
46
+ overflow: hidden;
47
+ display: -webkit-box;
48
+ -webkit-box-orient: vertical;
49
+ -webkit-line-clamp: 1;
50
+ font-size: var(--rz-text-sm);
51
+ text-align: center;
52
+ margin-block: var(--rz-size-3);
53
+ }
54
54
 
55
55
  .rz-folder-svg {
56
- aspect-ratio: 5 / 4;
57
- width: 100%;
58
- }
56
+ aspect-ratio: 5 / 4;
57
+ width: 100%;
58
+ }
59
59
 
60
60
  .rz-folder-svg path:first-child {
61
- fill: var(--rz-folder-dark);
62
- }
61
+ fill: var(--rz-folder-dark);
62
+ }
63
63
 
64
64
  .rz-folder-svg path:last-child {
65
- fill: var(--rz-folder-light);
66
- }
65
+ fill: var(--rz-folder-light);
66
+ }
67
67
  </style>
@@ -1,67 +1,67 @@
1
1
  <script lang="ts">
2
- import type { Directory } from '../../../../../core/collections/upload/upload';
3
- import type { BuiltCollectionClient } from '../../../../../core/config/types';
4
- import { t__ } from '../../../../../core/i18n/index.js';
5
- import { withDirectoriesSuffix } from '../../../../../core/naming';
6
- import RenderFields from '../../../fields/RenderFields.svelte';
7
- import Button from '../../../ui/button/button.svelte';
8
- import * as Dialog from '../../../ui/dialog/index.js';
9
- import { API_PROXY, setAPIProxyContext } from '../../../../context/api-proxy.svelte.js';
10
- import { getConfigContext } from '../../../../context/config.svelte.js';
11
- import { setDocumentFormContext } from '../../../../context/documentForm.svelte.js';
12
- import { getUserContext } from '../../../../context/user.svelte.js';
2
+ import type { Directory } from '../../../../../core/collections/upload/upload';
3
+ import type { BuiltCollectionClient } from '../../../../../core/config/types';
4
+ import { t__ } from '../../../../../core/i18n/index.js';
5
+ import { withDirectoriesSuffix } from '../../../../../core/naming';
6
+ import RenderFields from '../../../fields/RenderFields.svelte';
7
+ import Button from '../../../ui/button/button.svelte';
8
+ import * as Dialog from '../../../ui/dialog/index.js';
9
+ import { API_PROXY, setAPIProxyContext } from '../../../../context/api-proxy.svelte.js';
10
+ import { getConfigContext } from '../../../../context/config.svelte.js';
11
+ import { setDocumentFormContext } from '../../../../context/documentForm.svelte.js';
12
+ import { getUserContext } from '../../../../context/user.svelte.js';
13
13
 
14
- type Props = {
15
- open: boolean;
16
- folder: Directory;
17
- collection: BuiltCollectionClient;
18
- };
19
- let { folder, collection, open = $bindable() }: Props = $props();
14
+ type Props = {
15
+ open: boolean;
16
+ folder: Directory;
17
+ collection: BuiltCollectionClient;
18
+ };
19
+ let { folder, collection, open = $bindable() }: Props = $props();
20
20
 
21
- setAPIProxyContext(API_PROXY.DOCUMENT);
22
- let formElement = $state<HTMLFormElement>();
23
- const user = getUserContext();
24
- const configCtx = getConfigContext();
25
- // svelte-ignore state_referenced_locally
26
- const config = configCtx.getCollection(withDirectoriesSuffix(collection.slug));
27
- // svelte-ignore state_referenced_locally
28
- const form = setDocumentFormContext({
29
- initial: folder,
30
- config,
31
- readOnly: !config.access.update(user.attributes, { id: folder.id }),
32
- key: folder._type,
33
- afterSuccess: () => (open = false)
34
- });
21
+ setAPIProxyContext(API_PROXY.DOCUMENT);
22
+ let formElement = $state<HTMLFormElement>();
23
+ const user = getUserContext();
24
+ const configCtx = getConfigContext();
25
+ // svelte-ignore state_referenced_locally
26
+ const config = configCtx.getCollection(withDirectoriesSuffix(collection.slug));
27
+ // svelte-ignore state_referenced_locally
28
+ const form = setDocumentFormContext({
29
+ initial: folder,
30
+ config,
31
+ readOnly: !config.access.update(user.attributes, { id: folder.id }),
32
+ key: folder._type,
33
+ afterSuccess: () => (open = false)
34
+ });
35
35
 
36
- function handleKeyDown(event: KeyboardEvent) {
37
- if (!open) return;
38
- if (!formElement) throw Error('formElement is not defined');
39
- if ((event.ctrlKey || event.metaKey) && event.key === 's') {
40
- event.preventDefault();
41
- if (!form.canSubmit) return;
42
- const saveButton = formElement.querySelector('button[data-submit]');
43
- if (saveButton) {
44
- formElement.requestSubmit(saveButton as HTMLButtonElement);
45
- } else {
46
- // Fallback to default submit if no specific button found
47
- formElement.requestSubmit();
48
- }
49
- }
50
- }
36
+ function handleKeyDown(event: KeyboardEvent) {
37
+ if (!open) return;
38
+ if (!formElement) throw Error('formElement is not defined');
39
+ if ((event.ctrlKey || event.metaKey) && event.key === 's') {
40
+ event.preventDefault();
41
+ if (!form.canSubmit) return;
42
+ const saveButton = formElement.querySelector('button[data-submit]');
43
+ if (saveButton) {
44
+ formElement.requestSubmit(saveButton as HTMLButtonElement);
45
+ } else {
46
+ // Fallback to default submit if no specific button found
47
+ formElement.requestSubmit();
48
+ }
49
+ }
50
+ }
51
51
  </script>
52
52
 
53
53
  <svelte:window onkeydown={handleKeyDown} />
54
54
 
55
55
  <Dialog.Root bind:open>
56
- <Dialog.Content>
57
- {#snippet child({ props })}
58
- <form use:form.enhance bind:this={formElement} {...props}>
59
- <RenderFields {form} fields={config.fields} />
60
- <Dialog.Footer --rz-justify-content="space-between">
61
- <Button data-submit disabled={!form.canSubmit} type="submit">{t__('common.save')}</Button>
62
- <Button onclick={() => (open = false)} variant="secondary">{t__('common.cancel')}</Button>
63
- </Dialog.Footer>
64
- </form>
65
- {/snippet}
66
- </Dialog.Content>
56
+ <Dialog.Content>
57
+ {#snippet child({ props })}
58
+ <form use:form.enhance bind:this={formElement} {...props}>
59
+ <RenderFields {form} fields={config.fields} />
60
+ <Dialog.Footer --rz-justify-content="space-between">
61
+ <Button data-submit disabled={!form.canSubmit} type="submit">{t__('common.save')}</Button>
62
+ <Button onclick={() => (open = false)} variant="secondary">{t__('common.cancel')}</Button>
63
+ </Dialog.Footer>
64
+ </form>
65
+ {/snippet}
66
+ </Dialog.Content>
67
67
  </Dialog.Root>