simplycms 0.4.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 (2342) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/admin/components/AddProductToOrder.d.ts +12 -0
  4. package/dist/admin/components/AddProductToOrder.js +4 -0
  5. package/dist/admin/components/AddProductToOrder.js.map +1 -0
  6. package/dist/admin/components/AllProductProperties.d.ts +6 -0
  7. package/dist/admin/components/AllProductProperties.js +4 -0
  8. package/dist/admin/components/AllProductProperties.js.map +1 -0
  9. package/dist/admin/components/ImageUpload.d.ts +10 -0
  10. package/dist/admin/components/ImageUpload.js +4 -0
  11. package/dist/admin/components/ImageUpload.js.map +1 -0
  12. package/dist/admin/components/ProductModifications.d.ts +6 -0
  13. package/dist/admin/components/ProductModifications.js +9 -0
  14. package/dist/admin/components/ProductModifications.js.map +1 -0
  15. package/dist/admin/components/ProductPricesEditor.d.ts +6 -0
  16. package/dist/admin/components/ProductPricesEditor.js +4 -0
  17. package/dist/admin/components/ProductPricesEditor.js.map +1 -0
  18. package/dist/admin/components/ProductPropertyValues.d.ts +7 -0
  19. package/dist/admin/components/ProductPropertyValues.js +4 -0
  20. package/dist/admin/components/ProductPropertyValues.js.map +1 -0
  21. package/dist/admin/components/RichTextEditor.d.ts +8 -0
  22. package/dist/admin/components/RichTextEditor.js +4 -0
  23. package/dist/admin/components/RichTextEditor.js.map +1 -0
  24. package/dist/admin/components/SectionPropertiesManager.d.ts +5 -0
  25. package/dist/admin/components/SectionPropertiesManager.js +4 -0
  26. package/dist/admin/components/SectionPropertiesManager.js.map +1 -0
  27. package/dist/admin/components/SectionPropertiesTable.d.ts +5 -0
  28. package/dist/admin/components/SectionPropertiesTable.js +4 -0
  29. package/dist/admin/components/SectionPropertiesTable.js.map +1 -0
  30. package/dist/admin/components/SimpleProductFields.d.ts +10 -0
  31. package/dist/admin/components/SimpleProductFields.js +7 -0
  32. package/dist/admin/components/SimpleProductFields.js.map +1 -0
  33. package/dist/admin/components/StockByPointManager.d.ts +7 -0
  34. package/dist/admin/components/StockByPointManager.js +4 -0
  35. package/dist/admin/components/StockByPointManager.js.map +1 -0
  36. package/dist/admin/components/StockStatusSelect.d.ts +9 -0
  37. package/dist/admin/components/StockStatusSelect.js +4 -0
  38. package/dist/admin/components/StockStatusSelect.js.map +1 -0
  39. package/dist/admin/components/ThemeActivateDialog.d.ts +14 -0
  40. package/dist/admin/components/ThemeActivateDialog.js +4 -0
  41. package/dist/admin/components/ThemeActivateDialog.js.map +1 -0
  42. package/dist/admin/components/ThemeCard.d.ts +29 -0
  43. package/dist/admin/components/ThemeCard.js +5 -0
  44. package/dist/admin/components/ThemeCard.js.map +1 -0
  45. package/dist/admin/hooks/usePluginToggle.d.ts +21 -0
  46. package/dist/admin/hooks/useThemeActivate.d.ts +15 -0
  47. package/dist/admin/index.d.ts +54 -0
  48. package/dist/admin/index.js +62 -0
  49. package/dist/admin/index.js.map +1 -0
  50. package/dist/admin/layouts/AdminLayout.d.ts +3 -0
  51. package/dist/admin/layouts/AdminLayout.js +6 -0
  52. package/dist/admin/layouts/AdminLayout.js.map +1 -0
  53. package/dist/admin/layouts/AdminSidebar.d.ts +1 -0
  54. package/dist/admin/layouts/AdminSidebar.js +5 -0
  55. package/dist/admin/layouts/AdminSidebar.js.map +1 -0
  56. package/dist/admin/lib/adminLinks.d.ts +10 -0
  57. package/dist/admin/lib/pluginSettingsFields.d.ts +21 -0
  58. package/dist/admin/lib/revalidateTheme.d.ts +30 -0
  59. package/dist/admin/pages/BannerEdit.d.ts +1 -0
  60. package/dist/admin/pages/BannerEdit.js +6 -0
  61. package/dist/admin/pages/BannerEdit.js.map +1 -0
  62. package/dist/admin/pages/Banners.d.ts +1 -0
  63. package/dist/admin/pages/Banners.js +5 -0
  64. package/dist/admin/pages/Banners.js.map +1 -0
  65. package/dist/admin/pages/Dashboard.d.ts +1 -0
  66. package/dist/admin/pages/Dashboard.js +5 -0
  67. package/dist/admin/pages/Dashboard.js.map +1 -0
  68. package/dist/admin/pages/DiscountEdit.d.ts +1 -0
  69. package/dist/admin/pages/DiscountEdit.js +5 -0
  70. package/dist/admin/pages/DiscountEdit.js.map +1 -0
  71. package/dist/admin/pages/DiscountGroupEdit.d.ts +1 -0
  72. package/dist/admin/pages/DiscountGroupEdit.js +5 -0
  73. package/dist/admin/pages/DiscountGroupEdit.js.map +1 -0
  74. package/dist/admin/pages/Discounts.d.ts +1 -0
  75. package/dist/admin/pages/Discounts.js +5 -0
  76. package/dist/admin/pages/Discounts.js.map +1 -0
  77. package/dist/admin/pages/OrderDetail.d.ts +1 -0
  78. package/dist/admin/pages/OrderDetail.js +6 -0
  79. package/dist/admin/pages/OrderDetail.js.map +1 -0
  80. package/dist/admin/pages/OrderStatuses.d.ts +1 -0
  81. package/dist/admin/pages/OrderStatuses.js +4 -0
  82. package/dist/admin/pages/OrderStatuses.js.map +1 -0
  83. package/dist/admin/pages/Orders.d.ts +1 -0
  84. package/dist/admin/pages/Orders.js +5 -0
  85. package/dist/admin/pages/Orders.js.map +1 -0
  86. package/dist/admin/pages/PickupPointEdit.d.ts +1 -0
  87. package/dist/admin/pages/PickupPointEdit.js +5 -0
  88. package/dist/admin/pages/PickupPointEdit.js.map +1 -0
  89. package/dist/admin/pages/PickupPoints.d.ts +1 -0
  90. package/dist/admin/pages/PickupPoints.js +5 -0
  91. package/dist/admin/pages/PickupPoints.js.map +1 -0
  92. package/dist/admin/pages/PlaceholderPage.d.ts +1 -0
  93. package/dist/admin/pages/PlaceholderPage.js +4 -0
  94. package/dist/admin/pages/PlaceholderPage.js.map +1 -0
  95. package/dist/admin/pages/PluginSettings.d.ts +1 -0
  96. package/dist/admin/pages/PluginSettings.js +6 -0
  97. package/dist/admin/pages/PluginSettings.js.map +1 -0
  98. package/dist/admin/pages/Plugins.d.ts +1 -0
  99. package/dist/admin/pages/Plugins.js +6 -0
  100. package/dist/admin/pages/Plugins.js.map +1 -0
  101. package/dist/admin/pages/PriceTypeEdit.d.ts +1 -0
  102. package/dist/admin/pages/PriceTypeEdit.js +5 -0
  103. package/dist/admin/pages/PriceTypeEdit.js.map +1 -0
  104. package/dist/admin/pages/PriceTypes.d.ts +1 -0
  105. package/dist/admin/pages/PriceTypes.js +5 -0
  106. package/dist/admin/pages/PriceTypes.js.map +1 -0
  107. package/dist/admin/pages/PriceValidator.d.ts +1 -0
  108. package/dist/admin/pages/PriceValidator.js +4 -0
  109. package/dist/admin/pages/PriceValidator.js.map +1 -0
  110. package/dist/admin/pages/ProductEdit.d.ts +1 -0
  111. package/dist/admin/pages/ProductEdit.js +14 -0
  112. package/dist/admin/pages/ProductEdit.js.map +1 -0
  113. package/dist/admin/pages/Products.d.ts +1 -0
  114. package/dist/admin/pages/Products.js +5 -0
  115. package/dist/admin/pages/Products.js.map +1 -0
  116. package/dist/admin/pages/Properties.d.ts +1 -0
  117. package/dist/admin/pages/Properties.js +5 -0
  118. package/dist/admin/pages/Properties.js.map +1 -0
  119. package/dist/admin/pages/PropertyEdit.d.ts +1 -0
  120. package/dist/admin/pages/PropertyEdit.js +5 -0
  121. package/dist/admin/pages/PropertyEdit.js.map +1 -0
  122. package/dist/admin/pages/PropertyOptionEdit.d.ts +1 -0
  123. package/dist/admin/pages/PropertyOptionEdit.js +7 -0
  124. package/dist/admin/pages/PropertyOptionEdit.js.map +1 -0
  125. package/dist/admin/pages/ReviewDetail.d.ts +1 -0
  126. package/dist/admin/pages/ReviewDetail.js +5 -0
  127. package/dist/admin/pages/ReviewDetail.js.map +1 -0
  128. package/dist/admin/pages/Reviews.d.ts +1 -0
  129. package/dist/admin/pages/Reviews.js +5 -0
  130. package/dist/admin/pages/Reviews.js.map +1 -0
  131. package/dist/admin/pages/SectionEdit.d.ts +1 -0
  132. package/dist/admin/pages/SectionEdit.js +8 -0
  133. package/dist/admin/pages/SectionEdit.js.map +1 -0
  134. package/dist/admin/pages/Sections.d.ts +1 -0
  135. package/dist/admin/pages/Sections.js +5 -0
  136. package/dist/admin/pages/Sections.js.map +1 -0
  137. package/dist/admin/pages/Settings.d.ts +1 -0
  138. package/dist/admin/pages/Settings.js +4 -0
  139. package/dist/admin/pages/Settings.js.map +1 -0
  140. package/dist/admin/pages/Shipping.d.ts +1 -0
  141. package/dist/admin/pages/Shipping.js +5 -0
  142. package/dist/admin/pages/Shipping.js.map +1 -0
  143. package/dist/admin/pages/ShippingMethodEdit.d.ts +1 -0
  144. package/dist/admin/pages/ShippingMethodEdit.js +5 -0
  145. package/dist/admin/pages/ShippingMethodEdit.js.map +1 -0
  146. package/dist/admin/pages/ShippingMethods.d.ts +1 -0
  147. package/dist/admin/pages/ShippingMethods.js +5 -0
  148. package/dist/admin/pages/ShippingMethods.js.map +1 -0
  149. package/dist/admin/pages/ShippingZoneEdit.d.ts +1 -0
  150. package/dist/admin/pages/ShippingZoneEdit.js +5 -0
  151. package/dist/admin/pages/ShippingZoneEdit.js.map +1 -0
  152. package/dist/admin/pages/ShippingZones.d.ts +1 -0
  153. package/dist/admin/pages/ShippingZones.js +5 -0
  154. package/dist/admin/pages/ShippingZones.js.map +1 -0
  155. package/dist/admin/pages/ThemeSettings.d.ts +1 -0
  156. package/dist/admin/pages/ThemeSettings.js +6 -0
  157. package/dist/admin/pages/ThemeSettings.js.map +1 -0
  158. package/dist/admin/pages/Themes.d.ts +1 -0
  159. package/dist/admin/pages/Themes.js +8 -0
  160. package/dist/admin/pages/Themes.js.map +1 -0
  161. package/dist/admin/pages/UserCategories.d.ts +1 -0
  162. package/dist/admin/pages/UserCategories.js +5 -0
  163. package/dist/admin/pages/UserCategories.js.map +1 -0
  164. package/dist/admin/pages/UserCategoryEdit.d.ts +1 -0
  165. package/dist/admin/pages/UserCategoryEdit.js +5 -0
  166. package/dist/admin/pages/UserCategoryEdit.js.map +1 -0
  167. package/dist/admin/pages/UserCategoryRuleEdit.d.ts +1 -0
  168. package/dist/admin/pages/UserCategoryRuleEdit.js +5 -0
  169. package/dist/admin/pages/UserCategoryRuleEdit.js.map +1 -0
  170. package/dist/admin/pages/UserCategoryRules.d.ts +1 -0
  171. package/dist/admin/pages/UserCategoryRules.js +5 -0
  172. package/dist/admin/pages/UserCategoryRules.js.map +1 -0
  173. package/dist/admin/pages/UserEdit.d.ts +1 -0
  174. package/dist/admin/pages/UserEdit.js +5 -0
  175. package/dist/admin/pages/UserEdit.js.map +1 -0
  176. package/dist/admin/pages/Users.d.ts +1 -0
  177. package/dist/admin/pages/Users.js +5 -0
  178. package/dist/admin/pages/Users.js.map +1 -0
  179. package/dist/auth/accept-invite.d.ts +38 -0
  180. package/dist/auth/authz.d.ts +79 -0
  181. package/dist/auth/drizzle-proxy.d.ts +13 -0
  182. package/dist/auth/env.d.ts +31 -0
  183. package/dist/auth/hooks.d.ts +63 -0
  184. package/dist/auth/index.d.ts +33 -0
  185. package/dist/auth/index.js +348 -0
  186. package/dist/auth/index.js.map +1 -0
  187. package/dist/auth/instance.d.ts +60 -0
  188. package/dist/auth/invite-email.d.ts +38 -0
  189. package/dist/auth/invite-store.d.ts +11 -0
  190. package/dist/auth/invite.d.ts +83 -0
  191. package/dist/auth/provision.d.ts +10 -0
  192. package/dist/auth/send-email.d.ts +19 -0
  193. package/dist/auth/session.d.ts +33 -0
  194. package/dist/cart-ui/CartButton.d.ts +1 -0
  195. package/dist/cart-ui/CartButton.js +4 -0
  196. package/dist/cart-ui/CartButton.js.map +1 -0
  197. package/dist/cart-ui/CartDrawer.d.ts +1 -0
  198. package/dist/cart-ui/CartDrawer.js +6 -0
  199. package/dist/cart-ui/CartDrawer.js.map +1 -0
  200. package/dist/cart-ui/CartItem.d.ts +6 -0
  201. package/dist/cart-ui/CartItem.js +5 -0
  202. package/dist/cart-ui/CartItem.js.map +1 -0
  203. package/dist/cart-ui/CartItemView.d.ts +7 -0
  204. package/dist/cart-ui/CartItemView.js +4 -0
  205. package/dist/cart-ui/CartItemView.js.map +1 -0
  206. package/dist/cart-ui/index.d.ts +5 -0
  207. package/dist/cart-ui/index.js +7 -0
  208. package/dist/cart-ui/index.js.map +1 -0
  209. package/dist/catalog-ui/ActiveFilters.d.ts +28 -0
  210. package/dist/catalog-ui/ActiveFilters.js +4 -0
  211. package/dist/catalog-ui/ActiveFilters.js.map +1 -0
  212. package/dist/catalog-ui/FilterSidebar.d.ts +31 -0
  213. package/dist/catalog-ui/FilterSidebar.js +4 -0
  214. package/dist/catalog-ui/FilterSidebar.js.map +1 -0
  215. package/dist/catalog-ui/ModificationSelector.d.ts +25 -0
  216. package/dist/catalog-ui/ModificationSelector.js +4 -0
  217. package/dist/catalog-ui/ModificationSelector.js.map +1 -0
  218. package/dist/catalog-ui/ProductCard.d.ts +22 -0
  219. package/dist/catalog-ui/ProductCard.js +4 -0
  220. package/dist/catalog-ui/ProductCard.js.map +1 -0
  221. package/dist/catalog-ui/ProductCharacteristics.d.ts +22 -0
  222. package/dist/catalog-ui/ProductCharacteristics.js +4 -0
  223. package/dist/catalog-ui/ProductCharacteristics.js.map +1 -0
  224. package/dist/catalog-ui/ProductGallery.d.ts +6 -0
  225. package/dist/catalog-ui/ProductGallery.js +4 -0
  226. package/dist/catalog-ui/ProductGallery.js.map +1 -0
  227. package/dist/catalog-ui/StockDisplay.d.ts +13 -0
  228. package/dist/catalog-ui/StockDisplay.js +4 -0
  229. package/dist/catalog-ui/StockDisplay.js.map +1 -0
  230. package/dist/catalog-ui/index.d.ts +7 -0
  231. package/dist/catalog-ui/index.js +10 -0
  232. package/dist/catalog-ui/index.js.map +1 -0
  233. package/dist/checkout-ui/AddressCard.d.ts +11 -0
  234. package/dist/checkout-ui/AddressCard.js +4 -0
  235. package/dist/checkout-ui/AddressCard.js.map +1 -0
  236. package/dist/checkout-ui/AddressSaveDialog.d.ts +10 -0
  237. package/dist/checkout-ui/AddressSaveDialog.js +4 -0
  238. package/dist/checkout-ui/AddressSaveDialog.js.map +1 -0
  239. package/dist/checkout-ui/AddressSelectorPopup.d.ts +17 -0
  240. package/dist/checkout-ui/AddressSelectorPopup.js +4 -0
  241. package/dist/checkout-ui/AddressSelectorPopup.js.map +1 -0
  242. package/dist/checkout-ui/CheckoutAuthBlock.d.ts +7 -0
  243. package/dist/checkout-ui/CheckoutAuthBlock.js +4 -0
  244. package/dist/checkout-ui/CheckoutAuthBlock.js.map +1 -0
  245. package/dist/checkout-ui/CheckoutContactForm.d.ts +11 -0
  246. package/dist/checkout-ui/CheckoutContactForm.js +4 -0
  247. package/dist/checkout-ui/CheckoutContactForm.js.map +1 -0
  248. package/dist/checkout-ui/CheckoutDeliveryForm.d.ts +16 -0
  249. package/dist/checkout-ui/CheckoutDeliveryForm.js +7 -0
  250. package/dist/checkout-ui/CheckoutDeliveryForm.js.map +1 -0
  251. package/dist/checkout-ui/CheckoutOrderSummary.d.ts +11 -0
  252. package/dist/checkout-ui/CheckoutOrderSummary.js +4 -0
  253. package/dist/checkout-ui/CheckoutOrderSummary.js.map +1 -0
  254. package/dist/checkout-ui/CheckoutPaymentForm.d.ts +6 -0
  255. package/dist/checkout-ui/CheckoutPaymentForm.js +4 -0
  256. package/dist/checkout-ui/CheckoutPaymentForm.js.map +1 -0
  257. package/dist/checkout-ui/CheckoutRecipientForm.d.ts +13 -0
  258. package/dist/checkout-ui/CheckoutRecipientForm.js +7 -0
  259. package/dist/checkout-ui/CheckoutRecipientForm.js.map +1 -0
  260. package/dist/checkout-ui/RecipientCard.d.ts +12 -0
  261. package/dist/checkout-ui/RecipientCard.js +4 -0
  262. package/dist/checkout-ui/RecipientCard.js.map +1 -0
  263. package/dist/checkout-ui/RecipientSaveDialog.d.ts +10 -0
  264. package/dist/checkout-ui/RecipientSaveDialog.js +4 -0
  265. package/dist/checkout-ui/RecipientSaveDialog.js.map +1 -0
  266. package/dist/checkout-ui/RecipientSelectorPopup.d.ts +20 -0
  267. package/dist/checkout-ui/RecipientSelectorPopup.js +4 -0
  268. package/dist/checkout-ui/RecipientSelectorPopup.js.map +1 -0
  269. package/dist/checkout-ui/index.d.ts +12 -0
  270. package/dist/checkout-ui/index.js +15 -0
  271. package/dist/checkout-ui/index.js.map +1 -0
  272. package/dist/chunk-23G3T7E3.js +26 -0
  273. package/dist/chunk-23G3T7E3.js.map +1 -0
  274. package/dist/chunk-23KPFM3P.js +47 -0
  275. package/dist/chunk-23KPFM3P.js.map +1 -0
  276. package/dist/chunk-26OAKQPA.js +83 -0
  277. package/dist/chunk-26OAKQPA.js.map +1 -0
  278. package/dist/chunk-2AZMVBJI.js +58 -0
  279. package/dist/chunk-2AZMVBJI.js.map +1 -0
  280. package/dist/chunk-2C5VTSRE.js +85 -0
  281. package/dist/chunk-2C5VTSRE.js.map +1 -0
  282. package/dist/chunk-2FX2C6KG.js +3 -0
  283. package/dist/chunk-2FX2C6KG.js.map +1 -0
  284. package/dist/chunk-2K6FGG5B.js +78 -0
  285. package/dist/chunk-2K6FGG5B.js.map +1 -0
  286. package/dist/chunk-2KKQO57H.js +3 -0
  287. package/dist/chunk-2KKQO57H.js.map +1 -0
  288. package/dist/chunk-2Q3JIBH2.js +85 -0
  289. package/dist/chunk-2Q3JIBH2.js.map +1 -0
  290. package/dist/chunk-2VKURKLN.js +10 -0
  291. package/dist/chunk-2VKURKLN.js.map +1 -0
  292. package/dist/chunk-2ZFFIRA7.js +94 -0
  293. package/dist/chunk-2ZFFIRA7.js.map +1 -0
  294. package/dist/chunk-2ZMYMDWX.js +506 -0
  295. package/dist/chunk-2ZMYMDWX.js.map +1 -0
  296. package/dist/chunk-2ZOJ3BRO.js +101 -0
  297. package/dist/chunk-2ZOJ3BRO.js.map +1 -0
  298. package/dist/chunk-34RUH5Q5.js +56 -0
  299. package/dist/chunk-34RUH5Q5.js.map +1 -0
  300. package/dist/chunk-36KE54CI.js +138 -0
  301. package/dist/chunk-36KE54CI.js.map +1 -0
  302. package/dist/chunk-36N7MZUX.js +49 -0
  303. package/dist/chunk-36N7MZUX.js.map +1 -0
  304. package/dist/chunk-3AESWXJD.js +398 -0
  305. package/dist/chunk-3AESWXJD.js.map +1 -0
  306. package/dist/chunk-3AJKXVPJ.js +68 -0
  307. package/dist/chunk-3AJKXVPJ.js.map +1 -0
  308. package/dist/chunk-3DJRL4IK.js +292 -0
  309. package/dist/chunk-3DJRL4IK.js.map +1 -0
  310. package/dist/chunk-3IGJUUBL.js +60 -0
  311. package/dist/chunk-3IGJUUBL.js.map +1 -0
  312. package/dist/chunk-3LFRV3X6.js +237 -0
  313. package/dist/chunk-3LFRV3X6.js.map +1 -0
  314. package/dist/chunk-3MK6QUQK.js +24 -0
  315. package/dist/chunk-3MK6QUQK.js.map +1 -0
  316. package/dist/chunk-3SW2KIUN.js +103 -0
  317. package/dist/chunk-3SW2KIUN.js.map +1 -0
  318. package/dist/chunk-3WTEL7HT.js +18 -0
  319. package/dist/chunk-3WTEL7HT.js.map +1 -0
  320. package/dist/chunk-3XVESNZC.js +77 -0
  321. package/dist/chunk-3XVESNZC.js.map +1 -0
  322. package/dist/chunk-43LZRWRG.js +57 -0
  323. package/dist/chunk-43LZRWRG.js.map +1 -0
  324. package/dist/chunk-45B5PZRY.js +460 -0
  325. package/dist/chunk-45B5PZRY.js.map +1 -0
  326. package/dist/chunk-45QHWHQX.js +26 -0
  327. package/dist/chunk-45QHWHQX.js.map +1 -0
  328. package/dist/chunk-473Q4TND.js +35 -0
  329. package/dist/chunk-473Q4TND.js.map +1 -0
  330. package/dist/chunk-4DRH2QKU.js +123 -0
  331. package/dist/chunk-4DRH2QKU.js.map +1 -0
  332. package/dist/chunk-4DVL46A2.js +42 -0
  333. package/dist/chunk-4DVL46A2.js.map +1 -0
  334. package/dist/chunk-4FV5KTST.js +49 -0
  335. package/dist/chunk-4FV5KTST.js.map +1 -0
  336. package/dist/chunk-4KSSZJB6.js +717 -0
  337. package/dist/chunk-4KSSZJB6.js.map +1 -0
  338. package/dist/chunk-4LNEHCYO.js +62 -0
  339. package/dist/chunk-4LNEHCYO.js.map +1 -0
  340. package/dist/chunk-4LWRNI4H.js +109 -0
  341. package/dist/chunk-4LWRNI4H.js.map +1 -0
  342. package/dist/chunk-4N7CLW6Y.js +72 -0
  343. package/dist/chunk-4N7CLW6Y.js.map +1 -0
  344. package/dist/chunk-4YRIIXCU.js +70 -0
  345. package/dist/chunk-4YRIIXCU.js.map +1 -0
  346. package/dist/chunk-5A2ANDF7.js +368 -0
  347. package/dist/chunk-5A2ANDF7.js.map +1 -0
  348. package/dist/chunk-5BSNLAZG.js +98 -0
  349. package/dist/chunk-5BSNLAZG.js.map +1 -0
  350. package/dist/chunk-5C2YI56N.js +38 -0
  351. package/dist/chunk-5C2YI56N.js.map +1 -0
  352. package/dist/chunk-5DAAQK77.js +264 -0
  353. package/dist/chunk-5DAAQK77.js.map +1 -0
  354. package/dist/chunk-5GOKOB4W.js +121 -0
  355. package/dist/chunk-5GOKOB4W.js.map +1 -0
  356. package/dist/chunk-5JTWID4O.js +3 -0
  357. package/dist/chunk-5JTWID4O.js.map +1 -0
  358. package/dist/chunk-5O4GVI37.js +18 -0
  359. package/dist/chunk-5O4GVI37.js.map +1 -0
  360. package/dist/chunk-5QDPW3VW.js +3 -0
  361. package/dist/chunk-5QDPW3VW.js.map +1 -0
  362. package/dist/chunk-5UP3MCBC.js +118 -0
  363. package/dist/chunk-5UP3MCBC.js.map +1 -0
  364. package/dist/chunk-5XW3TCGE.js +132 -0
  365. package/dist/chunk-5XW3TCGE.js.map +1 -0
  366. package/dist/chunk-64LMUHDA.js +122 -0
  367. package/dist/chunk-64LMUHDA.js.map +1 -0
  368. package/dist/chunk-6CF3TA4X.js +23 -0
  369. package/dist/chunk-6CF3TA4X.js.map +1 -0
  370. package/dist/chunk-6D2UAQNA.js +36 -0
  371. package/dist/chunk-6D2UAQNA.js.map +1 -0
  372. package/dist/chunk-6EQJNNCU.js +39 -0
  373. package/dist/chunk-6EQJNNCU.js.map +1 -0
  374. package/dist/chunk-6J52Y6TD.js +38 -0
  375. package/dist/chunk-6J52Y6TD.js.map +1 -0
  376. package/dist/chunk-6SGVGV62.js +24 -0
  377. package/dist/chunk-6SGVGV62.js.map +1 -0
  378. package/dist/chunk-6ZC3GWAR.js +37 -0
  379. package/dist/chunk-6ZC3GWAR.js.map +1 -0
  380. package/dist/chunk-77RQYFQK.js +23 -0
  381. package/dist/chunk-77RQYFQK.js.map +1 -0
  382. package/dist/chunk-7JQNN4AX.js +64 -0
  383. package/dist/chunk-7JQNN4AX.js.map +1 -0
  384. package/dist/chunk-7RYIOR2A.js +183 -0
  385. package/dist/chunk-7RYIOR2A.js.map +1 -0
  386. package/dist/chunk-7S3MSMHE.js +90 -0
  387. package/dist/chunk-7S3MSMHE.js.map +1 -0
  388. package/dist/chunk-7ZS5RS5Z.js +172 -0
  389. package/dist/chunk-7ZS5RS5Z.js.map +1 -0
  390. package/dist/chunk-AFTVAKEC.js +25 -0
  391. package/dist/chunk-AFTVAKEC.js.map +1 -0
  392. package/dist/chunk-ALVECZR7.js +8 -0
  393. package/dist/chunk-ALVECZR7.js.map +1 -0
  394. package/dist/chunk-AN54YETW.js +20 -0
  395. package/dist/chunk-AN54YETW.js.map +1 -0
  396. package/dist/chunk-ARVI27TR.js +324 -0
  397. package/dist/chunk-ARVI27TR.js.map +1 -0
  398. package/dist/chunk-ASFG2LKM.js +10 -0
  399. package/dist/chunk-ASFG2LKM.js.map +1 -0
  400. package/dist/chunk-AVHWYNGC.js +502 -0
  401. package/dist/chunk-AVHWYNGC.js.map +1 -0
  402. package/dist/chunk-B6ZJSQ4P.js +30 -0
  403. package/dist/chunk-B6ZJSQ4P.js.map +1 -0
  404. package/dist/chunk-BDKJ3ITL.js +1311 -0
  405. package/dist/chunk-BDKJ3ITL.js.map +1 -0
  406. package/dist/chunk-BDR6DRJX.js +47 -0
  407. package/dist/chunk-BDR6DRJX.js.map +1 -0
  408. package/dist/chunk-BSISQVY4.js +36 -0
  409. package/dist/chunk-BSISQVY4.js.map +1 -0
  410. package/dist/chunk-BTOPIWDA.js +144 -0
  411. package/dist/chunk-BTOPIWDA.js.map +1 -0
  412. package/dist/chunk-BWECTMUZ.js +101 -0
  413. package/dist/chunk-BWECTMUZ.js.map +1 -0
  414. package/dist/chunk-BZAWFPGX.js +91 -0
  415. package/dist/chunk-BZAWFPGX.js.map +1 -0
  416. package/dist/chunk-CETG5B3V.js +154 -0
  417. package/dist/chunk-CETG5B3V.js.map +1 -0
  418. package/dist/chunk-CFE2YHHY.js +52 -0
  419. package/dist/chunk-CFE2YHHY.js.map +1 -0
  420. package/dist/chunk-CKD5KAD2.js +179 -0
  421. package/dist/chunk-CKD5KAD2.js.map +1 -0
  422. package/dist/chunk-CMLIVKLK.js +319 -0
  423. package/dist/chunk-CMLIVKLK.js.map +1 -0
  424. package/dist/chunk-CRAH3NMI.js +96 -0
  425. package/dist/chunk-CRAH3NMI.js.map +1 -0
  426. package/dist/chunk-CTFOP3GR.js +3 -0
  427. package/dist/chunk-CTFOP3GR.js.map +1 -0
  428. package/dist/chunk-CZJWLCK7.js +3 -0
  429. package/dist/chunk-CZJWLCK7.js.map +1 -0
  430. package/dist/chunk-D3G6XGKV.js +82 -0
  431. package/dist/chunk-D3G6XGKV.js.map +1 -0
  432. package/dist/chunk-D55EEFVJ.js +48 -0
  433. package/dist/chunk-D55EEFVJ.js.map +1 -0
  434. package/dist/chunk-DOAFQERM.js +15 -0
  435. package/dist/chunk-DOAFQERM.js.map +1 -0
  436. package/dist/chunk-DR5R3J76.js +154 -0
  437. package/dist/chunk-DR5R3J76.js.map +1 -0
  438. package/dist/chunk-DRWZUYAN.js +15 -0
  439. package/dist/chunk-DRWZUYAN.js.map +1 -0
  440. package/dist/chunk-DW64EGU4.js +300 -0
  441. package/dist/chunk-DW64EGU4.js.map +1 -0
  442. package/dist/chunk-DWO7VQQT.js +253 -0
  443. package/dist/chunk-DWO7VQQT.js.map +1 -0
  444. package/dist/chunk-DZDZ6SSB.js +54 -0
  445. package/dist/chunk-DZDZ6SSB.js.map +1 -0
  446. package/dist/chunk-E6TWPPJC.js +21 -0
  447. package/dist/chunk-E6TWPPJC.js.map +1 -0
  448. package/dist/chunk-EFLUQ3O7.js +29 -0
  449. package/dist/chunk-EFLUQ3O7.js.map +1 -0
  450. package/dist/chunk-ELAU7VSL.js +157 -0
  451. package/dist/chunk-ELAU7VSL.js.map +1 -0
  452. package/dist/chunk-EQDFU2YI.js +228 -0
  453. package/dist/chunk-EQDFU2YI.js.map +1 -0
  454. package/dist/chunk-ETDZDO35.js +30 -0
  455. package/dist/chunk-ETDZDO35.js.map +1 -0
  456. package/dist/chunk-EZFEM6WJ.js +26 -0
  457. package/dist/chunk-EZFEM6WJ.js.map +1 -0
  458. package/dist/chunk-F2N5BY57.js +513 -0
  459. package/dist/chunk-F2N5BY57.js.map +1 -0
  460. package/dist/chunk-FBCWGQCA.js +38 -0
  461. package/dist/chunk-FBCWGQCA.js.map +1 -0
  462. package/dist/chunk-FETHDFGX.js +28 -0
  463. package/dist/chunk-FETHDFGX.js.map +1 -0
  464. package/dist/chunk-FFOYJA7C.js +52 -0
  465. package/dist/chunk-FFOYJA7C.js.map +1 -0
  466. package/dist/chunk-FJN35H2F.js +23 -0
  467. package/dist/chunk-FJN35H2F.js.map +1 -0
  468. package/dist/chunk-FSWFG3W5.js +434 -0
  469. package/dist/chunk-FSWFG3W5.js.map +1 -0
  470. package/dist/chunk-FVUVJDMM.js +302 -0
  471. package/dist/chunk-FVUVJDMM.js.map +1 -0
  472. package/dist/chunk-GA3G4WSB.js +43 -0
  473. package/dist/chunk-GA3G4WSB.js.map +1 -0
  474. package/dist/chunk-GBX3EEET.js +50 -0
  475. package/dist/chunk-GBX3EEET.js.map +1 -0
  476. package/dist/chunk-GCV75UWZ.js +146 -0
  477. package/dist/chunk-GCV75UWZ.js.map +1 -0
  478. package/dist/chunk-GDMEC2JX.js +261 -0
  479. package/dist/chunk-GDMEC2JX.js.map +1 -0
  480. package/dist/chunk-GDOSHZKL.js +26 -0
  481. package/dist/chunk-GDOSHZKL.js.map +1 -0
  482. package/dist/chunk-GEFYA744.js +218 -0
  483. package/dist/chunk-GEFYA744.js.map +1 -0
  484. package/dist/chunk-GNPMPJBU.js +148 -0
  485. package/dist/chunk-GNPMPJBU.js.map +1 -0
  486. package/dist/chunk-GU4OCP5D.js +3 -0
  487. package/dist/chunk-GU4OCP5D.js.map +1 -0
  488. package/dist/chunk-GZWE2546.js +65 -0
  489. package/dist/chunk-GZWE2546.js.map +1 -0
  490. package/dist/chunk-HDKJLZP5.js +90 -0
  491. package/dist/chunk-HDKJLZP5.js.map +1 -0
  492. package/dist/chunk-HDZ2KCVD.js +118 -0
  493. package/dist/chunk-HDZ2KCVD.js.map +1 -0
  494. package/dist/chunk-HFELN34F.js +24 -0
  495. package/dist/chunk-HFELN34F.js.map +1 -0
  496. package/dist/chunk-HG5KZVG2.js +254 -0
  497. package/dist/chunk-HG5KZVG2.js.map +1 -0
  498. package/dist/chunk-HGKPFE57.js +302 -0
  499. package/dist/chunk-HGKPFE57.js.map +1 -0
  500. package/dist/chunk-HIAANCKI.js +367 -0
  501. package/dist/chunk-HIAANCKI.js.map +1 -0
  502. package/dist/chunk-HV3QOXWS.js +94 -0
  503. package/dist/chunk-HV3QOXWS.js.map +1 -0
  504. package/dist/chunk-HW3CZJDX.js +26 -0
  505. package/dist/chunk-HW3CZJDX.js.map +1 -0
  506. package/dist/chunk-HYLFXHZ4.js +39 -0
  507. package/dist/chunk-HYLFXHZ4.js.map +1 -0
  508. package/dist/chunk-I3U4TB4H.js +323 -0
  509. package/dist/chunk-I3U4TB4H.js.map +1 -0
  510. package/dist/chunk-I4LPT6E5.js +163 -0
  511. package/dist/chunk-I4LPT6E5.js.map +1 -0
  512. package/dist/chunk-I65ATTOO.js +97 -0
  513. package/dist/chunk-I65ATTOO.js.map +1 -0
  514. package/dist/chunk-I7WLAPVP.js +3 -0
  515. package/dist/chunk-I7WLAPVP.js.map +1 -0
  516. package/dist/chunk-IBKHUHET.js +13 -0
  517. package/dist/chunk-IBKHUHET.js.map +1 -0
  518. package/dist/chunk-IFL7XD6B.js +32 -0
  519. package/dist/chunk-IFL7XD6B.js.map +1 -0
  520. package/dist/chunk-IMVSNS6Y.js +72 -0
  521. package/dist/chunk-IMVSNS6Y.js.map +1 -0
  522. package/dist/chunk-INYK2AFU.js +309 -0
  523. package/dist/chunk-INYK2AFU.js.map +1 -0
  524. package/dist/chunk-IODBINZ4.js +20 -0
  525. package/dist/chunk-IODBINZ4.js.map +1 -0
  526. package/dist/chunk-IP2II4EJ.js +170 -0
  527. package/dist/chunk-IP2II4EJ.js.map +1 -0
  528. package/dist/chunk-IPQRYSSD.js +3 -0
  529. package/dist/chunk-IPQRYSSD.js.map +1 -0
  530. package/dist/chunk-IRR2UMIH.js +13 -0
  531. package/dist/chunk-IRR2UMIH.js.map +1 -0
  532. package/dist/chunk-ISBZVXFF.js +108 -0
  533. package/dist/chunk-ISBZVXFF.js.map +1 -0
  534. package/dist/chunk-IULIXR7J.js +37 -0
  535. package/dist/chunk-IULIXR7J.js.map +1 -0
  536. package/dist/chunk-J4DP2OAU.js +142 -0
  537. package/dist/chunk-J4DP2OAU.js.map +1 -0
  538. package/dist/chunk-JG3KDN6H.js +26 -0
  539. package/dist/chunk-JG3KDN6H.js.map +1 -0
  540. package/dist/chunk-JGO2CL3O.js +43 -0
  541. package/dist/chunk-JGO2CL3O.js.map +1 -0
  542. package/dist/chunk-JO63AJJG.js +226 -0
  543. package/dist/chunk-JO63AJJG.js.map +1 -0
  544. package/dist/chunk-JORMRKZX.js +50 -0
  545. package/dist/chunk-JORMRKZX.js.map +1 -0
  546. package/dist/chunk-JRX5ACKU.js +20 -0
  547. package/dist/chunk-JRX5ACKU.js.map +1 -0
  548. package/dist/chunk-JUT26UJC.js +141 -0
  549. package/dist/chunk-JUT26UJC.js.map +1 -0
  550. package/dist/chunk-K53S2TG5.js +218 -0
  551. package/dist/chunk-K53S2TG5.js.map +1 -0
  552. package/dist/chunk-KLRI2TQ3.js +15 -0
  553. package/dist/chunk-KLRI2TQ3.js.map +1 -0
  554. package/dist/chunk-KLU72IVW.js +120 -0
  555. package/dist/chunk-KLU72IVW.js.map +1 -0
  556. package/dist/chunk-KXGQVXV5.js +3 -0
  557. package/dist/chunk-KXGQVXV5.js.map +1 -0
  558. package/dist/chunk-KYQQL3WB.js +3 -0
  559. package/dist/chunk-KYQQL3WB.js.map +1 -0
  560. package/dist/chunk-L3CXS3RA.js +20 -0
  561. package/dist/chunk-L3CXS3RA.js.map +1 -0
  562. package/dist/chunk-L3MIV7VH.js +47 -0
  563. package/dist/chunk-L3MIV7VH.js.map +1 -0
  564. package/dist/chunk-L7DU5MY7.js +285 -0
  565. package/dist/chunk-L7DU5MY7.js.map +1 -0
  566. package/dist/chunk-LL3IE3SI.js +26 -0
  567. package/dist/chunk-LL3IE3SI.js.map +1 -0
  568. package/dist/chunk-LL6RMSEC.js +53 -0
  569. package/dist/chunk-LL6RMSEC.js.map +1 -0
  570. package/dist/chunk-LNEHQXYC.js +159 -0
  571. package/dist/chunk-LNEHQXYC.js.map +1 -0
  572. package/dist/chunk-LRZSDJS7.js +27 -0
  573. package/dist/chunk-LRZSDJS7.js.map +1 -0
  574. package/dist/chunk-LS3LMIS4.js +87 -0
  575. package/dist/chunk-LS3LMIS4.js.map +1 -0
  576. package/dist/chunk-LUOSFQD5.js +28 -0
  577. package/dist/chunk-LUOSFQD5.js.map +1 -0
  578. package/dist/chunk-LVIY3WV5.js +102 -0
  579. package/dist/chunk-LVIY3WV5.js.map +1 -0
  580. package/dist/chunk-LZYG4G4X.js +43 -0
  581. package/dist/chunk-LZYG4G4X.js.map +1 -0
  582. package/dist/chunk-M2OQPMVT.js +3 -0
  583. package/dist/chunk-M2OQPMVT.js.map +1 -0
  584. package/dist/chunk-M3G257NG.js +29 -0
  585. package/dist/chunk-M3G257NG.js.map +1 -0
  586. package/dist/chunk-MBDMH57M.js +307 -0
  587. package/dist/chunk-MBDMH57M.js.map +1 -0
  588. package/dist/chunk-MCXTDDUI.js +62 -0
  589. package/dist/chunk-MCXTDDUI.js.map +1 -0
  590. package/dist/chunk-MJ7TXDR6.js +11 -0
  591. package/dist/chunk-MJ7TXDR6.js.map +1 -0
  592. package/dist/chunk-MLJ2I5US.js +108 -0
  593. package/dist/chunk-MLJ2I5US.js.map +1 -0
  594. package/dist/chunk-MQ422VVU.js +45 -0
  595. package/dist/chunk-MQ422VVU.js.map +1 -0
  596. package/dist/chunk-MTGH4EXD.js +27 -0
  597. package/dist/chunk-MTGH4EXD.js.map +1 -0
  598. package/dist/chunk-MX2JHIZP.js +29 -0
  599. package/dist/chunk-MX2JHIZP.js.map +1 -0
  600. package/dist/chunk-MYNYNET3.js +71 -0
  601. package/dist/chunk-MYNYNET3.js.map +1 -0
  602. package/dist/chunk-NBND7WAT.js +33 -0
  603. package/dist/chunk-NBND7WAT.js.map +1 -0
  604. package/dist/chunk-NEUEOUZA.js +62 -0
  605. package/dist/chunk-NEUEOUZA.js.map +1 -0
  606. package/dist/chunk-NLK2FJGF.js +52 -0
  607. package/dist/chunk-NLK2FJGF.js.map +1 -0
  608. package/dist/chunk-NOGEBCZM.js +38 -0
  609. package/dist/chunk-NOGEBCZM.js.map +1 -0
  610. package/dist/chunk-NRZS2NEG.js +213 -0
  611. package/dist/chunk-NRZS2NEG.js.map +1 -0
  612. package/dist/chunk-NSKMDSE7.js +63 -0
  613. package/dist/chunk-NSKMDSE7.js.map +1 -0
  614. package/dist/chunk-NZI53CGC.js +45 -0
  615. package/dist/chunk-NZI53CGC.js.map +1 -0
  616. package/dist/chunk-O5EHX5YI.js +3 -0
  617. package/dist/chunk-O5EHX5YI.js.map +1 -0
  618. package/dist/chunk-OAYDU5TD.js +104 -0
  619. package/dist/chunk-OAYDU5TD.js.map +1 -0
  620. package/dist/chunk-ODV2GIRU.js +63 -0
  621. package/dist/chunk-ODV2GIRU.js.map +1 -0
  622. package/dist/chunk-OEV4FPTR.js +140 -0
  623. package/dist/chunk-OEV4FPTR.js.map +1 -0
  624. package/dist/chunk-OMPF7GTV.js +63 -0
  625. package/dist/chunk-OMPF7GTV.js.map +1 -0
  626. package/dist/chunk-OWHK34K6.js +3 -0
  627. package/dist/chunk-OWHK34K6.js.map +1 -0
  628. package/dist/chunk-OYSLI33V.js +192 -0
  629. package/dist/chunk-OYSLI33V.js.map +1 -0
  630. package/dist/chunk-P6OAVA6S.js +301 -0
  631. package/dist/chunk-P6OAVA6S.js.map +1 -0
  632. package/dist/chunk-PKPSEUTH.js +416 -0
  633. package/dist/chunk-PKPSEUTH.js.map +1 -0
  634. package/dist/chunk-PKSF2WRO.js +20 -0
  635. package/dist/chunk-PKSF2WRO.js.map +1 -0
  636. package/dist/chunk-PO4IZSDA.js +79 -0
  637. package/dist/chunk-PO4IZSDA.js.map +1 -0
  638. package/dist/chunk-PUHHIN2C.js +476 -0
  639. package/dist/chunk-PUHHIN2C.js.map +1 -0
  640. package/dist/chunk-PXWQPR5U.js +166 -0
  641. package/dist/chunk-PXWQPR5U.js.map +1 -0
  642. package/dist/chunk-PZ5AY32C.js +9 -0
  643. package/dist/chunk-PZ5AY32C.js.map +1 -0
  644. package/dist/chunk-Q6LPYDSV.js +313 -0
  645. package/dist/chunk-Q6LPYDSV.js.map +1 -0
  646. package/dist/chunk-Q7AOMRRU.js +43 -0
  647. package/dist/chunk-Q7AOMRRU.js.map +1 -0
  648. package/dist/chunk-QCTPHFFT.js +21 -0
  649. package/dist/chunk-QCTPHFFT.js.map +1 -0
  650. package/dist/chunk-QDSHCGZP.js +33 -0
  651. package/dist/chunk-QDSHCGZP.js.map +1 -0
  652. package/dist/chunk-QGI7PAOJ.js +30 -0
  653. package/dist/chunk-QGI7PAOJ.js.map +1 -0
  654. package/dist/chunk-QPHGCZ22.js +22 -0
  655. package/dist/chunk-QPHGCZ22.js.map +1 -0
  656. package/dist/chunk-QQDFDCU7.js +93 -0
  657. package/dist/chunk-QQDFDCU7.js.map +1 -0
  658. package/dist/chunk-QXJIUF4T.js +15 -0
  659. package/dist/chunk-QXJIUF4T.js.map +1 -0
  660. package/dist/chunk-RFQAQV3K.js +118 -0
  661. package/dist/chunk-RFQAQV3K.js.map +1 -0
  662. package/dist/chunk-RJLDWZ2W.js +28 -0
  663. package/dist/chunk-RJLDWZ2W.js.map +1 -0
  664. package/dist/chunk-RMPQOZUE.js +3 -0
  665. package/dist/chunk-RMPQOZUE.js.map +1 -0
  666. package/dist/chunk-RSL3DLME.js +256 -0
  667. package/dist/chunk-RSL3DLME.js.map +1 -0
  668. package/dist/chunk-RXDCW5CH.js +38 -0
  669. package/dist/chunk-RXDCW5CH.js.map +1 -0
  670. package/dist/chunk-SACNJKU5.js +95 -0
  671. package/dist/chunk-SACNJKU5.js.map +1 -0
  672. package/dist/chunk-SECPVOGP.js +11 -0
  673. package/dist/chunk-SECPVOGP.js.map +1 -0
  674. package/dist/chunk-SFVHV7R3.js +311 -0
  675. package/dist/chunk-SFVHV7R3.js.map +1 -0
  676. package/dist/chunk-SG2BHFVT.js +134 -0
  677. package/dist/chunk-SG2BHFVT.js.map +1 -0
  678. package/dist/chunk-SGUAXELO.js +27 -0
  679. package/dist/chunk-SGUAXELO.js.map +1 -0
  680. package/dist/chunk-SHMJRRUY.js +3 -0
  681. package/dist/chunk-SHMJRRUY.js.map +1 -0
  682. package/dist/chunk-SQIVVHWN.js +23 -0
  683. package/dist/chunk-SQIVVHWN.js.map +1 -0
  684. package/dist/chunk-SU3R36OS.js +169 -0
  685. package/dist/chunk-SU3R36OS.js.map +1 -0
  686. package/dist/chunk-T2UW5EWA.js +327 -0
  687. package/dist/chunk-T2UW5EWA.js.map +1 -0
  688. package/dist/chunk-TKJXSSVT.js +94 -0
  689. package/dist/chunk-TKJXSSVT.js.map +1 -0
  690. package/dist/chunk-TS3EGKET.js +38 -0
  691. package/dist/chunk-TS3EGKET.js.map +1 -0
  692. package/dist/chunk-TTCWYWQU.js +31 -0
  693. package/dist/chunk-TTCWYWQU.js.map +1 -0
  694. package/dist/chunk-TY7P22ZE.js +334 -0
  695. package/dist/chunk-TY7P22ZE.js.map +1 -0
  696. package/dist/chunk-TZMNJIAU.js +50 -0
  697. package/dist/chunk-TZMNJIAU.js.map +1 -0
  698. package/dist/chunk-UBLERNL3.js +595 -0
  699. package/dist/chunk-UBLERNL3.js.map +1 -0
  700. package/dist/chunk-UCZQWXCW.js +216 -0
  701. package/dist/chunk-UCZQWXCW.js.map +1 -0
  702. package/dist/chunk-UIKJ4EUT.js +65 -0
  703. package/dist/chunk-UIKJ4EUT.js.map +1 -0
  704. package/dist/chunk-UJNINZMO.js +40 -0
  705. package/dist/chunk-UJNINZMO.js.map +1 -0
  706. package/dist/chunk-ULHJAUDC.js +78 -0
  707. package/dist/chunk-ULHJAUDC.js.map +1 -0
  708. package/dist/chunk-UVQZ4IPW.js +96 -0
  709. package/dist/chunk-UVQZ4IPW.js.map +1 -0
  710. package/dist/chunk-V23ZBHSL.js +69 -0
  711. package/dist/chunk-V23ZBHSL.js.map +1 -0
  712. package/dist/chunk-V2Q67K4F.js +32 -0
  713. package/dist/chunk-V2Q67K4F.js.map +1 -0
  714. package/dist/chunk-V5N6TAJC.js +395 -0
  715. package/dist/chunk-V5N6TAJC.js.map +1 -0
  716. package/dist/chunk-V6OUDHXW.js +31 -0
  717. package/dist/chunk-V6OUDHXW.js.map +1 -0
  718. package/dist/chunk-VHO66UIW.js +29 -0
  719. package/dist/chunk-VHO66UIW.js.map +1 -0
  720. package/dist/chunk-VMMM2RIG.js +8 -0
  721. package/dist/chunk-VMMM2RIG.js.map +1 -0
  722. package/dist/chunk-VNIVHR4Z.js +327 -0
  723. package/dist/chunk-VNIVHR4Z.js.map +1 -0
  724. package/dist/chunk-VQYOEDXN.js +3 -0
  725. package/dist/chunk-VQYOEDXN.js.map +1 -0
  726. package/dist/chunk-VSXW336V.js +13 -0
  727. package/dist/chunk-VSXW336V.js.map +1 -0
  728. package/dist/chunk-VT3TJVSJ.js +118 -0
  729. package/dist/chunk-VT3TJVSJ.js.map +1 -0
  730. package/dist/chunk-WCKHXPYN.js +68 -0
  731. package/dist/chunk-WCKHXPYN.js.map +1 -0
  732. package/dist/chunk-WCSVGTBO.js +3 -0
  733. package/dist/chunk-WCSVGTBO.js.map +1 -0
  734. package/dist/chunk-WGJTOHEA.js +3 -0
  735. package/dist/chunk-WGJTOHEA.js.map +1 -0
  736. package/dist/chunk-WUXO6KCX.js +40 -0
  737. package/dist/chunk-WUXO6KCX.js.map +1 -0
  738. package/dist/chunk-XBHNK4ER.js +92 -0
  739. package/dist/chunk-XBHNK4ER.js.map +1 -0
  740. package/dist/chunk-XBXHWNNS.js +44 -0
  741. package/dist/chunk-XBXHWNNS.js.map +1 -0
  742. package/dist/chunk-XHM4DSKW.js +17 -0
  743. package/dist/chunk-XHM4DSKW.js.map +1 -0
  744. package/dist/chunk-XU3QEACK.js +3 -0
  745. package/dist/chunk-XU3QEACK.js.map +1 -0
  746. package/dist/chunk-YAAGMUI6.js +29 -0
  747. package/dist/chunk-YAAGMUI6.js.map +1 -0
  748. package/dist/chunk-YAVF46NP.js +103 -0
  749. package/dist/chunk-YAVF46NP.js.map +1 -0
  750. package/dist/chunk-YDSW4PMT.js +3 -0
  751. package/dist/chunk-YDSW4PMT.js.map +1 -0
  752. package/dist/chunk-YJSUFOSO.js +27 -0
  753. package/dist/chunk-YJSUFOSO.js.map +1 -0
  754. package/dist/chunk-YL2AW5T6.js +3 -0
  755. package/dist/chunk-YL2AW5T6.js.map +1 -0
  756. package/dist/chunk-YLVDMRLC.js +40 -0
  757. package/dist/chunk-YLVDMRLC.js.map +1 -0
  758. package/dist/chunk-YMAXW25I.js +587 -0
  759. package/dist/chunk-YMAXW25I.js.map +1 -0
  760. package/dist/chunk-YMT764VJ.js +81 -0
  761. package/dist/chunk-YMT764VJ.js.map +1 -0
  762. package/dist/chunk-YRBASM6H.js +160 -0
  763. package/dist/chunk-YRBASM6H.js.map +1 -0
  764. package/dist/chunk-Z3EJA3GJ.js +3 -0
  765. package/dist/chunk-Z3EJA3GJ.js.map +1 -0
  766. package/dist/chunk-Z5W5Q64K.js +3 -0
  767. package/dist/chunk-Z5W5Q64K.js.map +1 -0
  768. package/dist/chunk-Z7XTHXGI.js +87 -0
  769. package/dist/chunk-Z7XTHXGI.js.map +1 -0
  770. package/dist/chunk-ZNKTJGLV.js +183 -0
  771. package/dist/chunk-ZNKTJGLV.js.map +1 -0
  772. package/dist/chunk-ZO5HCIKL.js +11 -0
  773. package/dist/chunk-ZO5HCIKL.js.map +1 -0
  774. package/dist/chunk-ZQN6MC2O.js +90 -0
  775. package/dist/chunk-ZQN6MC2O.js.map +1 -0
  776. package/dist/chunk-ZS26TLLE.js +19 -0
  777. package/dist/chunk-ZS26TLLE.js.map +1 -0
  778. package/dist/chunk-ZSQQH3P2.js +96 -0
  779. package/dist/chunk-ZSQQH3P2.js.map +1 -0
  780. package/dist/contracts/index.d.ts +2 -0
  781. package/dist/contracts/index.js +3 -0
  782. package/dist/contracts/index.js.map +1 -0
  783. package/dist/contracts/objects/banner.d.ts +31 -0
  784. package/dist/contracts/objects/catalog.d.ts +65 -0
  785. package/dist/contracts/objects/common.d.ts +21 -0
  786. package/dist/contracts/objects/config.d.ts +14 -0
  787. package/dist/contracts/objects/discount.d.ts +79 -0
  788. package/dist/contracts/objects/identity.d.ts +8 -0
  789. package/dist/contracts/objects/index.d.ts +10 -0
  790. package/dist/contracts/objects/index.js +3 -0
  791. package/dist/contracts/objects/index.js.map +1 -0
  792. package/dist/contracts/objects/inventory.d.ts +34 -0
  793. package/dist/contracts/objects/order.d.ts +48 -0
  794. package/dist/contracts/objects/pricing.d.ts +18 -0
  795. package/dist/contracts/objects/shipping.d.ts +112 -0
  796. package/dist/contracts/ports/index.d.ts +83 -0
  797. package/dist/contracts/ports/index.js +3 -0
  798. package/dist/contracts/ports/index.js.map +1 -0
  799. package/dist/contracts/semver/index.d.ts +13 -0
  800. package/dist/contracts/semver/index.js +43 -0
  801. package/dist/contracts/semver/index.js.map +1 -0
  802. package/dist/contracts/semver/version.d.ts +15 -0
  803. package/dist/contracts/views/cart.d.ts +18 -0
  804. package/dist/contracts/views/catalog.d.ts +38 -0
  805. package/dist/contracts/views/common.d.ts +32 -0
  806. package/dist/contracts/views/fixtures/cart.d.ts +6 -0
  807. package/dist/contracts/views/fixtures/catalog.d.ts +10 -0
  808. package/dist/contracts/views/fixtures/home.d.ts +6 -0
  809. package/dist/contracts/views/fixtures/index.d.ts +30 -0
  810. package/dist/contracts/views/fixtures/index.js +184 -0
  811. package/dist/contracts/views/fixtures/index.js.map +1 -0
  812. package/dist/contracts/views/fixtures/product-detail.d.ts +6 -0
  813. package/dist/contracts/views/home.d.ts +43 -0
  814. package/dist/contracts/views/index.d.ts +7 -0
  815. package/dist/contracts/views/index.js +45 -0
  816. package/dist/contracts/views/index.js.map +1 -0
  817. package/dist/contracts/views/product-detail.d.ts +70 -0
  818. package/dist/contracts/views/requisites.d.ts +75 -0
  819. package/dist/contracts/views/slots.d.ts +15 -0
  820. package/dist/core/components/NavLink.d.ts +12 -0
  821. package/dist/core/components/NavLink.js +27 -0
  822. package/dist/core/components/NavLink.js.map +1 -0
  823. package/dist/core/components/ThemeToggle.d.ts +1 -0
  824. package/dist/core/components/ThemeToggle.js +34 -0
  825. package/dist/core/components/ThemeToggle.js.map +1 -0
  826. package/dist/core/components/cart/CartDrawer.d.ts +1 -0
  827. package/dist/core/components/cart/CartDrawer.js +4 -0
  828. package/dist/core/components/cart/CartDrawer.js.map +1 -0
  829. package/dist/core/components/cart/CartItem.d.ts +1 -0
  830. package/dist/core/components/cart/CartItem.js +4 -0
  831. package/dist/core/components/cart/CartItem.js.map +1 -0
  832. package/dist/core/components/catalog/ActiveFilters.d.ts +2 -0
  833. package/dist/core/components/catalog/ActiveFilters.js +4 -0
  834. package/dist/core/components/catalog/ActiveFilters.js.map +1 -0
  835. package/dist/core/components/catalog/FilterSidebar.d.ts +2 -0
  836. package/dist/core/components/catalog/FilterSidebar.js +4 -0
  837. package/dist/core/components/catalog/FilterSidebar.js.map +1 -0
  838. package/dist/core/components/catalog/ModificationSelector.d.ts +2 -0
  839. package/dist/core/components/catalog/ModificationSelector.js +4 -0
  840. package/dist/core/components/catalog/ModificationSelector.js.map +1 -0
  841. package/dist/core/components/catalog/ProductCard.d.ts +1 -0
  842. package/dist/core/components/catalog/ProductCard.js +4 -0
  843. package/dist/core/components/catalog/ProductCard.js.map +1 -0
  844. package/dist/core/components/catalog/ProductCharacteristics.d.ts +1 -0
  845. package/dist/core/components/catalog/ProductCharacteristics.js +4 -0
  846. package/dist/core/components/catalog/ProductCharacteristics.js.map +1 -0
  847. package/dist/core/components/catalog/ProductGallery.d.ts +1 -0
  848. package/dist/core/components/catalog/ProductGallery.js +4 -0
  849. package/dist/core/components/catalog/ProductGallery.js.map +1 -0
  850. package/dist/core/components/catalog/StockDisplay.d.ts +1 -0
  851. package/dist/core/components/catalog/StockDisplay.js +4 -0
  852. package/dist/core/components/catalog/StockDisplay.js.map +1 -0
  853. package/dist/core/components/checkout/CheckoutAuthBlock.d.ts +1 -0
  854. package/dist/core/components/checkout/CheckoutAuthBlock.js +4 -0
  855. package/dist/core/components/checkout/CheckoutAuthBlock.js.map +1 -0
  856. package/dist/core/components/checkout/CheckoutContactForm.d.ts +1 -0
  857. package/dist/core/components/checkout/CheckoutContactForm.js +4 -0
  858. package/dist/core/components/checkout/CheckoutContactForm.js.map +1 -0
  859. package/dist/core/components/checkout/CheckoutDeliveryForm.d.ts +1 -0
  860. package/dist/core/components/checkout/CheckoutDeliveryForm.js +4 -0
  861. package/dist/core/components/checkout/CheckoutDeliveryForm.js.map +1 -0
  862. package/dist/core/components/checkout/CheckoutOrderSummary.d.ts +1 -0
  863. package/dist/core/components/checkout/CheckoutOrderSummary.js +4 -0
  864. package/dist/core/components/checkout/CheckoutOrderSummary.js.map +1 -0
  865. package/dist/core/components/checkout/CheckoutPaymentForm.d.ts +1 -0
  866. package/dist/core/components/checkout/CheckoutPaymentForm.js +4 -0
  867. package/dist/core/components/checkout/CheckoutPaymentForm.js.map +1 -0
  868. package/dist/core/components/checkout/CheckoutRecipientForm.d.ts +1 -0
  869. package/dist/core/components/checkout/CheckoutRecipientForm.js +4 -0
  870. package/dist/core/components/checkout/CheckoutRecipientForm.js.map +1 -0
  871. package/dist/core/components/profile/AddressesList.d.ts +1 -0
  872. package/dist/core/components/profile/AddressesList.js +4 -0
  873. package/dist/core/components/profile/AddressesList.js.map +1 -0
  874. package/dist/core/components/profile/AvatarUpload.d.ts +1 -0
  875. package/dist/core/components/profile/AvatarUpload.js +4 -0
  876. package/dist/core/components/profile/AvatarUpload.js.map +1 -0
  877. package/dist/core/components/profile/RecipientsList.d.ts +1 -0
  878. package/dist/core/components/profile/RecipientsList.js +4 -0
  879. package/dist/core/components/profile/RecipientsList.js.map +1 -0
  880. package/dist/core/components/reviews/ProductReviews.d.ts +1 -0
  881. package/dist/core/components/reviews/ProductReviews.js +4 -0
  882. package/dist/core/components/reviews/ProductReviews.js.map +1 -0
  883. package/dist/core/components/reviews/StarRating.d.ts +1 -0
  884. package/dist/core/components/reviews/StarRating.js +4 -0
  885. package/dist/core/components/reviews/StarRating.js.map +1 -0
  886. package/dist/core/hooks/use-toast.d.ts +2 -0
  887. package/dist/core/hooks/use-toast.js +4 -0
  888. package/dist/core/hooks/use-toast.js.map +1 -0
  889. package/dist/core/hooks/useAddressBook.d.ts +32 -0
  890. package/dist/core/hooks/useAddressBook.js +27 -0
  891. package/dist/core/hooks/useAddressBook.js.map +1 -0
  892. package/dist/core/hooks/useAuth.d.ts +21 -0
  893. package/dist/core/hooks/useAuth.js +6 -0
  894. package/dist/core/hooks/useAuth.js.map +1 -0
  895. package/dist/core/hooks/useBanners.d.ts +14 -0
  896. package/dist/core/hooks/useBanners.js +5 -0
  897. package/dist/core/hooks/useBanners.js.map +1 -0
  898. package/dist/core/hooks/useCart.d.ts +2 -0
  899. package/dist/core/hooks/useCart.js +4 -0
  900. package/dist/core/hooks/useCart.js.map +1 -0
  901. package/dist/core/hooks/useDiscountedPrice.d.ts +24 -0
  902. package/dist/core/hooks/useDiscountedPrice.js +5 -0
  903. package/dist/core/hooks/useDiscountedPrice.js.map +1 -0
  904. package/dist/core/hooks/usePriceType.d.ts +11 -0
  905. package/dist/core/hooks/usePriceType.js +8 -0
  906. package/dist/core/hooks/usePriceType.js.map +1 -0
  907. package/dist/core/hooks/useProductReviews.d.ts +36 -0
  908. package/dist/core/hooks/useProductReviews.js +9 -0
  909. package/dist/core/hooks/useProductReviews.js.map +1 -0
  910. package/dist/core/hooks/useProductsWithStock.d.ts +2 -0
  911. package/dist/core/hooks/useProductsWithStock.js +4 -0
  912. package/dist/core/hooks/useProductsWithStock.js.map +1 -0
  913. package/dist/core/hooks/useRecipientBook.d.ts +27 -0
  914. package/dist/core/hooks/useRecipientBook.js +27 -0
  915. package/dist/core/hooks/useRecipientBook.js.map +1 -0
  916. package/dist/core/hooks/useShippingDirectory.d.ts +23 -0
  917. package/dist/core/hooks/useShippingDirectory.js +40 -0
  918. package/dist/core/hooks/useShippingDirectory.js.map +1 -0
  919. package/dist/core/hooks/useStock.d.ts +20 -0
  920. package/dist/core/hooks/useStock.js +5 -0
  921. package/dist/core/hooks/useStock.js.map +1 -0
  922. package/dist/core/index.d.ts +39 -0
  923. package/dist/core/index.js +41 -0
  924. package/dist/core/index.js.map +1 -0
  925. package/dist/core/lib/auth-client.d.ts +18 -0
  926. package/dist/core/lib/auth-client.js +4 -0
  927. package/dist/core/lib/auth-client.js.map +1 -0
  928. package/dist/core/lib/auth-session.d.ts +14 -0
  929. package/dist/core/lib/auth-session.js +4 -0
  930. package/dist/core/lib/auth-session.js.map +1 -0
  931. package/dist/core/lib/banners.d.ts +18 -0
  932. package/dist/core/lib/banners.js +4 -0
  933. package/dist/core/lib/banners.js.map +1 -0
  934. package/dist/core/lib/discounts.d.ts +30 -0
  935. package/dist/core/lib/discounts.js +4 -0
  936. package/dist/core/lib/discounts.js.map +1 -0
  937. package/dist/core/lib/price-type.d.ts +19 -0
  938. package/dist/core/lib/price-type.js +4 -0
  939. package/dist/core/lib/price-type.js.map +1 -0
  940. package/dist/core/lib/review-form.d.ts +20 -0
  941. package/dist/core/lib/review-form.js +4 -0
  942. package/dist/core/lib/review-form.js.map +1 -0
  943. package/dist/core/lib/reviews.d.ts +28 -0
  944. package/dist/core/lib/reviews.js +4 -0
  945. package/dist/core/lib/reviews.js.map +1 -0
  946. package/dist/core/lib/section-filters.d.ts +17 -0
  947. package/dist/core/lib/section-filters.js +13 -0
  948. package/dist/core/lib/section-filters.js.map +1 -0
  949. package/dist/core/lib/shipping-directory.d.ts +24 -0
  950. package/dist/core/lib/shipping-directory.js +4 -0
  951. package/dist/core/lib/shipping-directory.js.map +1 -0
  952. package/dist/core/lib/stock.d.ts +19 -0
  953. package/dist/core/lib/stock.js +4 -0
  954. package/dist/core/lib/stock.js.map +1 -0
  955. package/dist/core/lib/user-addresses.d.ts +30 -0
  956. package/dist/core/lib/user-addresses.js +4 -0
  957. package/dist/core/lib/user-addresses.js.map +1 -0
  958. package/dist/core/lib/user-recipients.d.ts +30 -0
  959. package/dist/core/lib/user-recipients.js +4 -0
  960. package/dist/core/lib/user-recipients.js.map +1 -0
  961. package/dist/core/providers/CMSProvider.d.ts +9 -0
  962. package/dist/core/providers/CMSProvider.js +8 -0
  963. package/dist/core/providers/CMSProvider.js.map +1 -0
  964. package/dist/data-supabase/catalogRepository.d.ts +3 -0
  965. package/dist/data-supabase/identityProvider.d.ts +3 -0
  966. package/dist/data-supabase/index.d.ts +5 -0
  967. package/dist/data-supabase/index.js +497 -0
  968. package/dist/data-supabase/index.js.map +1 -0
  969. package/dist/data-supabase/mappers.d.ts +17 -0
  970. package/dist/data-supabase/orderRepository.d.ts +3 -0
  971. package/dist/data-supabase/scope.d.ts +7 -0
  972. package/dist/db/actor.d.ts +57 -0
  973. package/dist/db/client.d.ts +46 -0
  974. package/dist/db/index.d.ts +12 -0
  975. package/dist/db/index.js +88 -0
  976. package/dist/db/index.js.map +1 -0
  977. package/dist/db/with-actor.d.ts +37 -0
  978. package/dist/domain/discounts.d.ts +3 -0
  979. package/dist/domain/discounts.js +4 -0
  980. package/dist/domain/discounts.js.map +1 -0
  981. package/dist/domain/index.d.ts +6 -0
  982. package/dist/domain/index.js +9 -0
  983. package/dist/domain/index.js.map +1 -0
  984. package/dist/domain/inventory.d.ts +13 -0
  985. package/dist/domain/inventory.js +4 -0
  986. package/dist/domain/inventory.js.map +1 -0
  987. package/dist/domain/money.d.ts +30 -0
  988. package/dist/domain/money.js +4 -0
  989. package/dist/domain/money.js.map +1 -0
  990. package/dist/domain/pricing.d.ts +7 -0
  991. package/dist/domain/pricing.js +4 -0
  992. package/dist/domain/pricing.js.map +1 -0
  993. package/dist/domain/shipping.d.ts +68 -0
  994. package/dist/domain/shipping.js +5 -0
  995. package/dist/domain/shipping.js.map +1 -0
  996. package/dist/domain/user-categories/conditions.d.ts +14 -0
  997. package/dist/domain/user-categories/engine.d.ts +13 -0
  998. package/dist/domain/user-categories/index.d.ts +2 -0
  999. package/dist/domain/user-categories/index.js +4 -0
  1000. package/dist/domain/user-categories/index.js.map +1 -0
  1001. package/dist/domain/user-categories/types.d.ts +50 -0
  1002. package/dist/i18n/I18nProvider.d.ts +23 -0
  1003. package/dist/i18n/catalogs/en/admin/banners.d.ts +3 -0
  1004. package/dist/i18n/catalogs/en/admin/common.d.ts +3 -0
  1005. package/dist/i18n/catalogs/en/admin/dashboard.d.ts +3 -0
  1006. package/dist/i18n/catalogs/en/admin/discounts.d.ts +3 -0
  1007. package/dist/i18n/catalogs/en/admin/index.d.ts +3 -0
  1008. package/dist/i18n/catalogs/en/admin/nav.d.ts +3 -0
  1009. package/dist/i18n/catalogs/en/admin/orders.d.ts +3 -0
  1010. package/dist/i18n/catalogs/en/admin/plugins.d.ts +3 -0
  1011. package/dist/i18n/catalogs/en/admin/prices.d.ts +3 -0
  1012. package/dist/i18n/catalogs/en/admin/products.d.ts +3 -0
  1013. package/dist/i18n/catalogs/en/admin/properties.d.ts +3 -0
  1014. package/dist/i18n/catalogs/en/admin/reviews.d.ts +3 -0
  1015. package/dist/i18n/catalogs/en/admin/sections.d.ts +3 -0
  1016. package/dist/i18n/catalogs/en/admin/settings.d.ts +3 -0
  1017. package/dist/i18n/catalogs/en/admin/shipping.d.ts +3 -0
  1018. package/dist/i18n/catalogs/en/admin/themes.d.ts +3 -0
  1019. package/dist/i18n/catalogs/en/admin/users.d.ts +3 -0
  1020. package/dist/i18n/catalogs/en/admin/validator.d.ts +3 -0
  1021. package/dist/i18n/catalogs/en/app.d.ts +14 -0
  1022. package/dist/i18n/catalogs/en/auth.d.ts +3 -0
  1023. package/dist/i18n/catalogs/en/breadcrumbs.d.ts +3 -0
  1024. package/dist/i18n/catalogs/en/cart.d.ts +3 -0
  1025. package/dist/i18n/catalogs/en/catalog.d.ts +3 -0
  1026. package/dist/i18n/catalogs/en/checkout.d.ts +3 -0
  1027. package/dist/i18n/catalogs/en/common.d.ts +3 -0
  1028. package/dist/i18n/catalogs/en/home.d.ts +3 -0
  1029. package/dist/i18n/catalogs/en/index.d.ts +12 -0
  1030. package/dist/i18n/catalogs/en/nav.d.ts +3 -0
  1031. package/dist/i18n/catalogs/en/product.d.ts +3 -0
  1032. package/dist/i18n/catalogs/en/profile.d.ts +3 -0
  1033. package/dist/i18n/catalogs/en/properties.d.ts +3 -0
  1034. package/dist/i18n/catalogs/en/reviews.d.ts +3 -0
  1035. package/dist/i18n/catalogs/en/validation.d.ts +3 -0
  1036. package/dist/i18n/catalogs/uk/admin/banners.d.ts +57 -0
  1037. package/dist/i18n/catalogs/uk/admin/common.d.ts +16 -0
  1038. package/dist/i18n/catalogs/uk/admin/dashboard.d.ts +18 -0
  1039. package/dist/i18n/catalogs/uk/admin/discounts.d.ts +67 -0
  1040. package/dist/i18n/catalogs/uk/admin/index.d.ts +710 -0
  1041. package/dist/i18n/catalogs/uk/admin/nav.d.ts +32 -0
  1042. package/dist/i18n/catalogs/uk/admin/orders.d.ts +67 -0
  1043. package/dist/i18n/catalogs/uk/admin/plugins.d.ts +53 -0
  1044. package/dist/i18n/catalogs/uk/admin/prices.d.ts +16 -0
  1045. package/dist/i18n/catalogs/uk/admin/products.d.ts +74 -0
  1046. package/dist/i18n/catalogs/uk/admin/properties.d.ts +63 -0
  1047. package/dist/i18n/catalogs/uk/admin/reviews.d.ts +24 -0
  1048. package/dist/i18n/catalogs/uk/admin/sections.d.ts +18 -0
  1049. package/dist/i18n/catalogs/uk/admin/settings.d.ts +11 -0
  1050. package/dist/i18n/catalogs/uk/admin/shipping.d.ts +96 -0
  1051. package/dist/i18n/catalogs/uk/admin/themes.d.ts +21 -0
  1052. package/dist/i18n/catalogs/uk/admin/users.d.ts +96 -0
  1053. package/dist/i18n/catalogs/uk/admin/validator.d.ts +30 -0
  1054. package/dist/i18n/catalogs/uk/app.d.ts +15 -0
  1055. package/dist/i18n/catalogs/uk/auth.d.ts +51 -0
  1056. package/dist/i18n/catalogs/uk/breadcrumbs.d.ts +4 -0
  1057. package/dist/i18n/catalogs/uk/cart.d.ts +21 -0
  1058. package/dist/i18n/catalogs/uk/catalog.d.ts +22 -0
  1059. package/dist/i18n/catalogs/uk/checkout.d.ts +96 -0
  1060. package/dist/i18n/catalogs/uk/common.d.ts +83 -0
  1061. package/dist/i18n/catalogs/uk/home.d.ts +5 -0
  1062. package/dist/i18n/catalogs/uk/index.d.ts +1139 -0
  1063. package/dist/i18n/catalogs/uk/nav.d.ts +7 -0
  1064. package/dist/i18n/catalogs/uk/product.d.ts +25 -0
  1065. package/dist/i18n/catalogs/uk/profile.d.ts +87 -0
  1066. package/dist/i18n/catalogs/uk/properties.d.ts +16 -0
  1067. package/dist/i18n/catalogs/uk/reviews.d.ts +26 -0
  1068. package/dist/i18n/catalogs/uk/validation.d.ts +33 -0
  1069. package/dist/i18n/index.d.ts +3 -0
  1070. package/dist/i18n/index.js +2779 -0
  1071. package/dist/i18n/index.js.map +1 -0
  1072. package/dist/i18n/translator.d.ts +19 -0
  1073. package/dist/i18n/types.d.ts +14 -0
  1074. package/dist/index.d.ts +1 -0
  1075. package/dist/index.js +3 -0
  1076. package/dist/index.js.map +1 -0
  1077. package/dist/plugin-sdk/definePlugin.d.ts +9 -0
  1078. package/dist/plugin-sdk/index.d.ts +6 -0
  1079. package/dist/plugin-sdk/index.js +266 -0
  1080. package/dist/plugin-sdk/index.js.map +1 -0
  1081. package/dist/plugin-sdk/server/config-db.d.ts +22 -0
  1082. package/dist/plugin-sdk/server/guard.d.ts +17 -0
  1083. package/dist/plugin-sdk/server/index.d.ts +42 -0
  1084. package/dist/plugin-sdk/server/index.js +191 -0
  1085. package/dist/plugin-sdk/server/index.js.map +1 -0
  1086. package/dist/plugin-sdk/server/table-db.d.ts +36 -0
  1087. package/dist/plugin-sdk/types.d.ts +66 -0
  1088. package/dist/plugin-sdk/usePluginConfig.d.ts +22 -0
  1089. package/dist/plugin-sdk/usePluginT.d.ts +19 -0
  1090. package/dist/plugin-sdk/usePluginTable.d.ts +12 -0
  1091. package/dist/plugins/HookRegistry.d.ts +29 -0
  1092. package/dist/plugins/PluginLoader.d.ts +19 -0
  1093. package/dist/plugins/PluginSlot.d.ts +21 -0
  1094. package/dist/plugins/PluginSlot.js +5 -0
  1095. package/dist/plugins/PluginSlot.js.map +1 -0
  1096. package/dist/plugins/adminLifecycle.d.ts +27 -0
  1097. package/dist/plugins/bootstrap.d.ts +16 -0
  1098. package/dist/plugins/bootstrap.js +5 -0
  1099. package/dist/plugins/bootstrap.js.map +1 -0
  1100. package/dist/plugins/hooks.d.ts +67 -0
  1101. package/dist/plugins/index.d.ts +12 -0
  1102. package/dist/plugins/index.js +171 -0
  1103. package/dist/plugins/index.js.map +1 -0
  1104. package/dist/plugins/pluginRepository.d.ts +19 -0
  1105. package/dist/plugins/server/index.d.ts +25 -0
  1106. package/dist/plugins/server/index.js +95 -0
  1107. package/dist/plugins/server/index.js.map +1 -0
  1108. package/dist/plugins/server/registry-db.d.ts +19 -0
  1109. package/dist/plugins/types.d.ts +126 -0
  1110. package/dist/plugins/types.js +4 -0
  1111. package/dist/plugins/types.js.map +1 -0
  1112. package/dist/plugins/validatePluginModule.d.ts +13 -0
  1113. package/dist/profile-ui/AddressesList.d.ts +9 -0
  1114. package/dist/profile-ui/AddressesList.js +4 -0
  1115. package/dist/profile-ui/AddressesList.js.map +1 -0
  1116. package/dist/profile-ui/AvatarUpload.d.ts +28 -0
  1117. package/dist/profile-ui/AvatarUpload.js +4 -0
  1118. package/dist/profile-ui/AvatarUpload.js.map +1 -0
  1119. package/dist/profile-ui/RecipientsList.d.ts +9 -0
  1120. package/dist/profile-ui/RecipientsList.js +4 -0
  1121. package/dist/profile-ui/RecipientsList.js.map +1 -0
  1122. package/dist/profile-ui/index.d.ts +3 -0
  1123. package/dist/profile-ui/index.js +6 -0
  1124. package/dist/profile-ui/index.js.map +1 -0
  1125. package/dist/react-query/EngineProvider.d.ts +9 -0
  1126. package/dist/react-query/hooks.d.ts +8 -0
  1127. package/dist/react-query/index.d.ts +7 -0
  1128. package/dist/react-query/index.js +173 -0
  1129. package/dist/react-query/index.js.map +1 -0
  1130. package/dist/react-query/queries.d.ts +31 -0
  1131. package/dist/react-query/queries.js +4 -0
  1132. package/dist/react-query/queries.js.map +1 -0
  1133. package/dist/react-query/useCart.d.ts +32 -0
  1134. package/dist/react-query/useFormatPrice.d.ts +12 -0
  1135. package/dist/reviews-ui/ProductReviews.d.ts +18 -0
  1136. package/dist/reviews-ui/ProductReviews.js +7 -0
  1137. package/dist/reviews-ui/ProductReviews.js.map +1 -0
  1138. package/dist/reviews-ui/ReviewCard.d.ts +7 -0
  1139. package/dist/reviews-ui/ReviewCard.js +5 -0
  1140. package/dist/reviews-ui/ReviewCard.js.map +1 -0
  1141. package/dist/reviews-ui/ReviewForm.d.ts +25 -0
  1142. package/dist/reviews-ui/ReviewForm.js +5 -0
  1143. package/dist/reviews-ui/ReviewForm.js.map +1 -0
  1144. package/dist/reviews-ui/ReviewRichTextEditor.d.ts +8 -0
  1145. package/dist/reviews-ui/ReviewRichTextEditor.js +4 -0
  1146. package/dist/reviews-ui/ReviewRichTextEditor.js.map +1 -0
  1147. package/dist/reviews-ui/StarRating.d.ts +8 -0
  1148. package/dist/reviews-ui/StarRating.js +4 -0
  1149. package/dist/reviews-ui/StarRating.js.map +1 -0
  1150. package/dist/reviews-ui/index.d.ts +5 -0
  1151. package/dist/reviews-ui/index.js +8 -0
  1152. package/dist/reviews-ui/index.js.map +1 -0
  1153. package/dist/runtime/config.d.ts +42 -0
  1154. package/dist/runtime/index.d.ts +36 -0
  1155. package/dist/runtime/index.js +36 -0
  1156. package/dist/runtime/index.js.map +1 -0
  1157. package/dist/schema/auth.d.ts +623 -0
  1158. package/dist/schema/index.d.ts +17 -0
  1159. package/dist/schema/media.d.ts +143 -0
  1160. package/dist/schema/relations.d.ts +202 -0
  1161. package/dist/schema/relations.js +1494 -0
  1162. package/dist/schema/relations.js.map +1 -0
  1163. package/dist/schema/schema.d.ts +7224 -0
  1164. package/dist/schema/schema.js +1085 -0
  1165. package/dist/schema/schema.js.map +1 -0
  1166. package/dist/schema/types.d.ts +74 -0
  1167. package/dist/schema/types.js +3 -0
  1168. package/dist/schema/types.js.map +1 -0
  1169. package/dist/storefront/client.d.ts +7 -0
  1170. package/dist/storefront/index.d.ts +3 -0
  1171. package/dist/storefront/index.js +5 -0
  1172. package/dist/storefront/index.js.map +1 -0
  1173. package/dist/storefront/loaders/addresses.d.ts +47 -0
  1174. package/dist/storefront/loaders/banners.d.ts +19 -0
  1175. package/dist/storefront/loaders/catalog-filters.d.ts +56 -0
  1176. package/dist/storefront/loaders/catalog-products.d.ts +27 -0
  1177. package/dist/storefront/loaders/categories.d.ts +19 -0
  1178. package/dist/storefront/loaders/db.d.ts +42 -0
  1179. package/dist/storefront/loaders/discounts.d.ts +15 -0
  1180. package/dist/storefront/loaders/entities/banner.d.ts +449 -0
  1181. package/dist/storefront/loaders/entities/catalog-product.d.ts +135 -0
  1182. package/dist/storefront/loaders/entities/discount.d.ts +17 -0
  1183. package/dist/storefront/loaders/entities/home-product.d.ts +130 -0
  1184. package/dist/storefront/loaders/entities/modification.d.ts +259 -0
  1185. package/dist/storefront/loaders/entities/order.d.ts +616 -0
  1186. package/dist/storefront/loaders/entities/price.d.ts +108 -0
  1187. package/dist/storefront/loaders/entities/product.d.ts +313 -0
  1188. package/dist/storefront/loaders/entities/property.d.ts +414 -0
  1189. package/dist/storefront/loaders/entities/section.d.ts +293 -0
  1190. package/dist/storefront/loaders/home-sections.d.ts +20 -0
  1191. package/dist/storefront/loaders/home.d.ts +31 -0
  1192. package/dist/storefront/loaders/index.d.ts +48 -0
  1193. package/dist/storefront/loaders/index.js +4 -0
  1194. package/dist/storefront/loaders/index.js.map +1 -0
  1195. package/dist/storefront/loaders/modification-values.d.ts +23 -0
  1196. package/dist/storefront/loaders/order-create.d.ts +52 -0
  1197. package/dist/storefront/loaders/order-statuses.d.ts +8 -0
  1198. package/dist/storefront/loaders/orders.d.ts +27 -0
  1199. package/dist/storefront/loaders/pickup-points.d.ts +6 -0
  1200. package/dist/storefront/loaders/pricing.d.ts +10 -0
  1201. package/dist/storefront/loaders/product-detail.d.ts +22 -0
  1202. package/dist/storefront/loaders/products.d.ts +38 -0
  1203. package/dist/storefront/loaders/profile.d.ts +37 -0
  1204. package/dist/storefront/loaders/properties.d.ts +16 -0
  1205. package/dist/storefront/loaders/property-option.d.ts +18 -0
  1206. package/dist/storefront/loaders/property-values.d.ts +256 -0
  1207. package/dist/storefront/loaders/recipients.d.ts +52 -0
  1208. package/dist/storefront/loaders/reviews-write.d.ts +26 -0
  1209. package/dist/storefront/loaders/reviews.d.ts +57 -0
  1210. package/dist/storefront/loaders/sections.d.ts +13 -0
  1211. package/dist/storefront/loaders/session.d.ts +28 -0
  1212. package/dist/storefront/loaders/shipping.d.ts +57 -0
  1213. package/dist/storefront/loaders/sitemap.d.ts +38 -0
  1214. package/dist/storefront/loaders/stock-info.d.ts +38 -0
  1215. package/dist/storefront/loaders/stock.d.ts +24 -0
  1216. package/dist/storefront/seo/index.d.ts +2 -0
  1217. package/dist/storefront/seo/index.js +4 -0
  1218. package/dist/storefront/seo/index.js.map +1 -0
  1219. package/dist/storefront/seo/robots.d.ts +2 -0
  1220. package/dist/storefront/seo/sitemap.d.ts +11 -0
  1221. package/dist/storefront-routes/active-theme.d.ts +14 -0
  1222. package/dist/storefront-routes/active-theme.js +13 -0
  1223. package/dist/storefront-routes/active-theme.js.map +1 -0
  1224. package/dist/storefront-routes/components/BannerSlider.d.ts +8 -0
  1225. package/dist/storefront-routes/components/BannerSlider.js +3 -0
  1226. package/dist/storefront-routes/components/BannerSlider.js.map +1 -0
  1227. package/dist/storefront-routes/components/ProductCarousel.d.ts +20 -0
  1228. package/dist/storefront-routes/components/ProductCarousel.js +3 -0
  1229. package/dist/storefront-routes/components/ProductCarousel.js.map +1 -0
  1230. package/dist/storefront-routes/components/SetPasswordForm.d.ts +8 -0
  1231. package/dist/storefront-routes/components/SetPasswordForm.js +3 -0
  1232. package/dist/storefront-routes/components/SetPasswordForm.js.map +1 -0
  1233. package/dist/storefront-routes/components/SsrProductGrid.d.ts +12 -0
  1234. package/dist/storefront-routes/components/SsrProductGrid.js +3 -0
  1235. package/dist/storefront-routes/components/SsrProductGrid.js.map +1 -0
  1236. package/dist/storefront-routes/index.d.ts +6 -0
  1237. package/dist/storefront-routes/index.js +14 -0
  1238. package/dist/storefront-routes/index.js.map +1 -0
  1239. package/dist/storefront-routes/pages/Auth.d.ts +2 -0
  1240. package/dist/storefront-routes/pages/Auth.js +400 -0
  1241. package/dist/storefront-routes/pages/Auth.js.map +1 -0
  1242. package/dist/storefront-routes/pages/AuthInvite.d.ts +1 -0
  1243. package/dist/storefront-routes/pages/AuthInvite.js +56 -0
  1244. package/dist/storefront-routes/pages/AuthInvite.js.map +1 -0
  1245. package/dist/storefront-routes/pages/AuthSetPassword.d.ts +12 -0
  1246. package/dist/storefront-routes/pages/AuthSetPassword.js +40 -0
  1247. package/dist/storefront-routes/pages/AuthSetPassword.js.map +1 -0
  1248. package/dist/storefront-routes/pages/Cart.d.ts +5 -0
  1249. package/dist/storefront-routes/pages/Cart.js +42 -0
  1250. package/dist/storefront-routes/pages/Cart.js.map +1 -0
  1251. package/dist/storefront-routes/pages/Catalog.d.ts +12 -0
  1252. package/dist/storefront-routes/pages/Catalog.js +40 -0
  1253. package/dist/storefront-routes/pages/Catalog.js.map +1 -0
  1254. package/dist/storefront-routes/pages/CatalogSection.d.ts +13 -0
  1255. package/dist/storefront-routes/pages/CatalogSection.js +65 -0
  1256. package/dist/storefront-routes/pages/CatalogSection.js.map +1 -0
  1257. package/dist/storefront-routes/pages/Checkout.d.ts +1 -0
  1258. package/dist/storefront-routes/pages/Checkout.js +281 -0
  1259. package/dist/storefront-routes/pages/Checkout.js.map +1 -0
  1260. package/dist/storefront-routes/pages/Home.d.ts +15 -0
  1261. package/dist/storefront-routes/pages/Home.js +10 -0
  1262. package/dist/storefront-routes/pages/Home.js.map +1 -0
  1263. package/dist/storefront-routes/pages/OrderSuccess.d.ts +1 -0
  1264. package/dist/storefront-routes/pages/OrderSuccess.js +186 -0
  1265. package/dist/storefront-routes/pages/OrderSuccess.js.map +1 -0
  1266. package/dist/storefront-routes/pages/ProductDetail.d.ts +11 -0
  1267. package/dist/storefront-routes/pages/ProductDetail.js +475 -0
  1268. package/dist/storefront-routes/pages/ProductDetail.js.map +1 -0
  1269. package/dist/storefront-routes/pages/Profile.d.ts +1 -0
  1270. package/dist/storefront-routes/pages/Profile.js +133 -0
  1271. package/dist/storefront-routes/pages/Profile.js.map +1 -0
  1272. package/dist/storefront-routes/pages/ProfileOrderDetail.d.ts +1 -0
  1273. package/dist/storefront-routes/pages/ProfileOrderDetail.js +280 -0
  1274. package/dist/storefront-routes/pages/ProfileOrderDetail.js.map +1 -0
  1275. package/dist/storefront-routes/pages/ProfileOrders.d.ts +1 -0
  1276. package/dist/storefront-routes/pages/ProfileOrders.js +131 -0
  1277. package/dist/storefront-routes/pages/ProfileOrders.js.map +1 -0
  1278. package/dist/storefront-routes/pages/ProfileSettings.d.ts +1 -0
  1279. package/dist/storefront-routes/pages/ProfileSettings.js +344 -0
  1280. package/dist/storefront-routes/pages/ProfileSettings.js.map +1 -0
  1281. package/dist/storefront-routes/pages/Properties.d.ts +5 -0
  1282. package/dist/storefront-routes/pages/Properties.js +53 -0
  1283. package/dist/storefront-routes/pages/Properties.js.map +1 -0
  1284. package/dist/storefront-routes/pages/PropertyDetail.d.ts +6 -0
  1285. package/dist/storefront-routes/pages/PropertyDetail.js +78 -0
  1286. package/dist/storefront-routes/pages/PropertyDetail.js.map +1 -0
  1287. package/dist/storefront-routes/pages/PropertyPage.d.ts +7 -0
  1288. package/dist/storefront-routes/pages/PropertyPage.js +131 -0
  1289. package/dist/storefront-routes/pages/PropertyPage.js.map +1 -0
  1290. package/dist/storefront-routes/pages/cart/breadcrumbs.d.ts +4 -0
  1291. package/dist/storefront-routes/pages/cart/slots.d.ts +2 -0
  1292. package/dist/storefront-routes/pages/catalog/active-filter-chips.d.ts +20 -0
  1293. package/dist/storefront-routes/pages/catalog/breadcrumbs.d.ts +6 -0
  1294. package/dist/storefront-routes/pages/catalog/filter-predicates.d.ts +21 -0
  1295. package/dist/storefront-routes/pages/catalog/filtering.d.ts +25 -0
  1296. package/dist/storefront-routes/pages/catalog/slot-context.d.ts +34 -0
  1297. package/dist/storefront-routes/pages/catalog/slots.d.ts +3 -0
  1298. package/dist/storefront-routes/pages/catalog/types.d.ts +33 -0
  1299. package/dist/storefront-routes/pages/catalog/useActiveFilters.d.ts +17 -0
  1300. package/dist/storefront-routes/pages/catalog/useCatalogController.d.ts +19 -0
  1301. package/dist/storefront-routes/pages/catalog/useCatalogProductsQuery.d.ts +18 -0
  1302. package/dist/storefront-routes/pages/catalog/useCatalogQueries.d.ts +17 -0
  1303. package/dist/storefront-routes/pages/catalog/usePricedProducts.d.ts +38 -0
  1304. package/dist/storefront-routes/pages/home/SectionProductCarousel.d.ts +11 -0
  1305. package/dist/storefront-routes/pages/home/queries.d.ts +26 -0
  1306. package/dist/storefront-routes/pages/home/slot-context.d.ts +26 -0
  1307. package/dist/storefront-routes/pages/home/slots.d.ts +3 -0
  1308. package/dist/storefront-routes/pages/home/toCardViewModel.d.ts +9 -0
  1309. package/dist/storefront-routes/pages/home/types.d.ts +18 -0
  1310. package/dist/storefront-routes/pages/product-detail/breadcrumbs.d.ts +10 -0
  1311. package/dist/storefront-routes/pages/product-detail/cart-item.d.ts +18 -0
  1312. package/dist/storefront-routes/pages/product-detail/pricing.d.ts +20 -0
  1313. package/dist/storefront-routes/pages/product-detail/slot-context.d.ts +39 -0
  1314. package/dist/storefront-routes/pages/product-detail/slots.d.ts +3 -0
  1315. package/dist/storefront-routes/pages/product-detail/types.d.ts +51 -0
  1316. package/dist/storefront-routes/pages/product-detail/useModificationData.d.ts +18 -0
  1317. package/dist/storefront-routes/pages/product-detail/useModificationSelection.d.ts +12 -0
  1318. package/dist/storefront-routes/pages/product-detail/useProductContent.d.ts +15 -0
  1319. package/dist/storefront-routes/pages/product-detail/useProductPricing.d.ts +14 -0
  1320. package/dist/storefront-routes/pages/product-detail/useProductQuery.d.ts +10 -0
  1321. package/dist/storefront-routes/seo/interceptor.d.ts +28 -0
  1322. package/dist/storefront-routes/seo/interceptor.js +45 -0
  1323. package/dist/storefront-routes/seo/interceptor.js.map +1 -0
  1324. package/dist/storefront-routes/seo/robots.d.ts +2 -0
  1325. package/dist/storefront-routes/seo/robots.js +13 -0
  1326. package/dist/storefront-routes/seo/robots.js.map +1 -0
  1327. package/dist/storefront-routes/seo/sitemap.d.ts +7 -0
  1328. package/dist/storefront-routes/seo/sitemap.js +17 -0
  1329. package/dist/storefront-routes/seo/sitemap.js.map +1 -0
  1330. package/dist/storefront-routes/server/auth.d.ts +24 -0
  1331. package/dist/storefront-routes/server/auth.js +24 -0
  1332. package/dist/storefront-routes/server/auth.js.map +1 -0
  1333. package/dist/storefront-routes/server/catalog.d.ts +50 -0
  1334. package/dist/storefront-routes/server/catalog.js +4 -0
  1335. package/dist/storefront-routes/server/catalog.js.map +1 -0
  1336. package/dist/storefront-routes/server/checkout-input.d.ts +67 -0
  1337. package/dist/storefront-routes/server/checkout-input.js +3 -0
  1338. package/dist/storefront-routes/server/checkout-input.js.map +1 -0
  1339. package/dist/storefront-routes/server/checkout.d.ts +51 -0
  1340. package/dist/storefront-routes/server/checkout.js +4 -0
  1341. package/dist/storefront-routes/server/checkout.js.map +1 -0
  1342. package/dist/storefront-routes/server/home.d.ts +21 -0
  1343. package/dist/storefront-routes/server/home.js +3 -0
  1344. package/dist/storefront-routes/server/home.js.map +1 -0
  1345. package/dist/storefront-routes/server/invite.d.ts +11 -0
  1346. package/dist/storefront-routes/server/invite.js +3 -0
  1347. package/dist/storefront-routes/server/invite.js.map +1 -0
  1348. package/dist/storefront-routes/server/is-admin.d.ts +22 -0
  1349. package/dist/storefront-routes/server/is-admin.js +3 -0
  1350. package/dist/storefront-routes/server/is-admin.js.map +1 -0
  1351. package/dist/storefront-routes/server/order-view.d.ts +18 -0
  1352. package/dist/storefront-routes/server/order-view.js +3 -0
  1353. package/dist/storefront-routes/server/order-view.js.map +1 -0
  1354. package/dist/storefront-routes/server/product-list-item.d.ts +33 -0
  1355. package/dist/storefront-routes/server/product-list-item.js +3 -0
  1356. package/dist/storefront-routes/server/product-list-item.js.map +1 -0
  1357. package/dist/storefront-routes/server/products.d.ts +23 -0
  1358. package/dist/storefront-routes/server/products.js +3 -0
  1359. package/dist/storefront-routes/server/products.js.map +1 -0
  1360. package/dist/storefront-routes/server/profile-orders.d.ts +41 -0
  1361. package/dist/storefront-routes/server/profile-orders.js +3 -0
  1362. package/dist/storefront-routes/server/profile-orders.js.map +1 -0
  1363. package/dist/storefront-routes/server/profile.d.ts +23 -0
  1364. package/dist/storefront-routes/server/profile.js +3 -0
  1365. package/dist/storefront-routes/server/profile.js.map +1 -0
  1366. package/dist/storefront-routes/server/properties.d.ts +12 -0
  1367. package/dist/storefront-routes/server/properties.js +3 -0
  1368. package/dist/storefront-routes/server/properties.js.map +1 -0
  1369. package/dist/storefront-routes/server/revalidate-theme.d.ts +13 -0
  1370. package/dist/storefront-routes/server/revalidate-theme.js +15 -0
  1371. package/dist/storefront-routes/server/revalidate-theme.js.map +1 -0
  1372. package/dist/storefront-routes/server/theme-record.d.ts +32 -0
  1373. package/dist/storefront-routes/server/theme-record.js +3 -0
  1374. package/dist/storefront-routes/server/theme-record.js.map +1 -0
  1375. package/dist/storefront-routes/server/themes.d.ts +9 -0
  1376. package/dist/storefront-routes/server/themes.js +10 -0
  1377. package/dist/storefront-routes/server/themes.js.map +1 -0
  1378. package/dist/storefront-routes/shells/ProtectedShell.d.ts +10 -0
  1379. package/dist/storefront-routes/shells/ProtectedShell.js +6 -0
  1380. package/dist/storefront-routes/shells/ProtectedShell.js.map +1 -0
  1381. package/dist/storefront-routes/shells/StorefrontShell.d.ts +10 -0
  1382. package/dist/storefront-routes/shells/StorefrontShell.js +6 -0
  1383. package/dist/storefront-routes/shells/StorefrontShell.js.map +1 -0
  1384. package/dist/storefront-routes/shells/ThemeFonts.d.ts +18 -0
  1385. package/dist/storefront-routes/shells/ThemeFonts.js +3 -0
  1386. package/dist/storefront-routes/shells/ThemeFonts.js.map +1 -0
  1387. package/dist/storefront-routes/shells/ThemeTokens.d.ts +12 -0
  1388. package/dist/storefront-routes/shells/ThemeTokens.js +3 -0
  1389. package/dist/storefront-routes/shells/ThemeTokens.js.map +1 -0
  1390. package/dist/storefront-routes/shells/useActiveThemeModule.d.ts +9 -0
  1391. package/dist/storefront-routes/shells/useActiveThemeModule.js +3 -0
  1392. package/dist/storefront-routes/shells/useActiveThemeModule.js.map +1 -0
  1393. package/dist/storefront-routes/views/CartView.d.ts +10 -0
  1394. package/dist/storefront-routes/views/CartView.js +4 -0
  1395. package/dist/storefront-routes/views/CartView.js.map +1 -0
  1396. package/dist/storefront-routes/views/CatalogLayout.d.ts +16 -0
  1397. package/dist/storefront-routes/views/CatalogLayout.js +4 -0
  1398. package/dist/storefront-routes/views/CatalogLayout.js.map +1 -0
  1399. package/dist/storefront-routes/views/CatalogSectionView.d.ts +7 -0
  1400. package/dist/storefront-routes/views/CatalogSectionView.js +6 -0
  1401. package/dist/storefront-routes/views/CatalogSectionView.js.map +1 -0
  1402. package/dist/storefront-routes/views/CatalogToolbar.d.ts +9 -0
  1403. package/dist/storefront-routes/views/CatalogToolbar.js +3 -0
  1404. package/dist/storefront-routes/views/CatalogToolbar.js.map +1 -0
  1405. package/dist/storefront-routes/views/CatalogView.d.ts +9 -0
  1406. package/dist/storefront-routes/views/CatalogView.js +6 -0
  1407. package/dist/storefront-routes/views/CatalogView.js.map +1 -0
  1408. package/dist/storefront-routes/views/HomeView.d.ts +14 -0
  1409. package/dist/storefront-routes/views/HomeView.js +6 -0
  1410. package/dist/storefront-routes/views/HomeView.js.map +1 -0
  1411. package/dist/storefront-routes/views/ProductDetailInfo.d.ts +9 -0
  1412. package/dist/storefront-routes/views/ProductDetailInfo.js +3 -0
  1413. package/dist/storefront-routes/views/ProductDetailInfo.js.map +1 -0
  1414. package/dist/storefront-routes/views/ProductDetailSections.d.ts +10 -0
  1415. package/dist/storefront-routes/views/ProductDetailSections.js +3 -0
  1416. package/dist/storefront-routes/views/ProductDetailSections.js.map +1 -0
  1417. package/dist/storefront-routes/views/ProductDetailView.d.ts +10 -0
  1418. package/dist/storefront-routes/views/ProductDetailView.js +6 -0
  1419. package/dist/storefront-routes/views/ProductDetailView.js.map +1 -0
  1420. package/dist/storefront-routes/views/StorefrontBreadcrumbs.d.ts +9 -0
  1421. package/dist/storefront-routes/views/StorefrontBreadcrumbs.js +3 -0
  1422. package/dist/storefront-routes/views/StorefrontBreadcrumbs.js.map +1 -0
  1423. package/dist/storefront-routes/views/slots/CartSlots.d.ts +15 -0
  1424. package/dist/storefront-routes/views/slots/CartSlots.js +3 -0
  1425. package/dist/storefront-routes/views/slots/CartSlots.js.map +1 -0
  1426. package/dist/storefront-routes/views/slots/CartSummary.d.ts +11 -0
  1427. package/dist/storefront-routes/views/slots/CartSummary.js +3 -0
  1428. package/dist/storefront-routes/views/slots/CartSummary.js.map +1 -0
  1429. package/dist/storefront-routes/views/slots/CatalogFilters.d.ts +11 -0
  1430. package/dist/storefront-routes/views/slots/CatalogFilters.js +3 -0
  1431. package/dist/storefront-routes/views/slots/CatalogFilters.js.map +1 -0
  1432. package/dist/storefront-routes/views/slots/CatalogProductGrid.d.ts +26 -0
  1433. package/dist/storefront-routes/views/slots/CatalogProductGrid.js +4 -0
  1434. package/dist/storefront-routes/views/slots/CatalogProductGrid.js.map +1 -0
  1435. package/dist/storefront-routes/views/slots/CatalogSectionChips.d.ts +24 -0
  1436. package/dist/storefront-routes/views/slots/CatalogSectionChips.js +3 -0
  1437. package/dist/storefront-routes/views/slots/CatalogSectionChips.js.map +1 -0
  1438. package/dist/storefront-routes/views/slots/CatalogToolbarSlots.d.ts +32 -0
  1439. package/dist/storefront-routes/views/slots/CatalogToolbarSlots.js +3 -0
  1440. package/dist/storefront-routes/views/slots/CatalogToolbarSlots.js.map +1 -0
  1441. package/dist/storefront-routes/views/slots/HomeSectionCarousel.d.ts +10 -0
  1442. package/dist/storefront-routes/views/slots/HomeSectionCarousel.js +5 -0
  1443. package/dist/storefront-routes/views/slots/HomeSectionCarousel.js.map +1 -0
  1444. package/dist/storefront-routes/views/slots/ProductAddToCart.d.ts +16 -0
  1445. package/dist/storefront-routes/views/slots/ProductAddToCart.js +3 -0
  1446. package/dist/storefront-routes/views/slots/ProductAddToCart.js.map +1 -0
  1447. package/dist/storefront-routes/views/slots/ProductContentSlots.d.ts +19 -0
  1448. package/dist/storefront-routes/views/slots/ProductContentSlots.js +3 -0
  1449. package/dist/storefront-routes/views/slots/ProductContentSlots.js.map +1 -0
  1450. package/dist/storefront-routes/views/slots/ProductModificationPicker.d.ts +16 -0
  1451. package/dist/storefront-routes/views/slots/ProductModificationPicker.js +3 -0
  1452. package/dist/storefront-routes/views/slots/ProductModificationPicker.js.map +1 -0
  1453. package/dist/storefront-routes/views/slots/ProductPluginSlots.d.ts +16 -0
  1454. package/dist/storefront-routes/views/slots/ProductPluginSlots.js +3 -0
  1455. package/dist/storefront-routes/views/slots/ProductPluginSlots.js.map +1 -0
  1456. package/dist/storefront-routes/views/slots/ProductPriceBlock.d.ts +13 -0
  1457. package/dist/storefront-routes/views/slots/ProductPriceBlock.js +3 -0
  1458. package/dist/storefront-routes/views/slots/ProductPriceBlock.js.map +1 -0
  1459. package/dist/storefront-routes/views/slots/ProductStockBadge.d.ts +14 -0
  1460. package/dist/storefront-routes/views/slots/ProductStockBadge.js +3 -0
  1461. package/dist/storefront-routes/views/slots/ProductStockBadge.js.map +1 -0
  1462. package/dist/storefront-routes/views/useStorefrontViews.d.ts +17 -0
  1463. package/dist/storefront-routes/views/useStorefrontViews.js +4 -0
  1464. package/dist/storefront-routes/views/useStorefrontViews.js.map +1 -0
  1465. package/dist/supabase/SupabaseProvider.d.ts +16 -0
  1466. package/dist/supabase/SupabaseProvider.js +27 -0
  1467. package/dist/supabase/SupabaseProvider.js.map +1 -0
  1468. package/dist/supabase/anon-client.d.ts +73 -0
  1469. package/dist/supabase/anon-client.js +12 -0
  1470. package/dist/supabase/anon-client.js.map +1 -0
  1471. package/dist/supabase/browser-client.d.ts +65 -0
  1472. package/dist/supabase/browser-client.js +5 -0
  1473. package/dist/supabase/browser-client.js.map +1 -0
  1474. package/dist/supabase/database.d.ts +2121 -0
  1475. package/dist/supabase/index.d.ts +4 -0
  1476. package/dist/supabase/index.js +36 -0
  1477. package/dist/supabase/index.js.map +1 -0
  1478. package/dist/supabase/keys.d.ts +24 -0
  1479. package/dist/supabase/keys.js +4 -0
  1480. package/dist/supabase/keys.js.map +1 -0
  1481. package/dist/supabase/server-client.d.ts +76 -0
  1482. package/dist/supabase/server-client.js +28 -0
  1483. package/dist/supabase/server-client.js.map +1 -0
  1484. package/dist/themes/ThemeContext.d.ts +19 -0
  1485. package/dist/themes/ThemeContext.js +7 -0
  1486. package/dist/themes/ThemeContext.js.map +1 -0
  1487. package/dist/themes/ThemeRegistry.d.ts +40 -0
  1488. package/dist/themes/ThemeRegistry.js +5 -0
  1489. package/dist/themes/ThemeRegistry.js.map +1 -0
  1490. package/dist/themes/applyTokens.d.ts +9 -0
  1491. package/dist/themes/applyTokens.js +4 -0
  1492. package/dist/themes/applyTokens.js.map +1 -0
  1493. package/dist/themes/bootstrapThemes.d.ts +23 -0
  1494. package/dist/themes/bootstrapThemes.js +6 -0
  1495. package/dist/themes/bootstrapThemes.js.map +1 -0
  1496. package/dist/themes/conformance/assertThemeViewsConformance.d.ts +41 -0
  1497. package/dist/themes/conformance/boundary.d.ts +24 -0
  1498. package/dist/themes/conformance/cases.d.ts +15 -0
  1499. package/dist/themes/conformance/index.d.ts +2 -0
  1500. package/dist/themes/conformance/index.js +235 -0
  1501. package/dist/themes/conformance/index.js.map +1 -0
  1502. package/dist/themes/conformance/render.d.ts +21 -0
  1503. package/dist/themes/conformance/stubs.d.ts +5 -0
  1504. package/dist/themes/index.d.ts +7 -0
  1505. package/dist/themes/index.js +11 -0
  1506. package/dist/themes/index.js.map +1 -0
  1507. package/dist/themes/safeFontStylesheets.d.ts +16 -0
  1508. package/dist/themes/safeFontStylesheets.js +36 -0
  1509. package/dist/themes/safeFontStylesheets.js.map +1 -0
  1510. package/dist/themes/server/index.d.ts +19 -0
  1511. package/dist/themes/server/index.js +62 -0
  1512. package/dist/themes/server/index.js.map +1 -0
  1513. package/dist/themes/server/registry-db.d.ts +25 -0
  1514. package/dist/themes/theme-context.d.ts +13 -0
  1515. package/dist/themes/theme-settings.d.ts +10 -0
  1516. package/dist/themes/types.d.ts +203 -0
  1517. package/dist/themes/types.js +3 -0
  1518. package/dist/themes/types.js.map +1 -0
  1519. package/dist/themes/useThemeT.d.ts +29 -0
  1520. package/dist/themes/useThemeT.js +8 -0
  1521. package/dist/themes/useThemeT.js.map +1 -0
  1522. package/dist/themes/validateThemeModule.d.ts +10 -0
  1523. package/dist/themes/validateThemeModule.js +4 -0
  1524. package/dist/themes/validateThemeModule.js.map +1 -0
  1525. package/dist/themes/validateThemeViews.d.ts +11 -0
  1526. package/dist/ui/accordion.d.ts +7 -0
  1527. package/dist/ui/accordion.js +4 -0
  1528. package/dist/ui/accordion.js.map +1 -0
  1529. package/dist/ui/alert-dialog.d.ts +20 -0
  1530. package/dist/ui/alert-dialog.js +5 -0
  1531. package/dist/ui/alert-dialog.js.map +1 -0
  1532. package/dist/ui/alert.d.ts +8 -0
  1533. package/dist/ui/alert.js +4 -0
  1534. package/dist/ui/alert.js.map +1 -0
  1535. package/dist/ui/aspect-ratio.d.ts +3 -0
  1536. package/dist/ui/aspect-ratio.js +4 -0
  1537. package/dist/ui/aspect-ratio.js.map +1 -0
  1538. package/dist/ui/avatar.d.ts +6 -0
  1539. package/dist/ui/avatar.js +4 -0
  1540. package/dist/ui/avatar.js.map +1 -0
  1541. package/dist/ui/badge.d.ts +9 -0
  1542. package/dist/ui/badge.js +4 -0
  1543. package/dist/ui/badge.js.map +1 -0
  1544. package/dist/ui/breadcrumb.d.ts +19 -0
  1545. package/dist/ui/breadcrumb.js +4 -0
  1546. package/dist/ui/breadcrumb.js.map +1 -0
  1547. package/dist/ui/button.d.ts +11 -0
  1548. package/dist/ui/button.js +4 -0
  1549. package/dist/ui/button.js.map +1 -0
  1550. package/dist/ui/calendar.d.ts +8 -0
  1551. package/dist/ui/calendar.js +5 -0
  1552. package/dist/ui/calendar.js.map +1 -0
  1553. package/dist/ui/card.d.ts +8 -0
  1554. package/dist/ui/card.js +4 -0
  1555. package/dist/ui/card.js.map +1 -0
  1556. package/dist/ui/carousel.d.ts +18 -0
  1557. package/dist/ui/carousel.js +5 -0
  1558. package/dist/ui/carousel.js.map +1 -0
  1559. package/dist/ui/chart.d.ts +59 -0
  1560. package/dist/ui/chart.js +4 -0
  1561. package/dist/ui/chart.js.map +1 -0
  1562. package/dist/ui/checkbox.d.ts +4 -0
  1563. package/dist/ui/checkbox.js +4 -0
  1564. package/dist/ui/checkbox.js.map +1 -0
  1565. package/dist/ui/collapsible.d.ts +5 -0
  1566. package/dist/ui/collapsible.js +4 -0
  1567. package/dist/ui/collapsible.js.map +1 -0
  1568. package/dist/ui/command.d.ts +82 -0
  1569. package/dist/ui/command.js +5 -0
  1570. package/dist/ui/command.js.map +1 -0
  1571. package/dist/ui/context-menu.d.ts +27 -0
  1572. package/dist/ui/context-menu.js +4 -0
  1573. package/dist/ui/context-menu.js.map +1 -0
  1574. package/dist/ui/dialog.d.ts +19 -0
  1575. package/dist/ui/dialog.js +4 -0
  1576. package/dist/ui/dialog.js.map +1 -0
  1577. package/dist/ui/drawer.d.ts +22 -0
  1578. package/dist/ui/drawer.js +4 -0
  1579. package/dist/ui/drawer.js.map +1 -0
  1580. package/dist/ui/dropdown-menu.d.ts +27 -0
  1581. package/dist/ui/dropdown-menu.js +4 -0
  1582. package/dist/ui/dropdown-menu.js.map +1 -0
  1583. package/dist/ui/form.d.ts +25 -0
  1584. package/dist/ui/form.js +5 -0
  1585. package/dist/ui/form.js.map +1 -0
  1586. package/dist/ui/hover-card.d.ts +6 -0
  1587. package/dist/ui/hover-card.js +4 -0
  1588. package/dist/ui/hover-card.js.map +1 -0
  1589. package/dist/ui/index.d.ts +52 -0
  1590. package/dist/ui/index.js +54 -0
  1591. package/dist/ui/index.js.map +1 -0
  1592. package/dist/ui/input-otp.d.ts +34 -0
  1593. package/dist/ui/input-otp.js +4 -0
  1594. package/dist/ui/input-otp.js.map +1 -0
  1595. package/dist/ui/input.d.ts +3 -0
  1596. package/dist/ui/input.js +4 -0
  1597. package/dist/ui/input.js.map +1 -0
  1598. package/dist/ui/label.d.ts +5 -0
  1599. package/dist/ui/label.js +4 -0
  1600. package/dist/ui/label.js.map +1 -0
  1601. package/dist/ui/menubar.d.ts +28 -0
  1602. package/dist/ui/menubar.js +4 -0
  1603. package/dist/ui/menubar.js.map +1 -0
  1604. package/dist/ui/navigation-menu.d.ts +12 -0
  1605. package/dist/ui/navigation-menu.js +4 -0
  1606. package/dist/ui/navigation-menu.js.map +1 -0
  1607. package/dist/ui/pagination.d.ts +28 -0
  1608. package/dist/ui/pagination.js +5 -0
  1609. package/dist/ui/pagination.js.map +1 -0
  1610. package/dist/ui/popover.d.ts +6 -0
  1611. package/dist/ui/popover.js +4 -0
  1612. package/dist/ui/popover.js.map +1 -0
  1613. package/dist/ui/progress.d.ts +4 -0
  1614. package/dist/ui/progress.js +4 -0
  1615. package/dist/ui/progress.js.map +1 -0
  1616. package/dist/ui/radio-group.d.ts +5 -0
  1617. package/dist/ui/radio-group.js +4 -0
  1618. package/dist/ui/radio-group.js.map +1 -0
  1619. package/dist/ui/resizable.d.ts +7 -0
  1620. package/dist/ui/resizable.js +4 -0
  1621. package/dist/ui/resizable.js.map +1 -0
  1622. package/dist/ui/scroll-area.d.ts +5 -0
  1623. package/dist/ui/scroll-area.js +4 -0
  1624. package/dist/ui/scroll-area.js.map +1 -0
  1625. package/dist/ui/select.d.ts +13 -0
  1626. package/dist/ui/select.js +4 -0
  1627. package/dist/ui/select.js.map +1 -0
  1628. package/dist/ui/separator.d.ts +4 -0
  1629. package/dist/ui/separator.js +4 -0
  1630. package/dist/ui/separator.js.map +1 -0
  1631. package/dist/ui/sheet.d.ts +25 -0
  1632. package/dist/ui/sheet.js +4 -0
  1633. package/dist/ui/sheet.js.map +1 -0
  1634. package/dist/ui/sidebar.d.ts +66 -0
  1635. package/dist/ui/sidebar.js +10 -0
  1636. package/dist/ui/sidebar.js.map +1 -0
  1637. package/dist/ui/skeleton.d.ts +2 -0
  1638. package/dist/ui/skeleton.js +4 -0
  1639. package/dist/ui/skeleton.js.map +1 -0
  1640. package/dist/ui/slider.d.ts +4 -0
  1641. package/dist/ui/slider.js +4 -0
  1642. package/dist/ui/slider.js.map +1 -0
  1643. package/dist/ui/sonner.d.ts +4 -0
  1644. package/dist/ui/sonner.js +4 -0
  1645. package/dist/ui/sonner.js.map +1 -0
  1646. package/dist/ui/switch.d.ts +4 -0
  1647. package/dist/ui/switch.js +4 -0
  1648. package/dist/ui/switch.js.map +1 -0
  1649. package/dist/ui/table.d.ts +10 -0
  1650. package/dist/ui/table.js +4 -0
  1651. package/dist/ui/table.js.map +1 -0
  1652. package/dist/ui/tabs.d.ts +7 -0
  1653. package/dist/ui/tabs.js +4 -0
  1654. package/dist/ui/tabs.js.map +1 -0
  1655. package/dist/ui/textarea.d.ts +5 -0
  1656. package/dist/ui/textarea.js +4 -0
  1657. package/dist/ui/textarea.js.map +1 -0
  1658. package/dist/ui/toast.d.ts +15 -0
  1659. package/dist/ui/toast.js +4 -0
  1660. package/dist/ui/toast.js.map +1 -0
  1661. package/dist/ui/toaster.d.ts +1 -0
  1662. package/dist/ui/toaster.js +5 -0
  1663. package/dist/ui/toaster.js.map +1 -0
  1664. package/dist/ui/toggle-group.d.ts +12 -0
  1665. package/dist/ui/toggle-group.js +5 -0
  1666. package/dist/ui/toggle-group.js.map +1 -0
  1667. package/dist/ui/toggle.d.ts +12 -0
  1668. package/dist/ui/toggle.js +4 -0
  1669. package/dist/ui/toggle.js.map +1 -0
  1670. package/dist/ui/tooltip.d.ts +7 -0
  1671. package/dist/ui/tooltip.js +4 -0
  1672. package/dist/ui/tooltip.js.map +1 -0
  1673. package/dist/ui/use-mobile.d.ts +1 -0
  1674. package/dist/ui/use-mobile.js +4 -0
  1675. package/dist/ui/use-mobile.js.map +1 -0
  1676. package/dist/ui/use-toast.d.ts +49 -0
  1677. package/dist/ui/use-toast.js +4 -0
  1678. package/dist/ui/use-toast.js.map +1 -0
  1679. package/dist/ui/utils.d.ts +2 -0
  1680. package/dist/ui/utils.js +4 -0
  1681. package/dist/ui/utils.js.map +1 -0
  1682. package/migrations/0000_prelude.sql +100 -0
  1683. package/migrations/0001_init.sql +790 -0
  1684. package/migrations/0002_grants.sql +190 -0
  1685. package/migrations/0003_seed.sql +74 -0
  1686. package/migrations/README.md +71 -0
  1687. package/migrations/demo/demo-seed.sql +240 -0
  1688. package/package.json +551 -0
  1689. package/routes/admin/.gitkeep +0 -0
  1690. package/routes/admin/admin/banners/$bannerId.tsx +6 -0
  1691. package/routes/admin/admin/banners/index.tsx +6 -0
  1692. package/routes/admin/admin/discounts/$discountId.tsx +9 -0
  1693. package/routes/admin/admin/discounts/groups/$groupId.tsx +9 -0
  1694. package/routes/admin/admin/discounts/index.tsx +6 -0
  1695. package/routes/admin/admin/index.tsx +6 -0
  1696. package/routes/admin/admin/languages/index.tsx +6 -0
  1697. package/routes/admin/admin/order-statuses/index.tsx +6 -0
  1698. package/routes/admin/admin/orders/$orderId.tsx +6 -0
  1699. package/routes/admin/admin/orders/index.tsx +6 -0
  1700. package/routes/admin/admin/plugins/$pluginId/settings.tsx +6 -0
  1701. package/routes/admin/admin/plugins/index.tsx +6 -0
  1702. package/routes/admin/admin/price-types/$priceTypeId.tsx +6 -0
  1703. package/routes/admin/admin/price-types/index.tsx +6 -0
  1704. package/routes/admin/admin/price-validator/index.tsx +6 -0
  1705. package/routes/admin/admin/products/$productId.tsx +6 -0
  1706. package/routes/admin/admin/products/index.tsx +6 -0
  1707. package/routes/admin/admin/properties/$propertyId/index.tsx +6 -0
  1708. package/routes/admin/admin/properties/$propertyId/options/$optionId.tsx +8 -0
  1709. package/routes/admin/admin/properties/index.tsx +6 -0
  1710. package/routes/admin/admin/reviews/$reviewId.tsx +6 -0
  1711. package/routes/admin/admin/reviews/index.tsx +6 -0
  1712. package/routes/admin/admin/sections/$sectionId.tsx +6 -0
  1713. package/routes/admin/admin/sections/index.tsx +6 -0
  1714. package/routes/admin/admin/service-requests/index.tsx +6 -0
  1715. package/routes/admin/admin/services/index.tsx +6 -0
  1716. package/routes/admin/admin/settings/index.tsx +6 -0
  1717. package/routes/admin/admin/shipping/index.tsx +6 -0
  1718. package/routes/admin/admin/shipping/methods/$methodId.tsx +6 -0
  1719. package/routes/admin/admin/shipping/methods/index.tsx +6 -0
  1720. package/routes/admin/admin/shipping/pickup-points/$pointId.tsx +6 -0
  1721. package/routes/admin/admin/shipping/pickup-points/index.tsx +6 -0
  1722. package/routes/admin/admin/shipping/zones/$zoneId.tsx +6 -0
  1723. package/routes/admin/admin/shipping/zones/index.tsx +6 -0
  1724. package/routes/admin/admin/themes/$themeId/settings.tsx +6 -0
  1725. package/routes/admin/admin/themes/index.tsx +6 -0
  1726. package/routes/admin/admin/user-categories/$categoryId.tsx +6 -0
  1727. package/routes/admin/admin/user-categories/index.tsx +6 -0
  1728. package/routes/admin/admin/user-categories/rules/$ruleId.tsx +6 -0
  1729. package/routes/admin/admin/user-categories/rules/index.tsx +6 -0
  1730. package/routes/admin/admin/users/$userId.tsx +6 -0
  1731. package/routes/admin/admin/users/index.tsx +6 -0
  1732. package/routes/admin/admin.tsx +59 -0
  1733. package/routes/storefront/_protected/profile/index.tsx +9 -0
  1734. package/routes/storefront/_protected/profile/orders/$orderId.tsx +9 -0
  1735. package/routes/storefront/_protected/profile/orders/index.tsx +9 -0
  1736. package/routes/storefront/_protected/profile/settings.tsx +9 -0
  1737. package/routes/storefront/_protected.tsx +45 -0
  1738. package/routes/storefront/_storefront/cart.tsx +10 -0
  1739. package/routes/storefront/_storefront/catalog/$sectionSlug/$productSlug.tsx +92 -0
  1740. package/routes/storefront/_storefront/catalog/$sectionSlug/index.tsx +49 -0
  1741. package/routes/storefront/_storefront/catalog/index.tsx +36 -0
  1742. package/routes/storefront/_storefront/checkout.tsx +10 -0
  1743. package/routes/storefront/_storefront/index.tsx +34 -0
  1744. package/routes/storefront/_storefront/order-success/$orderId.tsx +13 -0
  1745. package/routes/storefront/_storefront/properties/$propertySlug/$optionSlug.tsx +45 -0
  1746. package/routes/storefront/_storefront/properties/$propertySlug/index.tsx +32 -0
  1747. package/routes/storefront/_storefront/properties/index.tsx +27 -0
  1748. package/routes/storefront/_storefront.tsx +32 -0
  1749. package/routes/storefront/api/auth/$.tsx +28 -0
  1750. package/routes/storefront/api/guest-order.tsx +102 -0
  1751. package/routes/storefront/api/health.tsx +59 -0
  1752. package/routes/storefront/api/revalidate-theme.tsx +20 -0
  1753. package/routes/storefront/auth/index.tsx +30 -0
  1754. package/routes/storefront/auth/invite.tsx +18 -0
  1755. package/routes/storefront/auth/set-password.tsx +16 -0
  1756. package/skills/redesign-from-reference/SKILL.md +648 -0
  1757. package/skills/redesign-from-reference/scripts/discover.mjs +122 -0
  1758. package/skills/redesign-from-reference/scripts/inspect.mjs +116 -0
  1759. package/skills/redesign-from-reference/scripts/lib/browser-fonts.mjs +83 -0
  1760. package/skills/redesign-from-reference/scripts/lib/browser-hover.mjs +68 -0
  1761. package/skills/redesign-from-reference/scripts/lib/browser-keyframes.mjs +62 -0
  1762. package/skills/redesign-from-reference/scripts/lib/browser-motion.mjs +104 -0
  1763. package/skills/redesign-from-reference/scripts/lib/browser-reveal.mjs +78 -0
  1764. package/skills/redesign-from-reference/scripts/lib/browser-sample.mjs +123 -0
  1765. package/skills/redesign-from-reference/scripts/lib/browser.mjs +145 -0
  1766. package/skills/redesign-from-reference/scripts/lib/classify-pairs.mjs +88 -0
  1767. package/skills/redesign-from-reference/scripts/lib/classify-structure.mjs +109 -0
  1768. package/skills/redesign-from-reference/scripts/lib/classify-terms.mjs +126 -0
  1769. package/skills/redesign-from-reference/scripts/lib/classify.mjs +126 -0
  1770. package/skills/redesign-from-reference/scripts/lib/cli-entry.mjs +22 -0
  1771. package/skills/redesign-from-reference/scripts/lib/cluster.mjs +95 -0
  1772. package/skills/redesign-from-reference/scripts/lib/collect-links.mjs +57 -0
  1773. package/skills/redesign-from-reference/scripts/lib/color-tokens.mjs +135 -0
  1774. package/skills/redesign-from-reference/scripts/lib/color.mjs +150 -0
  1775. package/skills/redesign-from-reference/scripts/lib/contrast.mjs +57 -0
  1776. package/skills/redesign-from-reference/scripts/lib/fonts.mjs +67 -0
  1777. package/skills/redesign-from-reference/scripts/lib/hover-sweep.mjs +150 -0
  1778. package/skills/redesign-from-reference/scripts/lib/inspect-page.mjs +110 -0
  1779. package/skills/redesign-from-reference/scripts/lib/inspection-version.mjs +38 -0
  1780. package/skills/redesign-from-reference/scripts/lib/map.mjs +69 -0
  1781. package/skills/redesign-from-reference/scripts/lib/merge.mjs +150 -0
  1782. package/skills/redesign-from-reference/scripts/lib/motion-detect.mjs +128 -0
  1783. package/skills/redesign-from-reference/scripts/lib/motion.mjs +126 -0
  1784. package/skills/redesign-from-reference/scripts/lib/sample.mjs +66 -0
  1785. package/skills/redesign-from-reference/scripts/lib/sitemap-links.mjs +24 -0
  1786. package/skills/redesign-from-reference/scripts/lib/sitemap.mjs +144 -0
  1787. package/skills/redesign-from-reference/scripts/lib/unmapped.mjs +97 -0
  1788. package/skills/redesign-from-reference/scripts/lib/visit-candidate.mjs +53 -0
  1789. package/skills/redesign-from-reference/scripts/lib/visit-probe.mjs +159 -0
  1790. package/skills/redesign-from-reference/scripts/map-tokens.mjs +142 -0
  1791. package/src/admin/components/AddProductToOrder.tsx +314 -0
  1792. package/src/admin/components/AllProductProperties.tsx +442 -0
  1793. package/src/admin/components/ImageUpload.tsx +295 -0
  1794. package/src/admin/components/ProductModifications.tsx +669 -0
  1795. package/src/admin/components/ProductPricesEditor.tsx +232 -0
  1796. package/src/admin/components/ProductPropertyValues.tsx +475 -0
  1797. package/src/admin/components/RichTextEditor.tsx +326 -0
  1798. package/src/admin/components/SectionPropertiesManager.tsx +380 -0
  1799. package/src/admin/components/SectionPropertiesTable.tsx +312 -0
  1800. package/src/admin/components/SimpleProductFields.tsx +57 -0
  1801. package/src/admin/components/StockByPointManager.tsx +301 -0
  1802. package/src/admin/components/StockStatusSelect.tsx +88 -0
  1803. package/src/admin/components/ThemeActivateDialog.tsx +51 -0
  1804. package/src/admin/components/ThemeCard.tsx +143 -0
  1805. package/src/admin/hooks/usePluginToggle.ts +87 -0
  1806. package/src/admin/hooks/useThemeActivate.ts +73 -0
  1807. package/src/admin/index.ts +59 -0
  1808. package/src/admin/layouts/AdminLayout.tsx +64 -0
  1809. package/src/admin/layouts/AdminSidebar.tsx +356 -0
  1810. package/src/admin/lib/adminLinks.ts +19 -0
  1811. package/src/admin/lib/pluginSettingsFields.ts +40 -0
  1812. package/src/admin/lib/revalidateTheme.ts +57 -0
  1813. package/src/admin/pages/BannerEdit.tsx +664 -0
  1814. package/src/admin/pages/Banners.tsx +201 -0
  1815. package/src/admin/pages/Dashboard.tsx +234 -0
  1816. package/src/admin/pages/DiscountEdit.tsx +872 -0
  1817. package/src/admin/pages/DiscountGroupEdit.tsx +371 -0
  1818. package/src/admin/pages/Discounts.tsx +423 -0
  1819. package/src/admin/pages/OrderDetail.tsx +736 -0
  1820. package/src/admin/pages/OrderStatuses.tsx +537 -0
  1821. package/src/admin/pages/Orders.tsx +126 -0
  1822. package/src/admin/pages/PickupPointEdit.tsx +407 -0
  1823. package/src/admin/pages/PickupPoints.tsx +204 -0
  1824. package/src/admin/pages/PlaceholderPage.tsx +50 -0
  1825. package/src/admin/pages/PluginSettings.tsx +459 -0
  1826. package/src/admin/pages/Plugins.tsx +263 -0
  1827. package/src/admin/pages/PriceTypeEdit.tsx +301 -0
  1828. package/src/admin/pages/PriceTypes.tsx +152 -0
  1829. package/src/admin/pages/PriceValidator.tsx +549 -0
  1830. package/src/admin/pages/ProductEdit.tsx +512 -0
  1831. package/src/admin/pages/Products.tsx +202 -0
  1832. package/src/admin/pages/Properties.tsx +347 -0
  1833. package/src/admin/pages/PropertyEdit.tsx +433 -0
  1834. package/src/admin/pages/PropertyOptionEdit.tsx +359 -0
  1835. package/src/admin/pages/ReviewDetail.tsx +353 -0
  1836. package/src/admin/pages/Reviews.tsx +226 -0
  1837. package/src/admin/pages/SectionEdit.tsx +301 -0
  1838. package/src/admin/pages/Sections.tsx +184 -0
  1839. package/src/admin/pages/Settings.tsx +136 -0
  1840. package/src/admin/pages/Shipping.tsx +209 -0
  1841. package/src/admin/pages/ShippingMethodEdit.tsx +397 -0
  1842. package/src/admin/pages/ShippingMethods.tsx +243 -0
  1843. package/src/admin/pages/ShippingZoneEdit.tsx +579 -0
  1844. package/src/admin/pages/ShippingZones.tsx +218 -0
  1845. package/src/admin/pages/ThemeSettings.tsx +234 -0
  1846. package/src/admin/pages/Themes.tsx +102 -0
  1847. package/src/admin/pages/UserCategories.tsx +165 -0
  1848. package/src/admin/pages/UserCategoryEdit.tsx +390 -0
  1849. package/src/admin/pages/UserCategoryRuleEdit.tsx +665 -0
  1850. package/src/admin/pages/UserCategoryRules.tsx +327 -0
  1851. package/src/admin/pages/UserEdit.tsx +556 -0
  1852. package/src/admin/pages/Users.tsx +322 -0
  1853. package/src/auth/accept-invite.ts +81 -0
  1854. package/src/auth/authz.ts +144 -0
  1855. package/src/auth/drizzle-proxy.ts +71 -0
  1856. package/src/auth/env.ts +48 -0
  1857. package/src/auth/hooks.ts +94 -0
  1858. package/src/auth/index.ts +75 -0
  1859. package/src/auth/instance.ts +116 -0
  1860. package/src/auth/invite-email.ts +84 -0
  1861. package/src/auth/invite-store.ts +89 -0
  1862. package/src/auth/invite.ts +144 -0
  1863. package/src/auth/provision.ts +34 -0
  1864. package/src/auth/send-email.ts +26 -0
  1865. package/src/auth/session.ts +67 -0
  1866. package/src/cart-ui/CartButton.tsx +23 -0
  1867. package/src/cart-ui/CartDrawer.tsx +119 -0
  1868. package/src/cart-ui/CartItem.tsx +21 -0
  1869. package/src/cart-ui/CartItemView.tsx +109 -0
  1870. package/src/cart-ui/index.ts +6 -0
  1871. package/src/catalog-ui/ActiveFilters.tsx +123 -0
  1872. package/src/catalog-ui/FilterSidebar.tsx +382 -0
  1873. package/src/catalog-ui/ModificationSelector.tsx +171 -0
  1874. package/src/catalog-ui/ProductCard.tsx +104 -0
  1875. package/src/catalog-ui/ProductCharacteristics.tsx +82 -0
  1876. package/src/catalog-ui/ProductGallery.tsx +95 -0
  1877. package/src/catalog-ui/StockDisplay.tsx +146 -0
  1878. package/src/catalog-ui/index.ts +8 -0
  1879. package/src/checkout-ui/AddressCard.tsx +62 -0
  1880. package/src/checkout-ui/AddressSaveDialog.tsx +96 -0
  1881. package/src/checkout-ui/AddressSelectorPopup.tsx +177 -0
  1882. package/src/checkout-ui/CheckoutAuthBlock.tsx +339 -0
  1883. package/src/checkout-ui/CheckoutContactForm.tsx +85 -0
  1884. package/src/checkout-ui/CheckoutDeliveryForm.tsx +399 -0
  1885. package/src/checkout-ui/CheckoutOrderSummary.tsx +135 -0
  1886. package/src/checkout-ui/CheckoutPaymentForm.tsx +76 -0
  1887. package/src/checkout-ui/CheckoutRecipientForm.tsx +427 -0
  1888. package/src/checkout-ui/RecipientCard.tsx +66 -0
  1889. package/src/checkout-ui/RecipientSaveDialog.tsx +96 -0
  1890. package/src/checkout-ui/RecipientSelectorPopup.tsx +187 -0
  1891. package/src/checkout-ui/index.ts +13 -0
  1892. package/src/contracts/README.md +60 -0
  1893. package/src/contracts/index.ts +12 -0
  1894. package/src/contracts/objects/banner.ts +34 -0
  1895. package/src/contracts/objects/catalog.ts +76 -0
  1896. package/src/contracts/objects/common.ts +27 -0
  1897. package/src/contracts/objects/config.ts +17 -0
  1898. package/src/contracts/objects/discount.ts +92 -0
  1899. package/src/contracts/objects/identity.ts +10 -0
  1900. package/src/contracts/objects/index.ts +12 -0
  1901. package/src/contracts/objects/inventory.ts +38 -0
  1902. package/src/contracts/objects/order.ts +55 -0
  1903. package/src/contracts/objects/pricing.ts +22 -0
  1904. package/src/contracts/objects/shipping.ts +127 -0
  1905. package/src/contracts/ports/index.ts +95 -0
  1906. package/src/contracts/semver/index.ts +62 -0
  1907. package/src/contracts/semver/version.ts +15 -0
  1908. package/src/contracts/views/cart.ts +24 -0
  1909. package/src/contracts/views/catalog.ts +47 -0
  1910. package/src/contracts/views/common.ts +39 -0
  1911. package/src/contracts/views/fixtures/cart.ts +17 -0
  1912. package/src/contracts/views/fixtures/catalog.ts +52 -0
  1913. package/src/contracts/views/fixtures/home.ts +81 -0
  1914. package/src/contracts/views/fixtures/index.ts +39 -0
  1915. package/src/contracts/views/fixtures/product-detail.ts +60 -0
  1916. package/src/contracts/views/home.ts +53 -0
  1917. package/src/contracts/views/index.ts +11 -0
  1918. package/src/contracts/views/product-detail.ts +78 -0
  1919. package/src/contracts/views/requisites.ts +112 -0
  1920. package/src/contracts/views/slots.ts +28 -0
  1921. package/src/core/components/NavLink.tsx +37 -0
  1922. package/src/core/components/ThemeToggle.tsx +42 -0
  1923. package/src/core/components/cart/CartDrawer.tsx +2 -0
  1924. package/src/core/components/cart/CartItem.tsx +2 -0
  1925. package/src/core/components/catalog/ActiveFilters.tsx +6 -0
  1926. package/src/core/components/catalog/FilterSidebar.tsx +6 -0
  1927. package/src/core/components/catalog/ModificationSelector.tsx +6 -0
  1928. package/src/core/components/catalog/ProductCard.tsx +5 -0
  1929. package/src/core/components/catalog/ProductCharacteristics.tsx +5 -0
  1930. package/src/core/components/catalog/ProductGallery.tsx +5 -0
  1931. package/src/core/components/catalog/StockDisplay.tsx +5 -0
  1932. package/src/core/components/checkout/CheckoutAuthBlock.tsx +5 -0
  1933. package/src/core/components/checkout/CheckoutContactForm.tsx +5 -0
  1934. package/src/core/components/checkout/CheckoutDeliveryForm.tsx +5 -0
  1935. package/src/core/components/checkout/CheckoutOrderSummary.tsx +5 -0
  1936. package/src/core/components/checkout/CheckoutPaymentForm.tsx +5 -0
  1937. package/src/core/components/checkout/CheckoutRecipientForm.tsx +5 -0
  1938. package/src/core/components/profile/AddressesList.tsx +5 -0
  1939. package/src/core/components/profile/AvatarUpload.tsx +5 -0
  1940. package/src/core/components/profile/RecipientsList.tsx +5 -0
  1941. package/src/core/components/reviews/ProductReviews.tsx +2 -0
  1942. package/src/core/components/reviews/StarRating.tsx +2 -0
  1943. package/src/core/hooks/use-toast.ts +6 -0
  1944. package/src/core/hooks/useAddressBook.ts +61 -0
  1945. package/src/core/hooks/useAuth.tsx +75 -0
  1946. package/src/core/hooks/useBanners.ts +27 -0
  1947. package/src/core/hooks/useCart.tsx +3 -0
  1948. package/src/core/hooks/useDiscountedPrice.ts +83 -0
  1949. package/src/core/hooks/usePriceType.ts +25 -0
  1950. package/src/core/hooks/useProductReviews.ts +141 -0
  1951. package/src/core/hooks/useProductsWithStock.ts +11 -0
  1952. package/src/core/hooks/useRecipientBook.ts +56 -0
  1953. package/src/core/hooks/useShippingDirectory.ts +61 -0
  1954. package/src/core/hooks/useStock.ts +102 -0
  1955. package/src/core/index.ts +83 -0
  1956. package/src/core/lib/auth-client.ts +22 -0
  1957. package/src/core/lib/auth-session.ts +23 -0
  1958. package/src/core/lib/banners.ts +28 -0
  1959. package/src/core/lib/discounts.ts +78 -0
  1960. package/src/core/lib/price-type.ts +48 -0
  1961. package/src/core/lib/review-form.ts +68 -0
  1962. package/src/core/lib/reviews.ts +64 -0
  1963. package/src/core/lib/section-filters.ts +26 -0
  1964. package/src/core/lib/shipping-directory.ts +34 -0
  1965. package/src/core/lib/stock.ts +48 -0
  1966. package/src/core/lib/user-addresses.ts +94 -0
  1967. package/src/core/lib/user-recipients.ts +83 -0
  1968. package/src/core/providers/CMSProvider.tsx +36 -0
  1969. package/src/data-supabase/README.md +70 -0
  1970. package/src/data-supabase/catalogRepository.ts +263 -0
  1971. package/src/data-supabase/identityProvider.ts +73 -0
  1972. package/src/data-supabase/index.ts +7 -0
  1973. package/src/data-supabase/mappers.ts +229 -0
  1974. package/src/data-supabase/orderRepository.ts +138 -0
  1975. package/src/data-supabase/scope.ts +17 -0
  1976. package/src/db/actor.ts +96 -0
  1977. package/src/db/client.ts +85 -0
  1978. package/src/db/index.ts +12 -0
  1979. package/src/db/with-actor.ts +87 -0
  1980. package/src/domain/README.md +57 -0
  1981. package/src/domain/discounts.ts +435 -0
  1982. package/src/domain/index.ts +10 -0
  1983. package/src/domain/inventory.ts +54 -0
  1984. package/src/domain/money.ts +80 -0
  1985. package/src/domain/pricing.ts +40 -0
  1986. package/src/domain/shipping.ts +218 -0
  1987. package/src/domain/user-categories/conditions.ts +112 -0
  1988. package/src/domain/user-categories/engine.ts +80 -0
  1989. package/src/domain/user-categories/index.ts +11 -0
  1990. package/src/domain/user-categories/types.ts +64 -0
  1991. package/src/i18n/I18nProvider.tsx +60 -0
  1992. package/src/i18n/README.md +63 -0
  1993. package/src/i18n/catalogs/en/admin/banners.ts +66 -0
  1994. package/src/i18n/catalogs/en/admin/common.ts +21 -0
  1995. package/src/i18n/catalogs/en/admin/dashboard.ts +24 -0
  1996. package/src/i18n/catalogs/en/admin/discounts.ts +74 -0
  1997. package/src/i18n/catalogs/en/admin/index.ts +39 -0
  1998. package/src/i18n/catalogs/en/admin/nav.ts +35 -0
  1999. package/src/i18n/catalogs/en/admin/orders.ts +74 -0
  2000. package/src/i18n/catalogs/en/admin/plugins.ts +64 -0
  2001. package/src/i18n/catalogs/en/admin/prices.ts +19 -0
  2002. package/src/i18n/catalogs/en/admin/products.ts +84 -0
  2003. package/src/i18n/catalogs/en/admin/properties.ts +74 -0
  2004. package/src/i18n/catalogs/en/admin/reviews.ts +29 -0
  2005. package/src/i18n/catalogs/en/admin/sections.ts +21 -0
  2006. package/src/i18n/catalogs/en/admin/settings.ts +17 -0
  2007. package/src/i18n/catalogs/en/admin/shipping.ts +112 -0
  2008. package/src/i18n/catalogs/en/admin/themes.ts +28 -0
  2009. package/src/i18n/catalogs/en/admin/users.ts +104 -0
  2010. package/src/i18n/catalogs/en/admin/validator.ts +35 -0
  2011. package/src/i18n/catalogs/en/app.ts +14 -0
  2012. package/src/i18n/catalogs/en/auth.ts +65 -0
  2013. package/src/i18n/catalogs/en/breadcrumbs.ts +6 -0
  2014. package/src/i18n/catalogs/en/cart.ts +25 -0
  2015. package/src/i18n/catalogs/en/catalog.ts +26 -0
  2016. package/src/i18n/catalogs/en/checkout.ts +126 -0
  2017. package/src/i18n/catalogs/en/common.ts +94 -0
  2018. package/src/i18n/catalogs/en/home.ts +7 -0
  2019. package/src/i18n/catalogs/en/index.ts +44 -0
  2020. package/src/i18n/catalogs/en/nav.ts +9 -0
  2021. package/src/i18n/catalogs/en/product.ts +31 -0
  2022. package/src/i18n/catalogs/en/profile.ts +109 -0
  2023. package/src/i18n/catalogs/en/properties.ts +20 -0
  2024. package/src/i18n/catalogs/en/reviews.ts +32 -0
  2025. package/src/i18n/catalogs/en/validation.ts +33 -0
  2026. package/src/i18n/catalogs/uk/admin/banners.ts +67 -0
  2027. package/src/i18n/catalogs/uk/admin/common.ts +21 -0
  2028. package/src/i18n/catalogs/uk/admin/dashboard.ts +22 -0
  2029. package/src/i18n/catalogs/uk/admin/discounts.ts +73 -0
  2030. package/src/i18n/catalogs/uk/admin/index.ts +45 -0
  2031. package/src/i18n/catalogs/uk/admin/nav.ts +35 -0
  2032. package/src/i18n/catalogs/uk/admin/orders.ts +76 -0
  2033. package/src/i18n/catalogs/uk/admin/plugins.ts +68 -0
  2034. package/src/i18n/catalogs/uk/admin/prices.ts +17 -0
  2035. package/src/i18n/catalogs/uk/admin/products.ts +87 -0
  2036. package/src/i18n/catalogs/uk/admin/properties.ts +77 -0
  2037. package/src/i18n/catalogs/uk/admin/reviews.ts +27 -0
  2038. package/src/i18n/catalogs/uk/admin/sections.ts +19 -0
  2039. package/src/i18n/catalogs/uk/admin/settings.ts +17 -0
  2040. package/src/i18n/catalogs/uk/admin/shipping.ts +119 -0
  2041. package/src/i18n/catalogs/uk/admin/themes.ts +24 -0
  2042. package/src/i18n/catalogs/uk/admin/users.ts +106 -0
  2043. package/src/i18n/catalogs/uk/admin/validator.ts +34 -0
  2044. package/src/i18n/catalogs/uk/app.ts +15 -0
  2045. package/src/i18n/catalogs/uk/auth.ts +77 -0
  2046. package/src/i18n/catalogs/uk/breadcrumbs.ts +4 -0
  2047. package/src/i18n/catalogs/uk/cart.ts +24 -0
  2048. package/src/i18n/catalogs/uk/catalog.ts +26 -0
  2049. package/src/i18n/catalogs/uk/checkout.ts +137 -0
  2050. package/src/i18n/catalogs/uk/common.ts +114 -0
  2051. package/src/i18n/catalogs/uk/home.ts +5 -0
  2052. package/src/i18n/catalogs/uk/index.ts +44 -0
  2053. package/src/i18n/catalogs/uk/nav.ts +8 -0
  2054. package/src/i18n/catalogs/uk/product.ts +36 -0
  2055. package/src/i18n/catalogs/uk/profile.ts +117 -0
  2056. package/src/i18n/catalogs/uk/properties.ts +18 -0
  2057. package/src/i18n/catalogs/uk/reviews.ts +34 -0
  2058. package/src/i18n/catalogs/uk/validation.ts +38 -0
  2059. package/src/i18n/index.ts +14 -0
  2060. package/src/i18n/translator.ts +53 -0
  2061. package/src/i18n/types.ts +19 -0
  2062. package/src/index.ts +12 -0
  2063. package/src/plugin-sdk/definePlugin.ts +80 -0
  2064. package/src/plugin-sdk/index.ts +22 -0
  2065. package/src/plugin-sdk/server/config-db.ts +57 -0
  2066. package/src/plugin-sdk/server/guard.ts +77 -0
  2067. package/src/plugin-sdk/server/index.ts +118 -0
  2068. package/src/plugin-sdk/server/table-db.ts +149 -0
  2069. package/src/plugin-sdk/types.ts +70 -0
  2070. package/src/plugin-sdk/usePluginConfig.ts +105 -0
  2071. package/src/plugin-sdk/usePluginT.ts +33 -0
  2072. package/src/plugin-sdk/usePluginTable.ts +90 -0
  2073. package/src/plugins/HookRegistry.ts +125 -0
  2074. package/src/plugins/PluginLoader.ts +69 -0
  2075. package/src/plugins/PluginSlot.tsx +135 -0
  2076. package/src/plugins/adminLifecycle.ts +83 -0
  2077. package/src/plugins/bootstrap.ts +108 -0
  2078. package/src/plugins/hooks.ts +155 -0
  2079. package/src/plugins/index.ts +90 -0
  2080. package/src/plugins/pluginRepository.ts +138 -0
  2081. package/src/plugins/server/index.ts +53 -0
  2082. package/src/plugins/server/registry-db.ts +105 -0
  2083. package/src/plugins/types.ts +224 -0
  2084. package/src/plugins/validatePluginModule.ts +114 -0
  2085. package/src/profile-ui/AddressesList.tsx +358 -0
  2086. package/src/profile-ui/AvatarUpload.tsx +215 -0
  2087. package/src/profile-ui/RecipientsList.tsx +448 -0
  2088. package/src/profile-ui/index.ts +4 -0
  2089. package/src/react-query/EngineProvider.tsx +30 -0
  2090. package/src/react-query/README.md +54 -0
  2091. package/src/react-query/hooks.ts +49 -0
  2092. package/src/react-query/index.ts +9 -0
  2093. package/src/react-query/queries.ts +95 -0
  2094. package/src/react-query/useCart.tsx +172 -0
  2095. package/src/react-query/useFormatPrice.ts +39 -0
  2096. package/src/reviews-ui/ProductReviews.tsx +172 -0
  2097. package/src/reviews-ui/ReviewCard.tsx +165 -0
  2098. package/src/reviews-ui/ReviewForm.tsx +136 -0
  2099. package/src/reviews-ui/ReviewRichTextEditor.tsx +168 -0
  2100. package/src/reviews-ui/StarRating.tsx +69 -0
  2101. package/src/reviews-ui/index.ts +6 -0
  2102. package/src/runtime/README.md +60 -0
  2103. package/src/runtime/config.ts +45 -0
  2104. package/src/runtime/index.ts +87 -0
  2105. package/src/schema/README.md +114 -0
  2106. package/src/schema/auth.ts +150 -0
  2107. package/src/schema/index.ts +17 -0
  2108. package/src/schema/media.ts +69 -0
  2109. package/src/schema/relations.ts +449 -0
  2110. package/src/schema/schema.ts +1049 -0
  2111. package/src/schema/types.ts +164 -0
  2112. package/src/storefront/README.md +68 -0
  2113. package/src/storefront/client.ts +8 -0
  2114. package/src/storefront/index.ts +6 -0
  2115. package/src/storefront/loaders/addresses.ts +131 -0
  2116. package/src/storefront/loaders/banners.ts +44 -0
  2117. package/src/storefront/loaders/catalog-filters.ts +174 -0
  2118. package/src/storefront/loaders/catalog-products.ts +145 -0
  2119. package/src/storefront/loaders/categories.ts +44 -0
  2120. package/src/storefront/loaders/db.ts +65 -0
  2121. package/src/storefront/loaders/discounts.ts +110 -0
  2122. package/src/storefront/loaders/entities/banner.ts +99 -0
  2123. package/src/storefront/loaders/entities/catalog-product.ts +75 -0
  2124. package/src/storefront/loaders/entities/discount.ts +81 -0
  2125. package/src/storefront/loaders/entities/home-product.ts +49 -0
  2126. package/src/storefront/loaders/entities/modification.ts +55 -0
  2127. package/src/storefront/loaders/entities/order.ts +126 -0
  2128. package/src/storefront/loaders/entities/price.ts +48 -0
  2129. package/src/storefront/loaders/entities/product.ts +60 -0
  2130. package/src/storefront/loaders/entities/property.ts +82 -0
  2131. package/src/storefront/loaders/entities/section.ts +54 -0
  2132. package/src/storefront/loaders/home-sections.ts +81 -0
  2133. package/src/storefront/loaders/home.ts +81 -0
  2134. package/src/storefront/loaders/index.ts +76 -0
  2135. package/src/storefront/loaders/modification-values.ts +113 -0
  2136. package/src/storefront/loaders/order-create.ts +134 -0
  2137. package/src/storefront/loaders/order-statuses.ts +39 -0
  2138. package/src/storefront/loaders/orders.ts +113 -0
  2139. package/src/storefront/loaders/pickup-points.ts +36 -0
  2140. package/src/storefront/loaders/pricing.ts +23 -0
  2141. package/src/storefront/loaders/product-detail.ts +90 -0
  2142. package/src/storefront/loaders/products.ts +106 -0
  2143. package/src/storefront/loaders/profile.ts +96 -0
  2144. package/src/storefront/loaders/properties.ts +91 -0
  2145. package/src/storefront/loaders/property-option.ts +112 -0
  2146. package/src/storefront/loaders/property-values.ts +101 -0
  2147. package/src/storefront/loaders/recipients.ts +145 -0
  2148. package/src/storefront/loaders/reviews-write.ts +58 -0
  2149. package/src/storefront/loaders/reviews.ts +142 -0
  2150. package/src/storefront/loaders/sections.ts +46 -0
  2151. package/src/storefront/loaders/session.ts +53 -0
  2152. package/src/storefront/loaders/shipping.ts +163 -0
  2153. package/src/storefront/loaders/sitemap.ts +67 -0
  2154. package/src/storefront/loaders/stock-info.ts +127 -0
  2155. package/src/storefront/loaders/stock.ts +101 -0
  2156. package/src/storefront/seo/index.ts +2 -0
  2157. package/src/storefront/seo/robots.ts +16 -0
  2158. package/src/storefront/seo/sitemap.ts +73 -0
  2159. package/src/storefront-routes/active-theme.ts +23 -0
  2160. package/src/storefront-routes/components/BannerSlider.tsx +196 -0
  2161. package/src/storefront-routes/components/ProductCarousel.tsx +93 -0
  2162. package/src/storefront-routes/components/SetPasswordForm.tsx +94 -0
  2163. package/src/storefront-routes/components/SsrProductGrid.tsx +38 -0
  2164. package/src/storefront-routes/index.ts +7 -0
  2165. package/src/storefront-routes/pages/Auth.tsx +508 -0
  2166. package/src/storefront-routes/pages/AuthInvite.tsx +101 -0
  2167. package/src/storefront-routes/pages/AuthSetPassword.tsx +78 -0
  2168. package/src/storefront-routes/pages/Cart.tsx +24 -0
  2169. package/src/storefront-routes/pages/Catalog.tsx +41 -0
  2170. package/src/storefront-routes/pages/CatalogSection.tsx +83 -0
  2171. package/src/storefront-routes/pages/Checkout.tsx +353 -0
  2172. package/src/storefront-routes/pages/Home.tsx +61 -0
  2173. package/src/storefront-routes/pages/OrderSuccess.tsx +305 -0
  2174. package/src/storefront-routes/pages/ProductDetail.tsx +135 -0
  2175. package/src/storefront-routes/pages/Profile.tsx +195 -0
  2176. package/src/storefront-routes/pages/ProfileOrderDetail.tsx +430 -0
  2177. package/src/storefront-routes/pages/ProfileOrders.tsx +199 -0
  2178. package/src/storefront-routes/pages/ProfileSettings.tsx +431 -0
  2179. package/src/storefront-routes/pages/Properties.tsx +90 -0
  2180. package/src/storefront-routes/pages/PropertyDetail.tsx +127 -0
  2181. package/src/storefront-routes/pages/PropertyPage.tsx +203 -0
  2182. package/src/storefront-routes/pages/cart/breadcrumbs.ts +12 -0
  2183. package/src/storefront-routes/pages/cart/slots.ts +20 -0
  2184. package/src/storefront-routes/pages/catalog/active-filter-chips.ts +103 -0
  2185. package/src/storefront-routes/pages/catalog/breadcrumbs.ts +24 -0
  2186. package/src/storefront-routes/pages/catalog/filter-predicates.ts +80 -0
  2187. package/src/storefront-routes/pages/catalog/filtering.ts +118 -0
  2188. package/src/storefront-routes/pages/catalog/slot-context.tsx +64 -0
  2189. package/src/storefront-routes/pages/catalog/slots.tsx +80 -0
  2190. package/src/storefront-routes/pages/catalog/types.ts +46 -0
  2191. package/src/storefront-routes/pages/catalog/useActiveFilters.ts +69 -0
  2192. package/src/storefront-routes/pages/catalog/useCatalogController.ts +149 -0
  2193. package/src/storefront-routes/pages/catalog/useCatalogProductsQuery.ts +36 -0
  2194. package/src/storefront-routes/pages/catalog/useCatalogQueries.ts +67 -0
  2195. package/src/storefront-routes/pages/catalog/usePricedProducts.ts +87 -0
  2196. package/src/storefront-routes/pages/home/SectionProductCarousel.tsx +30 -0
  2197. package/src/storefront-routes/pages/home/queries.ts +72 -0
  2198. package/src/storefront-routes/pages/home/slot-context.tsx +49 -0
  2199. package/src/storefront-routes/pages/home/slots.tsx +30 -0
  2200. package/src/storefront-routes/pages/home/toCardViewModel.ts +26 -0
  2201. package/src/storefront-routes/pages/home/types.ts +17 -0
  2202. package/src/storefront-routes/pages/product-detail/breadcrumbs.ts +29 -0
  2203. package/src/storefront-routes/pages/product-detail/cart-item.ts +57 -0
  2204. package/src/storefront-routes/pages/product-detail/pricing.ts +123 -0
  2205. package/src/storefront-routes/pages/product-detail/slot-context.tsx +63 -0
  2206. package/src/storefront-routes/pages/product-detail/slots.tsx +112 -0
  2207. package/src/storefront-routes/pages/product-detail/types.ts +59 -0
  2208. package/src/storefront-routes/pages/product-detail/useModificationData.ts +53 -0
  2209. package/src/storefront-routes/pages/product-detail/useModificationSelection.ts +70 -0
  2210. package/src/storefront-routes/pages/product-detail/useProductContent.ts +88 -0
  2211. package/src/storefront-routes/pages/product-detail/useProductPricing.ts +88 -0
  2212. package/src/storefront-routes/pages/product-detail/useProductQuery.ts +26 -0
  2213. package/src/storefront-routes/seo/interceptor.ts +89 -0
  2214. package/src/storefront-routes/seo/robots.ts +15 -0
  2215. package/src/storefront-routes/seo/sitemap.ts +27 -0
  2216. package/src/storefront-routes/server/auth.ts +45 -0
  2217. package/src/storefront-routes/server/catalog.ts +120 -0
  2218. package/src/storefront-routes/server/checkout-input.ts +67 -0
  2219. package/src/storefront-routes/server/checkout.ts +133 -0
  2220. package/src/storefront-routes/server/home.ts +49 -0
  2221. package/src/storefront-routes/server/invite.ts +55 -0
  2222. package/src/storefront-routes/server/is-admin.ts +27 -0
  2223. package/src/storefront-routes/server/order-view.ts +41 -0
  2224. package/src/storefront-routes/server/product-list-item.ts +87 -0
  2225. package/src/storefront-routes/server/products.ts +47 -0
  2226. package/src/storefront-routes/server/profile-orders.ts +91 -0
  2227. package/src/storefront-routes/server/profile.ts +58 -0
  2228. package/src/storefront-routes/server/properties.ts +39 -0
  2229. package/src/storefront-routes/server/revalidate-theme.ts +27 -0
  2230. package/src/storefront-routes/server/theme-record.ts +89 -0
  2231. package/src/storefront-routes/server/themes.ts +14 -0
  2232. package/src/storefront-routes/shells/ProtectedShell.tsx +83 -0
  2233. package/src/storefront-routes/shells/StorefrontShell.tsx +25 -0
  2234. package/src/storefront-routes/shells/ThemeFonts.tsx +31 -0
  2235. package/src/storefront-routes/shells/ThemeTokens.tsx +17 -0
  2236. package/src/storefront-routes/shells/useActiveThemeModule.ts +16 -0
  2237. package/src/storefront-routes/views/CartView.tsx +86 -0
  2238. package/src/storefront-routes/views/CatalogLayout.tsx +60 -0
  2239. package/src/storefront-routes/views/CatalogSectionView.tsx +39 -0
  2240. package/src/storefront-routes/views/CatalogToolbar.tsx +48 -0
  2241. package/src/storefront-routes/views/CatalogView.tsx +30 -0
  2242. package/src/storefront-routes/views/HomeView.tsx +62 -0
  2243. package/src/storefront-routes/views/ProductDetailInfo.tsx +77 -0
  2244. package/src/storefront-routes/views/ProductDetailSections.tsx +107 -0
  2245. package/src/storefront-routes/views/ProductDetailView.tsx +47 -0
  2246. package/src/storefront-routes/views/StorefrontBreadcrumbs.tsx +31 -0
  2247. package/src/storefront-routes/views/slots/CartSlots.tsx +72 -0
  2248. package/src/storefront-routes/views/slots/CartSummary.tsx +49 -0
  2249. package/src/storefront-routes/views/slots/CatalogFilters.tsx +26 -0
  2250. package/src/storefront-routes/views/slots/CatalogProductGrid.tsx +80 -0
  2251. package/src/storefront-routes/views/slots/CatalogSectionChips.tsx +136 -0
  2252. package/src/storefront-routes/views/slots/CatalogToolbarSlots.tsx +125 -0
  2253. package/src/storefront-routes/views/slots/HomeSectionCarousel.tsx +29 -0
  2254. package/src/storefront-routes/views/slots/ProductAddToCart.tsx +58 -0
  2255. package/src/storefront-routes/views/slots/ProductContentSlots.tsx +52 -0
  2256. package/src/storefront-routes/views/slots/ProductModificationPicker.tsx +44 -0
  2257. package/src/storefront-routes/views/slots/ProductPluginSlots.tsx +63 -0
  2258. package/src/storefront-routes/views/slots/ProductPriceBlock.tsx +42 -0
  2259. package/src/storefront-routes/views/slots/ProductStockBadge.tsx +45 -0
  2260. package/src/storefront-routes/views/useStorefrontViews.ts +34 -0
  2261. package/src/storefront-routes/vite-env.d.ts +12 -0
  2262. package/src/supabase/README.md +73 -0
  2263. package/src/supabase/SupabaseProvider.tsx +53 -0
  2264. package/src/supabase/anon-client.ts +27 -0
  2265. package/src/supabase/browser-client.ts +33 -0
  2266. package/src/supabase/database.ts +2204 -0
  2267. package/src/supabase/index.ts +21 -0
  2268. package/src/supabase/keys.ts +42 -0
  2269. package/src/supabase/server-client.ts +49 -0
  2270. package/src/supabase/vite-env.d.ts +16 -0
  2271. package/src/themes/ThemeContext.tsx +109 -0
  2272. package/src/themes/ThemeRegistry.ts +126 -0
  2273. package/src/themes/applyTokens.ts +79 -0
  2274. package/src/themes/bootstrapThemes.ts +117 -0
  2275. package/src/themes/conformance/assertThemeViewsConformance.ts +123 -0
  2276. package/src/themes/conformance/boundary.tsx +38 -0
  2277. package/src/themes/conformance/cases.tsx +103 -0
  2278. package/src/themes/conformance/index.ts +13 -0
  2279. package/src/themes/conformance/render.tsx +97 -0
  2280. package/src/themes/conformance/stubs.tsx +67 -0
  2281. package/src/themes/index.ts +8 -0
  2282. package/src/themes/safeFontStylesheets.ts +62 -0
  2283. package/src/themes/server/index.ts +47 -0
  2284. package/src/themes/server/registry-db.ts +67 -0
  2285. package/src/themes/theme-context.ts +26 -0
  2286. package/src/themes/theme-settings.ts +21 -0
  2287. package/src/themes/types.ts +214 -0
  2288. package/src/themes/useThemeT.ts +49 -0
  2289. package/src/themes/validateThemeModule.ts +126 -0
  2290. package/src/themes/validateThemeViews.ts +46 -0
  2291. package/src/ui/accordion.tsx +56 -0
  2292. package/src/ui/alert-dialog.tsx +139 -0
  2293. package/src/ui/alert.tsx +59 -0
  2294. package/src/ui/aspect-ratio.tsx +5 -0
  2295. package/src/ui/avatar.tsx +48 -0
  2296. package/src/ui/badge.tsx +37 -0
  2297. package/src/ui/breadcrumb.tsx +115 -0
  2298. package/src/ui/button.tsx +57 -0
  2299. package/src/ui/calendar.tsx +67 -0
  2300. package/src/ui/card.tsx +86 -0
  2301. package/src/ui/carousel.tsx +260 -0
  2302. package/src/ui/chart.tsx +390 -0
  2303. package/src/ui/checkbox.tsx +28 -0
  2304. package/src/ui/collapsible.tsx +9 -0
  2305. package/src/ui/command.tsx +153 -0
  2306. package/src/ui/context-menu.tsx +198 -0
  2307. package/src/ui/dialog.tsx +120 -0
  2308. package/src/ui/drawer.tsx +116 -0
  2309. package/src/ui/dropdown-menu.tsx +198 -0
  2310. package/src/ui/form.tsx +177 -0
  2311. package/src/ui/hover-card.tsx +27 -0
  2312. package/src/ui/index.ts +53 -0
  2313. package/src/ui/input-otp.tsx +69 -0
  2314. package/src/ui/input.tsx +22 -0
  2315. package/src/ui/label.tsx +24 -0
  2316. package/src/ui/menubar.tsx +237 -0
  2317. package/src/ui/navigation-menu.tsx +128 -0
  2318. package/src/ui/pagination.tsx +117 -0
  2319. package/src/ui/popover.tsx +29 -0
  2320. package/src/ui/progress.tsx +26 -0
  2321. package/src/ui/radio-group.tsx +42 -0
  2322. package/src/ui/resizable.tsx +43 -0
  2323. package/src/ui/scroll-area.tsx +46 -0
  2324. package/src/ui/select.tsx +158 -0
  2325. package/src/ui/separator.tsx +29 -0
  2326. package/src/ui/sheet.tsx +139 -0
  2327. package/src/ui/sidebar.tsx +771 -0
  2328. package/src/ui/skeleton.tsx +15 -0
  2329. package/src/ui/slider.tsx +26 -0
  2330. package/src/ui/sonner.tsx +29 -0
  2331. package/src/ui/switch.tsx +27 -0
  2332. package/src/ui/table.tsx +117 -0
  2333. package/src/ui/tabs.tsx +53 -0
  2334. package/src/ui/textarea.tsx +23 -0
  2335. package/src/ui/toast.tsx +127 -0
  2336. package/src/ui/toaster.tsx +33 -0
  2337. package/src/ui/toggle-group.tsx +59 -0
  2338. package/src/ui/toggle.tsx +43 -0
  2339. package/src/ui/tooltip.tsx +28 -0
  2340. package/src/ui/use-mobile.tsx +21 -0
  2341. package/src/ui/use-toast.ts +191 -0
  2342. package/src/ui/utils.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storefront/loaders/db.ts","../src/storefront/loaders/session.ts","../src/storefront/loaders/entities/banner.ts","../src/storefront/loaders/banners.ts","../src/storefront/loaders/categories.ts","../src/storefront/loaders/entities/discount.ts","../src/storefront/loaders/discounts.ts","../src/storefront/loaders/entities/product.ts","../src/storefront/loaders/entities/home-product.ts","../src/storefront/loaders/home-sections.ts","../src/storefront/loaders/entities/section.ts","../src/storefront/loaders/sections.ts","../src/storefront/loaders/home.ts","../src/storefront/loaders/pricing.ts","../src/storefront/loaders/catalog-filters.ts","../src/storefront/loaders/entities/catalog-product.ts","../src/storefront/loaders/entities/price.ts","../src/storefront/loaders/property-values.ts","../src/storefront/loaders/modification-values.ts","../src/storefront/loaders/stock.ts","../src/storefront/loaders/catalog-products.ts","../src/storefront/loaders/entities/order.ts","../src/storefront/loaders/order-statuses.ts","../src/storefront/loaders/order-create.ts","../src/storefront/loaders/orders.ts","../src/storefront/loaders/addresses.ts","../src/storefront/loaders/pickup-points.ts","../src/storefront/loaders/profile.ts","../src/storefront/loaders/recipients.ts","../src/storefront/loaders/reviews.ts","../src/storefront/loaders/reviews-write.ts","../src/storefront/loaders/stock-info.ts","../src/storefront/loaders/entities/modification.ts","../src/storefront/loaders/product-detail.ts","../src/storefront/loaders/products.ts","../src/storefront/loaders/entities/property.ts","../src/storefront/loaders/properties.ts","../src/storefront/loaders/property-option.ts","../src/storefront/loaders/shipping.ts","../src/storefront/loaders/sitemap.ts"],"names":["banners","eq","and","products","sections","inArray","asc","propertyOptions","sectionProperties","productModifications","sql","isNull","desc","productPrices","productPropertyValues","orderStatuses","orders","orderItems","profiles","userCategories","count","productReviews","stockByPickupPoint","pickupPoints","row","modificationPropertyValues","or","shippingMethods"],"mappings":"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","file":"chunk-BDKJ3ITL.js","sourcesContent":["import { withActor, type ActorDb } from 'simplycms/db';\n\nexport type { ActorDb };\n\n/**\n * Транзакція вітрини — вхід у БД для ПУБЛІЧНОГО читання (В2-К1а).\n *\n * 🔴 Роль завжди `app_user` і завжди БЕЗ `userId`. Каталог однаковий для всіх,\n * тож ідентичність тут не потрібна, а `app_admin` для публічного читання зняв\n * би єдиний рубіж, який ще розрізняє покупця й адмінку. Персональні дані\n * читаються `withCustomerDb` — і тільки з id, узятим із серверної сесії.\n *\n * 🔴 Обгортка приймає ФУНКЦІЮ, а не віддає `db` назовні: усі запити однієї\n * сторінки мають лягти в ОДНУ транзакцію. Інакше кожен лоадер брав би власне\n * зʼєднання пулу — і сторінка збиралася б із кількох різних знімків БД.\n */\nexport function withStorefrontDb<T>(\n fn: (db: ActorDb) => Promise<T>,\n): Promise<T> {\n return withActor({ role: 'app_user' }, (db) => fn(db));\n}\n\n/**\n * Транзакція ЗАЛОГІНЕНОГО покупця: `app_user` + GUC `app.user_id`.\n *\n * 🔴 `userId` сюди приходить ЛИШЕ з `readSessionSubject` серверної сесії й\n * ніколи з параметра клієнта. Актора задає сервер, тож підставлений у запит\n * чужий id RLS не спинить — вона звірятиме рядки саме з тим, кого їй назвали.\n * Це і є та межа, яку не можна перекласти на базу.\n */\nexport function withCustomerDb<T>(\n userId: string,\n fn: (db: ActorDb) => Promise<T>,\n): Promise<T> {\n return withActor({ role: 'app_user', userId }, (db) => fn(db));\n}\n\n/**\n * Транзакція ГОСТЬОВОГО замовлення: `app_user` + GUC `app.order_token`.\n *\n * Гість не має ідентичності — його доступ до одного замовлення доводить\n * одноразовий токен із посилання (`orders_select_own_or_token`).\n */\nexport function withOrderTokenDb<T>(\n orderToken: string,\n fn: (db: ActorDb) => Promise<T>,\n): Promise<T> {\n return withActor({ role: 'app_user', orderToken }, (db) => fn(db));\n}\n\n/**\n * Транзакція службової мутації магазину — `app_admin`.\n *\n * 🔴 Потрібна там, де покупець ініціює зміну, якої НЕ сміє робити сам:\n * `0002_grants.sql` навмисно не дає `app_user` UPDATE на `orders`, тож\n * скасування замовлення — серверна операція. Правило використання жорстке:\n * спершу довести право під `withCustomerDb` (RLS віддасть рядок лише\n * власнику), і лише потім писати звідси. Виклик без такої перевірки —\n * підвищення прав, а не оптимізація.\n */\nexport function withStoreOperatorDb<T>(\n fn: (db: ActorDb) => Promise<T>,\n): Promise<T> {\n return withActor({ role: 'app_admin' }, (db) => fn(db));\n}\n","import { getRequest } from '@tanstack/react-start/server';\nimport { readSessionSubject } from 'simplycms/auth';\nimport { withCustomerDb } from './db';\nimport type { ActorDb } from './db';\n\n/**\n * Транзакція від імені ВЛАСНИКА поточної сесії.\n *\n * 🔴 `userId` береться з `readSessionSubject`, тобто з cookie Better Auth, і\n * НІКОЛИ з параметра serverFn. Це не стиль, а єдиний рубіж, який тут узагалі\n * є: RLS звіряє рядки з тим id, який їй назвав сервер, тож id, прийнятий від\n * клієнта, вона перевірити не може за побудовою — вона стане на його бік.\n *\n * Без сесії кидає: сторінки кабінету за роутом `_protected` і так недосяжні\n * анонімно, а тихе `null` перетворило б відсутність входу на «даних немає».\n *\n * 🔴 Чому це ЛОАДЕРИ, а не `storefront-routes/server` (звідки воно переїхало\n * 2026-08-24, Gate C пілота). Живий не-serverFn експорт, який serverFn-модулі\n * тягнуть ВІДНОСНИМ шляхом, tsup при `splitting: true` піднімає у спільний\n * чанк — а сторінки кабінету імпортують ті самі serverFn-модулі теж відносно\n * й дістають цей чанк у КЛІЄНТСЬКИЙ граф. Start вирізає з чанка лише тіла\n * serverFn; звичайний експорт лишається живим і затягує весь value-граф\n * лоадерів (drizzle, пул) у бандл браузера. Барель лоадерів імпортується\n * bare-специфікатором `simplycms/storefront/loaders`, який у tsup зовнішній\n * (`external`) — у чанки він не потрапляє за побудовою, тож тут цей клас\n * витоку неможливий структурно, а не за домовленістю.\n */\nexport async function withSessionDb<T>(\n fn: (db: ActorDb, userId: string) => Promise<T>,\n): Promise<T> {\n const userId = await requireSessionUserId();\n return withCustomerDb(userId, (db) => fn(db, userId));\n}\n\n/** Id власника сесії або виняток. */\nexport async function requireSessionUserId(): Promise<string> {\n const subject = await readSessionSubject(getRequest().headers);\n if (!subject) {\n // 🔴 Текст англійською свідомо: це серверна діагностика, а не рядок\n // інтерфейсу — користувач її не бачить, а зона i18n-скану кирилицю в\n // літералах не пропускає.\n throw new Error(\n '[simplycms] Sign-in required: no session for this request.',\n );\n }\n return subject.userId;\n}\n\n/** Id власника сесії або `null` — для сторінок, доступних і гостю. */\nexport async function optionalSessionUserId(): Promise<string | null> {\n const subject = await readSessionSubject(getRequest().headers);\n return subject?.userId ?? null;\n}\n","import { banners } from 'simplycms/schema';\nimport type { Banner, BannerButton } from 'simplycms/contracts';\n\n/** Мапа select-а банера: доменний `Banner` вимагає рівно ці колонки. */\nexport const bannerColumns = {\n id: banners.id,\n title: banners.title,\n subtitle: banners.subtitle,\n image_url: banners.imageUrl,\n desktop_image_url: banners.desktopImageUrl,\n mobile_image_url: banners.mobileImageUrl,\n buttons: banners.buttons,\n placement: banners.placement,\n section_id: banners.sectionId,\n sort_order: banners.sortOrder,\n is_active: banners.isActive,\n date_from: banners.dateFrom,\n date_to: banners.dateTo,\n schedule_days: banners.scheduleDays,\n schedule_time_from: banners.scheduleTimeFrom,\n schedule_time_to: banners.scheduleTimeTo,\n slide_duration: banners.slideDuration,\n animation_type: banners.animationType,\n animation_duration: banners.animationDuration,\n overlay_color: banners.overlayColor,\n text_position: banners.textPosition,\n created_at: banners.createdAt,\n updated_at: banners.updatedAt,\n};\n\n/** Рядок банера до нормалізації: `buttons` — нетипізований jsonb. */\ntype RawBannerRow = Omit<Banner, 'buttons' | 'schedule_days'> & {\n buttons: unknown;\n schedule_days: number[] | null;\n};\n\n/**\n * Доводить рядок БД до доменного `Banner`.\n *\n * 🔴 `buttons` фільтруються поелементно, а не кастуються. Це jsonb, який\n * редагує адмінка: один запис старої форми зробив би `banner.buttons.map`\n * джерелом `undefined.text` у рендері слайдера — тобто впав би не тут, а на\n * вітрині покупця.\n */\nexport function toBanner(row: RawBannerRow): Banner {\n return {\n ...row,\n buttons: Array.isArray(row.buttons)\n ? row.buttons.filter(isBannerButton)\n : [],\n schedule_days: Array.isArray(row.schedule_days) ? row.schedule_days : null,\n };\n}\n\nfunction isBannerButton(item: unknown): item is BannerButton {\n if (typeof item !== 'object' || item === null) return false;\n const obj = item as Record<string, unknown>;\n return (\n typeof obj.text === 'string' &&\n typeof obj.url === 'string' &&\n typeof obj.target === 'string' &&\n typeof obj.variant === 'string'\n );\n}\n\n/**\n * Чи показується банер саме зараз.\n *\n * 🔴 Розклад рахується на СЕРВЕРІ й за його годинником. Раніше це робив\n * браузер: банер «щодня 9:00–18:00» показувався по локальному часу\n * відвідувача, тож той самий банер у Києві й Ванкувері вмикався в різні\n * моменти доби. Час магазину — час його сервера, а не гостя.\n *\n * `date_from`/`date_to` — мітки часу (порівнюються як миті), а\n * `schedule_days`/`schedule_time_*` — правило доби, тож вони й читаються\n * як день тижня й «години:хвилини».\n */\nexport function isBannerVisible(banner: Banner, now: Date): boolean {\n if (banner.date_from && new Date(banner.date_from) > now) return false;\n if (banner.date_to && new Date(banner.date_to) < now) return false;\n\n if (\n banner.schedule_days?.length &&\n !banner.schedule_days.includes(now.getDay())\n )\n return false;\n\n if (banner.schedule_time_from && banner.schedule_time_to) {\n const hh = String(now.getHours()).padStart(2, '0');\n const mm = String(now.getMinutes()).padStart(2, '0');\n const current = `${hh}:${mm}`;\n if (\n current < banner.schedule_time_from ||\n current > banner.schedule_time_to\n )\n return false;\n }\n return true;\n}\n","import { and, asc, eq } from 'drizzle-orm';\nimport { banners } from 'simplycms/schema';\nimport type { Banner } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport { bannerColumns, isBannerVisible, toBanner } from './entities/banner';\n\n/** Де саме показується добірка: каркас вітрини має кілька місць під банери. */\nexport interface BannerQuery {\n placement: string;\n sectionId?: string | null;\n}\n\n/**\n * Банери одного місця розміщення.\n *\n * 🔴 `is_active` — предикат КОДУ: RLS на `banners` немає, `app_user` має\n * SELECT на всю таблицю, тож забутий фільтр не впаде, а тихо виведе на\n * головну чернетку акції, яку адмінка вимкнула.\n *\n * Розклад (дати, дні тижня, години) відсіюється після вибірки: він залежить\n * від «зараз», і тримати його в SQL означало б робити запит некешованим за\n * побудовою заради трьох порівнянь у пам'яті.\n */\nexport async function loadBanners(\n db: ActorDb,\n query: BannerQuery,\n): Promise<Banner[]> {\n const scoped = query.sectionId\n ? and(\n eq(banners.isActive, true),\n eq(banners.placement, query.placement),\n eq(banners.sectionId, query.sectionId),\n )\n : and(eq(banners.isActive, true), eq(banners.placement, query.placement));\n\n const rows = await db\n .select(bannerColumns)\n .from(banners)\n .where(scoped)\n .orderBy(asc(banners.sortOrder));\n\n const now = new Date();\n return rows.map(toBanner).filter((banner) => isBannerVisible(banner, now));\n}\n","import { eq } from 'drizzle-orm';\nimport { profiles, userCategories } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/**\n * Категорія покупця — джерело умови `user_category` рушія знижок.\n *\n * 🔴 Читається ЛИШЕ під `withCustomerDb`, і `userId` сюди приходить із\n * серверної сесії. Раніше браузер брав `profiles.category_id` запитом за\n * `user_id` із клієнта — тобто чужу знижкову категорію міг дізнатися будь-хто,\n * хто підставив чужий id. Політика `profiles_select_own` тепер звужує рядок\n * до власника, але вона довіряє тому id, який їй назвав сервер.\n */\nexport async function loadUserCategoryId(\n db: ActorDb,\n userId: string,\n): Promise<string | null> {\n const [row] = await db\n .select({ category_id: profiles.categoryId })\n .from(profiles)\n .where(eq(profiles.userId, userId))\n .limit(1);\n\n return row?.category_id ?? null;\n}\n\n/**\n * Категорія за замовчуванням — те, що дістає анонім.\n *\n * Без неї гість не потрапляв би в жодну умову `user_category`, і базова\n * роздрібна акція, налаштована на категорію «Роздріб», не показувалась би\n * саме тим, кому призначена.\n */\nexport async function loadDefaultUserCategoryId(\n db: ActorDb,\n): Promise<string | null> {\n const [row] = await db\n .select({ id: userCategories.id })\n .from(userCategories)\n .where(eq(userCategories.isDefault, true))\n .limit(1);\n\n return row?.id ?? null;\n}\n","import type {\n Discount,\n DiscountCondition,\n DiscountGroup,\n DiscountType,\n GroupOperator,\n Json,\n TargetType,\n} from 'simplycms/contracts';\nimport type {\n discountConditions,\n discountGroups,\n discountTargets,\n discounts,\n} from 'simplycms/schema';\n\n/** Рядки БД у тій формі, в якій їх віддає Drizzle (`select()` без проєкції). */\nexport type DiscountGroupRow = typeof discountGroups.$inferSelect;\nexport type DiscountRow = typeof discounts.$inferSelect;\nexport type DiscountTargetRow = typeof discountTargets.$inferSelect;\nexport type DiscountConditionRow = typeof discountConditions.$inferSelect;\n\n/** Вузол дерева знижок — порожній, доки не наповнений гілками й знижками. */\nexport function toDiscountGroupNode(row: DiscountGroupRow): DiscountGroup {\n return {\n id: row.id,\n name: row.name,\n description: row.description,\n operator: row.operator as GroupOperator,\n is_active: row.isActive,\n priority: row.priority,\n starts_at: row.startsAt,\n ends_at: row.endsAt,\n discounts: [],\n children: [],\n };\n}\n\n/**\n * Знижка з приклеєними цілями й умовами.\n *\n * 🔴 `discount_value` проходить через `Number`: `numeric` у Postgres їде\n * рядком, і рушій домену мовчки склеїв би його конкатенацією замість\n * арифметики — тобто «10» + «5» дало б знижку 105.\n */\nexport function toDiscount(\n row: DiscountRow,\n targets: DiscountTargetRow[],\n conditions: DiscountConditionRow[],\n): Discount {\n return {\n id: row.id,\n name: row.name,\n description: row.description,\n discount_type: row.discountType as DiscountType,\n discount_value: Number(row.discountValue),\n priority: row.priority,\n is_active: row.isActive,\n starts_at: row.startsAt,\n ends_at: row.endsAt,\n targets: targets\n .filter((target) => target.discountId === row.id)\n .map((target) => ({\n id: target.id,\n target_type: target.targetType as TargetType,\n target_id: target.targetId,\n })),\n conditions: conditions\n .filter((condition) => condition.discountId === row.id)\n .map(toDiscountCondition),\n };\n}\n\nfunction toDiscountCondition(row: DiscountConditionRow): DiscountCondition {\n return {\n id: row.id,\n condition_type: row.conditionType,\n operator: row.operator,\n value: row.value as Json,\n };\n}\n","import { and, eq, inArray } from 'drizzle-orm';\nimport {\n discountConditions,\n discountGroups,\n discountTargets,\n discounts,\n} from 'simplycms/schema';\nimport type { DiscountGroup } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport {\n toDiscount,\n toDiscountGroupNode,\n type DiscountGroupRow,\n} from './entities/discount';\n\n/** Скільки рівнів предків добираємо, доки дерево не замкнеться. */\nconst PARENT_DEPTH_LIMIT = 8;\n\n/**\n * Правила знижок для одного типу ціни — деревом, готовим для рушія домену.\n *\n * 🔴 Сервер віддає ДАНІ, а не результат: обчислення лишається в\n * `simplycms/domain/discounts`, бо ціна залежить від кількості й суми кошика,\n * які живуть у клієнті. Перенести формулу в SQL означало б мати дві\n * реалізації правил — а розходяться вони мовчки, різницею в чеку.\n *\n * 🔴 `is_active` (і в знижок, і в груп) фільтрується КОДОМ: RLS на цих\n * таблицях немає, `app_user` має SELECT на всю таблицю, тож забутий предикат\n * не впаде — він тихо роздасть вимкнену акцію.\n */\nexport async function loadDiscountGroups(\n db: ActorDb,\n priceTypeId: string,\n): Promise<DiscountGroup[]> {\n const rows = await db\n .select()\n .from(discounts)\n .where(\n and(eq(discounts.priceTypeId, priceTypeId), eq(discounts.isActive, true)),\n );\n if (rows.length === 0) return [];\n\n const ids = rows.map((row) => row.id);\n const targets = await db\n .select()\n .from(discountTargets)\n .where(inArray(discountTargets.discountId, ids));\n const conditions = await db\n .select()\n .from(discountConditions)\n .where(inArray(discountConditions.discountId, ids));\n\n const groups = await loadGroupClosure(\n db,\n Array.from(new Set(rows.map((row) => row.groupId))),\n );\n const nodes = new Map(\n groups.map((row) => [row.id, toDiscountGroupNode(row)]),\n );\n\n for (const row of rows) {\n nodes\n .get(row.groupId)\n ?.discounts.push(toDiscount(row, targets, conditions));\n }\n\n const roots: DiscountGroup[] = [];\n for (const row of groups) {\n const node = nodes.get(row.id);\n if (!node) continue;\n const parent = row.parentGroupId ? nodes.get(row.parentGroupId) : undefined;\n if (parent) parent.children.push(node);\n else roots.push(node);\n }\n return roots;\n}\n\n/**\n * Групи знижок разом із їхніми предками.\n *\n * 🔴 Предки добираються ЦИКЛОМ, а не одним рівнем, як робив браузер: оператор\n * батька (`min`, `not`, …) вирішує долю дочірньої знижки, тож обірване дерево\n * дає інший результат, ніж те саме дерево в адмінці. Ліміт глибини —\n * запобіжник від циклу в даних, а не проєктна межа вкладеності.\n */\nasync function loadGroupClosure(\n db: ActorDb,\n seedIds: string[],\n): Promise<DiscountGroupRow[]> {\n const collected = new Map<string, DiscountGroupRow>();\n let pending = seedIds;\n\n for (let depth = 0; depth < PARENT_DEPTH_LIMIT; depth++) {\n if (pending.length === 0) break;\n const rows = await db\n .select()\n .from(discountGroups)\n .where(\n and(\n inArray(discountGroups.id, pending),\n eq(discountGroups.isActive, true),\n ),\n );\n for (const row of rows) collected.set(row.id, row);\n pending = rows\n .map((row) => row.parentGroupId)\n .filter((id): id is string => id !== null && !collected.has(id));\n }\n return [...collected.values()];\n}\n","import { products } from 'simplycms/schema';\nimport type { Product } from 'simplycms/schema/types';\n\n/**\n * Мапа select-а товару у snake_case (причина ключів — коментар у `./section`).\n *\n * 🔴 `return_policy`/`shipping_details` (B7) свідомо НЕ вибираються: рендерер\n * JSON-LD для них приїде в К2, а зайвий jsonb у кожному рядку списку — це\n * трафік SSR-відповіді без жодного споживача.\n */\nexport const productColumns = {\n id: products.id,\n section_id: products.sectionId,\n slug: products.slug,\n name: products.name,\n short_description: products.shortDescription,\n description: products.description,\n is_active: products.isActive,\n is_featured: products.isFeatured,\n meta_title: products.metaTitle,\n meta_description: products.metaDescription,\n created_at: products.createdAt,\n updated_at: products.updatedAt,\n images: products.images,\n has_modifications: products.hasModifications,\n sku: products.sku,\n stock_status: products.stockStatus,\n};\n\n/** Повний рядок товару (без приєднаних гілок). */\nexport type ProductRow = {\n id: Product['id'];\n section_id: Product['sectionId'];\n slug: Product['slug'];\n name: Product['name'];\n short_description: Product['shortDescription'];\n description: Product['description'];\n is_active: Product['isActive'];\n is_featured: Product['isFeatured'];\n meta_title: Product['metaTitle'];\n meta_description: Product['metaDescription'];\n created_at: Product['createdAt'];\n updated_at: Product['updatedAt'];\n images: string[];\n has_modifications: Product['hasModifications'];\n sku: Product['sku'];\n stock_status: Product['stockStatus'];\n};\n\n/**\n * Нормалізує jsonb-колонку `images` у масив рядків.\n *\n * 🔴 Перевірка рантаймова, а не каст. Колонка — `jsonb` без обмеження форми,\n * тож у ній може лежати що завгодно; галерея товару, що дістала `null` чи\n * обʼєкт замість масиву, падає вже в рендері — далеко від причини.\n */\nexport function toImageList(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === 'string');\n}\n","import { products } from 'simplycms/schema';\nimport type { Product } from 'simplycms/schema/types';\nimport { toImageList } from './product';\n\n/** Мінімальний товар для карток головної — опис і ціни картці не потрібні. */\nexport const homeProductColumns = {\n id: products.id,\n name: products.name,\n slug: products.slug,\n images: products.images,\n short_description: products.shortDescription,\n stock_status: products.stockStatus,\n};\n\nexport interface HomeProductRow {\n id: Product['id'];\n name: Product['name'];\n slug: Product['slug'];\n images: string[];\n short_description: Product['shortDescription'];\n stock_status: Product['stockStatus'];\n /** Slug розділу — потрібен лише для href картки. */\n section: { slug: string } | null;\n}\n\n/** Сирий рядок картки: `images` — нетипізований jsonb. */\nexport interface RawHomeProductRow {\n id: string;\n name: string;\n slug: string;\n images: unknown;\n short_description: string | null;\n stock_status: Product['stockStatus'];\n}\n\nexport function toHomeProduct(\n row: RawHomeProductRow,\n sectionSlug: string | null,\n): HomeProductRow {\n return {\n id: row.id,\n name: row.name,\n slug: row.slug,\n images: toImageList(row.images),\n short_description: row.short_description,\n stock_status: row.stock_status,\n section: sectionSlug === null ? null : { slug: sectionSlug },\n };\n}\n","import { and, eq, inArray, lte, sql } from 'drizzle-orm';\nimport { products } from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport {\n homeProductColumns,\n toHomeProduct,\n type HomeProductRow,\n} from './entities/home-product';\nimport type { SectionRef } from './entities/section';\n\n/** Скільки товарів показує карусель одного розділу на головній. */\nconst PER_SECTION_LIMIT = 8;\n\n/**\n * Товари кореневих розділів: `sectionId → перші N товарів`.\n *\n * 🔴 ОДИН запит на всі розділи, а не запит на розділ. Попередня реалізація\n * робила `limit(8)` окремим запитом на кожен розділ, бо per-section limit не\n * виражається в PostgREST — тобто N+1 був не недоглядом, а обмеженням\n * протоколу. У SQL це віконна функція: нумеруємо товари всередині розділу й\n * відрізаємо хвіст. Ціна головної перестала залежати від кількості розділів.\n */\nexport async function loadSectionProducts(\n db: ActorDb,\n sections: SectionRef[],\n): Promise<Record<string, HomeProductRow[]>> {\n const bySection: Record<string, HomeProductRow[]> = {};\n for (const section of sections) bySection[section.id] = [];\n\n const sectionIds = sections.map((section) => section.id);\n // `inArray` з порожнім списком drizzle перетворює на `false` — запит був би\n // коректним, але марним походом у БД.\n if (sectionIds.length === 0) return bySection;\n\n const ranked = db\n .select({\n ...homeProductColumns,\n section_id: products.sectionId,\n position: sql<number>`\n row_number() over (\n partition by ${products.sectionId} order by ${products.createdAt} desc\n )\n `.as('position'),\n })\n .from(products)\n // Предикат видимості — див. коментар у `./sections`.\n .where(\n and(eq(products.isActive, true), inArray(products.sectionId, sectionIds)),\n )\n .as('ranked');\n\n const rows = await db\n .select()\n .from(ranked)\n .where(lte(ranked.position, PER_SECTION_LIMIT))\n .orderBy(ranked.section_id, ranked.position);\n\n const slugById = new Map(sections.map((s) => [s.id, s.slug]));\n for (const row of rows) {\n if (row.section_id === null) continue;\n const bucket = bySection[row.section_id];\n if (!bucket) continue;\n bucket.push(toHomeProduct(row, slugById.get(row.section_id) ?? null));\n }\n\n return bySection;\n}\n\n/**\n * Товари ОДНОГО розділу — рівно та ж вибірка, що й у мапі головної.\n *\n * Потрібна клієнтському перезапиту каруселі: він знає лише свій розділ, і\n * тягнути заради нього всю головну було б марно.\n */\nexport async function loadOneSectionProducts(\n db: ActorDb,\n section: SectionRef,\n): Promise<HomeProductRow[]> {\n const bySection = await loadSectionProducts(db, [section]);\n return bySection[section.id] ?? [];\n}\n","import { sections } from 'simplycms/schema';\nimport type { Section } from 'simplycms/schema/types';\n\n/**\n * Мапа select-а розділу: ключ — імʼя колонки в БД, значення — колонка Drizzle.\n *\n * 🔴 Ключі саме snake_case, а не camelCase Drizzle-схеми. Сторінки вітрини\n * читають розділ як плоский рядок БД (`id`, `is_active`, `sort_order`), і\n * перейменування полів було б окремою міграцією всього UI, а не побічним\n * ефектом переходу на Drizzle.\n */\nexport const sectionColumns = {\n id: sections.id,\n slug: sections.slug,\n name: sections.name,\n description: sections.description,\n image_url: sections.imageUrl,\n parent_id: sections.parentId,\n sort_order: sections.sortOrder,\n is_active: sections.isActive,\n meta_title: sections.metaTitle,\n meta_description: sections.metaDescription,\n created_at: sections.createdAt,\n updated_at: sections.updatedAt,\n};\n\n/** Повний рядок розділу. Типи полів — з Drizzle-схеми, не з генерату PostgREST. */\nexport type SectionRow = {\n id: Section['id'];\n slug: Section['slug'];\n name: Section['name'];\n description: Section['description'];\n image_url: Section['imageUrl'];\n parent_id: Section['parentId'];\n sort_order: Section['sortOrder'];\n is_active: Section['isActive'];\n meta_title: Section['metaTitle'];\n meta_description: Section['metaDescription'];\n created_at: Section['createdAt'];\n updated_at: Section['updatedAt'];\n};\n\n/** Скорочений розділ для навігації й добірок головної. */\nexport const sectionRefColumns = {\n id: sections.id,\n name: sections.name,\n slug: sections.slug,\n};\n\nexport type SectionRef = {\n id: Section['id'];\n name: Section['name'];\n slug: Section['slug'];\n};\n","import { and, asc, eq, isNull } from 'drizzle-orm';\nimport { sections } from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport {\n sectionColumns,\n sectionRefColumns,\n type SectionRef,\n type SectionRow,\n} from './entities/section';\n\n/**\n * 🔴 `is_active` фільтрується КОДОМ, а не базою, і так тепер скрізь у вітрині.\n * У моделі безпеки B5″ на каталозі немає RLS: роль `app_user` має SELECT на\n * всю таблицю, бо «активність» — правило показу, а не право доступу. Отже\n * забутий предикат тут не дасть помилки — він тихо виведе чернетки в магазин.\n */\nexport async function loadSections(db: ActorDb): Promise<SectionRow[]> {\n return db\n .select(sectionColumns)\n .from(sections)\n .where(eq(sections.isActive, true))\n .orderBy(asc(sections.sortOrder));\n}\n\n/** Розділ за slug — лише активний (див. коментар про видимість вище). */\nexport async function loadSectionBySlug(\n db: ActorDb,\n slug: string,\n): Promise<SectionRow | null> {\n const [row] = await db\n .select(sectionColumns)\n .from(sections)\n .where(and(eq(sections.slug, slug), eq(sections.isActive, true)))\n .limit(1);\n\n return row ?? null;\n}\n\n/** Кореневі розділи (без батька) для навігації й добірок головної. */\nexport async function loadRootSections(db: ActorDb): Promise<SectionRef[]> {\n return db\n .select(sectionRefColumns)\n .from(sections)\n .where(and(eq(sections.isActive, true), isNull(sections.parentId)))\n .orderBy(asc(sections.sortOrder));\n}\n","import { and, asc, desc, eq } from 'drizzle-orm';\nimport { banners, products, sections } from 'simplycms/schema';\nimport type { Banner } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport { bannerColumns, toBanner } from './entities/banner';\nimport {\n homeProductColumns,\n toHomeProduct,\n type HomeProductRow,\n} from './entities/home-product';\nimport type { SectionRef } from './entities/section';\nimport { loadSectionProducts } from './home-sections';\nimport { loadRootSections } from './sections';\n\n/** Скільки товарів у добірках «популярне» й «новинки». */\nconst FEATURED_LIMIT = 12;\n\nexport interface HomePageData {\n banners: Banner[];\n featuredProducts: HomeProductRow[];\n newProducts: HomeProductRow[];\n sections: SectionRef[];\n /** Товари кожного кореневого розділу: `sectionId → товари`. */\n sectionProducts: Record<string, HomeProductRow[]>;\n}\n\n/**\n * Дані головної сторінки — усе однією транзакцією.\n *\n * Фаз усе ще дві, але друга більше не N+1: товари всіх розділів приходять\n * одним віконним запитом (`./home-sections`).\n *\n * 🔴 Запити йдуть послідовно, і `Promise.all` тут нічого б не прискорив:\n * транзакція живе на одному зʼєднанні, тож паралелізм уявний (див. `./products`).\n */\nexport async function loadHomePageData(db: ActorDb): Promise<HomePageData> {\n // Предикат видимості — див. коментар у `./sections`.\n const bannerRows = await db\n .select(bannerColumns)\n .from(banners)\n .where(eq(banners.isActive, true))\n .orderBy(asc(banners.sortOrder));\n const featured = await loadHomeProducts(db, true);\n const newProducts = await loadHomeProducts(db, false);\n const rootSections = await loadRootSections(db);\n\n return {\n banners: bannerRows.map(toBanner),\n featuredProducts: featured,\n newProducts,\n sections: rootSections,\n sectionProducts: await loadSectionProducts(db, rootSections),\n };\n}\n\n/**\n * Добірка головної: `featuredOnly` розрізняє «популярне» й «новинки» —\n * решта запиту в них однакова, тож дублювати його немає сенсу.\n *\n * 🔴 Експортується, бо ті самі дві добірки перезапитує клієнт після\n * інвалідації кешу — і мусить робити це ТИМ САМИМ запитом, що й SSR,\n * інакше сторінка після рефетчу показує інший набір товарів.\n */\nexport async function loadHomeProducts(\n db: ActorDb,\n featuredOnly: boolean,\n): Promise<HomeProductRow[]> {\n const visible = featuredOnly\n ? and(eq(products.isActive, true), eq(products.isFeatured, true))\n : eq(products.isActive, true);\n\n const rows = await db\n .select({ ...homeProductColumns, section_slug: sections.slug })\n .from(products)\n .leftJoin(sections, eq(products.sectionId, sections.id))\n .where(visible)\n .orderBy(desc(products.createdAt))\n .limit(FEATURED_LIMIT);\n\n return rows.map((row) => toHomeProduct(row, row.section_slug));\n}\n","import { eq } from 'drizzle-orm';\nimport { priceTypes } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/**\n * ID типу ціни «за замовчуванням». Потрібен серверному резолву цін у списках\n * каталогу: SSR рендериться анонімно, тож ціни рахуються саме за цим типом,\n * а персональний тип покупця доклеює клієнт.\n *\n * Унікальний частковий індекс `idx_price_types_single_default` гарантує не\n * більше одного рядка, тож `limit(1)` тут — не «беремо перший-ліпший».\n */\nexport async function loadDefaultPriceTypeId(\n db: ActorDb,\n): Promise<string | null> {\n const [row] = await db\n .select({ id: priceTypes.id })\n .from(priceTypes)\n .where(eq(priceTypes.isDefault, true))\n .limit(1);\n\n return row?.id ?? null;\n}\n","import { and, asc, eq, inArray, or } from 'drizzle-orm';\nimport {\n propertyOptions,\n sectionProperties,\n sectionPropertyAssignments,\n} from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Числова характеристика розділу, придатна для фільтра-діапазону. */\nexport interface NumericPropertyRow {\n id: string;\n slug: string;\n property_type: string;\n is_filterable: boolean;\n}\n\n/** Опція характеристики для бейджа активного фільтра. */\nexport interface FilterOptionRow {\n id: string;\n name: string;\n property_id: string;\n /** Порядок з адмінки; у бейджах активних фільтрів не використовується. */\n slug?: string;\n sort_order?: number;\n section_properties: { name: string; slug: string } | null;\n}\n\n/**\n * Числові характеристики розділу, за якими можна фільтрувати.\n *\n * 🔴 Відбір `is_filterable` + тип робиться ЗАПИТОМ, а не після вибірки в\n * браузері: старий код тягнув усі призначення розділу й відсіював їх у JS,\n * тобто платив трафіком за рядки, які одразу викидав.\n */\nexport async function loadSectionNumericProperties(\n db: ActorDb,\n sectionId: string,\n): Promise<NumericPropertyRow[]> {\n return db\n .select({\n id: sectionProperties.id,\n slug: sectionProperties.slug,\n property_type: sectionProperties.propertyType,\n is_filterable: sectionProperties.isFilterable,\n })\n .from(sectionPropertyAssignments)\n .innerJoin(\n sectionProperties,\n eq(sectionPropertyAssignments.propertyId, sectionProperties.id),\n )\n .where(\n and(\n eq(sectionPropertyAssignments.sectionId, sectionId),\n eq(sectionProperties.isFilterable, true),\n or(\n eq(sectionProperties.propertyType, 'number'),\n eq(sectionProperties.propertyType, 'range'),\n ),\n ),\n )\n .orderBy(asc(sectionPropertyAssignments.sortOrder));\n}\n\n/**\n * Усі опції характеристик — назви для бейджів активних фільтрів.\n *\n * Розділу вибірка не знає навмисно: бейджі показують назву опції, а вона від\n * розділу не залежить — інакше кожне перемикання чипса перезапитувало б\n * ті самі рядки.\n */\nexport async function loadFilterOptions(\n db: ActorDb,\n): Promise<FilterOptionRow[]> {\n const rows = await db\n .select({\n id: propertyOptions.id,\n name: propertyOptions.name,\n property_id: propertyOptions.propertyId,\n property: { name: sectionProperties.name, slug: sectionProperties.slug },\n })\n .from(propertyOptions)\n .leftJoin(\n sectionProperties,\n eq(propertyOptions.propertyId, sectionProperties.id),\n )\n .orderBy(asc(propertyOptions.sortOrder));\n\n return rows.map((row) => ({\n id: row.id,\n name: row.name,\n property_id: row.property_id,\n section_properties: row.property?.slug ? row.property : null,\n }));\n}\n\n/** Характеристика розділу в панелі фільтрів. */\nexport interface FilterPropertyRow extends NumericPropertyRow {\n name: string;\n}\n\n/** Панель фільтрів розділу: характеристики + опції тих, що з переліком. */\nexport interface SectionFilters {\n properties: FilterPropertyRow[];\n /** `propertyId → опції`; лише для `select`/`multiselect`. */\n optionsByProperty: Record<string, FilterOptionRow[]>;\n}\n\n/** Типи характеристик, які в панелі малюються переліком опцій. */\nconst OPTION_TYPES = ['select', 'multiselect'];\n\n/**\n * Усе, що потрібно панелі фільтрів розділу, — ОДНИМ викликом.\n *\n * 🔴 Було два послідовні запити браузера, і другий чекав на перший, бо його\n * `in (…)` будувався з id, які повертав перший. Тут вони в одній транзакції,\n * а дедуплікація характеристик (одна може бути призначена і товару, і\n * модифікації) робиться там же, де й вибірка.\n */\nexport async function loadSectionFilters(\n db: ActorDb,\n sectionId: string,\n): Promise<SectionFilters> {\n const rows = await db\n .select({\n id: sectionProperties.id,\n name: sectionProperties.name,\n slug: sectionProperties.slug,\n property_type: sectionProperties.propertyType,\n is_filterable: sectionProperties.isFilterable,\n })\n .from(sectionPropertyAssignments)\n .innerJoin(\n sectionProperties,\n eq(sectionPropertyAssignments.propertyId, sectionProperties.id),\n )\n .where(\n and(\n eq(sectionPropertyAssignments.sectionId, sectionId),\n eq(sectionProperties.isFilterable, true),\n ),\n )\n .orderBy(asc(sectionPropertyAssignments.sortOrder));\n\n const byId = new Map<string, FilterPropertyRow>();\n for (const row of rows) if (!byId.has(row.id)) byId.set(row.id, row);\n const properties = [...byId.values()];\n\n const optionIds = properties\n .filter((row) => OPTION_TYPES.includes(row.property_type))\n .map((row) => row.id);\n const optionsByProperty: Record<string, FilterOptionRow[]> = {};\n if (optionIds.length === 0) return { properties, optionsByProperty };\n\n const options = await db\n .select({\n id: propertyOptions.id,\n name: propertyOptions.name,\n property_id: propertyOptions.propertyId,\n slug: propertyOptions.slug,\n sort_order: propertyOptions.sortOrder,\n })\n .from(propertyOptions)\n .where(inArray(propertyOptions.propertyId, optionIds))\n .orderBy(asc(propertyOptions.sortOrder));\n\n for (const option of options) {\n (optionsByProperty[option.property_id] ??= []).push({\n ...option,\n section_properties: null,\n });\n }\n\n return { properties, optionsByProperty };\n}\n","import { productModifications } from 'simplycms/schema';\nimport type { PriceEntry } from 'simplycms/contracts';\nimport type { ProductModification } from 'simplycms/schema/types';\nimport type { ProductRow } from './product';\nimport type { SectionRef } from './section';\n\n/** Модифікація у вибірці каталогу: рівно те, чим обираються ціна й наявність. */\nexport interface CatalogModificationRow {\n id: string;\n stock_status: ProductModification['stockStatus'];\n is_default: boolean;\n sort_order: number;\n}\n\n/** Значення характеристики у вибірці — форма предикатів фільтрів каталогу. */\nexport interface CatalogPropertyValueRow {\n property_id: string;\n value: string | null;\n numeric_value: number | null;\n option_id: string | null;\n}\n\n/**\n * Товар вибірки каталогу.\n *\n * 🔴 `isAvailable` рахується на СЕРВЕРІ, а не їде на клієнт разом із залишками\n * по точках видачі. Клієнту потрібен факт «є/немає», а не звідки він узявся;\n * складські рядки в відповіді були б і зайвим трафіком, і публікацією\n * внутрішньої логістики магазину.\n */\nexport interface CatalogProductRow extends Omit<\n ProductRow,\n 'has_modifications'\n> {\n /**\n * 🔴 Нормалізовано до boolean: колонка nullable, а вітрина скрізь читала\n * її як `?? true`. Тримати `null` до самого рендера означало б повторити\n * цей же `??` у кожному споживачі — і в одному з них про нього забути.\n */\n has_modifications: boolean;\n section: SectionRef | null;\n /** Повний список — на ньому рахується наявність товару з модифікаціями. */\n product_modifications: CatalogModificationRow[];\n /** Модифікація за замовчуванням (нуль або один елемент) — джерело ціни. */\n modifications: CatalogModificationRow[];\n product_prices: PriceEntry[];\n /** Характеристики товару + характеристики всіх його модифікацій. */\n propertyValues: CatalogPropertyValueRow[];\n isAvailable: boolean;\n}\n\n/** Мапа select-а модифікації для вибірки каталогу. */\nexport const catalogModificationColumns = {\n id: productModifications.id,\n product_id: productModifications.productId,\n stock_status: productModifications.stockStatus,\n is_default: productModifications.isDefault,\n sort_order: productModifications.sortOrder,\n};\n\n/** Модифікація за замовчуванням: явний прапорець, інакше найменший `sort_order`. */\nexport function pickDefaultModification(\n mods: CatalogModificationRow[],\n): CatalogModificationRow | null {\n if (mods.length === 0) return null;\n return (\n mods.find((mod) => mod.is_default) ??\n [...mods].sort((a, b) => a.sort_order - b.sort_order)[0]\n );\n}\n\n/** `numeric` приїжджає з драйвера рядком — переводимо в число один раз тут. */\nexport function toNumericValue(value: string | null): number | null {\n return value === null ? null : Number(value);\n}\n","import { productPrices } from 'simplycms/schema';\nimport type { PriceEntry } from 'simplycms/contracts';\n\n/** Ціна товару/модифікації — форма `PriceEntry` домену ціноутворення. */\nexport const priceColumns = {\n product_id: productPrices.productId,\n price_type_id: productPrices.priceTypeId,\n price: productPrices.price,\n old_price: productPrices.oldPrice,\n modification_id: productPrices.modificationId,\n};\n\n/** Сирий рядок ціни: `numeric` приїжджає з драйвера рядком, а не числом. */\nexport interface RawPriceRow {\n product_id: string;\n price_type_id: string;\n price: string;\n old_price: string | null;\n modification_id: string | null;\n}\n\n/**\n * Переводить `numeric` у число доменного контракту.\n *\n * 🔴 Конверсія явна й тут, а не в рендері. `pg` віддає `numeric` РЯДКОМ (щоб\n * не втратити точність, якої немає в double), тож без цього кроку `resolvePrice`\n * повертав би рядок, а форматувальник ціни склеював би його як текст — дефект,\n * що виглядає як «ціна не відформатувалась», а не як помилка типу.\n */\nexport function toPriceEntry(row: RawPriceRow): PriceEntry {\n return {\n price_type_id: row.price_type_id,\n price: Number(row.price),\n old_price: row.old_price === null ? null : Number(row.old_price),\n modification_id: row.modification_id,\n };\n}\n\n/** Групує ціни за товаром — щоб один запит на список не став N+1. */\nexport function groupPricesByProduct(\n rows: RawPriceRow[],\n): Record<string, PriceEntry[]> {\n const byProduct: Record<string, PriceEntry[]> = {};\n for (const row of rows) {\n (byProduct[row.product_id] ??= []).push(toPriceEntry(row));\n }\n return byProduct;\n}\n","import type { ProductPropertyValueViewModel } from 'simplycms/contracts/views';\nimport {\n productPropertyValues,\n propertyOptions,\n sectionProperties,\n} from 'simplycms/schema';\n\n/**\n * Характеристика товару у формі, яку читає картка.\n *\n * 🔴 Ключі `property_options` / `section_properties` — це імена ТАБЛИЦЬ, а не\n * зв'язків: так їх називав вбудований ресурс PostgREST, і саме на ці імена\n * дивиться `useProductContent`. Перейменування було б окремою правкою UI.\n */\nexport interface ProductPropertyValueRow {\n property_id: string;\n value: string | null;\n numeric_value: number | null;\n option_id: string | null;\n property_options: { id: string; slug: string } | null;\n section_properties: {\n id: string;\n name: string;\n slug: string;\n property_type: string;\n has_page: boolean;\n } | null;\n}\n\n/** Мапа select-а значення характеристики разом з опцією й самою характеристикою. */\nexport const propertyValueColumns = {\n property_id: productPropertyValues.propertyId,\n value: productPropertyValues.value,\n numeric_value: productPropertyValues.numericValue,\n option_id: productPropertyValues.optionId,\n option: { id: propertyOptions.id, slug: propertyOptions.slug },\n property: {\n id: sectionProperties.id,\n name: sectionProperties.name,\n slug: sectionProperties.slug,\n property_type: sectionProperties.propertyType,\n has_page: sectionProperties.hasPage,\n },\n};\n\n/** Сирий рядок до нормалізації: `numeric` — рядок, приєднані гілки — nullable. */\nexport interface RawPropertyValueRow {\n property_id: string;\n value: string | null;\n numeric_value: string | null;\n option_id: string | null;\n option: { id: string; slug: string } | null;\n property: {\n id: string;\n name: string;\n slug: string;\n property_type: string;\n has_page: boolean;\n } | null;\n}\n\n/**\n * Доводить рядок до форми картки: `numeric` у число, приєднані гілки — під\n * іменами таблиць. Перевірка `?.id` страхує від рядка з порожнього\n * `leftJoin`, а не лише від `null` цілим обʼєктом.\n */\nexport function toPropertyValueRow(\n row: RawPropertyValueRow,\n): ProductPropertyValueRow {\n return {\n property_id: row.property_id,\n value: row.value,\n numeric_value:\n row.numeric_value === null ? null : Number(row.numeric_value),\n option_id: row.option_id,\n property_options: row.option?.id ? row.option : null,\n section_properties: row.property?.id ? row.property : null,\n };\n}\n\n/**\n * Той самий рядок, але під іменами КОНТРАКТУ вітрини (`option`/`property`).\n *\n * 🔴 Дві форми співіснують не з недогляду: `product_property_values` картки\n * читаються під іменами таблиць PostgREST (див. докблок вище), а\n * характеристики модифікацій одразу їдуть у view-model теми. Перейменувати\n * першу — окрема правка UI, а не побічний ефект цього переходу.\n */\nexport function toPropertyValueViewModel(\n row: RawPropertyValueRow,\n): ProductPropertyValueViewModel {\n const normalized = toPropertyValueRow(row);\n return {\n property_id: normalized.property_id,\n value: normalized.value,\n numeric_value: normalized.numeric_value,\n option_id: normalized.option_id,\n option: normalized.property_options,\n property: normalized.section_properties,\n };\n}\n","import { eq, inArray } from 'drizzle-orm';\nimport {\n modificationPropertyValues,\n productModifications,\n propertyOptions,\n sectionProperties,\n} from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport { toNumericValue } from './entities/catalog-product';\nimport type { CatalogPropertyValueRow } from './entities/catalog-product';\nimport type { ProductPropertyValueViewModel } from 'simplycms/contracts/views';\nimport { toPropertyValueViewModel } from './property-values';\n\n/** Плоскі значення характеристик модифікацій: `modificationId → значення`. */\nexport async function loadModificationValues(\n db: ActorDb,\n modificationIds: string[],\n): Promise<Record<string, CatalogPropertyValueRow[]>> {\n const grouped: Record<string, CatalogPropertyValueRow[]> = {};\n if (modificationIds.length === 0) return grouped;\n\n const rows = await db\n .select({\n modification_id: modificationPropertyValues.modificationId,\n property_id: modificationPropertyValues.propertyId,\n value: modificationPropertyValues.value,\n numeric_value: modificationPropertyValues.numericValue,\n option_id: modificationPropertyValues.optionId,\n })\n .from(modificationPropertyValues)\n .where(inArray(modificationPropertyValues.modificationId, modificationIds));\n\n for (const row of rows) {\n (grouped[row.modification_id] ??= []).push({\n property_id: row.property_id,\n value: row.value,\n numeric_value: toNumericValue(row.numeric_value),\n option_id: row.option_id,\n });\n }\n return grouped;\n}\n\n/**\n * Значення характеристик модифікацій ОДНОГО товару разом з опцією й самою\n * характеристикою — форма, яку читає таблиця характеристик на картці.\n *\n * 🔴 Вхід — `productId`, а не список id модифікацій із браузера. Список,\n * присланий клієнтом, довелося б або довіряти, або звіряти зайвим запитом;\n * тут же вибірка за побудовою не виходить за межі одного товару.\n */\nexport async function loadProductModificationValues(\n db: ActorDb,\n productId: string,\n): Promise<Record<string, ProductPropertyValueViewModel[]>> {\n const grouped: Record<string, ProductPropertyValueViewModel[]> = {};\n\n const rows = await db\n .select({\n modification_id: modificationPropertyValues.modificationId,\n property_id: modificationPropertyValues.propertyId,\n value: modificationPropertyValues.value,\n numeric_value: modificationPropertyValues.numericValue,\n option_id: modificationPropertyValues.optionId,\n option: { id: propertyOptions.id, slug: propertyOptions.slug },\n property: {\n id: sectionProperties.id,\n name: sectionProperties.name,\n slug: sectionProperties.slug,\n property_type: sectionProperties.propertyType,\n has_page: sectionProperties.hasPage,\n },\n })\n .from(modificationPropertyValues)\n .innerJoin(\n productModifications,\n eq(modificationPropertyValues.modificationId, productModifications.id),\n )\n .leftJoin(\n propertyOptions,\n eq(modificationPropertyValues.optionId, propertyOptions.id),\n )\n .leftJoin(\n sectionProperties,\n eq(modificationPropertyValues.propertyId, sectionProperties.id),\n )\n .where(eq(productModifications.productId, productId));\n\n for (const row of rows) {\n (grouped[row.modification_id] ??= []).push(toPropertyValueViewModel(row));\n }\n return grouped;\n}\n\n/**\n * Id модифікацій товару.\n *\n * 🔴 Потрібен ОКРЕМО від значень характеристик: модифікація без жодної\n * характеристики в мапі значень не зʼявляється, і залишки для неї тихо\n * не порахувались би — селектор показав би «немає в наявності» рівно там,\n * де адмінка нічого не заповнила.\n */\nexport async function loadModificationIds(\n db: ActorDb,\n productId: string,\n): Promise<string[]> {\n const rows = await db\n .select({ id: productModifications.id })\n .from(productModifications)\n .where(eq(productModifications.productId, productId));\n\n return rows.map((row) => row.id);\n}\n","import { and, inArray, isNull, sql } from 'drizzle-orm';\nimport { productModifications, stockByPickupPoint } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Наявність однієї модифікації — форма, яку читає селектор на картці товару. */\nexport interface ModificationStockRow {\n totalQuantity: number;\n isAvailable: boolean;\n}\n\n/**\n * Сумарні залишки по модифікаціях: `modificationId → кількість`.\n *\n * 🔴 Сума рахується SQL-ом, а не в JS. Стара реалізація тягнула КОЖЕН рядок\n * `stock_by_pickup_point` у браузер і складала їх там — тобто розкладка\n * товару по точках видачі публікувалася назовні заради одного числа.\n */\nexport async function loadStockByModification(\n db: ActorDb,\n modificationIds: string[],\n): Promise<Record<string, number>> {\n const byModification: Record<string, number> = {};\n if (modificationIds.length === 0) return byModification;\n\n const rows = await db\n .select({\n modification_id: stockByPickupPoint.modificationId,\n quantity: sql<string>`sum(${stockByPickupPoint.quantity})`,\n })\n .from(stockByPickupPoint)\n .where(inArray(stockByPickupPoint.modificationId, modificationIds))\n .groupBy(stockByPickupPoint.modificationId);\n\n for (const row of rows) {\n if (row.modification_id === null) continue;\n byModification[row.modification_id] = Number(row.quantity);\n }\n return byModification;\n}\n\n/** Сумарні залишки простих товарів (рядки без модифікації): `productId → кількість`. */\nexport async function loadStockByProduct(\n db: ActorDb,\n productIds: string[],\n): Promise<Record<string, number>> {\n const byProduct: Record<string, number> = {};\n if (productIds.length === 0) return byProduct;\n\n const rows = await db\n .select({\n product_id: stockByPickupPoint.productId,\n quantity: sql<string>`sum(${stockByPickupPoint.quantity})`,\n })\n .from(stockByPickupPoint)\n .where(\n and(\n inArray(stockByPickupPoint.productId, productIds),\n isNull(stockByPickupPoint.modificationId),\n ),\n )\n .groupBy(stockByPickupPoint.productId);\n\n for (const row of rows) {\n if (row.product_id === null) continue;\n byProduct[row.product_id] = Number(row.quantity);\n }\n return byProduct;\n}\n\n/**\n * Наявність модифікацій одного товару.\n *\n * 🔴 Заміна функції БД `get_stock_info`, якої в схемі v2 НЕМАЄ (baseline B13\n * не везе жодної plpgsql-функції, крім читача актора). Правило збережено\n * дослівно: доступно, якщо є залишок АБО статус — «під замовлення».\n */\nexport async function loadModificationStock(\n db: ActorDb,\n modificationIds: string[],\n): Promise<Record<string, ModificationStockRow>> {\n const stock: Record<string, ModificationStockRow> = {};\n if (modificationIds.length === 0) return stock;\n\n const quantities = await loadStockByModification(db, modificationIds);\n const rows = await db\n .select({\n id: productModifications.id,\n stock_status: productModifications.stockStatus,\n })\n .from(productModifications)\n .where(inArray(productModifications.id, modificationIds));\n\n for (const row of rows) {\n const totalQuantity = quantities[row.id] ?? 0;\n stock[row.id] = {\n totalQuantity,\n isAvailable: totalQuantity > 0 || row.stock_status === 'on_order',\n };\n }\n return stock;\n}\n","import { and, desc, eq, inArray, type SQL } from 'drizzle-orm';\nimport {\n productModifications,\n productPrices,\n productPropertyValues,\n products,\n sections,\n} from 'simplycms/schema';\nimport { calculateProductAvailability } from 'simplycms/domain/inventory';\nimport type { ActorDb } from './db';\nimport {\n catalogModificationColumns,\n pickDefaultModification,\n toNumericValue,\n type CatalogModificationRow,\n type CatalogProductRow,\n type CatalogPropertyValueRow,\n} from './entities/catalog-product';\nimport { productColumns, toImageList } from './entities/product';\nimport { groupPricesByProduct, priceColumns } from './entities/price';\nimport { sectionRefColumns } from './entities/section';\nimport { loadModificationValues } from './modification-values';\nimport { loadStockByModification, loadStockByProduct } from './stock';\n\n/**\n * Вибірка каталогу з усім, що потрібно фільтрам: модифікації, ціни,\n * характеристики обох рівнів і наявність.\n *\n * `sectionId` звужує вибірку сторінкою розділу; без нього беруться всі\n * активні товари — чипси каталогу перемикають розділ уже на клієнті.\n *\n * 🔴 `is_active = true` — обовʼязковий предикат видимості: RLS на каталозі\n * немає (див. `./sections`), тож забутий фільтр не впаде, а тихо виведе\n * чернетки в магазин.\n *\n * 🔴 Запити послідовні й по `inArray`: транзакція живе на одному зʼєднанні,\n * тож `Promise.all` дав би лише уявний паралелізм (див. `./products`).\n */\nexport async function loadCatalogProducts(\n db: ActorDb,\n sectionId?: string,\n): Promise<CatalogProductRow[]> {\n return loadCatalogProductsWhere(\n db,\n sectionId ? eq(products.sectionId, sectionId) : undefined,\n );\n}\n\n/**\n * Та сама вибірка, звужена ДОВІЛЬНИМ додатковим предикатом.\n *\n * 🔴 `is_active = true` доклеюється ТУТ і не є частиною аргументу: інакше\n * кожен новий викликач мусив би згадати про нього самостійно, і рано чи\n * пізно хтось би не згадав. Сторінка значення характеристики (`./property-option`)\n * — рівно такий викликач.\n */\nexport async function loadCatalogProductsWhere(\n db: ActorDb,\n extra?: SQL,\n): Promise<CatalogProductRow[]> {\n const visible = extra\n ? and(eq(products.isActive, true), extra)\n : eq(products.isActive, true);\n\n const rows = await db\n .select({ product: productColumns, section: sectionRefColumns })\n .from(products)\n .leftJoin(sections, eq(products.sectionId, sections.id))\n .where(visible)\n .orderBy(desc(products.createdAt));\n\n if (rows.length === 0) return [];\n\n const ids = rows.map((row) => row.product.id);\n const modificationRows = await db\n .select(catalogModificationColumns)\n .from(productModifications)\n .where(inArray(productModifications.productId, ids));\n const priceRows = await db\n .select(priceColumns)\n .from(productPrices)\n .where(inArray(productPrices.productId, ids));\n const valueRows = await db\n .select({\n product_id: productPropertyValues.productId,\n property_id: productPropertyValues.propertyId,\n value: productPropertyValues.value,\n numeric_value: productPropertyValues.numericValue,\n option_id: productPropertyValues.optionId,\n })\n .from(productPropertyValues)\n .where(inArray(productPropertyValues.productId, ids));\n\n const modsByProduct: Record<string, CatalogModificationRow[]> = {};\n const modIds: string[] = [];\n for (const { product_id, ...mod } of modificationRows) {\n (modsByProduct[product_id] ??= []).push(mod);\n modIds.push(mod.id);\n }\n\n const valuesByModification = await loadModificationValues(db, modIds);\n const modificationStock = await loadStockByModification(db, modIds);\n const productStock = await loadStockByProduct(db, ids);\n const pricesByProduct = groupPricesByProduct(priceRows);\n\n const valuesByProduct: Record<string, CatalogPropertyValueRow[]> = {};\n for (const row of valueRows) {\n (valuesByProduct[row.product_id] ??= []).push({\n property_id: row.property_id,\n value: row.value,\n numeric_value: toNumericValue(row.numeric_value),\n option_id: row.option_id,\n });\n }\n\n return rows.map(({ product, section }) => {\n const mods = modsByProduct[product.id] ?? [];\n const defaultMod = pickDefaultModification(mods);\n\n return {\n ...product,\n images: toImageList(product.images),\n has_modifications: product.has_modifications ?? true,\n // `leftJoin` без збігу дає рядок із порожнім `id` (див. `./product-detail`).\n section: section?.id ? section : null,\n product_modifications: mods,\n modifications: defaultMod ? [defaultMod] : [],\n product_prices: pricesByProduct[product.id] ?? [],\n propertyValues: [\n ...(valuesByProduct[product.id] ?? []),\n ...mods.flatMap((mod) => valuesByModification[mod.id] ?? []),\n ],\n isAvailable: calculateProductAvailability(\n {\n id: product.id,\n has_modifications: product.has_modifications,\n stock_status: product.stock_status,\n product_modifications: mods,\n stock_by_pickup_point: [],\n },\n { modificationStock, productStock },\n ),\n };\n });\n}\n","import { orderItems, orderStatuses, orders } from 'simplycms/schema';\nimport type { JsonValue } from './property';\n\n/** Статус замовлення — довідник, спільний для фільтра й картки. */\nexport interface OrderStatusRow {\n id: string;\n name: string;\n code: string;\n color: string | null;\n}\n\n/** Позиція замовлення. `numeric` уже переведено в числа. */\nexport interface OrderItemRow {\n id: string;\n name: string;\n price: number;\n base_price: number | null;\n discount_data: JsonValue | null;\n quantity: number;\n total: number;\n}\n\n/** Замовлення у списку кабінету. */\nexport interface OrderListRow {\n id: string;\n order_number: string;\n total: number;\n created_at: string;\n status_id: string | null;\n status: OrderStatusRow | null;\n items: OrderItemRow[];\n}\n\n/** Замовлення цілком — сторінки «деталі» й «успішне оформлення». */\nexport interface OrderDetailRow extends OrderListRow {\n first_name: string;\n last_name: string;\n email: string;\n phone: string;\n delivery_method: string | null;\n delivery_city: string | null;\n delivery_address: string | null;\n payment_method: string;\n notes: string | null;\n subtotal: number;\n has_different_recipient: boolean;\n recipient_first_name: string | null;\n recipient_last_name: string | null;\n recipient_phone: string | null;\n recipient_email: string | null;\n}\n\nexport const orderStatusColumns = {\n id: orderStatuses.id,\n name: orderStatuses.name,\n code: orderStatuses.code,\n color: orderStatuses.color,\n};\n\nexport const orderItemColumns = {\n id: orderItems.id,\n order_id: orderItems.orderId,\n name: orderItems.name,\n price: orderItems.price,\n base_price: orderItems.basePrice,\n discount_data: orderItems.discountData,\n quantity: orderItems.quantity,\n total: orderItems.total,\n};\n\nexport const orderColumns = {\n id: orders.id,\n order_number: orders.orderNumber,\n total: orders.total,\n subtotal: orders.subtotal,\n created_at: orders.createdAt,\n status_id: orders.statusId,\n first_name: orders.firstName,\n last_name: orders.lastName,\n email: orders.email,\n phone: orders.phone,\n delivery_method: orders.deliveryMethod,\n delivery_city: orders.deliveryCity,\n delivery_address: orders.deliveryAddress,\n payment_method: orders.paymentMethod,\n notes: orders.notes,\n has_different_recipient: orders.hasDifferentRecipient,\n recipient_first_name: orders.recipientFirstName,\n recipient_last_name: orders.recipientLastName,\n recipient_phone: orders.recipientPhone,\n recipient_email: orders.recipientEmail,\n};\n\n/** Сирий рядок позиції: `numeric` приїжджає рядком (див. `./price`). */\nexport interface RawOrderItem {\n id: string;\n order_id: string;\n name: string;\n price: string;\n base_price: string | null;\n discount_data: unknown;\n /* 🔴 `jsonb` приїжджає нетипізованим — каст робиться один раз у `toOrderItem`. */\n quantity: number;\n total: string;\n}\n\nexport function toOrderItem(row: RawOrderItem): OrderItemRow {\n return {\n id: row.id,\n name: row.name,\n price: Number(row.price),\n base_price: row.base_price === null ? null : Number(row.base_price),\n discount_data: (row.discount_data ?? null) as JsonValue | null,\n quantity: row.quantity,\n total: Number(row.total),\n };\n}\n\n/** Групує позиції за замовленням — щоб список кабінету не став N+1. */\nexport function groupItemsByOrder(\n rows: RawOrderItem[],\n): Record<string, OrderItemRow[]> {\n const byOrder: Record<string, OrderItemRow[]> = {};\n for (const row of rows) (byOrder[row.order_id] ??= []).push(toOrderItem(row));\n return byOrder;\n}\n","import { asc, eq } from 'drizzle-orm';\nimport { orderStatuses } from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport { orderStatusColumns, type OrderStatusRow } from './entities/order';\n\n/** Довідник статусів — публічний (грант `select` для `app_user`). */\nexport async function loadOrderStatuses(\n db: ActorDb,\n): Promise<OrderStatusRow[]> {\n return db\n .select(orderStatusColumns)\n .from(orderStatuses)\n .orderBy(asc(orderStatuses.sortOrder));\n}\n\n/** Статус за кодом — потрібен скасуванню замовлення. */\nexport async function loadStatusByCode(\n db: ActorDb,\n code: string,\n): Promise<OrderStatusRow | null> {\n const [row] = await db\n .select(orderStatusColumns)\n .from(orderStatuses)\n .where(eq(orderStatuses.code, code))\n .limit(1);\n\n return row ?? null;\n}\n\n/** Статус за замовчуванням — з ним створюється нове замовлення. */\nexport async function loadDefaultStatusId(db: ActorDb): Promise<string | null> {\n const [row] = await db\n .select({ id: orderStatuses.id })\n .from(orderStatuses)\n .where(eq(orderStatuses.isDefault, true))\n .limit(1);\n\n return row?.id ?? null;\n}\n","import { randomUUID } from 'node:crypto';\nimport { eq } from 'drizzle-orm';\nimport { orderItems, orders, shippingMethods } from 'simplycms/schema';\nimport type { JsonValue } from './entities/property';\nimport type { ActorDb } from './db';\nimport { loadDefaultStatusId } from './order-statuses';\n\n/** Позиція кошика в тому вигляді, в якому вона лягає в замовлення. */\nexport interface NewOrderItem {\n productId: string | null;\n modificationId: string | null;\n name: string;\n price: number;\n quantity: number;\n basePrice: number | null;\n discountData: JsonValue | null;\n}\n\n/** Контактні й доставкові дані оформлення. */\nexport interface NewOrderInput {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n shippingMethodId: string;\n deliveryCity: string | null;\n deliveryAddress: string | null;\n pickupPointId: string | null;\n paymentMethod: string;\n notes: string | null;\n subtotal: number;\n shippingCost: number;\n total: number;\n hasDifferentRecipient: boolean;\n recipientFirstName: string | null;\n recipientLastName: string | null;\n recipientPhone: string | null;\n recipientEmail: string | null;\n savedRecipientId: string | null;\n savedAddressId: string | null;\n items: NewOrderItem[];\n}\n\n/** Що повертається клієнту після оформлення. */\nexport interface CreatedOrder {\n id: string;\n orderNumber: string;\n /** Токен гостьового замовлення; для залогіненого — `null`. */\n accessToken: string | null;\n}\n\n/**\n * Номер замовлення.\n *\n * 🔴 Генерується в TS, бо тригера `generate_order_number` у схемі v2 НЕМАЄ:\n * baseline B13 не везе жодної plpgsql-функції, крім читача актора. Формат —\n * дата плюс випадковий хвіст; унікальність тримає ключ `orders_order_number_key`,\n * а не надія на послідовність.\n */\nfunction generateOrderNumber(now: Date): string {\n const stamp = now.toISOString().slice(2, 10).replace(/-/g, '');\n const tail = randomUUID().replace(/-/g, '').slice(0, 6).toUpperCase();\n return `${stamp}-${tail}`;\n}\n\n/**\n * Створює замовлення разом із позиціями — однією транзакцією актора.\n *\n * 🔴 `userId` — з серверної сесії або `null` для гостя; політика\n * `orders_insert_own` приймає рівно ці два випадки. Гостю одразу видається\n * `access_token`, і саме він має бути в GUC `app.order_token` ЦІЄЇ транзакції:\n * без нього `insert … returning` впав би на власній же SELECT-політиці.\n */\nexport async function createOrder(\n db: ActorDb,\n userId: string | null,\n accessToken: string | null,\n input: NewOrderInput,\n): Promise<CreatedOrder> {\n const [method] = await db\n .select({ code: shippingMethods.code })\n .from(shippingMethods)\n .where(eq(shippingMethods.id, input.shippingMethodId))\n .limit(1);\n\n const orderNumber = generateOrderNumber(new Date());\n const [row] = await db\n .insert(orders)\n .values({\n userId,\n accessToken,\n orderNumber,\n statusId: await loadDefaultStatusId(db),\n firstName: input.firstName,\n lastName: input.lastName,\n email: input.email,\n phone: input.phone,\n deliveryMethod: method?.code ?? null,\n deliveryCity: input.deliveryCity,\n deliveryAddress: input.deliveryAddress,\n paymentMethod: input.paymentMethod,\n notes: input.notes,\n subtotal: input.subtotal.toFixed(2),\n total: input.total.toFixed(2),\n shippingMethodId: input.shippingMethodId,\n shippingCost: input.shippingCost.toFixed(2),\n pickupPointId: input.pickupPointId,\n shippingData: {},\n hasDifferentRecipient: input.hasDifferentRecipient,\n recipientFirstName: input.recipientFirstName,\n recipientLastName: input.recipientLastName,\n recipientPhone: input.recipientPhone,\n recipientEmail: input.recipientEmail,\n savedRecipientId: input.savedRecipientId,\n savedAddressId: input.savedAddressId,\n })\n .returning({ id: orders.id, orderNumber: orders.orderNumber });\n\n await db.insert(orderItems).values(\n input.items.map((item) => ({\n orderId: row.id,\n productId: item.productId,\n modificationId: item.modificationId,\n name: item.name,\n price: item.price.toFixed(2),\n quantity: item.quantity,\n total: (item.price * item.quantity).toFixed(2),\n basePrice: item.basePrice === null ? null : item.basePrice.toFixed(2),\n discountData: item.discountData ?? null,\n })),\n );\n\n return { id: row.id, orderNumber: row.orderNumber, accessToken };\n}\n","import { and, desc, eq, inArray } from 'drizzle-orm';\nimport { orderItems, orderStatuses, orders } from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport {\n groupItemsByOrder,\n orderColumns,\n orderItemColumns,\n orderStatusColumns,\n toOrderItem,\n type OrderDetailRow,\n type OrderListRow,\n} from './entities/order';\n\n/**\n * Замовлення покупця, опційно звужені статусом.\n *\n * 🔴 `user_id` у предикаті — з СЕРВЕРНОЇ сесії (актор транзакції). Політика\n * `orders_select_own_or_token` звужує таблицю тим самим id, тож підставити\n * чужий тут нема звідки: параметра з цим значенням у клієнта не існує.\n */\nexport async function loadUserOrders(\n db: ActorDb,\n userId: string,\n statusId?: string,\n): Promise<OrderListRow[]> {\n const scope = statusId\n ? and(eq(orders.userId, userId), eq(orders.statusId, statusId))\n : eq(orders.userId, userId);\n\n const rows = await db\n .select({ order: orderColumns, status: orderStatusColumns })\n .from(orders)\n .leftJoin(orderStatuses, eq(orders.statusId, orderStatuses.id))\n .where(scope)\n .orderBy(desc(orders.createdAt));\n\n if (rows.length === 0) return [];\n\n const itemRows = await db\n .select(orderItemColumns)\n .from(orderItems)\n .where(\n inArray(\n orderItems.orderId,\n rows.map((row) => row.order.id),\n ),\n );\n const itemsByOrder = groupItemsByOrder(itemRows);\n\n return rows.map(({ order, status }) => ({\n id: order.id,\n order_number: order.order_number,\n total: Number(order.total),\n created_at: order.created_at,\n status_id: order.status_id,\n status: status?.id ? status : null,\n items: itemsByOrder[order.id] ?? [],\n }));\n}\n\n/**\n * Одне замовлення цілком.\n *\n * Права доводить АКТОР транзакції: `withCustomerDb` — власника,\n * `withOrderTokenDb` — гостя з токеном. Сам запит різниці не знає, тож\n * зайвого предиката тут немає навмисно: він створив би ілюзію, що саме код\n * вирішує питання доступу.\n */\nexport async function loadOrderDetail(\n db: ActorDb,\n orderId: string,\n): Promise<OrderDetailRow | null> {\n const [row] = await db\n .select({ order: orderColumns, status: orderStatusColumns })\n .from(orders)\n .leftJoin(orderStatuses, eq(orders.statusId, orderStatuses.id))\n .where(eq(orders.id, orderId))\n .limit(1);\n\n if (!row) return null;\n\n const itemRows = await db\n .select(orderItemColumns)\n .from(orderItems)\n .where(eq(orderItems.orderId, orderId));\n\n const { order, status } = row;\n return {\n ...order,\n total: Number(order.total),\n subtotal: Number(order.subtotal),\n status: status?.id ? status : null,\n items: itemRows.map(toOrderItem),\n };\n}\n\n/**\n * Перевести замовлення в статус — виконується під `app_admin`.\n *\n * 🔴 Ownership тут НЕ перевіряється й перевірятись не може: під `app_admin`\n * RLS віддає все. Право мусить бути доведене ДО виклику окремим читанням\n * під актором покупця (`server/profile-orders.ts`).\n */\nexport async function setOrderStatus(\n db: ActorDb,\n orderId: string,\n statusId: string,\n): Promise<void> {\n await db\n .update(orders)\n .set({ statusId, updatedAt: new Date().toISOString() })\n .where(eq(orders.id, orderId));\n}\n","import { and, count, desc, eq } from 'drizzle-orm';\nimport { orders, userAddresses } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Адреса покупця разом із лічильником замовлень, які на неї послались. */\nexport interface AddressRow {\n id: string;\n name: string;\n city: string;\n address: string;\n is_default: boolean;\n usage_count: number;\n}\n\n/** Поля адреси, які редагує покупець. */\nexport interface AddressInput {\n name: string;\n city: string;\n address: string;\n isDefault: boolean;\n}\n\n/**\n * Адреси покупця з лічильником використань.\n *\n * 🔴 Раніше це був водоспад: браузер брав список, а потім на КОЖНУ адресу\n * робив окремий `count` по замовленнях — N+1 запитів, і кожен із `user_id`\n * із клієнта. Тут один `left join … group by` в транзакції актора.\n *\n * 🔴 `orders` у джойні звужена політикою `orders_select_own_or_token`, тож\n * лічильник рахує ЛИШЕ власні замовлення покупця — чужі до нього не\n * дотягуються навіть якби посилались на цю адресу.\n */\nexport async function loadAddresses(\n db: ActorDb,\n userId: string,\n): Promise<AddressRow[]> {\n const rows = await db\n .select({\n id: userAddresses.id,\n name: userAddresses.name,\n city: userAddresses.city,\n address: userAddresses.address,\n is_default: userAddresses.isDefault,\n created_at: userAddresses.createdAt,\n usage_count: count(orders.id),\n })\n .from(userAddresses)\n .leftJoin(orders, eq(orders.savedAddressId, userAddresses.id))\n .where(eq(userAddresses.userId, userId))\n .groupBy(userAddresses.id)\n .orderBy(desc(userAddresses.isDefault), desc(userAddresses.createdAt));\n\n return rows.map(({ created_at: _createdAt, ...row }) => row);\n}\n\n/**\n * Додає адресу покупцю. `userId` ставить сервер — політика\n * `user_addresses_own_all` має WITH CHECK на власника.\n */\nexport async function createAddress(\n db: ActorDb,\n userId: string,\n input: AddressInput,\n): Promise<string> {\n const [row] = await db\n .insert(userAddresses)\n .values({\n userId,\n name: input.name,\n city: input.city,\n address: input.address,\n isDefault: input.isDefault,\n })\n .returning({ id: userAddresses.id });\n\n return row.id;\n}\n\n/**\n * Оновлює адресу покупця. Повертає `false`, якщо рядок не належить актору.\n *\n * 🔴 Предикат `user_id` тут — ДРУГИЙ рубіж, не єдиний: RLS уже звузила\n * таблицю до власника. Але саме `returning` перетворює «нічого не оновилось»\n * на явну відповідь виклику — без нього спроба переписати чужу адресу\n * виглядала б для клієнта успіхом.\n */\nexport async function updateAddress(\n db: ActorDb,\n userId: string,\n id: string,\n input: AddressInput,\n): Promise<boolean> {\n const updated = await db\n .update(userAddresses)\n .set({\n name: input.name,\n city: input.city,\n address: input.address,\n isDefault: input.isDefault,\n })\n .where(and(eq(userAddresses.id, id), eq(userAddresses.userId, userId)))\n .returning({ id: userAddresses.id });\n\n return updated.length > 0;\n}\n\n/** Видаляє адресу покупця; `false` — рядка немає або він чужий. */\nexport async function deleteAddress(\n db: ActorDb,\n userId: string,\n id: string,\n): Promise<boolean> {\n const deleted = await db\n .delete(userAddresses)\n .where(and(eq(userAddresses.id, id), eq(userAddresses.userId, userId)))\n .returning({ id: userAddresses.id });\n\n return deleted.length > 0;\n}\n\n/** Знімає прапорець «за замовчуванням» з усіх адрес покупця. */\nexport async function clearDefaultAddresses(\n db: ActorDb,\n userId: string,\n): Promise<void> {\n await db\n .update(userAddresses)\n .set({ isDefault: false })\n .where(eq(userAddresses.userId, userId));\n}\n","import { asc, eq } from 'drizzle-orm';\nimport { pickupPoints } from 'simplycms/schema';\nimport type {\n Coordinates,\n PickupPoint,\n WorkingHours,\n} from 'simplycms/contracts';\nimport type { ActorDb } from './db';\n\n/** Точка видачі без опційної вкладеної зони — зона їде окремим списком. */\nexport type PickupPointRow = Omit<PickupPoint, 'zone'>;\n\n/** Активні точки видачі — вибір самовивозу в чекауті. */\nexport async function loadPickupPoints(db: ActorDb): Promise<PickupPointRow[]> {\n const rows = await db\n .select()\n .from(pickupPoints)\n .where(eq(pickupPoints.isActive, true))\n .orderBy(asc(pickupPoints.sortOrder));\n\n return rows.map((row) => ({\n id: row.id,\n method_id: row.methodId,\n name: row.name,\n address: row.address,\n city: row.city,\n zone_id: row.zoneId,\n working_hours: (row.workingHours ?? {}) as WorkingHours,\n phone: row.phone,\n is_active: row.isActive,\n is_system: row.isSystem,\n sort_order: row.sortOrder,\n coordinates: (row.coordinates ?? null) as Coordinates | null,\n created_at: row.createdAt,\n }));\n}\n","import { eq } from 'drizzle-orm';\nimport { profiles, userCategories } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Профіль покупця у формі, яку читають сторінки кабінету. */\nexport interface ProfileRow {\n first_name: string | null;\n last_name: string | null;\n email: string | null;\n phone: string | null;\n avatar_url: string | null;\n category: { name: string } | null;\n}\n\n/** Поля, які покупець сміє змінювати сам. */\nexport interface ProfileUpdate {\n firstName: string;\n lastName: string;\n phone: string | null;\n}\n\n/**\n * Профіль поточного покупця.\n *\n * 🔴 Фільтр `user_id` тут — не заміна RLS, а її дублікат: політика\n * `profiles_select_own` уже звузила таблицю до власника. Явний предикат\n * лишається тому, що він робить намір запиту читабельним, а не тому, що\n * без нього приїхало б чуже.\n */\nexport async function loadProfile(\n db: ActorDb,\n userId: string,\n): Promise<ProfileRow | null> {\n const [row] = await db\n .select({\n first_name: profiles.firstName,\n last_name: profiles.lastName,\n email: profiles.email,\n phone: profiles.phone,\n avatar_url: profiles.avatarUrl,\n category_name: userCategories.name,\n })\n .from(profiles)\n .leftJoin(userCategories, eq(profiles.categoryId, userCategories.id))\n .where(eq(profiles.userId, userId))\n .limit(1);\n\n if (!row) return null;\n\n return {\n first_name: row.first_name,\n last_name: row.last_name,\n email: row.email,\n phone: row.phone,\n avatar_url: row.avatar_url,\n category: row.category_name === null ? null : { name: row.category_name },\n };\n}\n\n/** Зберігає особисті поля профілю. Рядок звужує політика `profiles_update_own`. */\nexport async function updateProfile(\n db: ActorDb,\n userId: string,\n update: ProfileUpdate,\n): Promise<void> {\n await db\n .update(profiles)\n .set({\n firstName: update.firstName,\n lastName: update.lastName,\n phone: update.phone,\n updatedAt: new Date().toISOString(),\n })\n .where(eq(profiles.userId, userId));\n}\n\n/**\n * Тип ціни, призначений категорії покупця, або `null`.\n *\n * 🔴 Раніше це читав браузер запитом `profiles → user_categories`, тобто\n * персональна знижкова категорія була доступна будь-кому, хто підставив\n * чужий `user_id`. Тепер `userId` приходить із серверної сесії.\n */\nexport async function loadUserPriceTypeId(\n db: ActorDb,\n userId: string,\n): Promise<string | null> {\n const [row] = await db\n .select({ price_type_id: userCategories.priceTypeId })\n .from(profiles)\n .innerJoin(userCategories, eq(profiles.categoryId, userCategories.id))\n .where(eq(profiles.userId, userId))\n .limit(1);\n\n return row?.price_type_id ?? null;\n}\n","import { and, count, desc, eq } from 'drizzle-orm';\nimport { orders, userRecipients } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Отримувач із книги покупця разом із лічильником замовлень на нього. */\nexport interface RecipientRow {\n id: string;\n first_name: string;\n last_name: string;\n phone: string;\n email: string | null;\n city: string;\n address: string;\n notes: string | null;\n is_default: boolean;\n usage_count: number;\n}\n\n/** Новий отримувач, збережений у книзі покупця під час оформлення. */\nexport interface NewRecipient {\n firstName: string;\n lastName: string;\n phone: string;\n email: string | null;\n city: string;\n address: string;\n notes: string | null;\n}\n\n/** Поля отримувача разом із прапорцем «основний» (форма кабінету). */\nexport interface RecipientInput extends NewRecipient {\n isDefault: boolean;\n}\n\n/**\n * Отримувачі покупця з лічильником використань.\n *\n * 🔴 Той самий N+1, що й в адресах: браузер брав список і добивав `count` на\n * кожен рядок. Джойн на `orders` звужений політикою — чужі замовлення в\n * лічильник не потрапляють.\n */\nexport async function loadRecipients(\n db: ActorDb,\n userId: string,\n): Promise<RecipientRow[]> {\n const rows = await db\n .select({\n id: userRecipients.id,\n first_name: userRecipients.firstName,\n last_name: userRecipients.lastName,\n phone: userRecipients.phone,\n email: userRecipients.email,\n city: userRecipients.city,\n address: userRecipients.address,\n notes: userRecipients.notes,\n is_default: userRecipients.isDefault,\n created_at: userRecipients.createdAt,\n usage_count: count(orders.id),\n })\n .from(userRecipients)\n .leftJoin(orders, eq(orders.savedRecipientId, userRecipients.id))\n .where(eq(userRecipients.userId, userId))\n .groupBy(userRecipients.id)\n .orderBy(desc(userRecipients.isDefault), desc(userRecipients.createdAt));\n\n return rows.map(({ created_at: _createdAt, ...row }) => row);\n}\n\n/**\n * Додає отримувача покупцю.\n *\n * 🔴 `userId` ставить сервер, а не форма. Політика `user_recipients_own_all`\n * має WITH CHECK на власника, тож чужий id тут не пройшов би й у базу — але\n * покладатись на це як на єдиний рубіж не можна: актора однаково задає сервер.\n */\nexport async function createRecipient(\n db: ActorDb,\n userId: string,\n input: NewRecipient & { isDefault?: boolean },\n): Promise<string> {\n const [row] = await db\n .insert(userRecipients)\n .values({\n userId,\n ...toColumns(input),\n isDefault: input.isDefault ?? false,\n })\n .returning({ id: userRecipients.id });\n\n return row.id;\n}\n\n/** Оновлює отримувача; `false` — рядка немає або він належить іншому актору. */\nexport async function updateRecipient(\n db: ActorDb,\n userId: string,\n id: string,\n input: RecipientInput,\n): Promise<boolean> {\n const updated = await db\n .update(userRecipients)\n .set({ ...toColumns(input), isDefault: input.isDefault })\n .where(and(eq(userRecipients.id, id), eq(userRecipients.userId, userId)))\n .returning({ id: userRecipients.id });\n\n return updated.length > 0;\n}\n\n/** Видаляє отримувача; `false` — рядка немає або він чужий. */\nexport async function deleteRecipient(\n db: ActorDb,\n userId: string,\n id: string,\n): Promise<boolean> {\n const deleted = await db\n .delete(userRecipients)\n .where(and(eq(userRecipients.id, id), eq(userRecipients.userId, userId)))\n .returning({ id: userRecipients.id });\n\n return deleted.length > 0;\n}\n\n/** Знімає прапорець «основний» з усіх отримувачів покупця. */\nexport async function clearDefaultRecipients(\n db: ActorDb,\n userId: string,\n): Promise<void> {\n await db\n .update(userRecipients)\n .set({ isDefault: false })\n .where(eq(userRecipients.userId, userId));\n}\n\n/** Форма запиту → колонки таблиці (спільна для вставки й оновлення). */\nfunction toColumns(input: NewRecipient) {\n return {\n firstName: input.firstName,\n lastName: input.lastName,\n phone: input.phone,\n email: input.email,\n city: input.city,\n address: input.address,\n notes: input.notes,\n };\n}\n","import { and, count, desc, eq, inArray, sql } from 'drizzle-orm';\nimport { productReviews, profiles } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Автор відгуку в тому обсязі, який показує вітрина. */\nexport interface ReviewAuthor {\n first_name: string | null;\n last_name: string | null;\n avatar_url: string | null;\n}\n\n/** Відгук у формі, яку читають картка товару й форма власного відгуку. */\nexport interface ProductReviewRow {\n id: string;\n product_id: string;\n user_id: string;\n rating: number;\n title: string | null;\n content: string | null;\n images: string[];\n status: string;\n admin_comment: string | null;\n created_at: string;\n updated_at: string;\n profile?: ReviewAuthor | null;\n}\n\n/** Агрегат рейтингу товару — середнє й кількість ЛИШЕ схвалених відгуків. */\nexport interface ProductRating {\n avgRating: number;\n reviewCount: number;\n}\n\n/**\n * Відгуки товару, видимі поточному актору.\n *\n * 🔴 Звуження робить політика `product_reviews_select_approved_or_own`:\n * анонім (транзакція без `app.user_id`) бачить лише `approved`, залогінений —\n * ще й власні `pending`. Саме тому список читається під актором, а не під\n * `app_admin`: інакше несхвалений відгук поїхав би стороннім.\n */\nexport async function loadProductReviews(\n db: ActorDb,\n productId: string,\n): Promise<ProductReviewRow[]> {\n const rows = await db\n .select()\n .from(productReviews)\n .where(eq(productReviews.productId, productId))\n .orderBy(desc(productReviews.createdAt));\n\n return rows.map((row) => ({\n id: row.id,\n product_id: row.productId,\n user_id: row.userId,\n rating: row.rating,\n title: row.title,\n content: row.content,\n images: Array.isArray(row.images) ? (row.images as string[]) : [],\n status: row.status,\n admin_comment: row.adminComment,\n created_at: row.createdAt,\n updated_at: row.updatedAt,\n }));\n}\n\n/**\n * Підписи авторів для вже відібраних відгуків.\n *\n * 🔴 Викликається під `withStoreOperatorDb`, і це свідоме підвищення прав:\n * `profiles_select_own` не дає покупцеві бачити чужий профіль, а імена\n * авторів відгуків на вітрині публічні за задумом. Межу тримають ДВІ умови —\n * набір id закритий рядками, які актор уже законно побачив, і читаються рівно\n * три колонки підпису. Ані пошти, ані телефону, ані категорії тут немає.\n */\nexport async function loadReviewAuthors(\n db: ActorDb,\n userIds: string[],\n): Promise<Record<string, ReviewAuthor>> {\n const authors: Record<string, ReviewAuthor> = {};\n if (userIds.length === 0) return authors;\n\n const rows = await db\n .select({\n user_id: profiles.userId,\n first_name: profiles.firstName,\n last_name: profiles.lastName,\n avatar_url: profiles.avatarUrl,\n })\n .from(profiles)\n .where(inArray(profiles.userId, userIds));\n\n for (const row of rows) {\n authors[row.user_id] = {\n first_name: row.first_name,\n last_name: row.last_name,\n avatar_url: row.avatar_url,\n };\n }\n return authors;\n}\n\n/**\n * Рейтинги пачки товарів — заміна функції БД `get_product_ratings`, якої в\n * схемі v2 немає (baseline B13 не везе жодної plpgsql-функції, крім читача\n * актора).\n *\n * 🔴 `status = 'approved'` тут ОБОВʼЯЗКОВИЙ, хоч RLS і звужує таблицю:\n * власний `pending` відгук політика актору віддає, і без предиката покупець\n * бачив би в сітці каталогу рейтинг, накручений його ж нерозглянутою\n * пʼятіркою.\n */\nexport async function loadProductRatings(\n db: ActorDb,\n productIds: string[],\n): Promise<Record<string, ProductRating>> {\n const ratings: Record<string, ProductRating> = {};\n if (productIds.length === 0) return ratings;\n\n const rows = await db\n .select({\n product_id: productReviews.productId,\n avg_rating: sql<string>`avg(${productReviews.rating})`,\n review_count: count(),\n })\n .from(productReviews)\n .where(\n and(\n inArray(productReviews.productId, productIds),\n eq(productReviews.status, 'approved'),\n ),\n )\n .groupBy(productReviews.productId);\n\n for (const row of rows) {\n ratings[row.product_id] = {\n avgRating: Math.round(Number(row.avg_rating) * 10) / 10,\n reviewCount: Number(row.review_count),\n };\n }\n return ratings;\n}\n","import { and, eq } from 'drizzle-orm';\nimport { productReviews } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/** Поля, які покупець заповнює у формі відгуку. */\nexport interface ReviewInput {\n productId: string;\n rating: number;\n title: string | null;\n content: string | null;\n images: string[];\n}\n\n/**\n * Лишити відгук від імені власника сесії.\n *\n * 🔴 `status` завжди `'pending'` і НЕ приходить із форми: інакше покупець\n * опублікував би собі схвалений відгук повз модерацію. `user_id` так само\n * задає сервер — політика `product_reviews_insert_own` звіряє рядок саме з\n * тим актором, якого їй назвали.\n */\nexport async function insertProductReview(\n db: ActorDb,\n userId: string,\n input: ReviewInput,\n): Promise<void> {\n await db.insert(productReviews).values({\n productId: input.productId,\n userId,\n rating: input.rating,\n title: input.title,\n content: input.content,\n images: input.images,\n status: 'pending',\n });\n}\n\n/**\n * Видалити власний відгук; `false` — рядка немає або він чужий.\n *\n * Предикат `user_id` дублює політику `product_reviews_delete_own` — і саме\n * тому `returning` порожній на чужому рядку, а виклик відповідає відмовою\n * замість тихого «успіху».\n */\nexport async function deleteProductReview(\n db: ActorDb,\n userId: string,\n reviewId: string,\n): Promise<boolean> {\n const deleted = await db\n .delete(productReviews)\n .where(\n and(eq(productReviews.id, reviewId), eq(productReviews.userId, userId)),\n )\n .returning({ id: productReviews.id });\n\n return deleted.length > 0;\n}\n","import { and, asc, count, eq, isNull } from 'drizzle-orm';\nimport {\n pickupPoints,\n productModifications,\n products,\n stockByPickupPoint,\n} from 'simplycms/schema';\nimport type { StockStatus } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\n\n/** Залишок на одній точці видачі. */\nexport interface StockByPointRow {\n point_id: string;\n point_name: string;\n quantity: number;\n}\n\n/** Наявність товару або модифікації — те, що малює блок наявності. */\nexport interface StockInfoRow {\n totalQuantity: number;\n isAvailable: boolean;\n stockStatus: StockStatus | null;\n byPoint: StockByPointRow[];\n}\n\n/** Що саме питаємо: модифікацію (пріоритет) або простий товар. */\nexport interface StockTarget {\n productId?: string | null;\n modificationId?: string | null;\n}\n\nconst EMPTY: StockInfoRow = {\n totalQuantity: 0,\n isAvailable: false,\n stockStatus: null,\n byPoint: [],\n};\n\n/**\n * Наявність із розкладкою по точках видачі — заміна функції БД\n * `get_stock_info`, якої в схемі v2 НЕМАЄ (baseline B13 не везе жодної\n * plpgsql-функції, крім читача актора).\n *\n * Правило доступності збережено дослівно: доступно, якщо є залишок АБО\n * статус — «під замовлення».\n *\n * 🔴 `is_active` точок видачі фільтрується КОДОМ: RLS на `pickup_points`\n * немає, і без предиката покупець побачив би залишок на складі, який магазин\n * закрив, — тобто пообіцяв би самовивіз звідти, звідки видачі більше немає.\n */\nexport async function loadStockInfo(\n db: ActorDb,\n target: StockTarget,\n): Promise<StockInfoRow> {\n const stockStatus = await loadStockStatus(db, target);\n if (stockStatus === undefined) return EMPTY;\n\n const scope = target.modificationId\n ? eq(stockByPickupPoint.modificationId, target.modificationId)\n : and(\n eq(stockByPickupPoint.productId, target.productId ?? ''),\n isNull(stockByPickupPoint.modificationId),\n );\n\n const rows = await db\n .select({\n point_id: pickupPoints.id,\n point_name: pickupPoints.name,\n quantity: stockByPickupPoint.quantity,\n })\n .from(stockByPickupPoint)\n .innerJoin(\n pickupPoints,\n eq(pickupPoints.id, stockByPickupPoint.pickupPointId),\n )\n .where(and(scope, eq(pickupPoints.isActive, true)))\n .orderBy(asc(pickupPoints.sortOrder));\n\n const totalQuantity = rows.reduce((sum, row) => sum + row.quantity, 0);\n return {\n totalQuantity,\n isAvailable: totalQuantity > 0 || stockStatus === 'on_order',\n stockStatus,\n byPoint: rows,\n };\n}\n\n/**\n * Статус наявності цілі: `undefined` — рядка немає взагалі (тоді питати\n * залишки нема про що), `null` — рядок є, статус не заданий.\n */\nasync function loadStockStatus(\n db: ActorDb,\n target: StockTarget,\n): Promise<StockStatus | null | undefined> {\n if (target.modificationId) {\n const [row] = await db\n .select({ status: productModifications.stockStatus })\n .from(productModifications)\n .where(eq(productModifications.id, target.modificationId))\n .limit(1);\n return row === undefined ? undefined : row.status;\n }\n if (!target.productId) return undefined;\n\n const [row] = await db\n .select({ status: products.stockStatus })\n .from(products)\n .where(eq(products.id, target.productId))\n .limit(1);\n return row === undefined ? undefined : row.status;\n}\n\n/**\n * Скільки точок видачі активні. Одна точка — розкладка по складах не\n * показується взагалі, тож це число вирішує форму блока наявності.\n */\nexport async function loadActivePickupPointsCount(\n db: ActorDb,\n): Promise<number> {\n const [row] = await db\n .select({ total: count() })\n .from(pickupPoints)\n .where(eq(pickupPoints.isActive, true));\n\n return Number(row?.total ?? 0);\n}\n","import { productModifications } from 'simplycms/schema';\nimport type { ProductModification } from 'simplycms/schema/types';\nimport { toImageList } from './product';\n\n/** Модифікація для картки товару (форма, яку читає `useModificationData`). */\nexport const modificationColumns = {\n id: productModifications.id,\n product_id: productModifications.productId,\n slug: productModifications.slug,\n name: productModifications.name,\n sku: productModifications.sku,\n is_default: productModifications.isDefault,\n sort_order: productModifications.sortOrder,\n stock_status: productModifications.stockStatus,\n images: productModifications.images,\n};\n\nexport type ModificationRow = {\n id: ProductModification['id'];\n product_id: ProductModification['productId'];\n slug: ProductModification['slug'];\n name: ProductModification['name'];\n sku: ProductModification['sku'];\n is_default: ProductModification['isDefault'];\n sort_order: ProductModification['sortOrder'];\n stock_status: ProductModification['stockStatus'];\n images: string[];\n};\n\n/** Нормалізує `images` модифікації тим самим правилом, що й у товару. */\nexport function toModificationRow(row: {\n id: string;\n product_id: string;\n slug: string;\n name: string;\n sku: string | null;\n is_default: boolean;\n sort_order: number;\n stock_status: ProductModification['stockStatus'];\n images: unknown;\n}): ModificationRow {\n return { ...row, images: toImageList(row.images) };\n}\n\n/**\n * Скорочена модифікація для списків каталогу: більше нічого й не треба —\n * список показує ціну ОДНІЄЇ модифікації за замовчуванням, а вибрати її\n * можна рівно за цими двома полями.\n */\nexport const listModificationColumns = {\n id: productModifications.id,\n product_id: productModifications.productId,\n is_default: productModifications.isDefault,\n sort_order: productModifications.sortOrder,\n};\n","import { and, eq } from 'drizzle-orm';\nimport {\n productModifications,\n productPrices,\n productPropertyValues,\n products,\n propertyOptions,\n sectionProperties,\n sections,\n} from 'simplycms/schema';\nimport type { PriceEntry } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport {\n productColumns,\n toImageList,\n type ProductRow,\n} from './entities/product';\nimport {\n modificationColumns,\n toModificationRow,\n type ModificationRow,\n} from './entities/modification';\nimport { priceColumns, toPriceEntry } from './entities/price';\nimport { sectionRefColumns, type SectionRef } from './entities/section';\nimport { propertyValueColumns, toPropertyValueRow } from './property-values';\nimport type { ProductPropertyValueRow } from './property-values';\n\n/** Товар сторінки картки разом з усіма приєднаними гілками. */\nexport type ProductDetailRow = ProductRow & {\n sections: SectionRef | null;\n product_modifications: ModificationRow[];\n product_prices: PriceEntry[];\n product_property_values: ProductPropertyValueRow[];\n};\n\n/**\n * Товар за slug — з розділом, модифікаціями, цінами й характеристиками.\n *\n * 🔴 `is_active = true` тут ОБОВʼЯЗКОВИЙ, хоч у старому коді його не було:\n * без нього чернетка товару відкривалася прямим посиланням і потрапляла в\n * JSON-LD. Клієнтський запит картки цей предикат мав завжди — тобто SSR і\n * гідрація давали різний результат на тому самому URL.\n */\nexport async function loadProduct(\n db: ActorDb,\n slug: string,\n): Promise<ProductDetailRow | null> {\n const [row] = await db\n .select({ product: productColumns, section: sectionRefColumns })\n .from(products)\n .leftJoin(sections, eq(products.sectionId, sections.id))\n .where(and(eq(products.slug, slug), eq(products.isActive, true)))\n .limit(1);\n\n if (!row) return null;\n\n // Послідовно — причина та сама, що в `./products`: одне зʼєднання.\n const productId = row.product.id;\n const modificationRows = await db\n .select(modificationColumns)\n .from(productModifications)\n .where(eq(productModifications.productId, productId));\n const priceRows = await db\n .select(priceColumns)\n .from(productPrices)\n .where(eq(productPrices.productId, productId));\n const propertyValueRows = await db\n .select(propertyValueColumns)\n .from(productPropertyValues)\n .leftJoin(\n propertyOptions,\n eq(productPropertyValues.optionId, propertyOptions.id),\n )\n .leftJoin(\n sectionProperties,\n eq(productPropertyValues.propertyId, sectionProperties.id),\n )\n .where(eq(productPropertyValues.productId, productId));\n\n return {\n ...row.product,\n images: toImageList(row.product.images),\n // `leftJoin` без збігу дає рядок із порожнім `id` — розділ у товару\n // необовʼязковий (FK `on delete set null`), тож перевіряємо явно.\n sections: row.section?.id ? row.section : null,\n product_modifications: modificationRows.map(toModificationRow),\n product_prices: priceRows.map(toPriceEntry),\n product_property_values: propertyValueRows.map(toPropertyValueRow),\n };\n}\n","import { and, desc, eq, inArray } from 'drizzle-orm';\nimport {\n productModifications,\n productPrices,\n products,\n sections,\n} from 'simplycms/schema';\nimport type { PriceEntry } from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport { toImageList } from './entities/product';\nimport { listModificationColumns } from './entities/modification';\nimport { groupPricesByProduct, priceColumns } from './entities/price';\n\n/** Модифікація в рядку списку — рівно те, чим обирається ціна за замовчуванням. */\nexport interface ProductListModification {\n id: string;\n is_default: boolean;\n sort_order: number;\n}\n\n/**\n * Рядок списку каталогу. Вузький навмисно: назовні їде вже DTO\n * (`toProductListItem`), тож повний товар тут був би трафіком у нікуди.\n */\nexport interface ProductListRow {\n id: string;\n slug: string;\n name: string;\n images: string[];\n has_modifications: boolean | null;\n sections: { slug: string } | null;\n product_modifications: ProductListModification[];\n product_prices: PriceEntry[];\n}\n\n/**\n * Список товарів каталогу — цілком або звужений розділом.\n *\n * 🔴 Три запити, а не запит на товар: модифікації й ціни тягнуться одним\n * `inArray` по всіх знайдених товарах. Так само свідомо НЕ один запит із\n * join-ом: join на дві колекції розмножив би рядки товару m×n, і збирати їх\n * назад довелося б у памʼяті — тобто той самий обсяг роботи, але з дублями\n * у відповіді БД.\n *\n * 🔴 `is_active = true` — обовʼязковий предикат видимості (пояснення — у\n * `./sections`). Розділ у фільтрі не робить його зайвим: неактивний товар\n * лишається в активному розділі.\n */\nexport async function loadProductList(\n db: ActorDb,\n sectionId?: string,\n): Promise<ProductListRow[]> {\n const visible = sectionId\n ? and(eq(products.isActive, true), eq(products.sectionId, sectionId))\n : eq(products.isActive, true);\n\n const rows = await db\n .select({\n id: products.id,\n slug: products.slug,\n name: products.name,\n images: products.images,\n has_modifications: products.hasModifications,\n section_slug: sections.slug,\n })\n .from(products)\n .leftJoin(sections, eq(products.sectionId, sections.id))\n .where(visible)\n .orderBy(desc(products.createdAt));\n\n if (rows.length === 0) return [];\n\n // 🔴 Запити ПОСЛІДОВНІ, а не `Promise.all`. Транзакція живе на ОДНОМУ\n // зʼєднанні, тож паралелити нічого: драйвер усе одно вишикує їх у чергу,\n // а `pg` таке використання вже позначив застарілим (прибирається в pg@9).\n const ids = rows.map((row) => row.id);\n const modificationRows = await db\n .select(listModificationColumns)\n .from(productModifications)\n .where(inArray(productModifications.productId, ids));\n const priceRows = await db\n .select(priceColumns)\n .from(productPrices)\n .where(inArray(productPrices.productId, ids));\n\n const modificationsByProduct: Record<string, ProductListModification[]> = {};\n for (const modification of modificationRows) {\n (modificationsByProduct[modification.product_id] ??= []).push({\n id: modification.id,\n is_default: modification.is_default,\n sort_order: modification.sort_order,\n });\n }\n const pricesByProduct = groupPricesByProduct(priceRows);\n\n return rows.map((row) => ({\n id: row.id,\n slug: row.slug,\n name: row.name,\n images: toImageList(row.images),\n has_modifications: row.has_modifications,\n sections: row.section_slug === null ? null : { slug: row.section_slug },\n product_modifications: modificationsByProduct[row.id] ?? [],\n product_prices: pricesByProduct[row.id] ?? [],\n }));\n}\n","import { propertyOptions, sectionProperties } from 'simplycms/schema';\nimport type { PropertyOption, SectionProperty } from 'simplycms/schema/types';\n\n/**\n * Значення довільного jsonb.\n *\n * 🔴 Оголошено локально, а не взято з генерату PostgREST: нового серверного\n * коду той генерат більше не стосується, а форма JSON від джерела типів не\n * залежить. Тип структурний, тож рядок лишається сумісним зі сторінками,\n * які ще типізовані старим `Tables<…>`.\n */\nexport type JsonValue =\n string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\n/** Мапа select-а характеристики. */\nexport const propertyColumns = {\n id: sectionProperties.id,\n section_id: sectionProperties.sectionId,\n name: sectionProperties.name,\n slug: sectionProperties.slug,\n property_type: sectionProperties.propertyType,\n is_required: sectionProperties.isRequired,\n is_filterable: sectionProperties.isFilterable,\n has_page: sectionProperties.hasPage,\n sort_order: sectionProperties.sortOrder,\n options: sectionProperties.options,\n created_at: sectionProperties.createdAt,\n};\n\nexport type PropertyRow = {\n id: SectionProperty['id'];\n section_id: SectionProperty['sectionId'];\n name: SectionProperty['name'];\n slug: SectionProperty['slug'];\n property_type: SectionProperty['propertyType'];\n is_required: SectionProperty['isRequired'];\n is_filterable: SectionProperty['isFilterable'];\n has_page: SectionProperty['hasPage'];\n sort_order: SectionProperty['sortOrder'];\n options: JsonValue | null;\n created_at: SectionProperty['createdAt'];\n};\n\n/**\n * Єдиний каст `unknown → JsonValue` у шарі.\n *\n * Колонка `options` — вільний jsonb адмінки; вітрина її не читає, але тип\n * сторінки вимагає поля, тож рядок проходить через одну явну точку, а не\n * через каст на кожному місці використання.\n */\nexport function toPropertyRow(\n row: Omit<PropertyRow, 'options'> & { options: unknown },\n): PropertyRow {\n return { ...row, options: (row.options ?? null) as JsonValue | null };\n}\n\n/** Мапа select-а опції характеристики. */\nexport const optionColumns = {\n id: propertyOptions.id,\n property_id: propertyOptions.propertyId,\n name: propertyOptions.name,\n slug: propertyOptions.slug,\n sort_order: propertyOptions.sortOrder,\n description: propertyOptions.description,\n image_url: propertyOptions.imageUrl,\n meta_title: propertyOptions.metaTitle,\n meta_description: propertyOptions.metaDescription,\n created_at: propertyOptions.createdAt,\n};\n\nexport type OptionRow = {\n id: PropertyOption['id'];\n property_id: PropertyOption['propertyId'];\n name: PropertyOption['name'];\n slug: PropertyOption['slug'];\n sort_order: PropertyOption['sortOrder'];\n description: PropertyOption['description'];\n image_url: PropertyOption['imageUrl'];\n meta_title: PropertyOption['metaTitle'];\n meta_description: PropertyOption['metaDescription'];\n created_at: PropertyOption['createdAt'];\n};\n","import { and, asc, eq, inArray } from 'drizzle-orm';\nimport { propertyOptions, sectionProperties } from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport {\n optionColumns,\n propertyColumns,\n toPropertyRow,\n type OptionRow,\n type PropertyRow,\n} from './entities/property';\n\n/** Характеристика разом з її опціями — форма, яку чекає сторінка. */\nexport type PropertyWithOptions = PropertyRow & {\n property_options: OptionRow[];\n};\n\n/**\n * Характеристики, що мають публічну сторінку.\n *\n * 🔴 `has_page` — теж предикат видимості, не менш обовʼязковий за `is_active`\n * (пояснення моделі — у `./sections`): характеристика без сторінки не має\n * потрапляти ні в перелік, ні у відкриття за прямим посиланням.\n */\nexport async function loadProperties(\n db: ActorDb,\n): Promise<PropertyWithOptions[]> {\n const rows = await db\n .select(propertyColumns)\n .from(sectionProperties)\n .where(eq(sectionProperties.hasPage, true))\n .orderBy(asc(sectionProperties.sortOrder), asc(sectionProperties.name));\n\n return withOptions(db, rows.map(toPropertyRow));\n}\n\n/** Характеристика за slug — лише така, що має сторінку. */\nexport async function loadPropertyBySlug(\n db: ActorDb,\n slug: string,\n): Promise<PropertyWithOptions | null> {\n const [row] = await db\n .select(propertyColumns)\n .from(sectionProperties)\n .where(\n and(\n eq(sectionProperties.slug, slug),\n eq(sectionProperties.hasPage, true),\n ),\n )\n .limit(1);\n\n if (!row) return null;\n\n const [withAll] = await withOptions(db, [toPropertyRow(row)]);\n return withAll;\n}\n\n/**\n * Доклеює опції одним запитом по всіх характеристиках.\n *\n * 🔴 Саме `inArray`, а не запит на характеристику: сторінка переліку показує\n * їх усі одразу, тож поділ на запити дав би рівно ту кількість раундтрипів,\n * скільки характеристик завела адмінка.\n */\nasync function withOptions(\n db: ActorDb,\n rows: PropertyRow[],\n): Promise<PropertyWithOptions[]> {\n if (rows.length === 0) return [];\n\n const optionRows = await db\n .select(optionColumns)\n .from(propertyOptions)\n .where(\n inArray(\n propertyOptions.propertyId,\n rows.map((row) => row.id),\n ),\n )\n .orderBy(asc(propertyOptions.sortOrder));\n\n const byProperty: Record<string, OptionRow[]> = {};\n for (const option of optionRows) {\n (byProperty[option.property_id] ??= []).push(option);\n }\n\n return rows.map((row) => ({\n ...row,\n property_options: byProperty[row.id] ?? [],\n }));\n}\n","import { and, eq, exists, or, sql } from 'drizzle-orm';\nimport {\n modificationPropertyValues,\n productModifications,\n productPropertyValues,\n products,\n propertyOptions,\n sectionProperties,\n} from 'simplycms/schema';\nimport type { ActorDb } from './db';\nimport { loadCatalogProductsWhere } from './catalog-products';\nimport type { CatalogProductRow } from './entities/catalog-product';\nimport {\n optionColumns,\n propertyColumns,\n toPropertyRow,\n type OptionRow,\n type PropertyRow,\n} from './entities/property';\n\nexport interface PropertyOptionPageData {\n property: PropertyRow;\n option: OptionRow;\n /** Товари вже з модифікаціями й цінами — картка інакше показала б порожньо. */\n products: CatalogProductRow[];\n}\n\n/**\n * Сторінка значення характеристики: сама характеристика, її опція й товари.\n *\n * 🔴 Було три послідовні запити (характеристика → опція → товари), хоча\n * перші два — це один join: опція шукається за `property_id`, який той самий\n * запит і повертає. Лишилось два раундтрипи, і другий залежить від першого\n * по суті, а не через форму коду.\n */\nexport async function loadPropertyOption(\n db: ActorDb,\n propertySlug: string,\n optionSlug: string,\n): Promise<PropertyOptionPageData | null> {\n const [row] = await db\n .select({ property: propertyColumns, option: optionColumns })\n .from(sectionProperties)\n .innerJoin(\n propertyOptions,\n eq(propertyOptions.propertyId, sectionProperties.id),\n )\n .where(\n and(\n eq(sectionProperties.slug, propertySlug),\n // Предикат видимості — див. `./properties`.\n eq(sectionProperties.hasPage, true),\n eq(propertyOptions.slug, optionSlug),\n ),\n )\n .limit(1);\n\n if (!row) return null;\n\n return {\n property: toPropertyRow(row.property),\n option: row.option,\n products: await loadProductsByOption(db, row.option.id),\n };\n}\n\n/**\n * Товари, у яких опція стоїть на самому товарі АБО на будь-якій його\n * модифікації.\n *\n * 🔴 Обидва рівні, хоч старий серверний запит брав лише модифікаційний:\n * клієнтський запит тієї самої сторінки завжди обʼєднував два рівні, тож\n * SSR-розмітка й гідрація показували різні набори товарів.\n *\n * 🔴 Два `exists`, а не два запити з обʼєднанням id у памʼяті: старий\n * клієнтський варіант робив саме так і на великій опції вивалював у\n * `in (…)` список ідентифікаторів довжиною з пів каталогу.\n */\nasync function loadProductsByOption(\n db: ActorDb,\n optionId: string,\n): Promise<CatalogProductRow[]> {\n const onProduct = db\n .select({ marker: sql`1` })\n .from(productPropertyValues)\n .where(\n and(\n eq(productPropertyValues.productId, products.id),\n eq(productPropertyValues.optionId, optionId),\n ),\n );\n\n const onModification = db\n .select({ marker: sql`1` })\n .from(modificationPropertyValues)\n .innerJoin(\n productModifications,\n eq(modificationPropertyValues.modificationId, productModifications.id),\n )\n .where(\n and(\n eq(productModifications.productId, products.id),\n eq(modificationPropertyValues.optionId, optionId),\n ),\n );\n\n // Предикат видимості доклеює сам `loadCatalogProductsWhere`.\n return loadCatalogProductsWhere(\n db,\n or(exists(onProduct), exists(onModification)),\n );\n}\n","import { asc, eq } from 'drizzle-orm';\nimport {\n shippingMethods,\n shippingRates,\n shippingZones,\n} from 'simplycms/schema';\nimport type {\n ShippingMethod,\n ShippingRate,\n ShippingZone,\n} from 'simplycms/contracts';\nimport type { ActorDb } from './db';\nimport type { JsonValue } from './entities/property';\nimport { loadPickupPoints, type PickupPointRow } from './pickup-points';\n\n/**\n * Довідникові рядки доставки у формі, яку МОЖНА віддати serverFn-ом.\n *\n * 🔴 Різниця з контрактом рівно одна: `config` звужений із\n * `Record<string, unknown>` до JSON. Валідатор серіалізації TanStack Start\n * відкидає `unknown` — і правильно робить: «щось, що не вміє їхати по\n * дроту» в payload-і вітрини не має бути. Обидва рядки лишаються\n * присвоюваними доменним типам, тож `resolveShippingRate` бере їх як є.\n */\nexport type ShippingMethodRow = Omit<ShippingMethod, 'config'> & {\n config: Record<string, JsonValue>;\n};\n\n/** Зона без опційного `rates`: тарифи їдуть окремим списком, не вкладеними. */\nexport type ShippingZoneRow = Omit<ShippingZone, 'rates'>;\n\nexport type ShippingRateRow = Omit<\n ShippingRate,\n 'config' | 'method' | 'zone'\n> & {\n config: Record<string, JsonValue>;\n};\n\n/**\n * Довідники доставки у формі, яку споживає форма чекауту.\n *\n * 🔴 Одна структура, а не чотири окремі виклики: способи, зони, тарифи й\n * точки видачі потрібні формі ОДНОЧАСНО, і зібрані з різних знімків БД вони\n * дали б неможливий стан (тариф на зону, якої в списку вже немає).\n */\nexport interface ShippingDirectory {\n methods: ShippingMethodRow[];\n zones: ShippingZoneRow[];\n rates: ShippingRateRow[];\n pickupPoints: PickupPointRow[];\n}\n\n/**\n * Публічні довідники доставки — читаються під `app_user` БЕЗ ідентичності.\n *\n * 🔴 Фільтр `is_active` тут ОБОВʼЯЗКОВИЙ і є частиною контракту, а не\n * оптимізацією. RLS на цих таблицях не ввімкнено (грант `select` для\n * `app_user` — `0002_grants.sql`), політики «публічне читання» в новій\n * моделі немає, тож видимість чернеток тримає рівно цей предикат. Забути\n * його означає показати покупцю вимкнений спосіб доставки — і дати оформити\n * замовлення на неіснуючий тариф.\n */\nexport async function loadShippingDirectory(\n db: ActorDb,\n): Promise<ShippingDirectory> {\n // Послідовно: усі чотири вибірки живуть в одній транзакції актора.\n const methods = await loadShippingMethods(db);\n const zones = await loadShippingZones(db);\n const rates = await loadShippingRates(db);\n const points = await loadPickupPoints(db);\n\n return { methods, zones, rates, pickupPoints: points };\n}\n\n/** Активні способи доставки в порядку показу. */\nexport async function loadShippingMethods(\n db: ActorDb,\n): Promise<ShippingMethodRow[]> {\n const rows = await db\n .select()\n .from(shippingMethods)\n .where(eq(shippingMethods.isActive, true))\n .orderBy(asc(shippingMethods.sortOrder));\n\n return rows.map((row) => ({\n id: row.id,\n code: row.code,\n name: row.name,\n description: row.description,\n type: row.type,\n plugin_name: row.pluginName,\n is_active: row.isActive,\n sort_order: row.sortOrder,\n config: (row.config ?? {}) as Record<string, JsonValue>,\n icon: row.icon,\n created_at: row.createdAt,\n updated_at: row.updatedAt,\n }));\n}\n\n/** Активні зони доставки — за ними домен резолвить місто покупця. */\nexport async function loadShippingZones(\n db: ActorDb,\n): Promise<ShippingZoneRow[]> {\n const rows = await db\n .select()\n .from(shippingZones)\n .where(eq(shippingZones.isActive, true))\n .orderBy(asc(shippingZones.sortOrder));\n\n return rows.map((row) => ({\n id: row.id,\n name: row.name,\n description: row.description,\n cities: row.cities ?? [],\n regions: row.regions ?? [],\n is_active: row.isActive,\n is_default: row.isDefault,\n sort_order: row.sortOrder,\n created_at: row.createdAt,\n }));\n}\n\n/**\n * Активні тарифи.\n *\n * 🔴 Грошові колонки — `numeric`, тобто драйвер віддає їх РЯДКАМИ. Контракт\n * `ShippingRate` обіцяє числа, і без явного `Number` порівняння з порогом\n * (`subtotal >= free_from_amount`) мовчки стало б лексикографічним.\n */\nexport async function loadShippingRates(\n db: ActorDb,\n): Promise<ShippingRateRow[]> {\n const rows = await db\n .select()\n .from(shippingRates)\n .where(eq(shippingRates.isActive, true))\n .orderBy(asc(shippingRates.sortOrder));\n\n return rows.map((row) => ({\n id: row.id,\n method_id: row.methodId,\n zone_id: row.zoneId,\n name: row.name,\n calculation_type: row.calculationType,\n base_cost: Number(row.baseCost),\n per_kg_cost: toNumberOrNull(row.perKgCost),\n min_weight: toNumberOrNull(row.minWeight),\n free_from_amount: toNumberOrNull(row.freeFromAmount),\n min_order_amount: toNumberOrNull(row.minOrderAmount),\n max_order_amount: toNumberOrNull(row.maxOrderAmount),\n estimated_days: row.estimatedDays,\n is_active: row.isActive,\n sort_order: row.sortOrder,\n config: (row.config ?? {}) as Record<string, JsonValue>,\n created_at: row.createdAt,\n }));\n}\n\n/** `numeric` → число або `null` (порожня колонка лишається порожньою). */\nfunction toNumberOrNull(value: string | null): number | null {\n return value === null ? null : Number(value);\n}\n","import { asc, desc, eq } from 'drizzle-orm';\nimport { products, sections } from 'simplycms/schema';\nimport type { ActorDb } from './db';\n\n/**\n * Дані для `/sitemap.xml` — рівно те, з чого будуються URL-и (В2-К1а).\n *\n * 🔴 Вибірка навмисно вузька: sitemap не рендерить ні цін, ні картинок, тож\n * тягнути повний рядок товару означало б платити трафіком БД за поля, які\n * ніхто не прочитає. Пошуковий робот приходить регулярно — це не разовий\n * запит.\n */\n\n/** Розділ каталогу в sitemap. */\nexport interface SitemapSection {\n readonly slug: string;\n readonly updated_at: string;\n}\n\n/** Товар у sitemap разом зі slug-ом розділу, з якого будується URL. */\nexport interface SitemapProduct {\n readonly slug: string;\n readonly updated_at: string;\n /** `null` — товар без розділу; URL тоді йде під технічним `products`. */\n readonly section_slug: string | null;\n}\n\nexport interface SitemapData {\n readonly sections: SitemapSection[];\n readonly products: SitemapProduct[];\n}\n\n/**\n * Активні розділи й товари для sitemap.\n *\n * 🔴 `is_active` — обовʼязковий предикат в ОБОХ запитах (пояснення про модель\n * видимості — у `./sections`). Тут ціна помилки навіть вища, ніж на сторінці:\n * неактивний товар у sitemap — це запрошення робота на 404, і виправити\n * наслідок після індексації складніше, ніж не пустити його туди.\n *\n * 🔴 Помилка запиту НЕ ковтається — жодного `try/catch` тут немає навмисно.\n * Sitemap із самих лише статичних URL виглядає як успіх, а SEO-інтерсептор\n * зафіксував би цю неправду в CDN на годину (див. `storefront-routes/seo`).\n */\nexport async function loadSitemapData(db: ActorDb): Promise<SitemapData> {\n const sectionRows = await db\n .select({ slug: sections.slug, updated_at: sections.updatedAt })\n .from(sections)\n .where(eq(sections.isActive, true))\n .orderBy(asc(sections.sortOrder));\n\n // Розділ підтягується `leftJoin`-ом БЕЗ фільтра активності: URL товару має\n // ту саму форму, що й на сторінці каталогу, а «активність розділу» — окреме\n // правило показу, яке тут звузило б вибірку до `products` мовчки.\n const productRows = await db\n .select({\n slug: products.slug,\n updated_at: products.updatedAt,\n section_slug: sections.slug,\n })\n .from(products)\n .leftJoin(sections, eq(products.sectionId, sections.id))\n .where(eq(products.isActive, true))\n .orderBy(desc(products.updatedAt));\n\n return { sections: sectionRows, products: productRows };\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
3
+ import { cn } from 'simplycms/ui/utils';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ // src/ui/tabs.tsx
7
+ var Tabs = TabsPrimitive.Root;
8
+ var TabsList = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9
+ TabsPrimitive.List,
10
+ {
11
+ ref,
12
+ className: cn(
13
+ "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
14
+ className
15
+ ),
16
+ ...props
17
+ }
18
+ ));
19
+ TabsList.displayName = TabsPrimitive.List.displayName;
20
+ var TabsTrigger = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
21
+ TabsPrimitive.Trigger,
22
+ {
23
+ ref,
24
+ className: cn(
25
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
26
+ className
27
+ ),
28
+ ...props
29
+ }
30
+ ));
31
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
32
+ var TabsContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
33
+ TabsPrimitive.Content,
34
+ {
35
+ ref,
36
+ className: cn(
37
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
38
+ className
39
+ ),
40
+ ...props
41
+ }
42
+ ));
43
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
44
+
45
+ export { Tabs, TabsContent, TabsList, TabsTrigger };
46
+ //# sourceMappingURL=chunk-BDR6DRJX.js.map
47
+ //# sourceMappingURL=chunk-BDR6DRJX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/tabs.tsx"],"names":[],"mappings":";;;;;;AAKA,IAAM,IAAA,GAAqB,aAAA,CAAA;AAE3B,IAAM,QAAA,GAAiB,iBAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAe,aAAA,CAAA,IAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4FAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,QAAA,CAAS,cAA4B,aAAA,CAAA,IAAA,CAAK,WAAA;AAE1C,IAAM,WAAA,GAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAe,aAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qYAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4B,aAAA,CAAA,OAAA,CAAQ,WAAA;AAEhD,IAAM,WAAA,GAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAe,aAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,iIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4B,aAAA,CAAA,OAAA,CAAQ,WAAA","file":"chunk-BDR6DRJX.js","sourcesContent":["import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from 'simplycms/ui/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"]}
@@ -0,0 +1,36 @@
1
+ import { createServerFn } from '@tanstack/react-start';
2
+ import { getRequest } from '@tanstack/react-start/server';
3
+ import { readSessionSubject } from 'simplycms/auth';
4
+ import { withStorefrontDb, loadDefaultUserCategoryId, loadDefaultPriceTypeId, withCustomerDb, loadUserCategoryId, loadUserPriceTypeId, loadDiscountGroups } from 'simplycms/storefront/loaders';
5
+
6
+ // src/core/lib/discounts.ts
7
+ var getDiscountEnvironment = createServerFn({ method: "GET" }).handler(
8
+ async () => {
9
+ const subject = await readSessionSubject(getRequest().headers);
10
+ const fallback = await withStorefrontDb(async (db) => ({
11
+ priceTypeId: await loadDefaultPriceTypeId(db),
12
+ categoryId: await loadDefaultUserCategoryId(db)
13
+ }));
14
+ const personal = subject ? await withCustomerDb(subject.userId, async (db) => ({
15
+ priceTypeId: await loadUserPriceTypeId(db, subject.userId),
16
+ categoryId: await loadUserCategoryId(db, subject.userId)
17
+ })) : null;
18
+ const priceTypeId = personal?.priceTypeId ?? fallback.priceTypeId;
19
+ const groups = priceTypeId ? await withStorefrontDb((db) => loadDiscountGroups(db, priceTypeId)) : [];
20
+ return {
21
+ groups,
22
+ actor: {
23
+ userId: subject?.userId ?? null,
24
+ // Категорія за замовчуванням лишається запасним варіантом і для
25
+ // залогіненого: профіль без категорії інакше випав би з роздрібної
26
+ // акції, у яку гість потрапляє.
27
+ userCategoryId: personal?.categoryId ?? fallback.categoryId,
28
+ isLoggedIn: subject !== null
29
+ }
30
+ };
31
+ }
32
+ );
33
+
34
+ export { getDiscountEnvironment };
35
+ //# sourceMappingURL=chunk-BSISQVY4.js.map
36
+ //# sourceMappingURL=chunk-BSISQVY4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/lib/discounts.ts"],"names":[],"mappings":";;;;;;AA4CO,IAAM,yBAAyB,cAAA,CAAe,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,OAAA;AAAA,EACtE,YAA0C;AACxC,IAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB,UAAA,GAAa,OAAO,CAAA;AAE7D,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,OAAO,EAAA,MAAQ;AAAA,MACrD,WAAA,EAAa,MAAM,sBAAA,CAAuB,EAAE,CAAA;AAAA,MAC5C,UAAA,EAAY,MAAM,yBAAA,CAA0B,EAAE;AAAA,KAChD,CAAE,CAAA;AAEF,IAAA,MAAM,WAAW,OAAA,GACb,MAAM,eAAe,OAAA,CAAQ,MAAA,EAAQ,OAAO,EAAA,MAAQ;AAAA,MAClD,WAAA,EAAa,MAAM,mBAAA,CAAoB,EAAA,EAAI,QAAQ,MAAM,CAAA;AAAA,MACzD,UAAA,EAAY,MAAM,kBAAA,CAAmB,EAAA,EAAI,QAAQ,MAAM;AAAA,MACvD,CAAA,GACF,IAAA;AAEJ,IAAA,MAAM,WAAA,GAAc,QAAA,EAAU,WAAA,IAAe,QAAA,CAAS,WAAA;AACtD,IAAA,MAAM,MAAA,GAAS,WAAA,GACX,MAAM,gBAAA,CAAiB,CAAC,EAAA,KAAO,kBAAA,CAAmB,EAAA,EAAI,WAAW,CAAC,CAAA,GAClE,EAAC;AAEL,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA;AAAA;AAAA;AAAA,QAI3B,cAAA,EAAgB,QAAA,EAAU,UAAA,IAAc,QAAA,CAAS,UAAA;AAAA,QACjD,YAAY,OAAA,KAAY;AAAA;AAC1B,KACF;AAAA,EACF;AACF","file":"chunk-BSISQVY4.js","sourcesContent":["import { createServerFn } from '@tanstack/react-start';\nimport { getRequest } from '@tanstack/react-start/server';\nimport { readSessionSubject } from 'simplycms/auth';\nimport type { DiscountGroup } from 'simplycms/contracts';\nimport {\n loadDefaultPriceTypeId,\n loadDefaultUserCategoryId,\n loadDiscountGroups,\n loadUserCategoryId,\n loadUserPriceTypeId,\n withCustomerDb,\n withStorefrontDb,\n} from 'simplycms/storefront/loaders';\n\n/** Хто питає ціну — вхід рушія знижок, який не залежить від кошика. */\nexport interface DiscountActor {\n userId: string | null;\n userCategoryId: string | null;\n isLoggedIn: boolean;\n}\n\n/** Правила знижок і актор — усе, що потрібно домену, крім самої позиції. */\nexport interface DiscountEnvironment {\n groups: DiscountGroup[];\n actor: DiscountActor;\n}\n\n/**\n * Правила знижок і категорія покупця — ОДИН серверний виклик.\n *\n * 🔴 Категорія НЕ приймається параметром і ніколи ним не стане: клієнт, який\n * називає свою категорію, називає й свою знижку. Залогінений покупець читає\n * її під власним актором (`profiles_select_own`), анонім дістає категорію за\n * замовчуванням — і жодного шляху, яким браузер міг би підмінити одну на іншу.\n *\n * 🔴 Рахує ціну домен, не цей виклик: сервер віддає ПРАВИЛА. Кількість і сума\n * кошика живуть у клієнті, тож обчислення тут дало б знижку від неповного\n * контексту (див. `simplycms/storefront/loaders/discounts`).\n *\n * 🔴 Модуль містить РІВНО один експорт-serverFn і жодної звичайної функції:\n * трансформація Start вирізає тіло хендлера разом із серверними імпортами, а\n * живий не-serverFn експорт тримав би їх — і затягнув би пул Postgres у\n * клієнтський бандл (той самий урок, що в `./price-type`).\n */\nexport const getDiscountEnvironment = createServerFn({ method: 'GET' }).handler(\n async (): Promise<DiscountEnvironment> => {\n const subject = await readSessionSubject(getRequest().headers);\n\n const fallback = await withStorefrontDb(async (db) => ({\n priceTypeId: await loadDefaultPriceTypeId(db),\n categoryId: await loadDefaultUserCategoryId(db),\n }));\n\n const personal = subject\n ? await withCustomerDb(subject.userId, async (db) => ({\n priceTypeId: await loadUserPriceTypeId(db, subject.userId),\n categoryId: await loadUserCategoryId(db, subject.userId),\n }))\n : null;\n\n const priceTypeId = personal?.priceTypeId ?? fallback.priceTypeId;\n const groups = priceTypeId\n ? await withStorefrontDb((db) => loadDiscountGroups(db, priceTypeId))\n : [];\n\n return {\n groups,\n actor: {\n userId: subject?.userId ?? null,\n // Категорія за замовчуванням лишається запасним варіантом і для\n // залогіненого: профіль без категорії інакше випав би з роздрібної\n // акції, у яку гість потрапляє.\n userCategoryId: personal?.categoryId ?? fallback.categoryId,\n isLoggedIn: subject !== null,\n },\n };\n },\n);\n"]}