includio-cms 0.24.1 → 0.26.0

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 (349) hide show
  1. package/API.md +57 -4
  2. package/CHANGELOG.md +53 -0
  3. package/DOCS.md +1 -1
  4. package/README.md +2 -0
  5. package/ROADMAP.md +6 -0
  6. package/dist/admin/client/account/lang.d.ts +1 -0
  7. package/dist/admin/client/account/lang.js +4 -2
  8. package/dist/admin/client/account/profile-section.svelte +2 -2
  9. package/dist/admin/client/account/security-section.svelte +27 -4
  10. package/dist/admin/client/account/sessions-section.svelte +1 -1
  11. package/dist/admin/client/admin/admin-after-login-layout-content.svelte +1 -1
  12. package/dist/admin/client/admin/dashboard-page.svelte +34 -10
  13. package/dist/admin/client/collection/bulk-actions-bar.svelte +86 -44
  14. package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +3 -1
  15. package/dist/admin/client/collection/collection-entries.svelte +52 -36
  16. package/dist/admin/client/collection/collection-entries.svelte.d.ts +3 -0
  17. package/dist/admin/client/collection/collection.svelte +28 -14
  18. package/dist/admin/client/collection/collection.svelte.d.ts +3 -0
  19. package/dist/admin/client/collection/data-table.svelte +279 -130
  20. package/dist/admin/client/collection/data-table.svelte.d.ts +11 -0
  21. package/dist/admin/client/collection/date-cell.svelte +4 -4
  22. package/dist/admin/client/collection/row-actions.svelte +2 -1
  23. package/dist/admin/client/collection/sortable-header.svelte +33 -9
  24. package/dist/admin/client/collection/state-display.svelte +102 -0
  25. package/dist/admin/client/collection/state-display.svelte.d.ts +12 -0
  26. package/dist/admin/client/collection/status-badge.svelte +99 -11
  27. package/dist/admin/client/collection/status-badge.svelte.d.ts +15 -1
  28. package/dist/admin/client/collection/table-pagination.svelte +21 -6
  29. package/dist/admin/client/collection/table-toolbar.svelte +105 -80
  30. package/dist/admin/client/collection/table-toolbar.svelte.d.ts +11 -8
  31. package/dist/admin/client/entry/entry-form.svelte +36 -11
  32. package/dist/admin/client/entry/entry-form.svelte.d.ts +1 -0
  33. package/dist/admin/client/entry/entry-header.svelte +22 -15
  34. package/dist/admin/client/entry/entry-header.svelte.d.ts +1 -0
  35. package/dist/admin/client/entry/entry.svelte +269 -165
  36. package/dist/admin/client/entry/header/a11y-header-badge.svelte +47 -0
  37. package/dist/admin/client/entry/header/a11y-header-badge.svelte.d.ts +8 -0
  38. package/dist/admin/client/entry/header/publish-panel.svelte +69 -13
  39. package/dist/admin/client/entry/header/save-indicator.svelte +57 -28
  40. package/dist/admin/client/entry/header/save-indicator.svelte.d.ts +1 -0
  41. package/dist/admin/client/entry/header/status-badge.svelte +60 -15
  42. package/dist/admin/client/entry/header/status-badge.svelte.d.ts +1 -2
  43. package/dist/admin/client/entry/header/version-history-sheet.svelte +1 -1
  44. package/dist/admin/client/entry/hybrid/hybrid-layout.svelte +74 -23
  45. package/dist/admin/client/entry/hybrid/hybrid-preview.svelte +1 -1
  46. package/dist/admin/client/entry/utils.d.ts +14 -0
  47. package/dist/admin/client/entry/utils.js +28 -0
  48. package/dist/admin/client/form/form-submission/form-submission.svelte +2 -2
  49. package/dist/admin/client/form/form-submissions.svelte +143 -194
  50. package/dist/admin/client/form/form-submissions.svelte.d.ts +2 -0
  51. package/dist/admin/client/login/lang.d.ts +3 -0
  52. package/dist/admin/client/login/lang.js +10 -4
  53. package/dist/admin/client/login/login-form.svelte +8 -1
  54. package/dist/admin/client/login/reset-password-page.svelte +24 -3
  55. package/dist/admin/client/login/schema.d.ts +14 -2
  56. package/dist/admin/client/login/schema.js +19 -8
  57. package/dist/admin/client/maintenance/maintenance-page.svelte +16 -17
  58. package/dist/admin/client/media/media-page.svelte +1 -1
  59. package/dist/admin/client/shop/coupon-edit-page.svelte +117 -13
  60. package/dist/admin/client/shop/coupon-form.svelte +282 -138
  61. package/dist/admin/client/shop/coupon-form.svelte.d.ts +1 -9
  62. package/dist/admin/client/shop/coupon-new-page.svelte +40 -10
  63. package/dist/admin/client/shop/coupon-new-page.svelte.d.ts +2 -17
  64. package/dist/admin/client/shop/coupon-schema.d.ts +28 -0
  65. package/dist/admin/client/shop/coupon-schema.js +53 -0
  66. package/dist/admin/client/shop/coupons-list-page.svelte +262 -118
  67. package/dist/admin/client/shop/coupons-list-page.svelte.d.ts +16 -1
  68. package/dist/admin/client/shop/shipping-method-edit-page.svelte +108 -59
  69. package/dist/admin/client/shop/shipping-method-form.svelte +36 -9
  70. package/dist/admin/client/shop/shipping-method-new-page.svelte +44 -13
  71. package/dist/admin/client/shop/shipping-methods-list-page.svelte +101 -59
  72. package/dist/admin/client/shop/shop-order-detail-page.svelte +113 -84
  73. package/dist/admin/client/shop/shop-orders-list-page.svelte +302 -152
  74. package/dist/admin/client/shop/shop-orders-list-page.svelte.d.ts +18 -1
  75. package/dist/admin/client/shop/shop-products-list-page.svelte +355 -118
  76. package/dist/admin/client/shop/shop-products-list-page.svelte.d.ts +19 -1
  77. package/dist/admin/client/users/accept-invite-page.svelte +24 -3
  78. package/dist/admin/client/users/create-user-dialog.svelte +3 -8
  79. package/dist/admin/client/users/lang.d.ts +2 -0
  80. package/dist/admin/client/users/lang.js +4 -0
  81. package/dist/admin/client/users/pending-invitations.svelte +2 -9
  82. package/dist/admin/client/users/user-name-cell.svelte +20 -0
  83. package/dist/admin/client/users/user-name-cell.svelte.d.ts +9 -0
  84. package/dist/admin/client/users/user-role-badge.svelte +16 -0
  85. package/dist/admin/client/users/user-role-badge.svelte.d.ts +7 -0
  86. package/dist/admin/client/users/user-row-actions.svelte +72 -0
  87. package/dist/admin/client/users/user-row-actions.svelte.d.ts +20 -0
  88. package/dist/admin/client/users/user-sessions-sheet.svelte +2 -11
  89. package/dist/admin/client/users/users-page.svelte +283 -497
  90. package/dist/admin/client/users/users-page.svelte.d.ts +12 -1
  91. package/dist/admin/components/dashboard/form-submissions-widget.svelte +59 -74
  92. package/dist/admin/components/dashboard/recent-activity.svelte +17 -5
  93. package/dist/admin/components/dashboard/recent-entries.svelte +19 -7
  94. package/dist/admin/components/dialogs/confirmation-dialog.svelte +105 -0
  95. package/dist/admin/components/dialogs/confirmation-dialog.svelte.d.ts +13 -0
  96. package/dist/admin/components/fields/block-picker-modal.svelte +6 -0
  97. package/dist/admin/components/fields/blocks-field.svelte +46 -1
  98. package/dist/admin/components/fields/boolean-field.svelte +1 -1
  99. package/dist/admin/components/fields/field-renderer.svelte +23 -21
  100. package/dist/admin/components/fields/file-field.svelte +344 -30
  101. package/dist/admin/components/fields/media-field.svelte +16 -2
  102. package/dist/admin/components/fields/radio-field.svelte +22 -0
  103. package/dist/admin/components/fields/relation-field.svelte +123 -97
  104. package/dist/admin/components/fields/relation-picker-dialog.svelte +2 -2
  105. package/dist/admin/components/fields/seo-field.svelte +60 -30
  106. package/dist/admin/components/fields/shop-field.svelte +9 -4
  107. package/dist/admin/components/fields/simple-array-field.svelte +321 -151
  108. package/dist/admin/components/fields/simple-array-field.svelte.d.ts +3 -0
  109. package/dist/admin/components/fields/slug-field.svelte +146 -21
  110. package/dist/admin/components/fields/text-field-wrapper.svelte +37 -20
  111. package/dist/admin/components/fields/text-field.svelte +7 -2
  112. package/dist/admin/components/fields/url-field-wrapper.svelte +10 -0
  113. package/dist/admin/components/fields/url-field.svelte +36 -23
  114. package/dist/admin/components/forms/form-error-summary.svelte +143 -0
  115. package/dist/admin/components/forms/form-error-summary.svelte.d.ts +27 -0
  116. package/dist/admin/components/layout/app-sidebar.svelte +7 -2
  117. package/dist/admin/components/layout/detail-page-shell.svelte +71 -0
  118. package/dist/admin/components/layout/detail-page-shell.svelte.d.ts +24 -0
  119. package/dist/admin/components/layout/lang.d.ts +5 -0
  120. package/dist/admin/components/layout/lang.js +10 -0
  121. package/dist/admin/components/layout/layout-renderer.svelte +71 -2
  122. package/dist/admin/components/layout/layout-renderer.svelte.d.ts +1 -0
  123. package/dist/admin/components/layout/layout-tabs.svelte +172 -0
  124. package/dist/admin/components/layout/layout-tabs.svelte.d.ts +24 -0
  125. package/dist/admin/components/layout/nav-breadcrumbs.svelte +25 -7
  126. package/dist/admin/components/layout/nav-collections.svelte +23 -36
  127. package/dist/admin/components/layout/nav-forms.svelte +19 -35
  128. package/dist/admin/components/layout/nav-main.svelte +3 -28
  129. package/dist/admin/components/layout/nav-search.svelte +70 -2
  130. package/dist/admin/components/layout/nav-section.svelte +77 -0
  131. package/dist/admin/components/layout/nav-section.svelte.d.ts +22 -0
  132. package/dist/admin/components/layout/nav-shop.svelte +3 -27
  133. package/dist/admin/components/layout/nav-singletons.svelte +16 -28
  134. package/dist/admin/components/layout/page-header.stories.svelte +93 -0
  135. package/dist/admin/components/layout/page-header.stories.svelte.d.ts +27 -0
  136. package/dist/admin/components/layout/page-header.svelte +68 -0
  137. package/dist/admin/components/layout/page-header.svelte.d.ts +17 -0
  138. package/dist/admin/components/layout/site-header.svelte +9 -0
  139. package/dist/admin/components/layout/site-header.svelte.d.ts +2 -17
  140. package/dist/admin/components/media/file/file-name-input.svelte +6 -2
  141. package/dist/admin/components/media/file/file-preview.svelte +130 -17
  142. package/dist/admin/components/media/file-upload.svelte +16 -7
  143. package/dist/admin/components/media/file-upload.svelte.d.ts +1 -0
  144. package/dist/admin/components/media/files-list.svelte +153 -53
  145. package/dist/admin/components/media/files-list.svelte.d.ts +1 -0
  146. package/dist/admin/components/media/media-library.svelte +577 -198
  147. package/dist/admin/components/media/media-library.svelte.d.ts +4 -0
  148. package/dist/admin/components/media/media-selector.svelte +4 -2
  149. package/dist/admin/components/media/media-selector.svelte.d.ts +1 -0
  150. package/dist/admin/components/media/tag-sidebar.svelte +4 -4
  151. package/dist/admin/components/tiptap/FigureNodeView.svelte +10 -0
  152. package/dist/admin/components/tiptap/bubble-menu.svelte +104 -0
  153. package/dist/admin/components/tiptap/bubble-menu.svelte.d.ts +19 -0
  154. package/dist/admin/components/tiptap/content-editor.svelte +28 -24
  155. package/dist/admin/components/tiptap/editor-toolbar.svelte +7 -7
  156. package/dist/admin/components/tiptap/extensions.js +5 -1
  157. package/dist/admin/components/tiptap/image-dialog.svelte +5 -1
  158. package/dist/admin/components/tiptap/link-dialog.svelte +2 -0
  159. package/dist/admin/components/tiptap/tiptap-editor.svelte +18 -20
  160. package/dist/admin/components/tiptap/video-dialog.svelte +1 -1
  161. package/dist/admin/i18n/errors.d.ts +140 -0
  162. package/dist/admin/i18n/errors.js +151 -0
  163. package/dist/admin/remote/entry.remote.d.ts +59 -4
  164. package/dist/admin/remote/entry.remote.js +239 -62
  165. package/dist/admin/remote/shop.remote.d.ts +37 -32
  166. package/dist/admin/remote/shop.remote.js +9 -2
  167. package/dist/admin/shared/password-generate.d.ts +6 -0
  168. package/dist/admin/shared/password-generate.js +40 -0
  169. package/dist/admin/shared/password-schema.d.ts +6 -0
  170. package/dist/admin/shared/password-schema.js +10 -3
  171. package/dist/admin/styles/admin.css +23 -6
  172. package/dist/admin/styles/tokens.md +244 -0
  173. package/dist/admin/utils/accordionActivation.d.ts +13 -0
  174. package/dist/admin/utils/accordionActivation.js +35 -0
  175. package/dist/admin/utils/entryLabel.d.ts +23 -0
  176. package/dist/admin/utils/entryLabel.js +51 -12
  177. package/dist/admin/utils/field-a11y.d.ts +29 -0
  178. package/dist/admin/utils/field-a11y.js +23 -0
  179. package/dist/admin/utils/fieldPathElement.d.ts +9 -0
  180. package/dist/admin/utils/fieldPathElement.js +18 -0
  181. package/dist/admin/utils/fileDisplay.d.ts +10 -0
  182. package/dist/admin/utils/fileDisplay.js +26 -0
  183. package/dist/admin/utils/flattenFormErrors.d.ts +19 -0
  184. package/dist/admin/utils/flattenFormErrors.js +102 -0
  185. package/dist/admin/utils/formatters.d.ts +12 -0
  186. package/dist/admin/utils/{formatDate.js → formatters.js} +23 -2
  187. package/dist/admin/utils/scrollWithin.d.ts +9 -0
  188. package/dist/admin/utils/scrollWithin.js +32 -0
  189. package/dist/admin/utils/tabActivation.d.ts +12 -0
  190. package/dist/admin/utils/tabActivation.js +24 -0
  191. package/dist/cms/runtime/schema.d.ts +1 -0
  192. package/dist/cms/runtime/schema.js +1 -0
  193. package/dist/cms/runtime/types.d.ts +80 -7
  194. package/dist/components/ui/accordion/accordion-content.svelte +17 -3
  195. package/dist/components/ui/accordion/accordion.stories.svelte +21 -1
  196. package/dist/components/ui/alert/alert.stories.svelte +14 -0
  197. package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte +45 -0
  198. package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte.d.ts +27 -0
  199. package/dist/components/ui/avatar/avatar.stories.svelte +27 -0
  200. package/dist/components/ui/badge/badge.stories.svelte +15 -0
  201. package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte +47 -0
  202. package/dist/components/ui/breadcrumb/breadcrumb.svelte +1 -1
  203. package/dist/components/ui/button/button.stories.svelte +53 -6
  204. package/dist/components/ui/button/button.svelte +39 -5
  205. package/dist/components/ui/button/button.svelte.d.ts +4 -0
  206. package/dist/components/ui/button-group/button-group.stories.svelte +44 -0
  207. package/dist/components/ui/button-group/button-group.stories.svelte.d.ts +27 -0
  208. package/dist/components/ui/calendar/calendar.stories.svelte +36 -0
  209. package/dist/components/ui/calendar/calendar.stories.svelte.d.ts +27 -0
  210. package/dist/components/ui/card/card.stories.svelte +7 -0
  211. package/dist/components/ui/carousel/carousel.stories.svelte +43 -0
  212. package/dist/components/ui/carousel/carousel.stories.svelte.d.ts +27 -0
  213. package/dist/components/ui/checkbox/checkbox.stories.svelte +67 -0
  214. package/dist/components/ui/checkbox/checkbox.stories.svelte.d.ts +27 -0
  215. package/dist/components/ui/checkbox/checkbox.svelte +3 -3
  216. package/dist/components/ui/command/command.stories.svelte +18 -0
  217. package/dist/components/ui/data-table/data-table.stories.svelte +61 -0
  218. package/dist/components/ui/data-table/data-table.stories.svelte.d.ts +18 -0
  219. package/dist/components/ui/dialog/dialog-content.svelte +5 -0
  220. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +2 -0
  221. package/dist/components/ui/dialog/dialog.stories.svelte +35 -0
  222. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte +74 -0
  223. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte.d.ts +27 -0
  224. package/dist/components/ui/field/field-context.svelte.d.ts +22 -0
  225. package/dist/components/ui/field/field-context.svelte.js +9 -0
  226. package/dist/components/ui/field/field-control.svelte +18 -0
  227. package/dist/components/ui/field/field-control.svelte.d.ts +8 -0
  228. package/dist/components/ui/field/field-description.svelte +12 -0
  229. package/dist/components/ui/field/field-error.svelte +14 -6
  230. package/dist/components/ui/field/field-label.svelte +10 -0
  231. package/dist/components/ui/field/field.stories.svelte +95 -9
  232. package/dist/components/ui/field/field.svelte +57 -0
  233. package/dist/components/ui/field/field.svelte.d.ts +2 -0
  234. package/dist/components/ui/field/index.d.ts +3 -1
  235. package/dist/components/ui/field/index.js +4 -2
  236. package/dist/components/ui/form/form-field-errors.svelte +1 -1
  237. package/dist/components/ui/form/form.stories.svelte +25 -0
  238. package/dist/components/ui/form/form.stories.svelte.d.ts +26 -0
  239. package/dist/components/ui/input/input.stories.svelte +26 -0
  240. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
  241. package/dist/components/ui/input-group/input-group.stories.svelte +43 -0
  242. package/dist/components/ui/input-group/input-group.stories.svelte.d.ts +27 -0
  243. package/dist/components/ui/item/item.stories.svelte +61 -0
  244. package/dist/components/ui/item/item.stories.svelte.d.ts +27 -0
  245. package/dist/components/ui/label/label.stories.svelte +7 -0
  246. package/dist/components/ui/live-region/index.d.ts +1 -0
  247. package/dist/components/ui/live-region/index.js +1 -0
  248. package/dist/components/ui/live-region/live-region-demo.svelte +32 -0
  249. package/dist/components/ui/live-region/live-region-demo.svelte.d.ts +7 -0
  250. package/dist/components/ui/live-region/live-region.stories.svelte +23 -0
  251. package/dist/components/ui/live-region/live-region.stories.svelte.d.ts +26 -0
  252. package/dist/components/ui/live-region/live-region.svelte +12 -0
  253. package/dist/components/ui/live-region/live-region.svelte.d.ts +8 -0
  254. package/dist/components/ui/popover/popover.stories.svelte +34 -0
  255. package/dist/components/ui/radio-group/radio-group.stories.svelte +58 -0
  256. package/dist/components/ui/radio-group/radio-group.stories.svelte.d.ts +27 -0
  257. package/dist/components/ui/resizable/resizable.stories.svelte +56 -0
  258. package/dist/components/ui/resizable/resizable.stories.svelte.d.ts +27 -0
  259. package/dist/components/ui/select/select.stories.svelte +49 -0
  260. package/dist/components/ui/separator/separator.stories.svelte +18 -0
  261. package/dist/components/ui/sheet/sheet.stories.svelte +34 -0
  262. package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
  263. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +1 -0
  264. package/dist/components/ui/sidebar/sidebar-trigger.svelte +1 -1
  265. package/dist/components/ui/sidebar/sidebar.stories.svelte +72 -0
  266. package/dist/components/ui/sidebar/sidebar.stories.svelte.d.ts +27 -0
  267. package/dist/components/ui/skeleton/skeleton.stories.svelte +39 -0
  268. package/dist/components/ui/skeleton/skeleton.stories.svelte.d.ts +27 -0
  269. package/dist/components/ui/skeleton/skeleton.svelte +6 -0
  270. package/dist/components/ui/sonner/index.d.ts +1 -1
  271. package/dist/components/ui/sonner/index.js +1 -1
  272. package/dist/components/ui/sonner/sonner.stories.svelte +7 -0
  273. package/dist/components/ui/sonner/sonner.svelte +17 -1
  274. package/dist/components/ui/sonner/sonner.svelte.d.ts +6 -0
  275. package/dist/components/ui/spinner/spinner.stories.svelte +30 -0
  276. package/dist/components/ui/spinner/spinner.stories.svelte.d.ts +27 -0
  277. package/dist/components/ui/switch/switch.stories.svelte +56 -0
  278. package/dist/components/ui/switch/switch.stories.svelte.d.ts +27 -0
  279. package/dist/components/ui/table/table-cell.svelte +1 -1
  280. package/dist/components/ui/table/table-head.svelte +1 -1
  281. package/dist/components/ui/table/table.stories.svelte +68 -0
  282. package/dist/components/ui/table/table.stories.svelte.d.ts +27 -0
  283. package/dist/components/ui/table/table.svelte +1 -1
  284. package/dist/components/ui/tabs/tabs.stories.svelte +48 -0
  285. package/dist/components/ui/tabs/tabs.stories.svelte.d.ts +27 -0
  286. package/dist/components/ui/textarea/textarea.stories.svelte +21 -0
  287. package/dist/components/ui/toggle/toggle.stories.svelte +23 -0
  288. package/dist/components/ui/toggle-group/toggle-group.stories.svelte +43 -0
  289. package/dist/components/ui/tooltip/tooltip.stories.svelte +46 -6
  290. package/dist/core/fields/fieldSchemaToTs.d.ts +7 -0
  291. package/dist/core/fields/fieldSchemaToTs.js +234 -90
  292. package/dist/core/fields/layoutUtils.d.ts +4 -1
  293. package/dist/core/fields/layoutUtils.js +41 -4
  294. package/dist/core/fields/resolveSeo.d.ts +70 -0
  295. package/dist/core/fields/resolveSeo.js +88 -0
  296. package/dist/core/fields/seoFieldDescriptor.d.ts +43 -0
  297. package/dist/core/fields/seoFieldDescriptor.js +74 -0
  298. package/dist/core/fields/slugPath.d.ts +13 -0
  299. package/dist/core/fields/slugPath.js +32 -0
  300. package/dist/core/fields/urlUtils.d.ts +8 -0
  301. package/dist/core/fields/urlUtils.js +27 -0
  302. package/dist/core/index.d.ts +1 -0
  303. package/dist/core/index.js +1 -0
  304. package/dist/core/server/entries/operations/create.js +13 -0
  305. package/dist/core/server/entries/operations/get.d.ts +7 -0
  306. package/dist/core/server/entries/operations/get.js +10 -6
  307. package/dist/core/server/entries/operations/slugUniqueness.d.ts +37 -0
  308. package/dist/core/server/entries/operations/slugUniqueness.js +116 -0
  309. package/dist/core/server/entries/operations/update.d.ts +6 -1
  310. package/dist/core/server/entries/operations/update.js +24 -1
  311. package/dist/core/server/fields/slugResolver.d.ts +3 -13
  312. package/dist/core/server/fields/slugResolver.js +8 -37
  313. package/dist/core/server/generator/fields.js +10 -17
  314. package/dist/core/server/generator/formFields.js +2 -1
  315. package/dist/core/server/generator/generator.js +4 -4
  316. package/dist/core/server/generator/utils.d.ts +1 -0
  317. package/dist/core/server/generator/utils.js +4 -0
  318. package/dist/paraglide/messages/_index.d.ts +3 -36
  319. package/dist/paraglide/messages/_index.js +3 -71
  320. package/dist/paraglide/messages/hello_world.d.ts +5 -0
  321. package/dist/paraglide/messages/hello_world.js +33 -0
  322. package/dist/paraglide/messages/login_hello.d.ts +16 -0
  323. package/dist/paraglide/messages/login_hello.js +34 -0
  324. package/dist/paraglide/messages/login_please_login.d.ts +16 -0
  325. package/dist/paraglide/messages/login_please_login.js +34 -0
  326. package/dist/shop/server/orders.d.ts +1 -0
  327. package/dist/shop/server/orders.js +14 -0
  328. package/dist/shop/server/shop-data.d.ts +2 -0
  329. package/dist/shop/server/shop-data.js +20 -5
  330. package/dist/sveltekit/server/handle.js +17 -0
  331. package/dist/types/cms.schema.js +4 -2
  332. package/dist/types/fields.d.ts +35 -0
  333. package/dist/types/index.d.ts +1 -1
  334. package/dist/types/layout.d.ts +35 -2
  335. package/dist/updates/0.26.0/index.d.ts +2 -0
  336. package/dist/updates/0.26.0/index.js +51 -0
  337. package/dist/updates/index.js +3 -1
  338. package/package.json +29 -7
  339. package/dist/admin/client/collection/empty-state.svelte +0 -28
  340. package/dist/admin/client/collection/empty-state.svelte.d.ts +0 -9
  341. package/dist/admin/client/form/submission-status-badge.svelte +0 -41
  342. package/dist/admin/client/form/submission-status-badge.svelte.d.ts +0 -7
  343. package/dist/admin/components/media/file-preview.svelte +0 -51
  344. package/dist/admin/components/media/file-preview.svelte.d.ts +0 -6
  345. package/dist/admin/utils/formatDate.d.ts +0 -5
  346. package/dist/paraglide/messages/en.d.ts +0 -5
  347. package/dist/paraglide/messages/en.js +0 -14
  348. package/dist/paraglide/messages/pl.d.ts +0 -5
  349. package/dist/paraglide/messages/pl.js +0 -14
@@ -5,29 +5,82 @@
5
5
  import { onMount } from 'svelte';
6
6
  import CirclePlus from '@tabler/icons-svelte/icons/circle-plus';
7
7
  import X from '@tabler/icons-svelte/icons/x';
8
+ import GripVertical from '@tabler/icons-svelte/icons/grip-vertical';
9
+ import ChevronUp from '@tabler/icons-svelte/icons/chevron-up';
10
+ import ChevronDown from '@tabler/icons-svelte/icons/chevron-down';
8
11
  import { getContentLanguage } from '../../state/content-language.svelte.js';
9
12
  import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
13
+ import { droppable, draggable } from '@thisux/sveltednd';
14
+ import { arrayMove } from '../../utils/arrayMove.js';
15
+ import { flip } from 'svelte/animate';
16
+ import UrlField from './url-field.svelte';
17
+ import type { UrlField as UrlFieldType } from '../../../types/fields.js';
10
18
 
11
19
  const contentLanguage = getContentLanguage();
12
20
  const interfaceLanguage = useInterfaceLanguage();
13
21
 
14
22
  import type { InterfaceLanguage } from '../../../types/languages.js';
15
- const arrayLang: Record<InterfaceLanguage, {
16
- typeAndEnter: string; add: string; typeNumber: string; addLink: string;
17
- urlPlaceholder: string; linkText: string; newTab: string;
18
- removeItem: string; removeLink: string;
19
- }> = {
20
- pl: { typeAndEnter: 'Wpisz i naciśnij Enter...', add: 'Dodaj', typeNumber: 'Wpisz liczbę...', addLink: 'Dodaj link', urlPlaceholder: 'URL...', linkText: 'Tekst linku...', newTab: 'Nowa karta', removeItem: 'Usuń element', removeLink: 'Usuń link' },
21
- en: { typeAndEnter: 'Type and press Enter...', add: 'Add', typeNumber: 'Enter a number...', addLink: 'Add link', urlPlaceholder: 'URL...', linkText: 'Link text...', newTab: 'New tab', removeItem: 'Remove item', removeLink: 'Remove link' }
23
+ const arrayLang: Record<
24
+ InterfaceLanguage,
25
+ {
26
+ typeAndEnter: string;
27
+ add: string;
28
+ typeNumber: string;
29
+ addLink: string;
30
+ urlPlaceholder: string;
31
+ linkText: string;
32
+ newTab: string;
33
+ removeItem: string;
34
+ removeLink: string;
35
+ reorder: string;
36
+ moveUp: string;
37
+ moveDown: string;
38
+ }
39
+ > = {
40
+ pl: {
41
+ typeAndEnter: 'Wpisz i naciśnij Enter...',
42
+ add: 'Dodaj',
43
+ typeNumber: 'Wpisz liczbę...',
44
+ addLink: 'Dodaj link',
45
+ urlPlaceholder: 'URL...',
46
+ linkText: 'Tekst linku...',
47
+ newTab: 'Nowa karta',
48
+ removeItem: 'Usuń element',
49
+ removeLink: 'Usuń link',
50
+ reorder: 'Zmień kolejność',
51
+ moveUp: 'Przenieś wyżej',
52
+ moveDown: 'Przenieś niżej'
53
+ },
54
+ en: {
55
+ typeAndEnter: 'Type and press Enter...',
56
+ add: 'Add',
57
+ typeNumber: 'Enter a number...',
58
+ addLink: 'Add link',
59
+ urlPlaceholder: 'URL...',
60
+ linkText: 'Link text...',
61
+ newTab: 'New tab',
62
+ removeItem: 'Remove item',
63
+ removeLink: 'Remove link',
64
+ reorder: 'Reorder',
65
+ moveUp: 'Move up',
66
+ moveDown: 'Move down'
67
+ }
22
68
  };
23
69
  const at = $derived(arrayLang[interfaceLanguage.current]);
24
70
 
71
+ import * as Form from '../../../components/ui/form/index.js';
72
+ import type { FormPathLeaves, SuperForm } from 'sveltekit-superforms';
73
+
25
74
  type Props = {
26
75
  field: ArrayField;
27
76
  value: unknown[] | undefined;
77
+ // Optional — passed by field-renderer when present, lets array items
78
+ // render their own Form.FieldErrors at the right nested path.
79
+ form?: SuperForm<Record<string, unknown>>;
80
+ path?: string;
28
81
  };
29
82
 
30
- let { field, value = $bindable(), ...props }: Props = $props();
83
+ let { field, value = $bindable(), form, path, ...props }: Props = $props();
31
84
 
32
85
  onMount(() => {
33
86
  if (!value || !Array.isArray(value)) {
@@ -35,8 +88,38 @@
35
88
  }
36
89
  });
37
90
 
91
+ // Stable per-item keys for the {#each} blocks. Kept in lockstep with `value`
92
+ // by the mutation handlers below so animate:flip can track items through
93
+ // reorder (index/object-ref keying was unreliable through the form proxy).
94
+ let itemKeys = $state<string[]>([]);
95
+
96
+ // Safety net: only fires when an external `value` change (mount, version or
97
+ // language switch) desyncs the lengths — no flip is expected there anyway.
98
+ $effect.pre(() => {
99
+ const len = value?.length ?? 0;
100
+ if (itemKeys.length !== len) {
101
+ itemKeys = Array.from({ length: len }, () => crypto.randomUUID());
102
+ }
103
+ });
104
+
38
105
  const atMax = $derived(field.maxItems !== undefined && (value?.length ?? 0) >= field.maxItems);
39
106
 
107
+ // --- Reorder (shared across text/number/url) ---
108
+ function moveItem(fromIndex: number, toIndex: number) {
109
+ const arr = value ?? [];
110
+ if (toIndex < 0 || toIndex >= arr.length) return;
111
+ value = [...arrayMove(arr, fromIndex, toIndex)];
112
+ itemKeys = arrayMove(itemKeys, fromIndex, toIndex);
113
+ }
114
+
115
+ function onDropAt(targetIndex: number, sourceIndexStr: string | undefined) {
116
+ const fromIndex = parseInt(sourceIndexStr ?? '');
117
+ if (!isNaN(fromIndex) && fromIndex !== targetIndex) {
118
+ value = [...arrayMove(value ?? [], fromIndex, targetIndex)];
119
+ itemKeys = arrayMove(itemKeys, fromIndex, targetIndex);
120
+ }
121
+ }
122
+
40
123
  // --- Text ---
41
124
  let textInput = $state('');
42
125
 
@@ -49,6 +132,7 @@
49
132
  } else {
50
133
  value = [...(value ?? []), textInput.trim()];
51
134
  }
135
+ itemKeys = [...itemKeys, crypto.randomUUID()];
52
136
  textInput = '';
53
137
  }
54
138
 
@@ -66,6 +150,7 @@
66
150
  const num = Number(numberInput);
67
151
  if (numberInput === '' || isNaN(num) || atMax) return;
68
152
  value = [...(value ?? []), num];
153
+ itemKeys = [...itemKeys, crypto.randomUUID()];
69
154
  numberInput = '';
70
155
  }
71
156
 
@@ -81,12 +166,14 @@
81
166
  if (atMax) return;
82
167
  const item: UrlFieldData = { url: '', text: '', newTab: false };
83
168
  value = [...(value ?? []), item];
169
+ itemKeys = [...itemKeys, crypto.randomUUID()];
84
170
  }
85
171
 
86
172
  // --- Common ---
87
173
  function removeItem(index: number) {
88
174
  if (!value) return;
89
175
  value = value.filter((_, i) => i !== index);
176
+ itemKeys = itemKeys.filter((_, i) => i !== index);
90
177
  }
91
178
 
92
179
  function getTextDisplay(item: unknown): string {
@@ -97,109 +184,152 @@
97
184
  }
98
185
  return String(item);
99
186
  }
100
- </script>
101
187
 
102
- {#if field.of === 'text'}
103
- <!-- Tag chips for text items -->
104
- <div class="space-y-3">
105
- {#if value && value.length > 0}
106
- <div class="flex flex-wrap gap-2">
107
- {#each value as item, index}
108
- <span
109
- class="bg-[#EEEAF8] text-[#1A1A2E] inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-medium"
110
- >
111
- {#if field.localized}
112
- <!-- Localized: show editable input per current lang -->
113
- <input
114
- type="text"
115
- class="bg-transparent border-none outline-none w-auto min-w-[4ch] text-sm"
116
- style="width: {getTextDisplay(item).length + 1}ch"
117
- value={getTextDisplay(item)}
118
- oninput={(e) => {
119
- const val = e.currentTarget.value;
120
- if (typeof item === 'object' && item !== null) {
121
- const rec = { ...(item as Record<string, string>) };
122
- rec[contentLanguage.current] = val;
123
- const arr = [...(value ?? [])];
124
- arr[index] = rec;
125
- value = arr;
126
- }
127
- }}
128
- />
129
- {:else}
130
- {item}
131
- {/if}
132
- <button
133
- type="button"
134
- class="text-[#555566] hover:text-[#C44B4B] transition-colors"
135
- onclick={() => removeItem(index)}
136
- aria-label={at.removeItem}
137
- >
138
- <X class="h-3.5 w-3.5" />
139
- </button>
140
- </span>
141
- {/each}
142
- </div>
143
- {/if}
144
-
145
- <div class="flex items-center gap-2">
146
- <Input
147
- type="text"
148
- placeholder={at.typeAndEnter}
149
- bind:value={textInput}
150
- onkeydown={handleTextKeydown}
151
- disabled={atMax}
152
- class="max-w-xs"
153
- />
154
- <Button size="sm" type="button" variant="outline" disabled={atMax || !textInput.trim()} onclick={addTextItem}>
155
- <CirclePlus class="h-4 w-4" />
156
- {at.add}
157
- </Button>
158
- </div>
188
+ const itemLabel = $derived(field.of === 'url' ? at.removeLink : at.removeItem);
159
189
 
160
- {#if field.maxItems !== undefined}
161
- <p class="text-xs {atMax ? 'text-destructive' : 'text-muted-foreground'}">
162
- {value?.length ?? 0} / {field.maxItems}
163
- </p>
164
- {/if}
165
- </div>
190
+ // Synthetic UrlField config for items inside array.of=url. Match what a
191
+ // standalone url field exposes by default — text + newTab. Don't force
192
+ // `rel: true`: a standalone url only shows the Indexing panel when the
193
+ // collection author opts in, so array items mirror that behaviour for
194
+ // visual parity.
195
+ const urlItemField: UrlFieldType = $derived({
196
+ type: 'url',
197
+ slug: `${field.slug}_item`,
198
+ text: true,
199
+ newTab: true
200
+ });
201
+ </script>
166
202
 
167
- {:else if field.of === 'number'}
168
- <!-- Tag chips for number items -->
203
+ {#if field.of === 'text' || field.of === 'number'}
204
+ <!--
205
+ Chip layout: keeps text/number compact. Each chip carries the same
206
+ reorder affordances as url/relation (grip-drag + arrow buttons + remove)
207
+ so the editor's mental model is consistent across array kinds.
208
+ -->
169
209
  <div class="space-y-3">
170
210
  {#if value && value.length > 0}
171
211
  <div class="flex flex-wrap gap-2">
172
- {#each value as item, index}
173
- <span
174
- class="bg-[#EEEAF8] text-[#1A1A2E] inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-medium tabular-nums"
212
+ {#each value as item, index (itemKeys[index])}
213
+ <div
214
+ use:droppable={{
215
+ container: index.toString(),
216
+ callbacks: {
217
+ onDrop: (state) => {
218
+ const dropIndex = parseInt(state.targetContainer ?? '');
219
+ if (!isNaN(dropIndex)) onDropAt(dropIndex, state.sourceContainer);
220
+ }
221
+ }
222
+ }}
223
+ animate:flip={{ duration: 200 }}
175
224
  >
176
- {item}
177
- <button
178
- type="button"
179
- class="text-[#555566] hover:text-[#C44B4B] transition-colors"
180
- onclick={() => removeItem(index)}
181
- aria-label={at.removeItem}
225
+ <span
226
+ class="inline-flex items-center gap-1.5 rounded-lg bg-[#EEEAF8] px-2.5 py-1.5 text-sm font-medium text-[#1A1A2E]"
182
227
  >
183
- <X class="h-3.5 w-3.5" />
184
- </button>
185
- </span>
228
+ <button
229
+ type="button"
230
+ use:draggable={{ container: index.toString(), dragData: { index } }}
231
+ class="cursor-grab text-[#8888A0] hover:text-[#555566]"
232
+ aria-label="{at.reorder} {getTextDisplay(item) || index + 1}"
233
+ onpointerdown={(e) => e.stopPropagation()}
234
+ ondragstart={(e) => e.stopPropagation()}
235
+ tabindex="-1"
236
+ >
237
+ <GripVertical class="h-3 w-3" />
238
+ </button>
239
+ {#if field.of === 'text' && field.localized}
240
+ <input
241
+ type="text"
242
+ class="min-w-[4ch] border-none bg-transparent text-sm outline-none"
243
+ style="width: {getTextDisplay(item).length + 1}ch"
244
+ value={getTextDisplay(item)}
245
+ oninput={(e) => {
246
+ const val = e.currentTarget.value;
247
+ if (typeof item === 'object' && item !== null) {
248
+ const rec = { ...(item as Record<string, string>) };
249
+ rec[contentLanguage.current] = val;
250
+ const arr = [...(value ?? [])];
251
+ arr[index] = rec;
252
+ value = arr;
253
+ }
254
+ }}
255
+ />
256
+ {:else}
257
+ <span class={field.of === 'number' ? 'tabular-nums' : ''}>{item}</span>
258
+ {/if}
259
+ {#if index > 0}
260
+ <button
261
+ type="button"
262
+ class="text-[#8888A0] transition-colors hover:text-[#555566]"
263
+ onclick={() => moveItem(index, index - 1)}
264
+ aria-label="{at.moveUp} {index + 1}"
265
+ >
266
+ <ChevronUp class="h-3 w-3" />
267
+ </button>
268
+ {/if}
269
+ {#if index < value.length - 1}
270
+ <button
271
+ type="button"
272
+ class="text-[#8888A0] transition-colors hover:text-[#555566]"
273
+ onclick={() => moveItem(index, index + 1)}
274
+ aria-label="{at.moveDown} {index + 1}"
275
+ >
276
+ <ChevronDown class="h-3 w-3" />
277
+ </button>
278
+ {/if}
279
+ <button
280
+ type="button"
281
+ class="text-[#555566] transition-colors hover:text-[#C44B4B]"
282
+ onclick={() => removeItem(index)}
283
+ aria-label="{itemLabel} {index + 1}"
284
+ >
285
+ <X class="h-3.5 w-3.5" />
286
+ </button>
287
+ </span>
288
+ </div>
186
289
  {/each}
187
290
  </div>
188
291
  {/if}
189
292
 
190
293
  <div class="flex items-center gap-2">
191
- <Input
192
- type="number"
193
- placeholder={at.typeNumber}
194
- bind:value={numberInput}
195
- onkeydown={handleNumberKeydown}
196
- disabled={atMax}
197
- class="max-w-[160px]"
198
- />
199
- <Button size="sm" type="button" variant="outline" disabled={atMax || numberInput === ''} onclick={addNumberItem}>
200
- <CirclePlus class="h-4 w-4" />
201
- {at.add}
202
- </Button>
294
+ {#if field.of === 'text'}
295
+ <Input
296
+ type="text"
297
+ placeholder={at.typeAndEnter}
298
+ bind:value={textInput}
299
+ onkeydown={handleTextKeydown}
300
+ disabled={atMax}
301
+ class="max-w-xs"
302
+ />
303
+ <Button
304
+ size="sm"
305
+ type="button"
306
+ variant="outline"
307
+ disabled={atMax || !textInput.trim()}
308
+ onclick={addTextItem}
309
+ >
310
+ <CirclePlus class="h-4 w-4" />
311
+ {at.add}
312
+ </Button>
313
+ {:else}
314
+ <Input
315
+ type="number"
316
+ placeholder={at.typeNumber}
317
+ bind:value={numberInput}
318
+ onkeydown={handleNumberKeydown}
319
+ disabled={atMax}
320
+ class="max-w-[160px]"
321
+ />
322
+ <Button
323
+ size="sm"
324
+ type="button"
325
+ variant="outline"
326
+ disabled={atMax || numberInput === ''}
327
+ onclick={addNumberItem}
328
+ >
329
+ <CirclePlus class="h-4 w-4" />
330
+ {at.add}
331
+ </Button>
332
+ {/if}
203
333
  </div>
204
334
 
205
335
  {#if field.maxItems !== undefined}
@@ -208,66 +338,106 @@
208
338
  </p>
209
339
  {/if}
210
340
  </div>
211
-
212
341
  {:else if field.of === 'url'}
213
- <!-- Compact list for URL items -->
342
+ <!--
343
+ URL items keep the card layout because each item carries three values
344
+ (url + text + newTab) — there is no compact chip form that doesn't
345
+ hide editable data. Reorder affordances (grip + up/down) match the
346
+ chip variant for consistent behaviour across kinds.
347
+ -->
214
348
  <div class="space-y-3">
215
349
  {#if value && value.length > 0}
216
350
  <div class="space-y-2">
217
- {#each value as item, index}
351
+ <!--
352
+ Keys come from the parallel `itemKeys` array kept in lockstep
353
+ with `value` by the mutation handlers, so animate:flip can
354
+ track items reliably through reorder.
355
+ -->
356
+ {#each value as item, index (itemKeys[index])}
218
357
  {@const urlItem = item as UrlFieldData}
219
- <div class="flex items-start gap-2 rounded-xl border border-[#E2DFF0] bg-[#F4F2FA] p-3">
220
- <div class="flex-1 space-y-2">
221
- <Input
222
- type="url"
223
- placeholder={at.urlPlaceholder}
224
- value={typeof urlItem.url === 'string' ? urlItem.url : ''}
225
- oninput={(e) => {
226
- const val = e.currentTarget.value;
227
- const updated = { ...urlItem, url: val };
228
- const arr = [...(value ?? [])];
229
- arr[index] = updated;
230
- value = arr;
231
- }}
232
- />
233
- <div class="flex items-center gap-2">
234
- <Input
235
- type="text"
236
- placeholder={at.linkText}
237
- class="flex-1"
238
- value={typeof urlItem.text === 'string' ? urlItem.text : ''}
239
- oninput={(e) => {
240
- const val = e.currentTarget.value;
241
- const updated = { ...urlItem, text: val };
242
- const arr = [...(value ?? [])];
243
- arr[index] = updated;
244
- value = arr;
245
- }}
246
- />
247
- <label class="flex items-center gap-1.5 text-xs text-[#555566] whitespace-nowrap">
248
- <input
249
- type="checkbox"
250
- checked={urlItem.newTab ?? false}
251
- onchange={(e) => {
252
- const updated = { ...urlItem, newTab: e.currentTarget.checked };
253
- const arr = [...(value ?? [])];
254
- arr[index] = updated;
255
- value = arr;
256
- }}
257
- class="accent-[#5B4A9E]"
258
- />
259
- {at.newTab}
260
- </label>
358
+ <div
359
+ use:droppable={{
360
+ container: index.toString(),
361
+ callbacks: {
362
+ onDrop: (state) => {
363
+ const dropIndex = parseInt(state.targetContainer ?? '');
364
+ if (!isNaN(dropIndex)) onDropAt(dropIndex, state.sourceContainer);
365
+ }
366
+ }
367
+ }}
368
+ animate:flip={{ duration: 200 }}
369
+ >
370
+ <div
371
+ class="flex items-start gap-2 rounded-xl border border-[#E2DFF0] bg-[#F4F2FA] p-3"
372
+ >
373
+ <div
374
+ class="mt-2 flex flex-col items-center gap-0.5 text-[#8888A0]"
375
+ >
376
+ <button
377
+ type="button"
378
+ use:draggable={{ container: index.toString(), dragData: { index } }}
379
+ class="cursor-grab hover:text-[#555566]"
380
+ aria-label="{at.reorder} {index + 1}"
381
+ onpointerdown={(e) => e.stopPropagation()}
382
+ ondragstart={(e) => e.stopPropagation()}
383
+ tabindex="-1"
384
+ >
385
+ <GripVertical class="h-3.5 w-3.5" />
386
+ </button>
387
+ {#if index > 0}
388
+ <button
389
+ type="button"
390
+ class="hover:text-[#555566]"
391
+ onclick={() => moveItem(index, index - 1)}
392
+ aria-label="{at.moveUp} {index + 1}"
393
+ >
394
+ <ChevronUp class="h-3.5 w-3.5" />
395
+ </button>
396
+ {/if}
397
+ {#if index < value.length - 1}
398
+ <button
399
+ type="button"
400
+ class="hover:text-[#555566]"
401
+ onclick={() => moveItem(index, index + 1)}
402
+ aria-label="{at.moveDown} {index + 1}"
403
+ >
404
+ <ChevronDown class="h-3.5 w-3.5" />
405
+ </button>
406
+ {/if}
407
+ </div>
408
+ <!--
409
+ Render the SAME UrlField component used for a standalone
410
+ url field (badge external/internal, autocomplete picker,
411
+ rel collapsible, schema validation) instead of a parallel
412
+ mini-implementation. Two-way binding via bind:value on the
413
+ array index — array proxy reactivity propagates writes.
414
+ -->
415
+ <div class="flex-1">
416
+ <UrlField field={urlItemField} bind:value={(value as UrlFieldData[])[index]} />
417
+ <!--
418
+ Schema flags the bad URL at `<arrayPath>.<index>.url`.
419
+ Render FieldErrors at exactly that path so the message
420
+ appears inline under the item instead of only in the
421
+ banner. Requires `form` + `path` from field-renderer.
422
+ -->
423
+ {#if form && path}
424
+ <Form.Field
425
+ {form}
426
+ name={`${path}.${index}.url` as FormPathLeaves<Record<string, unknown>>}
427
+ >
428
+ <Form.FieldErrors />
429
+ </Form.Field>
430
+ {/if}
261
431
  </div>
432
+ <button
433
+ type="button"
434
+ class="mt-1.5 text-[#555566] transition-colors hover:text-[#C44B4B]"
435
+ onclick={() => removeItem(index)}
436
+ aria-label="{at.removeLink} {index + 1}"
437
+ >
438
+ <X class="h-4 w-4" />
439
+ </button>
262
440
  </div>
263
- <button
264
- type="button"
265
- class="mt-1.5 text-[#555566] hover:text-[#C44B4B] transition-colors"
266
- onclick={() => removeItem(index)}
267
- aria-label={at.removeLink}
268
- >
269
- <X class="h-4 w-4" />
270
- </button>
271
441
  </div>
272
442
  {/each}
273
443
  </div>
@@ -1,7 +1,10 @@
1
1
  import type { ArrayField } from '../../../types/fields.js';
2
+ import type { SuperForm } from 'sveltekit-superforms';
2
3
  type Props = {
3
4
  field: ArrayField;
4
5
  value: unknown[] | undefined;
6
+ form?: SuperForm<Record<string, unknown>>;
7
+ path?: string;
5
8
  };
6
9
  declare const SimpleArrayField: import("svelte").Component<Props, {}, "value">;
7
10
  type SimpleArrayField = ReturnType<typeof SimpleArrayField>;