includio-cms 0.25.0 → 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
@@ -9,6 +9,7 @@
9
9
  import { loginLang } from './lang.js';
10
10
  import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
11
11
  import { authClient } from '../../auth-client.js';
12
+ import { generatePassword } from '../../shared/password-generate.js';
12
13
 
13
14
  const interfaceLanguage = useInterfaceLanguage();
14
15
  const lang = $derived(loginLang[interfaceLanguage.current]);
@@ -61,6 +62,15 @@
61
62
  return null;
62
63
  }
63
64
 
65
+ function handleGeneratePassword() {
66
+ const pw = generatePassword();
67
+ password = pw;
68
+ confirmPassword = pw;
69
+ showPassword = true;
70
+ showConfirm = true;
71
+ error = '';
72
+ }
73
+
64
74
  async function handleSubmit(e: Event) {
65
75
  e.preventDefault();
66
76
  const validationError = validate();
@@ -186,9 +196,20 @@
186
196
  {strengthLabelText}: {strengthLabels[strength.level]}
187
197
  </p>
188
198
  {/if}
189
- <p id="reset-pw-hint" class="text-text-light mt-1 text-xs">
190
- {lang.reset.passwordHint}
191
- </p>
199
+ <div class="mt-1 flex items-center justify-between gap-2">
200
+ <p id="reset-pw-hint" class="text-text-light text-xs">
201
+ {lang.reset.passwordHint}
202
+ </p>
203
+ <Button
204
+ variant="link"
205
+ size="sm"
206
+ type="button"
207
+ class="h-auto shrink-0 p-0 text-xs"
208
+ onclick={handleGeneratePassword}
209
+ >
210
+ {lang.reset.generatePassword}
211
+ </Button>
212
+ </div>
192
213
  </div>
193
214
  <div class="space-y-2">
194
215
  <Label for="reset-confirm">{lang.reset.confirm_password}</Label>
@@ -1,9 +1,14 @@
1
1
  import { z } from 'zod';
2
- export declare const loginSchema: z.ZodObject<{
2
+ export declare function createLoginSchema(errors: {
3
+ emailInvalid: string;
4
+ passwordTooShort: string;
5
+ }): z.ZodObject<{
3
6
  email: z.ZodString;
4
7
  password: z.ZodString;
5
8
  }, z.core.$strip>;
6
- export declare const forgotPasswordSchema: z.ZodObject<{
9
+ export declare function createForgotPasswordSchema(errors: {
10
+ emailInvalid: string;
11
+ }): z.ZodObject<{
7
12
  email: z.ZodString;
8
13
  }, z.core.$strip>;
9
14
  export declare function createResetPasswordSchema(errors: {
@@ -14,6 +19,13 @@ export declare function createResetPasswordSchema(errors: {
14
19
  password: z.ZodString;
15
20
  confirmPassword: z.ZodString;
16
21
  }, z.core.$strip>;
22
+ export declare const loginSchema: z.ZodObject<{
23
+ email: z.ZodString;
24
+ password: z.ZodString;
25
+ }, z.core.$strip>;
26
+ export declare const forgotPasswordSchema: z.ZodObject<{
27
+ email: z.ZodString;
28
+ }, z.core.$strip>;
17
29
  export declare const resetPasswordSchema: z.ZodObject<{
18
30
  password: z.ZodString;
19
31
  confirmPassword: z.ZodString;
@@ -1,12 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import { passwordField } from '../../shared/password-schema.js';
3
- export const loginSchema = z.object({
4
- email: z.string().email(),
5
- password: z.string().min(6).max(255, 'Invalid password (min 6, max 255 characters)')
6
- });
7
- export const forgotPasswordSchema = z.object({
8
- email: z.string().email()
9
- });
3
+ export function createLoginSchema(errors) {
4
+ return z.object({
5
+ email: z.string().email(errors.emailInvalid),
6
+ password: z.string().min(6, errors.passwordTooShort).max(255, errors.passwordTooShort)
7
+ });
8
+ }
9
+ export function createForgotPasswordSchema(errors) {
10
+ return z.object({
11
+ email: z.string().email(errors.emailInvalid)
12
+ });
13
+ }
10
14
  export function createResetPasswordSchema(errors) {
11
15
  return z
12
16
  .object({
@@ -18,7 +22,14 @@ export function createResetPasswordSchema(errors) {
18
22
  path: ['confirmPassword']
19
23
  });
20
24
  }
21
- // Static schema for backward compat (English defaults)
25
+ // Static schemas for backward compat (English defaults)
26
+ export const loginSchema = createLoginSchema({
27
+ emailInvalid: 'Enter a valid email address',
28
+ passwordTooShort: 'Password is too short'
29
+ });
30
+ export const forgotPasswordSchema = createForgotPasswordSchema({
31
+ emailInvalid: 'Enter a valid email address'
32
+ });
22
33
  export const resetPasswordSchema = createResetPasswordSchema({
23
34
  minLength: 'Password must be at least 8 characters',
24
35
  requirements: 'Password must contain an uppercase letter, a number and a special character',
@@ -20,6 +20,7 @@
20
20
  import { getBreadcrumbs } from '../../state/breadcrumbs.svelte.js';
21
21
  import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
22
22
  import { sidebarLang } from '../../components/layout/lang.js';
23
+ import PageHeader from '../../components/layout/page-header.svelte';
23
24
 
24
25
  const breadcrumbs = getBreadcrumbs();
25
26
  const interfaceLanguage = useInterfaceLanguage();
@@ -368,23 +369,21 @@
368
369
  </script>
369
370
 
370
371
  <div class="p-5 pb-24 md:p-7">
371
- <!-- Header -->
372
- <div class="mb-6 flex items-start justify-between">
373
- <div>
374
- <h1 class="mb-1 text-2xl font-bold">Konserwacja</h1>
375
- <p class="text-sm" style="color: var(--muted-foreground);">
376
- Zarządzanie mediami, optymalizacja i automatyczna konserwacja
377
- </p>
378
- </div>
379
- <Button variant="outline" size="sm" onclick={loadReport} disabled={loading}>
380
- {#if loading}
381
- <Loader2 class="size-4 animate-spin" />
382
- {:else}
383
- <Refresh class="size-4" />
384
- {/if}
385
- Odśwież
386
- </Button>
387
- </div>
372
+ <PageHeader
373
+ title="Konserwacja"
374
+ description="Zarządzanie mediami, optymalizacja i automatyczna konserwacja"
375
+ >
376
+ {#snippet secondaryActions()}
377
+ <Button variant="outline" size="sm" onclick={loadReport} disabled={loading}>
378
+ {#if loading}
379
+ <Loader2 class="size-4 animate-spin" />
380
+ {:else}
381
+ <Refresh class="size-4" />
382
+ {/if}
383
+ Odśwież
384
+ </Button>
385
+ {/snippet}
386
+ </PageHeader>
388
387
 
389
388
  <!-- Auto-maintenance status -->
390
389
  {#if maintenanceStatus}
@@ -16,4 +16,4 @@
16
16
  });
17
17
  </script>
18
18
 
19
- <MediaLibrary />
19
+ <MediaLibrary showHeader />
@@ -2,25 +2,112 @@
2
2
  import { goto } from '$app/navigation';
3
3
  import { page } from '$app/state';
4
4
  import { getRemotes } from '../../../sveltekit/index.js';
5
+ import { toast } from 'svelte-sonner';
6
+ import TrashIcon from '@tabler/icons-svelte/icons/trash';
5
7
  import CouponForm from './coupon-form.svelte';
8
+ import DetailPageShell from '../../components/layout/detail-page-shell.svelte';
9
+ import StateDisplay from '../collection/state-display.svelte';
10
+ import ConfirmationDialog from '../../components/dialogs/confirmation-dialog.svelte';
11
+ import SaveIndicator from '../entry/header/save-indicator.svelte';
12
+ import { Button } from '../../../components/ui/button/index.js';
13
+ import { useInterfaceLanguage } from '../../state/interface-language.svelte.js';
14
+ import type { InterfaceLanguage } from '../../../types/languages.js';
6
15
 
7
16
  const remotes = getRemotes();
17
+ const interfaceLanguage = useInterfaceLanguage();
8
18
  const id = $derived(page.params.id ?? '');
9
19
  const query = $derived(remotes.getCouponAdmin(id));
20
+
21
+ type SaveStatus = 'idle' | 'saving' | 'saved' | 'unsaved' | 'error';
22
+ let saveStatus = $state<SaveStatus>('idle');
23
+ let lastSavedAt = $state<Date | null>(null);
24
+ let confirmDeleteOpen = $state(false);
25
+ let deleting = $state(false);
26
+
27
+ const lang: Record<
28
+ InterfaceLanguage,
29
+ {
30
+ title: string;
31
+ description: string;
32
+ submitLabel: string;
33
+ savedToast: string;
34
+ deleteLabel: string;
35
+ confirmDeleteTitle: (code: string) => string;
36
+ confirmDeleteDescription: string;
37
+ deleteError: string;
38
+ notFoundTitle: string;
39
+ notFoundDescription: string;
40
+ backToList: string;
41
+ }
42
+ > = {
43
+ pl: {
44
+ title: 'Edytuj kod rabatowy',
45
+ description: 'Zmień warunki kodu lub wstrzymaj go bez usuwania.',
46
+ submitLabel: 'Zapisz zmiany',
47
+ savedToast: 'Kod zaktualizowany.',
48
+ deleteLabel: 'Usuń kod',
49
+ confirmDeleteTitle: (code) => `Usunąć kod „${code}”?`,
50
+ confirmDeleteDescription:
51
+ 'Klienci nie będą mogli go użyć. Aktywne rezerwacje pozostaną nienaruszone. Tej akcji nie cofniesz.',
52
+ deleteError: 'Nie udało się usunąć kodu.',
53
+ notFoundTitle: 'Nie znaleziono kodu',
54
+ notFoundDescription: 'Kod mógł zostać usunięty lub link jest nieaktualny.',
55
+ backToList: 'Wróć do listy'
56
+ },
57
+ en: {
58
+ title: 'Edit coupon',
59
+ description: 'Update conditions or pause the code without deleting it.',
60
+ submitLabel: 'Save changes',
61
+ savedToast: 'Coupon updated.',
62
+ deleteLabel: 'Delete coupon',
63
+ confirmDeleteTitle: (code) => `Delete coupon "${code}"?`,
64
+ confirmDeleteDescription:
65
+ "Customers won't be able to use it anymore. Active reservations stay valid. This cannot be undone.",
66
+ deleteError: 'Failed to delete coupon.',
67
+ notFoundTitle: 'Coupon not found',
68
+ notFoundDescription: 'It may have been deleted or the link is outdated.',
69
+ backToList: 'Back to list'
70
+ }
71
+ };
72
+
73
+ const t = $derived(lang[interfaceLanguage.current]);
74
+
75
+ function handleDelete() {
76
+ confirmDeleteOpen = true;
77
+ }
78
+
79
+ async function performDelete() {
80
+ deleting = true;
81
+ try {
82
+ await remotes.deleteCouponCmd(id);
83
+ await goto('/admin/shop/coupons');
84
+ } catch (err) {
85
+ toast.error(err instanceof Error ? err.message : t.deleteError);
86
+ deleting = false;
87
+ }
88
+ }
10
89
  </script>
11
90
 
12
- <div class="mx-auto max-w-2xl space-y-6 p-6">
13
- <header>
14
- <h1 class="text-2xl font-extrabold tracking-tight">Edytuj kod rabatowy</h1>
15
- <p class="text-muted-foreground text-sm">
16
- <a href="/admin/shop/coupons" class="hover:underline">← Wróć do listy</a>
17
- </p>
18
- </header>
91
+ <DetailPageShell title={t.title} description={t.description}>
92
+ {#snippet secondaryActions()}
93
+ <SaveIndicator status={saveStatus} {lastSavedAt} />
94
+ {/snippet}
95
+ {#snippet primaryActions()}
96
+ <Button type="button" variant="outline" size="sm" onclick={handleDelete}>
97
+ <TrashIcon class="mr-1 size-4" /> {t.deleteLabel}
98
+ </Button>
99
+ {/snippet}
19
100
 
20
101
  {#if !query.ready}
21
- <p class="text-muted-foreground">Ładowanie…</p>
102
+ <StateDisplay kind="loading" />
22
103
  {:else if !query.current}
23
- <p>Kod nie został znaleziony.</p>
104
+ <StateDisplay
105
+ kind="error"
106
+ title={t.notFoundTitle}
107
+ description={t.notFoundDescription}
108
+ ctaLabel={t.backToList}
109
+ onCta={() => goto('/admin/shop/coupons')}
110
+ />
24
111
  {:else}
25
112
  {@const c = query.current}
26
113
  <CouponForm
@@ -33,12 +120,29 @@
33
120
  expiresAt: c.expiresAt instanceof Date ? c.expiresAt.toISOString() : c.expiresAt,
34
121
  isActive: c.isActive
35
122
  }}
36
- submitLabel="Zapisz zmiany"
123
+ submitLabel={t.submitLabel}
37
124
  onSubmit={async (input) => {
38
- await remotes.updateCouponCmd({ id, input });
39
- await goto('/admin/shop/coupons');
125
+ saveStatus = 'saving';
126
+ try {
127
+ await remotes.updateCouponCmd({ id, input });
128
+ await query.refresh();
129
+ saveStatus = 'saved';
130
+ lastSavedAt = new Date();
131
+ toast.success(t.savedToast);
132
+ } catch (err) {
133
+ saveStatus = 'error';
134
+ throw err;
135
+ }
40
136
  }}
41
137
  onCancel={() => goto('/admin/shop/coupons')}
42
138
  />
43
139
  {/if}
44
- </div>
140
+ </DetailPageShell>
141
+
142
+ <ConfirmationDialog
143
+ bind:open={confirmDeleteOpen}
144
+ title={query.current ? t.confirmDeleteTitle(query.current.code) : ''}
145
+ description={t.confirmDeleteDescription}
146
+ loading={deleting}
147
+ onConfirm={performDelete}
148
+ />