includio-cms 0.25.0 → 0.27.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 (411) hide show
  1. package/API.md +97 -4
  2. package/CHANGELOG.md +118 -0
  3. package/DOCS.md +1 -1
  4. package/README.md +2 -0
  5. package/ROADMAP.md +14 -0
  6. package/dist/admin/auth-client.d.ts +42 -42
  7. package/dist/admin/client/account/lang.d.ts +1 -0
  8. package/dist/admin/client/account/lang.js +4 -2
  9. package/dist/admin/client/account/profile-section.svelte +2 -2
  10. package/dist/admin/client/account/security-section.svelte +27 -4
  11. package/dist/admin/client/account/sessions-section.svelte +1 -1
  12. package/dist/admin/client/admin/admin-after-login-layout-content.svelte +1 -1
  13. package/dist/admin/client/admin/admin-layout.svelte +12 -2
  14. package/dist/admin/client/admin/admin-layout.svelte.d.ts +2 -1
  15. package/dist/admin/client/admin/dashboard-page.svelte +34 -10
  16. package/dist/admin/client/collection/bulk-actions-bar.svelte +86 -44
  17. package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +3 -1
  18. package/dist/admin/client/collection/collection-entries.svelte +52 -36
  19. package/dist/admin/client/collection/collection-entries.svelte.d.ts +3 -0
  20. package/dist/admin/client/collection/collection.svelte +28 -14
  21. package/dist/admin/client/collection/collection.svelte.d.ts +3 -0
  22. package/dist/admin/client/collection/data-table.svelte +240 -130
  23. package/dist/admin/client/collection/data-table.svelte.d.ts +9 -0
  24. package/dist/admin/client/collection/date-cell.svelte +4 -4
  25. package/dist/admin/client/collection/row-actions.svelte +2 -1
  26. package/dist/admin/client/collection/sortable-header.svelte +33 -9
  27. package/dist/admin/client/collection/state-display.svelte +102 -0
  28. package/dist/admin/client/collection/state-display.svelte.d.ts +12 -0
  29. package/dist/admin/client/collection/status-badge.svelte +99 -11
  30. package/dist/admin/client/collection/status-badge.svelte.d.ts +15 -1
  31. package/dist/admin/client/collection/table-pagination.svelte +21 -6
  32. package/dist/admin/client/collection/table-toolbar.svelte +105 -80
  33. package/dist/admin/client/collection/table-toolbar.svelte.d.ts +11 -8
  34. package/dist/admin/client/entry/entry-form.svelte +36 -11
  35. package/dist/admin/client/entry/entry-form.svelte.d.ts +1 -0
  36. package/dist/admin/client/entry/entry-header.svelte +22 -15
  37. package/dist/admin/client/entry/entry-header.svelte.d.ts +1 -0
  38. package/dist/admin/client/entry/entry.svelte +269 -165
  39. package/dist/admin/client/entry/header/a11y-header-badge.svelte +47 -0
  40. package/dist/admin/client/entry/header/a11y-header-badge.svelte.d.ts +8 -0
  41. package/dist/admin/client/entry/header/publish-panel.svelte +69 -13
  42. package/dist/admin/client/entry/header/save-indicator.svelte +57 -28
  43. package/dist/admin/client/entry/header/save-indicator.svelte.d.ts +1 -0
  44. package/dist/admin/client/entry/header/status-badge.svelte +60 -15
  45. package/dist/admin/client/entry/header/status-badge.svelte.d.ts +1 -2
  46. package/dist/admin/client/entry/header/version-history-sheet.svelte +1 -1
  47. package/dist/admin/client/entry/hybrid/hybrid-layout.svelte +74 -23
  48. package/dist/admin/client/entry/hybrid/hybrid-preview.svelte +1 -1
  49. package/dist/admin/client/entry/utils.d.ts +14 -0
  50. package/dist/admin/client/entry/utils.js +28 -0
  51. package/dist/admin/client/form/form-submission/form-submission.svelte +2 -2
  52. package/dist/admin/client/form/form-submissions.svelte +143 -194
  53. package/dist/admin/client/form/form-submissions.svelte.d.ts +2 -0
  54. package/dist/admin/client/login/lang.d.ts +3 -0
  55. package/dist/admin/client/login/lang.js +10 -4
  56. package/dist/admin/client/login/login-form.svelte +8 -1
  57. package/dist/admin/client/login/reset-password-page.svelte +24 -3
  58. package/dist/admin/client/login/schema.d.ts +14 -2
  59. package/dist/admin/client/login/schema.js +19 -8
  60. package/dist/admin/client/maintenance/maintenance-page.svelte +16 -17
  61. package/dist/admin/client/media/media-page.svelte +1 -1
  62. package/dist/admin/client/shop/coupon-edit-page.svelte +117 -13
  63. package/dist/admin/client/shop/coupon-form.svelte +282 -138
  64. package/dist/admin/client/shop/coupon-form.svelte.d.ts +1 -9
  65. package/dist/admin/client/shop/coupon-new-page.svelte +40 -10
  66. package/dist/admin/client/shop/coupon-new-page.svelte.d.ts +2 -17
  67. package/dist/admin/client/shop/coupon-schema.d.ts +28 -0
  68. package/dist/admin/client/shop/coupon-schema.js +53 -0
  69. package/dist/admin/client/shop/coupons-list-page.svelte +262 -118
  70. package/dist/admin/client/shop/coupons-list-page.svelte.d.ts +16 -1
  71. package/dist/admin/client/shop/refund-dialog.svelte +37 -1
  72. package/dist/admin/client/shop/refund-dialog.svelte.d.ts +3 -0
  73. package/dist/admin/client/shop/shipping-method-edit-page.svelte +108 -59
  74. package/dist/admin/client/shop/shipping-method-form.svelte +36 -9
  75. package/dist/admin/client/shop/shipping-method-new-page.svelte +44 -13
  76. package/dist/admin/client/shop/shipping-methods-list-page.svelte +101 -59
  77. package/dist/admin/client/shop/shop-order-detail-page.svelte +220 -84
  78. package/dist/admin/client/shop/shop-orders-list-page.svelte +302 -152
  79. package/dist/admin/client/shop/shop-orders-list-page.svelte.d.ts +18 -1
  80. package/dist/admin/client/shop/shop-products-list-page.svelte +355 -118
  81. package/dist/admin/client/shop/shop-products-list-page.svelte.d.ts +19 -1
  82. package/dist/admin/client/users/accept-invite-page.svelte +24 -3
  83. package/dist/admin/client/users/create-user-dialog.svelte +3 -8
  84. package/dist/admin/client/users/lang.d.ts +2 -0
  85. package/dist/admin/client/users/lang.js +4 -0
  86. package/dist/admin/client/users/pending-invitations.svelte +2 -9
  87. package/dist/admin/client/users/user-name-cell.svelte +20 -0
  88. package/dist/admin/client/users/user-name-cell.svelte.d.ts +9 -0
  89. package/dist/admin/client/users/user-role-badge.svelte +16 -0
  90. package/dist/admin/client/users/user-role-badge.svelte.d.ts +7 -0
  91. package/dist/admin/client/users/user-row-actions.svelte +72 -0
  92. package/dist/admin/client/users/user-row-actions.svelte.d.ts +20 -0
  93. package/dist/admin/client/users/user-sessions-sheet.svelte +2 -11
  94. package/dist/admin/client/users/users-page.svelte +283 -497
  95. package/dist/admin/client/users/users-page.svelte.d.ts +12 -1
  96. package/dist/admin/components/dashboard/form-submissions-widget.svelte +59 -74
  97. package/dist/admin/components/dashboard/recent-activity.svelte +17 -5
  98. package/dist/admin/components/dashboard/recent-entries.svelte +19 -7
  99. package/dist/admin/components/dialogs/confirmation-dialog.svelte +105 -0
  100. package/dist/admin/components/dialogs/confirmation-dialog.svelte.d.ts +13 -0
  101. package/dist/admin/components/fields/block-picker-modal.svelte +6 -0
  102. package/dist/admin/components/fields/blocks-field.svelte +46 -1
  103. package/dist/admin/components/fields/boolean-field.svelte +1 -1
  104. package/dist/admin/components/fields/field-renderer.svelte +29 -22
  105. package/dist/admin/components/fields/file-field.svelte +344 -30
  106. package/dist/admin/components/fields/icon-field.svelte +86 -0
  107. package/dist/admin/components/fields/icon-field.svelte.d.ts +8 -0
  108. package/dist/admin/components/fields/icon-picker-dialog.svelte +174 -0
  109. package/dist/admin/components/fields/icon-picker-dialog.svelte.d.ts +11 -0
  110. package/dist/admin/components/fields/media-field.svelte +16 -2
  111. package/dist/admin/components/fields/object-field.svelte +27 -7
  112. package/dist/admin/components/fields/radio-field.svelte +22 -0
  113. package/dist/admin/components/fields/relation-field.svelte +123 -97
  114. package/dist/admin/components/fields/relation-picker-dialog.svelte +2 -2
  115. package/dist/admin/components/fields/seo-field.svelte +60 -30
  116. package/dist/admin/components/fields/shop-field.svelte +219 -24
  117. package/dist/admin/components/fields/simple-array-field.svelte +321 -151
  118. package/dist/admin/components/fields/simple-array-field.svelte.d.ts +3 -0
  119. package/dist/admin/components/fields/slug-field.svelte +146 -21
  120. package/dist/admin/components/fields/text-field-wrapper.svelte +37 -20
  121. package/dist/admin/components/fields/text-field.svelte +7 -2
  122. package/dist/admin/components/fields/url-field-wrapper.svelte +10 -0
  123. package/dist/admin/components/fields/url-field.svelte +36 -23
  124. package/dist/admin/components/forms/form-error-summary.svelte +143 -0
  125. package/dist/admin/components/forms/form-error-summary.svelte.d.ts +27 -0
  126. package/dist/admin/components/layout/app-sidebar.svelte +7 -2
  127. package/dist/admin/components/layout/detail-page-shell.svelte +71 -0
  128. package/dist/admin/components/layout/detail-page-shell.svelte.d.ts +24 -0
  129. package/dist/admin/components/layout/lang.d.ts +5 -0
  130. package/dist/admin/components/layout/lang.js +10 -0
  131. package/dist/admin/components/layout/layout-renderer.svelte +71 -2
  132. package/dist/admin/components/layout/layout-renderer.svelte.d.ts +1 -0
  133. package/dist/admin/components/layout/layout-tabs.svelte +173 -0
  134. package/dist/admin/components/layout/layout-tabs.svelte.d.ts +24 -0
  135. package/dist/admin/components/layout/nav-breadcrumbs.svelte +25 -7
  136. package/dist/admin/components/layout/nav-collections.svelte +23 -36
  137. package/dist/admin/components/layout/nav-forms.svelte +19 -35
  138. package/dist/admin/components/layout/nav-main.svelte +3 -28
  139. package/dist/admin/components/layout/nav-search.svelte +70 -2
  140. package/dist/admin/components/layout/nav-section.svelte +77 -0
  141. package/dist/admin/components/layout/nav-section.svelte.d.ts +22 -0
  142. package/dist/admin/components/layout/nav-shop.svelte +3 -27
  143. package/dist/admin/components/layout/nav-singletons.svelte +16 -28
  144. package/dist/admin/components/layout/page-header.stories.svelte +93 -0
  145. package/dist/admin/components/layout/page-header.stories.svelte.d.ts +27 -0
  146. package/dist/admin/components/layout/page-header.svelte +68 -0
  147. package/dist/admin/components/layout/page-header.svelte.d.ts +17 -0
  148. package/dist/admin/components/layout/site-header.svelte +9 -0
  149. package/dist/admin/components/layout/site-header.svelte.d.ts +2 -17
  150. package/dist/admin/components/media/file/file-name-input.svelte +6 -2
  151. package/dist/admin/components/media/file/file-preview.svelte +130 -17
  152. package/dist/admin/components/media/file-upload.svelte +16 -7
  153. package/dist/admin/components/media/file-upload.svelte.d.ts +1 -0
  154. package/dist/admin/components/media/files-list.svelte +153 -53
  155. package/dist/admin/components/media/files-list.svelte.d.ts +1 -0
  156. package/dist/admin/components/media/media-library.svelte +577 -198
  157. package/dist/admin/components/media/media-library.svelte.d.ts +4 -0
  158. package/dist/admin/components/media/media-selector.svelte +4 -2
  159. package/dist/admin/components/media/media-selector.svelte.d.ts +1 -0
  160. package/dist/admin/components/media/tag-sidebar.svelte +4 -4
  161. package/dist/admin/components/tiptap/FigureNodeView.svelte +10 -0
  162. package/dist/admin/components/tiptap/bubble-menu.svelte +104 -0
  163. package/dist/admin/components/tiptap/bubble-menu.svelte.d.ts +19 -0
  164. package/dist/admin/components/tiptap/content-editor.svelte +28 -24
  165. package/dist/admin/components/tiptap/editor-toolbar.svelte +7 -7
  166. package/dist/admin/components/tiptap/extensions.js +5 -1
  167. package/dist/admin/components/tiptap/image-dialog.svelte +5 -1
  168. package/dist/admin/components/tiptap/link-dialog.svelte +2 -0
  169. package/dist/admin/components/tiptap/tiptap-editor.svelte +18 -20
  170. package/dist/admin/components/tiptap/video-dialog.svelte +1 -1
  171. package/dist/admin/components/variant-form/VariantAttributeRenderer.svelte +109 -0
  172. package/dist/admin/components/variant-form/VariantAttributeRenderer.svelte.d.ts +9 -0
  173. package/dist/admin/helpers/build-icon-set-map.d.ts +8 -0
  174. package/dist/admin/helpers/build-icon-set-map.js +16 -0
  175. package/dist/admin/helpers/index.d.ts +2 -0
  176. package/dist/admin/helpers/index.js +2 -0
  177. package/dist/admin/i18n/errors.d.ts +140 -0
  178. package/dist/admin/i18n/errors.js +151 -0
  179. package/dist/admin/remote/entry.remote.d.ts +59 -4
  180. package/dist/admin/remote/entry.remote.js +239 -62
  181. package/dist/admin/remote/shop.remote.d.ts +87 -48
  182. package/dist/admin/remote/shop.remote.js +70 -8
  183. package/dist/admin/shared/password-generate.d.ts +6 -0
  184. package/dist/admin/shared/password-generate.js +40 -0
  185. package/dist/admin/shared/password-schema.d.ts +6 -0
  186. package/dist/admin/shared/password-schema.js +10 -3
  187. package/dist/admin/state/icon-sets.svelte.d.ts +9 -0
  188. package/dist/admin/state/icon-sets.svelte.js +20 -0
  189. package/dist/admin/styles/admin.css +23 -6
  190. package/dist/admin/styles/tokens.md +244 -0
  191. package/dist/admin/utils/accordionActivation.d.ts +13 -0
  192. package/dist/admin/utils/accordionActivation.js +35 -0
  193. package/dist/admin/utils/entryLabel.d.ts +23 -0
  194. package/dist/admin/utils/entryLabel.js +51 -12
  195. package/dist/admin/utils/field-a11y.d.ts +29 -0
  196. package/dist/admin/utils/field-a11y.js +23 -0
  197. package/dist/admin/utils/fieldPathElement.d.ts +9 -0
  198. package/dist/admin/utils/fieldPathElement.js +18 -0
  199. package/dist/admin/utils/fileDisplay.d.ts +10 -0
  200. package/dist/admin/utils/fileDisplay.js +26 -0
  201. package/dist/admin/utils/flattenFormErrors.d.ts +19 -0
  202. package/dist/admin/utils/flattenFormErrors.js +102 -0
  203. package/dist/admin/utils/formatters.d.ts +12 -0
  204. package/dist/admin/utils/{formatDate.js → formatters.js} +23 -2
  205. package/dist/admin/utils/scrollWithin.d.ts +9 -0
  206. package/dist/admin/utils/scrollWithin.js +32 -0
  207. package/dist/admin/utils/tabActivation.d.ts +12 -0
  208. package/dist/admin/utils/tabActivation.js +24 -0
  209. package/dist/cli/scaffold/admin.js +2 -2
  210. package/dist/cms/runtime/schema.d.ts +1 -0
  211. package/dist/cms/runtime/schema.js +1 -0
  212. package/dist/cms/runtime/types.d.ts +80 -7
  213. package/dist/components/ui/accordion/accordion-content.svelte +17 -3
  214. package/dist/components/ui/accordion/accordion.stories.svelte +21 -1
  215. package/dist/components/ui/alert/alert.stories.svelte +14 -0
  216. package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte +45 -0
  217. package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte.d.ts +27 -0
  218. package/dist/components/ui/avatar/avatar.stories.svelte +27 -0
  219. package/dist/components/ui/badge/badge.stories.svelte +15 -0
  220. package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte +47 -0
  221. package/dist/components/ui/breadcrumb/breadcrumb.svelte +1 -1
  222. package/dist/components/ui/button/button.stories.svelte +53 -6
  223. package/dist/components/ui/button/button.svelte +39 -5
  224. package/dist/components/ui/button/button.svelte.d.ts +4 -0
  225. package/dist/components/ui/button-group/button-group.stories.svelte +44 -0
  226. package/dist/components/ui/button-group/button-group.stories.svelte.d.ts +27 -0
  227. package/dist/components/ui/calendar/calendar.stories.svelte +36 -0
  228. package/dist/components/ui/calendar/calendar.stories.svelte.d.ts +27 -0
  229. package/dist/components/ui/card/card.stories.svelte +7 -0
  230. package/dist/components/ui/carousel/carousel.stories.svelte +43 -0
  231. package/dist/components/ui/carousel/carousel.stories.svelte.d.ts +27 -0
  232. package/dist/components/ui/checkbox/checkbox.stories.svelte +67 -0
  233. package/dist/components/ui/checkbox/checkbox.stories.svelte.d.ts +27 -0
  234. package/dist/components/ui/checkbox/checkbox.svelte +1 -1
  235. package/dist/components/ui/command/command.stories.svelte +18 -0
  236. package/dist/components/ui/data-table/data-table.stories.svelte +61 -0
  237. package/dist/components/ui/data-table/data-table.stories.svelte.d.ts +18 -0
  238. package/dist/components/ui/dialog/dialog-content.svelte +5 -0
  239. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +2 -0
  240. package/dist/components/ui/dialog/dialog.stories.svelte +35 -0
  241. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte +74 -0
  242. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte.d.ts +27 -0
  243. package/dist/components/ui/field/field-context.svelte.d.ts +22 -0
  244. package/dist/components/ui/field/field-context.svelte.js +9 -0
  245. package/dist/components/ui/field/field-control.svelte +18 -0
  246. package/dist/components/ui/field/field-control.svelte.d.ts +8 -0
  247. package/dist/components/ui/field/field-description.svelte +12 -0
  248. package/dist/components/ui/field/field-error.svelte +14 -6
  249. package/dist/components/ui/field/field-label.svelte +10 -0
  250. package/dist/components/ui/field/field.stories.svelte +95 -9
  251. package/dist/components/ui/field/field.svelte +57 -0
  252. package/dist/components/ui/field/field.svelte.d.ts +2 -0
  253. package/dist/components/ui/field/index.d.ts +3 -1
  254. package/dist/components/ui/field/index.js +4 -2
  255. package/dist/components/ui/form/form-field-errors.svelte +1 -1
  256. package/dist/components/ui/form/form.stories.svelte +25 -0
  257. package/dist/components/ui/form/form.stories.svelte.d.ts +26 -0
  258. package/dist/components/ui/input/input.stories.svelte +26 -0
  259. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
  260. package/dist/components/ui/input-group/input-group.stories.svelte +43 -0
  261. package/dist/components/ui/input-group/input-group.stories.svelte.d.ts +27 -0
  262. package/dist/components/ui/item/item.stories.svelte +61 -0
  263. package/dist/components/ui/item/item.stories.svelte.d.ts +27 -0
  264. package/dist/components/ui/label/label.stories.svelte +7 -0
  265. package/dist/components/ui/live-region/index.d.ts +1 -0
  266. package/dist/components/ui/live-region/index.js +1 -0
  267. package/dist/components/ui/live-region/live-region-demo.svelte +32 -0
  268. package/dist/components/ui/live-region/live-region-demo.svelte.d.ts +7 -0
  269. package/dist/components/ui/live-region/live-region.stories.svelte +23 -0
  270. package/dist/components/ui/live-region/live-region.stories.svelte.d.ts +26 -0
  271. package/dist/components/ui/live-region/live-region.svelte +12 -0
  272. package/dist/components/ui/live-region/live-region.svelte.d.ts +8 -0
  273. package/dist/components/ui/popover/popover.stories.svelte +34 -0
  274. package/dist/components/ui/radio-group/radio-group.stories.svelte +58 -0
  275. package/dist/components/ui/radio-group/radio-group.stories.svelte.d.ts +27 -0
  276. package/dist/components/ui/resizable/resizable.stories.svelte +56 -0
  277. package/dist/components/ui/resizable/resizable.stories.svelte.d.ts +27 -0
  278. package/dist/components/ui/select/select.stories.svelte +49 -0
  279. package/dist/components/ui/separator/separator.stories.svelte +18 -0
  280. package/dist/components/ui/sheet/sheet.stories.svelte +34 -0
  281. package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
  282. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +1 -0
  283. package/dist/components/ui/sidebar/sidebar-trigger.svelte +1 -1
  284. package/dist/components/ui/sidebar/sidebar.stories.svelte +72 -0
  285. package/dist/components/ui/sidebar/sidebar.stories.svelte.d.ts +27 -0
  286. package/dist/components/ui/skeleton/skeleton.stories.svelte +39 -0
  287. package/dist/components/ui/skeleton/skeleton.stories.svelte.d.ts +27 -0
  288. package/dist/components/ui/skeleton/skeleton.svelte +6 -0
  289. package/dist/components/ui/sonner/index.d.ts +1 -1
  290. package/dist/components/ui/sonner/index.js +1 -1
  291. package/dist/components/ui/sonner/sonner.stories.svelte +7 -0
  292. package/dist/components/ui/sonner/sonner.svelte +17 -1
  293. package/dist/components/ui/sonner/sonner.svelte.d.ts +6 -0
  294. package/dist/components/ui/spinner/spinner.stories.svelte +30 -0
  295. package/dist/components/ui/spinner/spinner.stories.svelte.d.ts +27 -0
  296. package/dist/components/ui/switch/switch.stories.svelte +56 -0
  297. package/dist/components/ui/switch/switch.stories.svelte.d.ts +27 -0
  298. package/dist/components/ui/table/table-cell.svelte +1 -1
  299. package/dist/components/ui/table/table-head.svelte +1 -1
  300. package/dist/components/ui/table/table.stories.svelte +68 -0
  301. package/dist/components/ui/table/table.stories.svelte.d.ts +27 -0
  302. package/dist/components/ui/table/table.svelte +1 -1
  303. package/dist/components/ui/tabs/tabs.stories.svelte +48 -0
  304. package/dist/components/ui/tabs/tabs.stories.svelte.d.ts +27 -0
  305. package/dist/components/ui/textarea/textarea.stories.svelte +21 -0
  306. package/dist/components/ui/toggle/toggle.stories.svelte +23 -0
  307. package/dist/components/ui/toggle-group/toggle-group.stories.svelte +43 -0
  308. package/dist/components/ui/tooltip/tooltip.stories.svelte +46 -6
  309. package/dist/core/cms.d.ts +11 -2
  310. package/dist/core/cms.js +29 -0
  311. package/dist/core/fields/fieldSchemaToTs.d.ts +7 -0
  312. package/dist/core/fields/fieldSchemaToTs.js +241 -90
  313. package/dist/core/fields/layoutUtils.d.ts +4 -1
  314. package/dist/core/fields/layoutUtils.js +41 -4
  315. package/dist/core/fields/resolveSeo.d.ts +70 -0
  316. package/dist/core/fields/resolveSeo.js +88 -0
  317. package/dist/core/fields/seoFieldDescriptor.d.ts +43 -0
  318. package/dist/core/fields/seoFieldDescriptor.js +74 -0
  319. package/dist/core/fields/slugPath.d.ts +13 -0
  320. package/dist/core/fields/slugPath.js +32 -0
  321. package/dist/core/fields/urlUtils.d.ts +8 -0
  322. package/dist/core/fields/urlUtils.js +27 -0
  323. package/dist/core/index.d.ts +1 -0
  324. package/dist/core/index.js +1 -0
  325. package/dist/core/server/entries/operations/create.js +13 -0
  326. package/dist/core/server/entries/operations/get.d.ts +7 -0
  327. package/dist/core/server/entries/operations/get.js +10 -6
  328. package/dist/core/server/entries/operations/slugUniqueness.d.ts +37 -0
  329. package/dist/core/server/entries/operations/slugUniqueness.js +116 -0
  330. package/dist/core/server/entries/operations/update.d.ts +6 -1
  331. package/dist/core/server/entries/operations/update.js +24 -1
  332. package/dist/core/server/fields/slugResolver.d.ts +3 -13
  333. package/dist/core/server/fields/slugResolver.js +8 -37
  334. package/dist/core/server/generator/fields.d.ts +2 -0
  335. package/dist/core/server/generator/fields.js +44 -18
  336. package/dist/core/server/generator/formFields.js +2 -1
  337. package/dist/core/server/generator/generator.js +6 -5
  338. package/dist/core/server/generator/utils.d.ts +1 -0
  339. package/dist/core/server/generator/utils.js +4 -0
  340. package/dist/db-postgres/schema/shop/order.d.ts +37 -1
  341. package/dist/db-postgres/schema/shop/order.js +3 -1
  342. package/dist/db-postgres/schema/shop/payment.d.ts +20 -0
  343. package/dist/db-postgres/schema/shop/payment.js +4 -1
  344. package/dist/db-postgres/schema/shop/product.d.ts +20 -0
  345. package/dist/db-postgres/schema/shop/product.js +3 -1
  346. package/dist/db-postgres/schema/shop/productVariant.d.ts +12 -2
  347. package/dist/db-postgres/schema/shop/productVariant.js +22 -0
  348. package/dist/shop/cart/types.d.ts +1 -0
  349. package/dist/shop/client/index.d.ts +54 -0
  350. package/dist/shop/client/index.js +5 -1
  351. package/dist/shop/expiry.d.ts +35 -0
  352. package/dist/shop/expiry.js +68 -0
  353. package/dist/shop/http/balance-handler.d.ts +20 -0
  354. package/dist/shop/http/balance-handler.js +91 -0
  355. package/dist/shop/http/cart-handler.js +19 -0
  356. package/dist/shop/http/checkout-handler.js +19 -1
  357. package/dist/shop/http/index.d.ts +2 -0
  358. package/dist/shop/http/index.js +2 -0
  359. package/dist/shop/http/upcoming-handler.d.ts +16 -0
  360. package/dist/shop/http/upcoming-handler.js +65 -0
  361. package/dist/shop/http/webhook-handler.js +46 -9
  362. package/dist/shop/index.d.ts +4 -1
  363. package/dist/shop/index.js +7 -1
  364. package/dist/shop/server/balance-payment.d.ts +40 -0
  365. package/dist/shop/server/balance-payment.js +140 -0
  366. package/dist/shop/server/cart-hydrate.js +2 -0
  367. package/dist/shop/server/init.d.ts +14 -0
  368. package/dist/shop/server/init.js +35 -0
  369. package/dist/shop/server/orders.d.ts +35 -0
  370. package/dist/shop/server/orders.js +155 -2
  371. package/dist/shop/server/payment-policy.d.ts +35 -0
  372. package/dist/shop/server/payment-policy.js +55 -0
  373. package/dist/shop/server/payments.d.ts +29 -0
  374. package/dist/shop/server/payments.js +64 -0
  375. package/dist/shop/server/populate.d.ts +1 -1
  376. package/dist/shop/server/refund.d.ts +17 -12
  377. package/dist/shop/server/refund.js +96 -13
  378. package/dist/shop/server/shop-data.d.ts +6 -1
  379. package/dist/shop/server/shop-data.js +44 -7
  380. package/dist/shop/template.d.ts +13 -0
  381. package/dist/shop/template.js +98 -0
  382. package/dist/shop/types.d.ts +142 -1
  383. package/dist/shop/variant-attributes.d.ts +28 -0
  384. package/dist/shop/variant-attributes.js +69 -0
  385. package/dist/sveltekit/server/handle.js +17 -0
  386. package/dist/sveltekit/server/index.d.ts +1 -0
  387. package/dist/sveltekit/server/index.js +2 -0
  388. package/dist/types/cms.d.ts +4 -3
  389. package/dist/types/cms.schema.d.ts +1 -1
  390. package/dist/types/cms.schema.js +13 -2
  391. package/dist/types/fields.d.ts +56 -2
  392. package/dist/types/index.d.ts +2 -2
  393. package/dist/types/index.js +1 -1
  394. package/dist/types/layout.d.ts +35 -2
  395. package/dist/types/plugins.d.ts +40 -0
  396. package/dist/types/plugins.js +4 -1
  397. package/dist/updates/0.26.0/index.d.ts +2 -0
  398. package/dist/updates/0.26.0/index.js +51 -0
  399. package/dist/updates/0.26.1/index.d.ts +2 -0
  400. package/dist/updates/0.26.1/index.js +19 -0
  401. package/dist/updates/0.27.0/index.d.ts +2 -0
  402. package/dist/updates/0.27.0/index.js +50 -0
  403. package/dist/updates/index.js +7 -1
  404. package/package.json +29 -7
  405. package/dist/admin/client/collection/empty-state.svelte +0 -28
  406. package/dist/admin/client/collection/empty-state.svelte.d.ts +0 -9
  407. package/dist/admin/client/form/submission-status-badge.svelte +0 -41
  408. package/dist/admin/client/form/submission-status-badge.svelte.d.ts +0 -7
  409. package/dist/admin/components/media/file-preview.svelte +0 -51
  410. package/dist/admin/components/media/file-preview.svelte.d.ts +0 -6
  411. package/dist/admin/utils/formatDate.d.ts +0 -5
@@ -0,0 +1,27 @@
1
+ export default Spinner;
2
+ type Spinner = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Spinner: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import { Spinner } from './index.js';
15
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -0,0 +1,56 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Switch } from './index.js';
4
+ import { Label } from '../label/index.js';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'UI/Forms/Switch',
8
+ component: Switch,
9
+ tags: ['autodocs'],
10
+ parameters: {
11
+ docs: {
12
+ description: {
13
+ component: 'Przełącznik on/off (preferencja, ustawienie). Zmiana stanu = natychmiastowy efekt. Dla wieloetapowej walidacji — `Checkbox` w formularzu.',
14
+ },
15
+ },
16
+ },
17
+ argTypes: {
18
+ checked: {
19
+ control: 'boolean',
20
+ description: 'Stan przełącznika.',
21
+ },
22
+ disabled: {
23
+ control: 'boolean',
24
+ description: 'Wyłącza interakcję.',
25
+ },
26
+ },
27
+ });
28
+ </script>
29
+
30
+ <Story name="Default (off)">
31
+ <div style="display:flex;align-items:center;gap:8px;">
32
+ <Switch id="sw-default" />
33
+ <Label for="sw-default">Powiadomienia email</Label>
34
+ </div>
35
+ </Story>
36
+
37
+ <Story name="Checked (on)">
38
+ <div style="display:flex;align-items:center;gap:8px;">
39
+ <Switch id="sw-checked" checked />
40
+ <Label for="sw-checked">Tryb publiczny</Label>
41
+ </div>
42
+ </Story>
43
+
44
+ <Story name="Disabled">
45
+ <div style="display:flex;align-items:center;gap:8px;">
46
+ <Switch id="sw-disabled" disabled />
47
+ <Label for="sw-disabled">Opcja zablokowana</Label>
48
+ </div>
49
+ </Story>
50
+
51
+ <Story name="Disabled checked">
52
+ <div style="display:flex;align-items:center;gap:8px;">
53
+ <Switch id="sw-disabled-on" disabled checked />
54
+ <Label for="sw-disabled-on">Opcja włączona przez admina</Label>
55
+ </div>
56
+ </Story>
@@ -0,0 +1,27 @@
1
+ export default Switch;
2
+ type Switch = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Switch: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import { Switch } from './index.js';
15
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -13,7 +13,7 @@
13
13
  <td
14
14
  bind:this={ref}
15
15
  data-slot="table-cell"
16
- class={cn("whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-0", className)}
16
+ class={cn("whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-4", className)}
17
17
  {...restProps}
18
18
  >
19
19
  {@render children?.()}
@@ -14,7 +14,7 @@
14
14
  bind:this={ref}
15
15
  data-slot="table-head"
16
16
  class={cn(
17
- "text-foreground h-10 whitespace-nowrap px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0",
17
+ "text-foreground h-10 whitespace-nowrap px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-4",
18
18
  className
19
19
  )}
20
20
  {...restProps}
@@ -0,0 +1,68 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import * as Table from './index.js';
4
+ import { Root as TableRoot } from './index.js';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'UI/Data/Table',
8
+ component: TableRoot,
9
+ tags: ['autodocs'],
10
+ parameters: {
11
+ docs: {
12
+ description: {
13
+ component: 'Niskopoziomowa kompozycja `<table>`. Dla list adminowych używaj `DataTable` z TanStack Table — automatycznie obsługuje sortowanie, paginację, ARIA.',
14
+ },
15
+ },
16
+ },
17
+ });
18
+
19
+ const orders = [
20
+ { number: 'ZAM-2026-0001', email: 'kowalski@example.com', total: '123,00 PLN', status: 'Nowe' },
21
+ { number: 'ZAM-2026-0002', email: 'nowak@example.com', total: '450,00 PLN', status: 'Opłacone' },
22
+ { number: 'ZAM-2026-0003', email: 'a@example.com', total: '78,00 PLN', status: 'Wysłane' }
23
+ ];
24
+ </script>
25
+
26
+ <Story name="Basic">
27
+ <Table.Root>
28
+ <Table.Caption>Lista zamówień (3 ostatnie)</Table.Caption>
29
+ <Table.Header>
30
+ <Table.Row>
31
+ <Table.Head>Numer</Table.Head>
32
+ <Table.Head>Email klienta</Table.Head>
33
+ <Table.Head>Kwota</Table.Head>
34
+ <Table.Head>Status</Table.Head>
35
+ </Table.Row>
36
+ </Table.Header>
37
+ <Table.Body>
38
+ {#each orders as order (order.number)}
39
+ <Table.Row>
40
+ <Table.Cell>{order.number}</Table.Cell>
41
+ <Table.Cell>{order.email}</Table.Cell>
42
+ <Table.Cell>{order.total}</Table.Cell>
43
+ <Table.Cell>{order.status}</Table.Cell>
44
+ </Table.Row>
45
+ {/each}
46
+ </Table.Body>
47
+ </Table.Root>
48
+ </Story>
49
+
50
+ <Story name="Empty">
51
+ <Table.Root>
52
+ <Table.Caption>Brak danych do wyświetlenia.</Table.Caption>
53
+ <Table.Header>
54
+ <Table.Row>
55
+ <Table.Head>Numer</Table.Head>
56
+ <Table.Head>Email</Table.Head>
57
+ <Table.Head>Kwota</Table.Head>
58
+ </Table.Row>
59
+ </Table.Header>
60
+ <Table.Body>
61
+ <Table.Row>
62
+ <Table.Cell colspan={3} style="text-align:center;color:var(--muted-foreground);">
63
+ Brak zamówień. Pojawią się tutaj gdy klient złoży zakup.
64
+ </Table.Cell>
65
+ </Table.Row>
66
+ </Table.Body>
67
+ </Table.Root>
68
+ </Story>
@@ -0,0 +1,27 @@
1
+ export default Table;
2
+ type Table = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Table: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import * as Table from './index.js';
15
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -14,7 +14,7 @@
14
14
  <table
15
15
  bind:this={ref}
16
16
  data-slot="table"
17
- class={cn("w-full caption-bottom text-sm", className)}
17
+ class={cn("min-w-full caption-bottom text-sm", className)}
18
18
  {...restProps}
19
19
  >
20
20
  {@render children?.()}
@@ -0,0 +1,48 @@
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import * as Tabs from './index.js';
4
+ import { Root as TabsRoot } from './index.js';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'UI/Navigation/Tabs',
8
+ component: TabsRoot,
9
+ tags: ['autodocs'],
10
+ parameters: {
11
+ docs: {
12
+ description: {
13
+ component: 'Zakładki (np. Treść/SEO w edytorze). `value` = identyfikator aktywnej zakładki. Klawiatura: strzałki, Home/End między tabami.',
14
+ },
15
+ },
16
+ },
17
+ argTypes: {
18
+ value: {
19
+ control: 'text',
20
+ description: 'Identyfikator aktywnej zakładki.',
21
+ },
22
+ orientation: {
23
+ control: 'select',
24
+ options: ['horizontal', 'vertical'],
25
+ description: 'Układ tablisty.',
26
+ },
27
+ },
28
+ });
29
+ </script>
30
+
31
+ <Story name="Three tabs">
32
+ <Tabs.Root value="general" style="width:480px;">
33
+ <Tabs.List>
34
+ <Tabs.Trigger value="general">Ogólne</Tabs.Trigger>
35
+ <Tabs.Trigger value="seo">SEO</Tabs.Trigger>
36
+ <Tabs.Trigger value="media">Media</Tabs.Trigger>
37
+ </Tabs.List>
38
+ <Tabs.Content value="general">
39
+ <p>Podstawowe pola wpisu — tytuł, slug, status.</p>
40
+ </Tabs.Content>
41
+ <Tabs.Content value="seo">
42
+ <p>Meta description, OG image, słowa kluczowe.</p>
43
+ </Tabs.Content>
44
+ <Tabs.Content value="media">
45
+ <p>Zdjęcia, galeria, cover.</p>
46
+ </Tabs.Content>
47
+ </Tabs.Root>
48
+ </Story>
@@ -0,0 +1,27 @@
1
+ export default Tabs;
2
+ type Tabs = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Tabs: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ import * as Tabs from './index.js';
15
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -6,6 +6,27 @@
6
6
  title: 'UI/Forms/Textarea',
7
7
  component: Textarea,
8
8
  tags: ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component: 'Pole wieloliniowe. Zawsze wewnątrz `Field.Root`. Dla treści z formatowaniem — `Content` (TipTap editor), nie textarea.',
13
+ },
14
+ },
15
+ },
16
+ argTypes: {
17
+ placeholder: {
18
+ control: 'text',
19
+ description: 'Tekst zachęty — NIE używaj zamiast labela.',
20
+ },
21
+ rows: {
22
+ control: 'number',
23
+ description: 'Domyślna liczba widocznych linii.',
24
+ },
25
+ disabled: {
26
+ control: 'boolean',
27
+ description: 'Blokada interakcji.',
28
+ },
29
+ },
9
30
  });
10
31
  </script>
11
32
 
@@ -6,6 +6,29 @@
6
6
  title: 'UI/Actions/Toggle',
7
7
  component: Toggle,
8
8
  tags: ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component: 'Przycisk dwustanowy (np. format Bold w toolbarze). Stan komunikuje `aria-pressed`. Dla preferencji — `Switch`, dla wyboru z wielu — `ToggleGroup`.',
13
+ },
14
+ },
15
+ },
16
+ argTypes: {
17
+ pressed: {
18
+ control: 'boolean',
19
+ description: 'Stan wciśnięcia.',
20
+ },
21
+ variant: {
22
+ control: 'select',
23
+ options: ['default', 'outline'],
24
+ description: 'Wariant wizualny.',
25
+ },
26
+ size: {
27
+ control: 'select',
28
+ options: ['default', 'sm', 'lg'],
29
+ description: 'Rozmiar.',
30
+ },
31
+ },
9
32
  });
10
33
  </script>
11
34
 
@@ -6,6 +6,34 @@
6
6
  title: 'UI/Actions/ToggleGroup',
7
7
  component: ToggleGroup,
8
8
  tags: ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component: 'Grupa toggle\'i (jednowybór `single` lub wielowybór `multiple`). Używaj dla format toolbarów lub wyboru opcji wizualnych (np. align left/center/right).',
13
+ },
14
+ },
15
+ },
16
+ argTypes: {
17
+ type: {
18
+ control: 'select',
19
+ options: ['single', 'multiple'],
20
+ description: 'Tryb — jeden naraz lub wiele.',
21
+ },
22
+ value: {
23
+ control: 'text',
24
+ description: 'Aktualna wartość lub tablica wartości.',
25
+ },
26
+ variant: {
27
+ control: 'select',
28
+ options: ['default', 'outline'],
29
+ description: 'Wariant wizualny.',
30
+ },
31
+ size: {
32
+ control: 'select',
33
+ options: ['default', 'sm', 'lg'],
34
+ description: 'Rozmiar.',
35
+ },
36
+ },
9
37
  });
10
38
  </script>
11
39
 
@@ -15,3 +43,18 @@
15
43
  <ToggleGroupItem value="en" style="font-weight:600;font-size:12px;">EN</ToggleGroupItem>
16
44
  </ToggleGroup>
17
45
  </Story>
46
+
47
+ <Story name="Multi (formatting)">
48
+ <ToggleGroup type="multiple" value={['bold']} aria-label="Formatowanie tekstu">
49
+ <ToggleGroupItem value="bold" aria-label="Pogrubienie">B</ToggleGroupItem>
50
+ <ToggleGroupItem value="italic" aria-label="Kursywa"><em>I</em></ToggleGroupItem>
51
+ <ToggleGroupItem value="underline" aria-label="Podkreślenie"><u>U</u></ToggleGroupItem>
52
+ </ToggleGroup>
53
+ </Story>
54
+
55
+ <Story name="Disabled">
56
+ <ToggleGroup type="single" value="pl" disabled>
57
+ <ToggleGroupItem value="pl">PL</ToggleGroupItem>
58
+ <ToggleGroupItem value="en">EN</ToggleGroupItem>
59
+ </ToggleGroup>
60
+ </Story>
@@ -2,24 +2,64 @@
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from './index.js';
4
4
  import { Button } from '../button/index.js';
5
+ import HistoryIcon from '@lucide/svelte/icons/history';
5
6
 
7
+ // Tooltip Provider context nie propaguje przez Storybook MockProvider/DecoratorHandler
8
+ // w vitest-browser. Stories renderują się normalnie w dev (`pnpm storybook`),
9
+ // ale test runner crashuje. Odłożone do S10 (axe runtime) — wtedy testujemy
10
+ // tooltipy via real browser MCP zamiast vitest browser.
6
11
  const { Story } = defineMeta({
7
12
  title: 'UI/Feedback/Tooltip',
8
13
  component: Tooltip,
9
- tags: ['autodocs'],
14
+ tags: ['autodocs', 'no-test'],
15
+ parameters: {
16
+ docs: {
17
+ description: {
18
+ component: 'Krótki opis przy najechaniu/fokusie. Dla ikon-only przycisków zawsze podaj `aria-label` na triggerze (tooltip nie zastępuje accessible name).',
19
+ },
20
+ },
21
+ },
22
+ argTypes: {
23
+ delayDuration: {
24
+ control: 'number',
25
+ description: 'Opóźnienie pokazania w ms (default 700).',
26
+ },
27
+ side: {
28
+ control: 'select',
29
+ options: ['top', 'right', 'bottom', 'left'],
30
+ description: 'Strona względem triggera.',
31
+ },
32
+ },
10
33
  });
11
34
  </script>
12
35
 
13
36
  <Story name="Plum Tooltip">
14
- <TooltipProvider>
37
+ <TooltipProvider delayDuration={0}>
15
38
  <Tooltip>
16
39
  <TooltipTrigger>
17
- <Button variant="ghost" size="icon">
18
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
19
- </Button>
40
+ {#snippet child({ props })}
41
+ <Button {...props} variant="ghost" size="icon" aria-label="Historia zmian">
42
+ <HistoryIcon />
43
+ </Button>
44
+ {/snippet}
20
45
  </TooltipTrigger>
21
46
  <TooltipContent>
22
- <p>Historia</p>
47
+ <p>Historia zmian</p>
48
+ </TooltipContent>
49
+ </Tooltip>
50
+ </TooltipProvider>
51
+ </Story>
52
+
53
+ <Story name="Text trigger">
54
+ <TooltipProvider delayDuration={0}>
55
+ <Tooltip>
56
+ <TooltipTrigger>
57
+ {#snippet child({ props })}
58
+ <button type="button" {...props}>Najedź żeby zobaczyć skrót</button>
59
+ {/snippet}
60
+ </TooltipTrigger>
61
+ <TooltipContent>
62
+ <p>Cmd / Ctrl + K — szybkie wyszukiwanie</p>
23
63
  </TooltipContent>
24
64
  </Tooltip>
25
65
  </TooltipProvider>
@@ -4,7 +4,7 @@ import type { ApiKeyConfig, AuthConfig, CMSConfig, ICMS, MediaConfig, Typography
4
4
  import type { CollectionConfigWithType } from '../types/collections.js';
5
5
  import type { Language } from '../types/languages.js';
6
6
  import type { SingleConfigWithType } from '../types/singles.js';
7
- import type { CustomFieldDefinition, PluginConfig } from '../types/plugins.js';
7
+ import type { CustomFieldDefinition, IconSetPlugin, Plugin } from '../types/plugins.js';
8
8
  import type { FormConfig } from '../types/forms.js';
9
9
  import type { AIAdapter } from '../types/adapters/ai.js';
10
10
  import type { EmailAdapter } from '../types/adapters/email.js';
@@ -28,8 +28,17 @@ export declare class CMS implements ICMS {
28
28
  sidebarHelp: boolean;
29
29
  shopConfig: ResolvedShopConfig | null;
30
30
  cmpConfig: ResolvedCmpConfig | null;
31
- plugins: PluginConfig[];
31
+ /**
32
+ * Resolves once the shop's variant-attribute GIN indexes have been applied
33
+ * by `initCMS()`. `null` when the CMS is configured without a shop. Tests
34
+ * can `await` this to gate on init completion; production callers don't
35
+ * need to — index application is idempotent and non-blocking.
36
+ * @internal
37
+ */
38
+ shopInitPromise: Promise<void> | null;
39
+ plugins: Plugin[];
32
40
  customFields: Map<string, CustomFieldDefinition>;
41
+ iconSets: Map<string, IconSetPlugin>;
33
42
  apiKeys: ApiKeyConfig[];
34
43
  constructor(config: CMSConfig);
35
44
  private validateFieldSlugs;
package/dist/core/cms.js CHANGED
@@ -1,9 +1,11 @@
1
+ import { isIconSetPlugin } from '../types/plugins.js';
1
2
  import { setSchemaGetCMS } from './fields/fieldSchemaToTs.js';
2
3
  import { betterAuth } from 'better-auth';
3
4
  import { drizzleAdapter } from 'better-auth/adapters/drizzle';
4
5
  import { admin } from 'better-auth/plugins';
5
6
  import { resetPasswordEmailTemplate } from '../admin/email/reset-password-template.js';
6
7
  import * as authSchema from '../server/db/schema/auth-schema.js';
8
+ import { applyVariantAttributeIndexes } from '../shop/server/init.js';
7
9
  export class CMS {
8
10
  config;
9
11
  databaseAdapter;
@@ -21,8 +23,17 @@ export class CMS {
21
23
  sidebarHelp;
22
24
  shopConfig;
23
25
  cmpConfig;
26
+ /**
27
+ * Resolves once the shop's variant-attribute GIN indexes have been applied
28
+ * by `initCMS()`. `null` when the CMS is configured without a shop. Tests
29
+ * can `await` this to gate on init completion; production callers don't
30
+ * need to — index application is idempotent and non-blocking.
31
+ * @internal
32
+ */
33
+ shopInitPromise = null;
24
34
  plugins = [];
25
35
  customFields = new Map();
36
+ iconSets = new Map();
26
37
  apiKeys = [];
27
38
  constructor(config) {
28
39
  this.config = config;
@@ -64,6 +75,13 @@ export class CMS {
64
75
  if (config.plugins) {
65
76
  this.plugins = config.plugins;
66
77
  for (const plugin of this.plugins) {
78
+ if (isIconSetPlugin(plugin)) {
79
+ if (this.iconSets.has(plugin.slug)) {
80
+ throw new Error(`Duplicate icon-set plugin slug: "${plugin.slug}"`);
81
+ }
82
+ this.iconSets.set(plugin.slug, plugin);
83
+ continue;
84
+ }
67
85
  for (const def of plugin.fields ?? []) {
68
86
  if (this.customFields.has(def.fieldType)) {
69
87
  throw new Error(`Duplicate custom field type: "${def.fieldType}" (plugin: "${plugin.slug}")`);
@@ -157,6 +175,17 @@ export function initCMS(config) {
157
175
  import('./server/media/operations/backgroundMaintenance.js')
158
176
  .then((m) => m.startBackgroundMaintenance())
159
177
  .catch((e) => console.warn('[cms] Failed to start background maintenance:', e));
178
+ // Apply shop variantAttribute GIN indexes (idempotent CREATE INDEX IF NOT EXISTS).
179
+ // Pass shop + drizzle explicitly so the dynamic import doesn't depend on a
180
+ // shared CMS singleton (vitest can give the dynamic module a fresh instance).
181
+ if (cms.shopConfig) {
182
+ const drizzle = cms.databaseAdapter._drizzle;
183
+ if (drizzle) {
184
+ cms.shopInitPromise = applyVariantAttributeIndexes(cms.shopConfig, drizzle).catch((e) => {
185
+ console.warn('[shop] Failed to apply variant attribute indexes:', e);
186
+ });
187
+ }
188
+ }
160
189
  return cms;
161
190
  }
162
191
  /**
@@ -15,6 +15,13 @@ type AnyZodObject = z.ZodObject<any, any>;
15
15
  interface GenerateZodSchemaOptions {
16
16
  parentRequired?: boolean;
17
17
  localized?: boolean;
18
+ /**
19
+ * Preferred language for validation messages drawn from Localized field
20
+ * config (e.g. `TextField.patternError`). Falls back to the first value
21
+ * in the Localized object. Client-side schemas should pass the interface
22
+ * language; server-side leaves it `undefined`.
23
+ */
24
+ messageLanguage?: string;
18
25
  }
19
26
  export declare function generateZodSchemaFromField(field: Field, languages: string[], options?: GenerateZodSchemaOptions): z.ZodType;
20
27
  export declare function generateZodSchemaFromFields(fields: Field[], languages: string[], options?: GenerateZodSchemaOptions): AnyZodObject;