orionplace-react 0.1.0 → 0.2.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 (633) hide show
  1. package/README.md +276 -35
  2. package/bin/orionplace-react.mjs +4 -1
  3. package/package.json +18 -5
  4. package/runtime/app.d.mts +6 -0
  5. package/runtime/app.mjs +48 -0
  6. package/runtime/marketplace.d.mts +13 -8
  7. package/runtime/marketplace.mjs +287 -211
  8. package/src/project-readme.mjs +95 -35
  9. package/src/setup.mjs +36 -13
  10. package/templates/app/StorefrontShell.tsx +435 -0
  11. package/templates/app/[[...path]]/page.app.tsx +11 -0
  12. package/templates/app/_storefront/ActivityPage.tsx +23 -0
  13. package/templates/app/_storefront/AddressesPage.tsx +29 -0
  14. package/templates/app/_storefront/AppRoutes.tsx +182 -0
  15. package/templates/app/_storefront/ArticlePage.tsx +81 -0
  16. package/templates/app/_storefront/CartPage.tsx +53 -0
  17. package/templates/app/_storefront/CatalogPage.tsx +37 -0
  18. package/templates/app/_storefront/CategoryPage.tsx +64 -0
  19. package/templates/app/_storefront/ContactPage.tsx +32 -0
  20. package/templates/app/_storefront/HomePage.tsx +140 -0
  21. package/templates/app/_storefront/JournalPage.tsx +36 -0
  22. package/templates/app/_storefront/LogoutPage.tsx +91 -0
  23. package/templates/app/_storefront/ManufacturersPage.tsx +64 -0
  24. package/templates/app/_storefront/OrdersPage.tsx +129 -0
  25. package/templates/app/_storefront/ProductPage.tsx +105 -0
  26. package/templates/app/_storefront/ProfilePage.tsx +75 -0
  27. package/templates/app/_storefront/PromoPage.tsx +66 -0
  28. package/templates/app/_storefront/PromocodesPage.tsx +17 -0
  29. package/templates/app/_storefront/SearchPage.tsx +220 -0
  30. package/templates/app/_storefront/SellersPage.tsx +160 -0
  31. package/templates/app/_storefront/StorefrontErrorRoute.tsx +42 -0
  32. package/templates/app/_storefront/StorefrontPageMetadata.tsx +74 -0
  33. package/templates/app/_storefront/StorefrontPageStatus.tsx +61 -0
  34. package/templates/app/_storefront/StoresPage.tsx +53 -0
  35. package/templates/app/_storefront/SubscriptionsPage.tsx +62 -0
  36. package/templates/app/_storefront/SupportPage.tsx +141 -0
  37. package/templates/app/_storefront/TariffsPage.tsx +180 -0
  38. package/templates/app/_storefront/UnsubscribePage.tsx +29 -0
  39. package/templates/app/_storefront/WalletPage.tsx +78 -0
  40. package/templates/app/_storefront/WishlistPage.tsx +79 -0
  41. package/templates/app/_storefront/storefrontRoutes.tsx +738 -0
  42. package/templates/app/_storefront/useAccountWallet.ts +27 -0
  43. package/templates/app/_storefront/useBlogComments.ts +389 -0
  44. package/templates/app/_storefront/useProductSearch.ts +171 -0
  45. package/templates/app/_storefront/useStorefrontNavigation.ts +36 -0
  46. package/templates/app/activity/page.tsx +9 -0
  47. package/templates/app/addresses/page.tsx +9 -0
  48. package/templates/app/api/[...orionplace]/route.ts +11 -4
  49. package/templates/app/browse/page.tsx +27 -0
  50. package/templates/app/cart/page.tsx +9 -0
  51. package/templates/app/catalog/page.tsx +9 -0
  52. package/templates/app/category/[id]/page.tsx +9 -0
  53. package/templates/app/contact/page.tsx +9 -0
  54. package/templates/app/error.tsx +7 -0
  55. package/templates/app/featured/page.tsx +9 -0
  56. package/templates/app/global-error.tsx +61 -0
  57. package/templates/app/globals.css +50 -2
  58. package/templates/app/journal/[id]/page.tsx +9 -0
  59. package/templates/app/journal/page.tsx +9 -0
  60. package/templates/app/layout.app.tsx +20 -0
  61. package/templates/app/layout.tsx +44 -10
  62. package/templates/app/logout/page.tsx +9 -0
  63. package/templates/app/manufacturers/page.tsx +9 -0
  64. package/templates/app/not-found.tsx +5 -0
  65. package/templates/app/orders/page.tsx +9 -0
  66. package/templates/app/page.module.css +12 -8
  67. package/templates/app/page.tsx +8 -79
  68. package/templates/app/product/[id]/page.tsx +9 -0
  69. package/templates/app/profile/page.tsx +9 -0
  70. package/templates/app/promo/[id]/page.tsx +9 -0
  71. package/templates/app/promocodes/page.tsx +9 -0
  72. package/templates/app/ps3/blog/[...orionplace]/route.ts +13 -0
  73. package/templates/app/sellers/page.tsx +9 -0
  74. package/templates/app/storefront.module.css +406 -0
  75. package/templates/app/stores/page.tsx +9 -0
  76. package/templates/app/subscriptions/page.tsx +9 -0
  77. package/templates/app/tariffs/[slug]/[id]/page.tsx +9 -0
  78. package/templates/app/tariffs/page.tsx +9 -0
  79. package/templates/app/tickets/page.tsx +9 -0
  80. package/templates/app/unsubscribe/page.tsx +9 -0
  81. package/templates/app/wallet/page.tsx +9 -0
  82. package/templates/app/wishlist/page.tsx +9 -0
  83. package/templates/components/orionplace/account/AccountActivity.README.md +70 -0
  84. package/templates/components/orionplace/account/AccountActivity.module.css +16 -0
  85. package/templates/components/orionplace/account/AccountActivity.tsx +94 -0
  86. package/templates/components/orionplace/account/AccountPromocodes.README.md +70 -0
  87. package/templates/components/orionplace/account/AccountPromocodes.module.css +92 -0
  88. package/templates/components/orionplace/account/AccountPromocodes.tsx +257 -0
  89. package/templates/components/orionplace/account/AccountSection.README.md +46 -0
  90. package/templates/components/orionplace/account/AccountSection.module.css +110 -0
  91. package/templates/components/orionplace/account/AccountSection.tsx +109 -0
  92. package/templates/components/orionplace/account/ProfileAvatar.README.md +48 -0
  93. package/templates/components/orionplace/account/ProfileAvatar.module.css +31 -0
  94. package/templates/components/orionplace/account/ProfileAvatar.tsx +138 -0
  95. package/templates/components/orionplace/account/ProfileDeleteAccount.README.md +59 -0
  96. package/templates/components/orionplace/account/ProfileDeleteAccount.module.css +51 -0
  97. package/templates/components/orionplace/account/ProfileDeleteAccount.tsx +171 -0
  98. package/templates/components/orionplace/account/ProfileDetailsForm.README.md +44 -0
  99. package/templates/components/orionplace/account/ProfileDetailsForm.module.css +35 -0
  100. package/templates/components/orionplace/account/ProfileDetailsForm.tsx +178 -0
  101. package/templates/components/orionplace/account/ProfileEmailSettings.README.md +52 -0
  102. package/templates/components/orionplace/account/ProfileEmailSettings.module.css +51 -0
  103. package/templates/components/orionplace/account/ProfileEmailSettings.tsx +276 -0
  104. package/templates/components/orionplace/account/ProfilePasswordForm.README.md +45 -0
  105. package/templates/components/orionplace/account/ProfilePasswordForm.module.css +43 -0
  106. package/templates/components/orionplace/account/ProfilePasswordForm.tsx +227 -0
  107. package/templates/components/orionplace/account/ProfileSignIn.README.md +64 -0
  108. package/templates/components/orionplace/account/ProfileSignIn.module.css +86 -0
  109. package/templates/components/orionplace/account/ProfileSignIn.tsx +463 -0
  110. package/templates/components/orionplace/account/SignInHistory.README.md +52 -0
  111. package/templates/components/orionplace/account/SignInHistory.module.css +81 -0
  112. package/templates/components/orionplace/account/SignInHistory.tsx +231 -0
  113. package/templates/components/orionplace/account/StorefrontLogout.README.md +48 -0
  114. package/templates/components/orionplace/account/StorefrontLogout.module.css +166 -0
  115. package/templates/components/orionplace/account/StorefrontLogout.tsx +73 -0
  116. package/templates/components/orionplace/account/StorefrontProfile.README.md +71 -0
  117. package/templates/components/orionplace/account/StorefrontProfile.module.css +65 -0
  118. package/templates/components/orionplace/account/StorefrontProfile.tsx +189 -0
  119. package/templates/components/orionplace/account/account.module.css +1180 -0
  120. package/templates/components/orionplace/account/profile.module.css +696 -0
  121. package/templates/components/orionplace/address/AddressForm.README.md +152 -0
  122. package/templates/components/orionplace/address/AddressForm.module.css +336 -0
  123. package/templates/components/orionplace/address/AddressForm.tsx +827 -0
  124. package/templates/components/orionplace/address/StorefrontAddresses.README.md +99 -0
  125. package/templates/components/orionplace/address/StorefrontAddresses.module.css +271 -0
  126. package/templates/components/orionplace/address/StorefrontAddresses.tsx +438 -0
  127. package/templates/components/orionplace/banners/MainBanner.README.md +65 -0
  128. package/templates/components/orionplace/banners/MainBanner.module.css +112 -0
  129. package/templates/components/orionplace/banners/MainBanner.tsx +159 -0
  130. package/templates/components/orionplace/blog/BlogArticle.README.md +143 -0
  131. package/templates/components/orionplace/blog/BlogArticle.module.css +304 -0
  132. package/templates/components/orionplace/blog/BlogArticle.tsx +371 -0
  133. package/templates/components/orionplace/blog/BlogCommentForm.README.md +51 -0
  134. package/templates/components/orionplace/blog/BlogCommentForm.module.css +93 -0
  135. package/templates/components/orionplace/blog/BlogCommentForm.tsx +125 -0
  136. package/templates/components/orionplace/blog/BlogComments.README.md +98 -0
  137. package/templates/components/orionplace/blog/BlogComments.module.css +151 -0
  138. package/templates/components/orionplace/blog/BlogComments.tsx +590 -0
  139. package/templates/components/orionplace/blog/BlogPostCard.README.md +51 -0
  140. package/templates/components/orionplace/blog/BlogPostCard.module.css +167 -0
  141. package/templates/components/orionplace/blog/BlogPostCard.tsx +177 -0
  142. package/templates/components/orionplace/blog/BlogPostGroup.README.md +49 -0
  143. package/templates/components/orionplace/blog/BlogPostGroup.module.css +37 -0
  144. package/templates/components/orionplace/blog/BlogPostGroup.tsx +129 -0
  145. package/templates/components/orionplace/blog/StorefrontJournal.README.md +105 -0
  146. package/templates/components/orionplace/blog/StorefrontJournal.module.css +387 -0
  147. package/templates/components/orionplace/blog/StorefrontJournal.tsx +548 -0
  148. package/templates/components/orionplace/branding/BrandLogos.README.md +29 -0
  149. package/templates/components/orionplace/branding/BrandLogos.module.css +7 -0
  150. package/templates/components/orionplace/branding/BrandLogos.tsx +30 -0
  151. package/templates/components/orionplace/cart/CartCheckoutDetails.README.md +92 -0
  152. package/templates/components/orionplace/cart/CartCheckoutDetails.module.css +159 -0
  153. package/templates/components/orionplace/cart/CartCheckoutDetails.tsx +370 -0
  154. package/templates/components/orionplace/cart/CartDeliverySelector.README.md +166 -0
  155. package/templates/components/orionplace/cart/CartDeliverySelector.module.css +105 -0
  156. package/templates/components/orionplace/cart/CartDeliverySelector.tsx +679 -0
  157. package/templates/components/orionplace/cart/CartItemOptions.README.md +172 -0
  158. package/templates/components/orionplace/cart/CartItemOptions.module.css +113 -0
  159. package/templates/components/orionplace/cart/CartItemOptions.tsx +503 -0
  160. package/templates/components/orionplace/cart/CartLineItem.README.md +138 -0
  161. package/templates/components/orionplace/cart/CartLineItem.module.css +57 -0
  162. package/templates/components/orionplace/cart/CartLineItem.tsx +263 -0
  163. package/templates/components/orionplace/cart/CartPreview.README.md +99 -0
  164. package/templates/components/orionplace/cart/CartPreview.module.css +225 -0
  165. package/templates/components/orionplace/cart/CartPreview.tsx +188 -0
  166. package/templates/components/orionplace/cart/DeliveryMap.README.md +65 -0
  167. package/templates/components/orionplace/cart/DeliveryMap.module.css +32 -0
  168. package/templates/components/orionplace/cart/DeliveryMap.tsx +131 -0
  169. package/templates/components/orionplace/cart/StorefrontCart.README.md +281 -0
  170. package/templates/components/orionplace/cart/StorefrontCart.module.css +460 -0
  171. package/templates/components/orionplace/cart/StorefrontCart.tsx +937 -0
  172. package/templates/components/orionplace/catalog/CatalogHeader.README.md +136 -0
  173. package/templates/components/orionplace/catalog/CatalogHeader.module.css +387 -0
  174. package/templates/components/orionplace/catalog/CatalogHeader.tsx +644 -0
  175. package/templates/components/orionplace/catalog/CatalogRepresentative.README.md +68 -0
  176. package/templates/components/orionplace/catalog/CatalogRepresentative.tsx +51 -0
  177. package/templates/components/orionplace/catalog/StorefrontCatalog.README.md +120 -0
  178. package/templates/components/orionplace/catalog/StorefrontCatalog.module.css +179 -0
  179. package/templates/components/orionplace/catalog/StorefrontCatalog.tsx +304 -0
  180. package/templates/components/orionplace/categories/CategoryGroup.README.md +68 -0
  181. package/templates/components/orionplace/categories/CategoryGroup.module.css +110 -0
  182. package/templates/components/orionplace/categories/CategoryGroup.tsx +123 -0
  183. package/templates/components/orionplace/categories/StorefrontCategory.README.md +155 -0
  184. package/templates/components/orionplace/categories/StorefrontCategory.module.css +148 -0
  185. package/templates/components/orionplace/categories/StorefrontCategory.tsx +225 -0
  186. package/templates/components/orionplace/contact/AboutPage.README.md +40 -0
  187. package/templates/components/orionplace/contact/AboutPage.module.css +216 -0
  188. package/templates/components/orionplace/contact/AboutPage.tsx +191 -0
  189. package/templates/components/orionplace/contact/ContactForm.README.md +93 -0
  190. package/templates/components/orionplace/contact/ContactForm.module.css +264 -0
  191. package/templates/components/orionplace/contact/ContactForm.tsx +382 -0
  192. package/templates/components/orionplace/contact/EmailUnsubscribe.README.md +67 -0
  193. package/templates/components/orionplace/contact/EmailUnsubscribe.module.css +94 -0
  194. package/templates/components/orionplace/contact/EmailUnsubscribe.tsx +130 -0
  195. package/templates/components/orionplace/contact/StorefrontContact.README.md +73 -0
  196. package/templates/components/orionplace/contact/StorefrontContact.module.css +101 -0
  197. package/templates/components/orionplace/contact/StorefrontContact.tsx +62 -0
  198. package/templates/components/orionplace/currencies/MainCurrencySwitcher.README.md +37 -0
  199. package/templates/components/orionplace/currencies/MainCurrencySwitcher.tsx +68 -0
  200. package/templates/components/orionplace/events/EventEnrollmentDialog.README.md +108 -0
  201. package/templates/components/orionplace/events/EventEnrollmentDialog.module.css +110 -0
  202. package/templates/components/orionplace/events/EventEnrollmentDialog.tsx +315 -0
  203. package/templates/components/orionplace/events/EventsBlock.README.md +58 -0
  204. package/templates/components/orionplace/events/EventsBlock.module.css +101 -0
  205. package/templates/components/orionplace/events/EventsBlock.tsx +109 -0
  206. package/templates/components/orionplace/locale/MainLanguageSwitcher.README.md +46 -0
  207. package/templates/components/orionplace/locale/MainLanguageSwitcher.module.css +196 -0
  208. package/templates/components/orionplace/locale/MainLanguageSwitcher.tsx +387 -0
  209. package/templates/components/orionplace/manufacturers/ManufacturerIndex.README.md +83 -0
  210. package/templates/components/orionplace/manufacturers/ManufacturerIndex.module.css +271 -0
  211. package/templates/components/orionplace/manufacturers/ManufacturerIndex.tsx +218 -0
  212. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.README.md +122 -0
  213. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.module.css +92 -0
  214. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.tsx +455 -0
  215. package/templates/components/orionplace/orders/OrderDetails.README.md +116 -0
  216. package/templates/components/orionplace/orders/OrderDetails.module.css +730 -0
  217. package/templates/components/orionplace/orders/OrderDetails.tsx +693 -0
  218. package/templates/components/orionplace/orders/OrderPaymentForm.README.md +92 -0
  219. package/templates/components/orionplace/orders/OrderPaymentForm.module.css +105 -0
  220. package/templates/components/orionplace/orders/OrderPaymentForm.tsx +90 -0
  221. package/templates/components/orionplace/orders/StorefrontOrders.README.md +131 -0
  222. package/templates/components/orionplace/orders/StorefrontOrders.module.css +633 -0
  223. package/templates/components/orionplace/orders/StorefrontOrders.tsx +922 -0
  224. package/templates/components/orionplace/payments/PaymentPanel.README.md +114 -0
  225. package/templates/components/orionplace/payments/PaymentPanel.module.css +134 -0
  226. package/templates/components/orionplace/payments/PaymentPanel.tsx +76 -0
  227. package/templates/components/orionplace/products/HoverImageViewer.README.md +62 -0
  228. package/templates/components/orionplace/products/HoverImageViewer.module.css +88 -0
  229. package/templates/components/orionplace/products/HoverImageViewer.tsx +179 -0
  230. package/templates/components/orionplace/products/ProductCard.README.md +152 -0
  231. package/templates/components/orionplace/products/ProductCard.module.css +333 -0
  232. package/templates/components/orionplace/products/ProductCard.tsx +716 -0
  233. package/templates/components/orionplace/products/ProductCardActions.README.md +84 -0
  234. package/templates/components/orionplace/products/ProductCardActions.module.css +146 -0
  235. package/templates/components/orionplace/products/ProductCardActions.tsx +311 -0
  236. package/templates/components/orionplace/products/ProductCardBadges.README.md +44 -0
  237. package/templates/components/orionplace/products/ProductCardBadges.module.css +15 -0
  238. package/templates/components/orionplace/products/ProductCardBadges.tsx +78 -0
  239. package/templates/components/orionplace/products/ProductCardDescription.README.md +33 -0
  240. package/templates/components/orionplace/products/ProductCardDescription.module.css +6 -0
  241. package/templates/components/orionplace/products/ProductCardDescription.tsx +43 -0
  242. package/templates/components/orionplace/products/ProductCardFavorite.README.md +52 -0
  243. package/templates/components/orionplace/products/ProductCardFavorite.module.css +64 -0
  244. package/templates/components/orionplace/products/ProductCardFavorite.tsx +90 -0
  245. package/templates/components/orionplace/products/ProductCardPrice.README.md +33 -0
  246. package/templates/components/orionplace/products/ProductCardPrice.module.css +22 -0
  247. package/templates/components/orionplace/products/ProductCardPrice.tsx +50 -0
  248. package/templates/components/orionplace/products/ProductCardRating.README.md +33 -0
  249. package/templates/components/orionplace/products/ProductCardRating.module.css +7 -0
  250. package/templates/components/orionplace/products/ProductCardRating.tsx +56 -0
  251. package/templates/components/orionplace/products/ProductCardSeller.README.md +36 -0
  252. package/templates/components/orionplace/products/ProductCardSeller.module.css +31 -0
  253. package/templates/components/orionplace/products/ProductCardSeller.tsx +61 -0
  254. package/templates/components/orionplace/products/ProductCardStockNotice.README.md +36 -0
  255. package/templates/components/orionplace/products/ProductCardStockNotice.module.css +8 -0
  256. package/templates/components/orionplace/products/ProductCardStockNotice.tsx +35 -0
  257. package/templates/components/orionplace/products/ProductCardTitle.README.md +30 -0
  258. package/templates/components/orionplace/products/ProductCardTitle.module.css +13 -0
  259. package/templates/components/orionplace/products/ProductCardTitle.tsx +31 -0
  260. package/templates/components/orionplace/products/ProductCardVariants.README.md +77 -0
  261. package/templates/components/orionplace/products/ProductCardVariants.module.css +97 -0
  262. package/templates/components/orionplace/products/ProductCardVariants.tsx +350 -0
  263. package/templates/components/orionplace/products/ProductGroup.README.md +89 -0
  264. package/templates/components/orionplace/products/ProductGroup.module.css +64 -0
  265. package/templates/components/orionplace/products/ProductGroup.tsx +183 -0
  266. package/templates/components/orionplace/products/ProductPreorderDialog.README.md +89 -0
  267. package/templates/components/orionplace/products/ProductPreorderDialog.module.css +320 -0
  268. package/templates/components/orionplace/products/ProductPreorderDialog.tsx +346 -0
  269. package/templates/components/orionplace/products/ProductReviewForm.README.md +72 -0
  270. package/templates/components/orionplace/products/ProductReviewForm.module.css +217 -0
  271. package/templates/components/orionplace/products/ProductReviewForm.tsx +288 -0
  272. package/templates/components/orionplace/products/ProductReviewGallery.README.md +61 -0
  273. package/templates/components/orionplace/products/ProductReviewGallery.module.css +108 -0
  274. package/templates/components/orionplace/products/ProductReviewGallery.tsx +110 -0
  275. package/templates/components/orionplace/products/ProductReviewImageViewer.README.md +49 -0
  276. package/templates/components/orionplace/products/ProductReviewImageViewer.module.css +50 -0
  277. package/templates/components/orionplace/products/ProductReviewImageViewer.tsx +260 -0
  278. package/templates/components/orionplace/products/ProductReviews.README.md +137 -0
  279. package/templates/components/orionplace/products/ProductReviews.module.css +602 -0
  280. package/templates/components/orionplace/products/ProductReviews.tsx +944 -0
  281. package/templates/components/orionplace/products/ProductSecondaryVariantModal.README.md +67 -0
  282. package/templates/components/orionplace/products/ProductSecondaryVariantModal.module.css +79 -0
  283. package/templates/components/orionplace/products/ProductSecondaryVariantModal.tsx +324 -0
  284. package/templates/components/orionplace/products/ProductSpecificationsDialog.README.md +52 -0
  285. package/templates/components/orionplace/products/ProductSpecificationsDialog.module.css +138 -0
  286. package/templates/components/orionplace/products/ProductSpecificationsDialog.tsx +117 -0
  287. package/templates/components/orionplace/products/StorefrontProduct.README.md +200 -0
  288. package/templates/components/orionplace/products/StorefrontProduct.module.css +767 -0
  289. package/templates/components/orionplace/products/StorefrontProduct.tsx +1339 -0
  290. package/templates/components/orionplace/products/StorefrontWishlist.README.md +162 -0
  291. package/templates/components/orionplace/products/StorefrontWishlist.module.css +71 -0
  292. package/templates/components/orionplace/products/StorefrontWishlist.tsx +402 -0
  293. package/templates/components/orionplace/promo/PromoProducts.README.md +133 -0
  294. package/templates/components/orionplace/promo/PromoProducts.module.css +68 -0
  295. package/templates/components/orionplace/promo/PromoProducts.tsx +345 -0
  296. package/templates/components/orionplace/search/MainSearch.README.md +73 -0
  297. package/templates/components/orionplace/search/MainSearch.module.css +202 -0
  298. package/templates/components/orionplace/search/MainSearch.tsx +217 -0
  299. package/templates/components/orionplace/search/ProductSearchResults.README.md +166 -0
  300. package/templates/components/orionplace/search/ProductSearchResults.module.css +358 -0
  301. package/templates/components/orionplace/search/ProductSearchResults.tsx +308 -0
  302. package/templates/components/orionplace/search/SearchFilters.README.md +109 -0
  303. package/templates/components/orionplace/search/SearchFilters.module.css +274 -0
  304. package/templates/components/orionplace/search/SearchFilters.tsx +439 -0
  305. package/templates/components/orionplace/sellers/SellerFilters.README.md +66 -0
  306. package/templates/components/orionplace/sellers/SellerFilters.module.css +232 -0
  307. package/templates/components/orionplace/sellers/SellerFilters.tsx +201 -0
  308. package/templates/components/orionplace/sellers/SellerPhotoGallery.README.md +72 -0
  309. package/templates/components/orionplace/sellers/SellerPhotoGallery.module.css +314 -0
  310. package/templates/components/orionplace/sellers/SellerPhotoGallery.tsx +335 -0
  311. package/templates/components/orionplace/sellers/SellerSummary.README.md +62 -0
  312. package/templates/components/orionplace/sellers/SellerSummary.module.css +182 -0
  313. package/templates/components/orionplace/sellers/SellerSummary.tsx +107 -0
  314. package/templates/components/orionplace/sellers/StorefrontSellers.README.md +120 -0
  315. package/templates/components/orionplace/sellers/StorefrontSellers.module.css +147 -0
  316. package/templates/components/orionplace/sellers/StorefrontSellers.tsx +360 -0
  317. package/templates/components/orionplace/shared/OrionplaceAvatar.README.md +35 -0
  318. package/templates/components/orionplace/shared/OrionplaceAvatar.module.css +35 -0
  319. package/templates/components/orionplace/shared/OrionplaceAvatar.tsx +61 -0
  320. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +33 -0
  321. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.module.css +81 -0
  322. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +91 -0
  323. package/templates/components/orionplace/shared/OrionplaceEmptyState.README.md +37 -0
  324. package/templates/components/orionplace/shared/OrionplaceEmptyState.module.css +126 -0
  325. package/templates/components/orionplace/shared/OrionplaceEmptyState.tsx +78 -0
  326. package/templates/components/orionplace/shared/OrionplaceImage.README.md +45 -0
  327. package/templates/components/orionplace/shared/OrionplaceImage.module.css +22 -0
  328. package/templates/components/orionplace/shared/OrionplaceImage.tsx +96 -0
  329. package/templates/components/orionplace/shared/OrionplaceInfoHint.README.md +31 -0
  330. package/templates/components/orionplace/shared/OrionplaceInfoHint.module.css +59 -0
  331. package/templates/components/orionplace/shared/OrionplaceInfoHint.tsx +126 -0
  332. package/templates/components/orionplace/shared/OrionplacePasswordInput.README.md +39 -0
  333. package/templates/components/orionplace/shared/OrionplacePasswordInput.module.css +79 -0
  334. package/templates/components/orionplace/shared/OrionplacePasswordInput.tsx +103 -0
  335. package/templates/components/orionplace/shared/OrionplaceSearchSelect.README.md +97 -0
  336. package/templates/components/orionplace/shared/OrionplaceSearchSelect.module.css +246 -0
  337. package/templates/components/orionplace/shared/OrionplaceSearchSelect.tsx +367 -0
  338. package/templates/components/orionplace/shared/OrionplaceSelect.README.md +69 -0
  339. package/templates/components/orionplace/shared/OrionplaceSelect.module.css +233 -0
  340. package/templates/components/orionplace/shared/OrionplaceSelect.tsx +439 -0
  341. package/templates/components/orionplace/shared/StorefrontErrorPage.README.md +52 -0
  342. package/templates/components/orionplace/shared/StorefrontErrorPage.module.css +141 -0
  343. package/templates/components/orionplace/shared/StorefrontErrorPage.tsx +103 -0
  344. package/templates/components/orionplace/shared/StorefrontPagination.README.md +39 -0
  345. package/templates/components/orionplace/shared/StorefrontPagination.module.css +69 -0
  346. package/templates/components/orionplace/shared/StorefrontPagination.tsx +102 -0
  347. package/templates/components/orionplace/shared/dialogs.css +36 -0
  348. package/templates/components/orionplace/shared/emptyStateArt.ts +231 -0
  349. package/templates/components/orionplace/shared/features.module.css +162 -0
  350. package/templates/components/orionplace/social/SocialLinks.README.md +16 -0
  351. package/templates/components/orionplace/social/SocialLinks.module.css +36 -0
  352. package/templates/components/orionplace/social/SocialLinks.tsx +59 -0
  353. package/templates/components/orionplace/storefront/StorefrontAccount.README.md +59 -0
  354. package/templates/components/orionplace/storefront/StorefrontAccount.module.css +159 -0
  355. package/templates/components/orionplace/storefront/StorefrontAccount.tsx +303 -0
  356. package/templates/components/orionplace/storefront/StorefrontCartButton.README.md +47 -0
  357. package/templates/components/orionplace/storefront/StorefrontCartButton.module.css +88 -0
  358. package/templates/components/orionplace/storefront/StorefrontCartButton.tsx +54 -0
  359. package/templates/components/orionplace/storefront/StorefrontFooter.README.md +55 -0
  360. package/templates/components/orionplace/storefront/StorefrontFooter.module.css +118 -0
  361. package/templates/components/orionplace/storefront/StorefrontFooter.tsx +165 -0
  362. package/templates/components/orionplace/storefront/StorefrontHeader.README.md +150 -0
  363. package/templates/components/orionplace/storefront/StorefrontHeader.module.css +186 -0
  364. package/templates/components/orionplace/storefront/StorefrontHeader.tsx +389 -0
  365. package/templates/components/orionplace/storefront/StorefrontHome.README.md +138 -0
  366. package/templates/components/orionplace/storefront/StorefrontHome.module.css +116 -0
  367. package/templates/components/orionplace/storefront/StorefrontHome.tsx +282 -0
  368. package/templates/components/orionplace/storefront/StorefrontWishlistButton.README.md +51 -0
  369. package/templates/components/orionplace/storefront/StorefrontWishlistButton.module.css +95 -0
  370. package/templates/components/orionplace/storefront/StorefrontWishlistButton.tsx +80 -0
  371. package/templates/components/orionplace/stores/StorefrontStores.README.md +87 -0
  372. package/templates/components/orionplace/stores/StorefrontStores.module.css +218 -0
  373. package/templates/components/orionplace/stores/StorefrontStores.tsx +396 -0
  374. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +183 -0
  375. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.module.css +347 -0
  376. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.tsx +884 -0
  377. package/templates/components/orionplace/subscriptions/StorefrontTariff.README.md +111 -0
  378. package/templates/components/orionplace/subscriptions/StorefrontTariff.module.css +311 -0
  379. package/templates/components/orionplace/subscriptions/StorefrontTariff.tsx +474 -0
  380. package/templates/components/orionplace/subscriptions/StorefrontTariffs.README.md +102 -0
  381. package/templates/components/orionplace/subscriptions/StorefrontTariffs.module.css +219 -0
  382. package/templates/components/orionplace/subscriptions/StorefrontTariffs.tsx +350 -0
  383. package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +67 -0
  384. package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.tsx +175 -0
  385. package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +95 -0
  386. package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.tsx +634 -0
  387. package/templates/components/orionplace/subscriptions/SubscriptionDialog.module.css +453 -0
  388. package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +75 -0
  389. package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.tsx +384 -0
  390. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +116 -0
  391. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.module.css +168 -0
  392. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.tsx +236 -0
  393. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +123 -0
  394. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.module.css +57 -0
  395. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.tsx +101 -0
  396. package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +109 -0
  397. package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.tsx +253 -0
  398. package/templates/components/orionplace/support/StorefrontSupport.README.md +157 -0
  399. package/templates/components/orionplace/support/StorefrontSupport.tsx +1040 -0
  400. package/templates/components/orionplace/support/Support.module.css +1133 -0
  401. package/templates/components/orionplace/support/TicketConversation.README.md +105 -0
  402. package/templates/components/orionplace/support/TicketConversation.tsx +502 -0
  403. package/templates/components/orionplace/support/TicketImage.README.md +52 -0
  404. package/templates/components/orionplace/support/TicketImage.tsx +254 -0
  405. package/templates/components/orionplace/support/TicketItemCard.README.md +66 -0
  406. package/templates/components/orionplace/support/TicketItemCard.tsx +140 -0
  407. package/templates/components/orionplace/support/TicketMessageForm.README.md +88 -0
  408. package/templates/components/orionplace/support/TicketMessageForm.tsx +261 -0
  409. package/templates/components/orionplace/support/TicketSubscriptionCard.README.md +53 -0
  410. package/templates/components/orionplace/support/TicketSubscriptionCard.tsx +118 -0
  411. package/templates/components/orionplace/tariffs/TariffCard.README.md +108 -0
  412. package/templates/components/orionplace/tariffs/TariffCard.module.css +86 -0
  413. package/templates/components/orionplace/tariffs/TariffCard.tsx +218 -0
  414. package/templates/components/orionplace/tariffs/TariffCardDescription.README.md +40 -0
  415. package/templates/components/orionplace/tariffs/TariffCardDescription.module.css +72 -0
  416. package/templates/components/orionplace/tariffs/TariffCardDescription.tsx +58 -0
  417. package/templates/components/orionplace/tariffs/TariffCardFeatures.README.md +58 -0
  418. package/templates/components/orionplace/tariffs/TariffCardFeatures.module.css +60 -0
  419. package/templates/components/orionplace/tariffs/TariffCardFeatures.tsx +140 -0
  420. package/templates/components/orionplace/tariffs/TariffCardImage.README.md +36 -0
  421. package/templates/components/orionplace/tariffs/TariffCardImage.module.css +8 -0
  422. package/templates/components/orionplace/tariffs/TariffCardImage.tsx +32 -0
  423. package/templates/components/orionplace/tariffs/TariffCardPrices.README.md +74 -0
  424. package/templates/components/orionplace/tariffs/TariffCardPrices.module.css +142 -0
  425. package/templates/components/orionplace/tariffs/TariffCardPrices.tsx +181 -0
  426. package/templates/components/orionplace/tariffs/TariffCardTitle.README.md +32 -0
  427. package/templates/components/orionplace/tariffs/TariffCardTitle.module.css +9 -0
  428. package/templates/components/orionplace/tariffs/TariffCardTitle.tsx +29 -0
  429. package/templates/components/orionplace/tariffs/TariffCards.README.md +88 -0
  430. package/templates/components/orionplace/tariffs/TariffCards.module.css +24 -0
  431. package/templates/components/orionplace/tariffs/TariffCards.tsx +44 -0
  432. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.README.md +92 -0
  433. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.module.css +214 -0
  434. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.tsx +299 -0
  435. package/templates/components/orionplace/theme/OrionplaceThemeProvider.README.md +30 -0
  436. package/templates/components/orionplace/theme/OrionplaceThemeProvider.module.css +8 -0
  437. package/templates/components/orionplace/theme/OrionplaceThemeProvider.tsx +32 -0
  438. package/templates/components/orionplace/units/UnitSwitcher.README.md +35 -0
  439. package/templates/components/orionplace/units/UnitSwitcher.tsx +58 -0
  440. package/templates/components/orionplace/wallet/StorefrontWallet.README.md +154 -0
  441. package/templates/components/orionplace/wallet/StorefrontWallet.module.css +507 -0
  442. package/templates/components/orionplace/wallet/StorefrontWallet.tsx +915 -0
  443. package/templates/components/orionplace/wallet/WalletBalance.README.md +46 -0
  444. package/templates/components/orionplace/wallet/WalletBalance.module.css +46 -0
  445. package/templates/components/orionplace/wallet/WalletBalance.tsx +51 -0
  446. package/templates/components/orionplace/wallet/WalletTopUpForm.README.md +54 -0
  447. package/templates/components/orionplace/wallet/WalletTopUpForm.module.css +152 -0
  448. package/templates/components/orionplace/wallet/WalletTopUpForm.tsx +181 -0
  449. package/templates/hooks/useAccountActivity.ts +251 -0
  450. package/templates/hooks/useAccountAddresses.ts +81 -0
  451. package/templates/hooks/useAccountPromocodes.ts +91 -0
  452. package/templates/hooks/useOrionplaceActionMenu.ts +118 -0
  453. package/templates/hooks/useOrionplaceAddressForm.ts +262 -0
  454. package/templates/hooks/useOrionplaceApi.ts +98 -0
  455. package/templates/hooks/useOrionplaceAppLoad.ts +38 -6
  456. package/templates/hooks/useOrionplaceBlogReading.ts +351 -0
  457. package/templates/hooks/useOrionplaceDialog.ts +85 -0
  458. package/templates/hooks/useOrionplaceHomeProducts.ts +97 -0
  459. package/templates/hooks/useOrionplaceMap.tsx +230 -0
  460. package/templates/hooks/useOrionplaceMediaFormat.ts +33 -0
  461. package/templates/hooks/useOrionplaceProduct.ts +28 -0
  462. package/templates/hooks/useOrionplaceProfile.ts +347 -0
  463. package/templates/hooks/useOrionplaceReviews.ts +352 -0
  464. package/templates/hooks/useOrionplaceStableHeight.ts +65 -0
  465. package/templates/hooks/useOrionplaceStorefront.tsx +575 -0
  466. package/templates/hooks/useOrionplaceTariffPurchase.ts +152 -0
  467. package/templates/interfaces/orionplace/accounts/IContact.ts +21 -0
  468. package/templates/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +17 -0
  469. package/templates/interfaces/orionplace/accounts/IEmailVerification.ts +59 -0
  470. package/templates/interfaces/orionplace/accounts/IProfileActions.ts +38 -0
  471. package/templates/interfaces/orionplace/accounts/IProfileData.ts +123 -0
  472. package/templates/interfaces/orionplace/accounts/IProfileMedia.ts +17 -0
  473. package/templates/interfaces/orionplace/accounts/IStorefrontProfile.ts +54 -0
  474. package/templates/interfaces/orionplace/address/IAddressCitySuggestion.ts +19 -0
  475. package/templates/interfaces/orionplace/address/IAddressEditor.ts +9 -0
  476. package/templates/interfaces/orionplace/address/IAddressLocationSuggestion.ts +22 -0
  477. package/templates/interfaces/orionplace/address/IAddressRegionSearch.ts +30 -0
  478. package/templates/interfaces/orionplace/address/IAddressSuggestion.ts +20 -0
  479. package/templates/interfaces/orionplace/address/IUserAddress.ts +87 -0
  480. package/templates/interfaces/orionplace/appBase/IAppLoad.ts +4 -3
  481. package/templates/interfaces/orionplace/appBase/IAppLoadCommon.ts +22 -31
  482. package/templates/interfaces/orionplace/appBase/IApploadUserProfile.ts +1 -1
  483. package/templates/interfaces/orionplace/appBase/IForm.ts +1 -1
  484. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +7 -7
  485. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +2 -2
  486. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +20 -7
  487. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +2 -2
  488. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +1 -0
  489. package/templates/interfaces/orionplace/blog/IBlogApi.ts +247 -0
  490. package/templates/interfaces/orionplace/blog/IBlogPostPreview.ts +30 -0
  491. package/templates/interfaces/orionplace/cart/ICartActions.ts +67 -0
  492. package/templates/interfaces/orionplace/cart/ICartData.ts +382 -0
  493. package/templates/interfaces/orionplace/cart/ICartDeliveryActions.ts +68 -0
  494. package/templates/interfaces/orionplace/cart/ICartModal.ts +22 -0
  495. package/templates/interfaces/orionplace/cart/IDeliveryMap.ts +29 -0
  496. package/templates/interfaces/orionplace/catalog/ICatalogDirectory.ts +75 -0
  497. package/templates/interfaces/orionplace/category/ICategory.ts +2 -1
  498. package/templates/interfaces/orionplace/domains/IDomain.ts +2 -2
  499. package/templates/interfaces/orionplace/forms/ICustomerSubfilter.ts +19 -0
  500. package/templates/interfaces/orionplace/index.ts +64 -30
  501. package/templates/interfaces/orionplace/marketing/IPromoActions.ts +51 -0
  502. package/templates/interfaces/orionplace/orders/IOrderActions.ts +99 -0
  503. package/templates/interfaces/orionplace/orders/IOrderHistory.ts +259 -0
  504. package/templates/interfaces/orionplace/orders/IProductPreorder.ts +31 -0
  505. package/templates/interfaces/orionplace/payments/IInvoice.ts +147 -0
  506. package/templates/interfaces/orionplace/products/IProduct.ts +178 -151
  507. package/templates/interfaces/orionplace/products/IProductFeedbackApi.ts +218 -0
  508. package/templates/interfaces/orionplace/products/IProductSearchApi.ts +146 -0
  509. package/templates/interfaces/orionplace/products/IProductSearchFacets.ts +35 -0
  510. package/templates/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +15 -0
  511. package/templates/interfaces/orionplace/products/IProductSpecification.ts +14 -0
  512. package/templates/interfaces/orionplace/products/IWishlist.ts +22 -0
  513. package/templates/interfaces/orionplace/sellers/ISellerDirectory.ts +70 -0
  514. package/templates/interfaces/orionplace/shared/IBreadcrumb.ts +10 -0
  515. package/templates/interfaces/orionplace/shared/IStorefrontControls.ts +6 -0
  516. package/templates/interfaces/orionplace/state.ts +1 -1
  517. package/templates/interfaces/orionplace/stores/IStoreDirectory.ts +63 -0
  518. package/templates/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +41 -31
  519. package/templates/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +11 -0
  520. package/templates/interfaces/orionplace/subscribes/ISubscribe.ts +1 -1
  521. package/templates/interfaces/orionplace/subscribes/ISubscriptionApi.ts +125 -0
  522. package/templates/interfaces/orionplace/tickets/ICustomerTicketApi.ts +223 -0
  523. package/templates/interfaces/orionplace/transport.ts +7 -3
  524. package/templates/lib/orionplace/accountLabels.ts +22 -0
  525. package/templates/lib/orionplace/activityLabels.ts +65 -0
  526. package/templates/lib/orionplace/activityPresentation.ts +9 -0
  527. package/templates/lib/orionplace/addressChanges.ts +26 -0
  528. package/templates/lib/orionplace/addressPresentation.ts +58 -0
  529. package/templates/lib/orionplace/api.ts +326 -0
  530. package/templates/lib/orionplace/appLoadClient.ts +63 -21
  531. package/templates/lib/orionplace/appLoadResult.ts +75 -21
  532. package/templates/lib/orionplace/appLoadServer.ts +66 -21
  533. package/templates/lib/orionplace/blogArticle.ts +97 -0
  534. package/templates/lib/orionplace/blogArticleHtml.ts +370 -0
  535. package/templates/lib/orionplace/blogComments.ts +102 -0
  536. package/templates/lib/orionplace/blogJournal.ts +115 -0
  537. package/templates/lib/orionplace/blogLabels.ts +108 -0
  538. package/templates/lib/orionplace/blogPresentation.ts +67 -0
  539. package/templates/lib/orionplace/browseLabels.ts +98 -0
  540. package/templates/lib/orionplace/cartAddress.ts +86 -0
  541. package/templates/lib/orionplace/cartController.ts +104 -0
  542. package/templates/lib/orionplace/cartLabels.ts +261 -0
  543. package/templates/lib/orionplace/cartOptions.ts +115 -0
  544. package/templates/lib/orionplace/cartPreview.ts +120 -0
  545. package/templates/lib/orionplace/cartPromo.ts +150 -0
  546. package/templates/lib/orionplace/cartShipment.ts +61 -0
  547. package/templates/lib/orionplace/cartSnapshot.ts +21 -0
  548. package/templates/lib/orionplace/catalog.ts +150 -0
  549. package/templates/lib/orionplace/categoryLabels.ts +21 -0
  550. package/templates/lib/orionplace/contact.ts +47 -0
  551. package/templates/lib/orionplace/contactLabels.ts +102 -0
  552. package/templates/lib/orionplace/currency.ts +128 -0
  553. package/templates/lib/orionplace/deliveryMap.ts +86 -0
  554. package/templates/lib/orionplace/directoryLabels.ts +133 -0
  555. package/templates/lib/orionplace/domain.ts +11 -6
  556. package/templates/lib/orionplace/errorPageLabels.ts +74 -0
  557. package/templates/lib/orionplace/eventEnrollment.ts +22 -0
  558. package/templates/lib/orionplace/featureData.ts +28 -0
  559. package/templates/lib/orionplace/featureLabels.ts +271 -0
  560. package/templates/lib/orionplace/featuredLabels.ts +28 -0
  561. package/templates/lib/orionplace/footerLabels.ts +35 -0
  562. package/templates/lib/orionplace/guestSession.ts +55 -0
  563. package/templates/lib/orionplace/headerLabels.ts +68 -0
  564. package/templates/lib/orionplace/homeContent.ts +193 -0
  565. package/templates/lib/orionplace/homeLabels.ts +52 -0
  566. package/templates/lib/orionplace/htmlText.ts +51 -0
  567. package/templates/lib/orionplace/manufacturerDirectory.ts +71 -0
  568. package/templates/lib/orionplace/manufacturerIndex.ts +92 -0
  569. package/templates/lib/orionplace/modalWindow.ts +109 -0
  570. package/templates/lib/orionplace/nativeApp.ts +365 -0
  571. package/templates/lib/orionplace/navigation.tsx +121 -0
  572. package/templates/lib/orionplace/notice.ts +22 -0
  573. package/templates/lib/orionplace/orderLabels.ts +311 -0
  574. package/templates/lib/orionplace/orderPresentation.ts +574 -0
  575. package/templates/lib/orionplace/pageMetadata.ts +247 -0
  576. package/templates/lib/orionplace/pageSeo.ts +274 -0
  577. package/templates/lib/orionplace/paginationScroll.ts +131 -0
  578. package/templates/lib/orionplace/phone.ts +22 -0
  579. package/templates/lib/orionplace/presentation.ts +84 -0
  580. package/templates/lib/orionplace/productActionLabels.ts +60 -0
  581. package/templates/lib/orionplace/productAvailability.ts +30 -0
  582. package/templates/lib/orionplace/productGallery.ts +64 -0
  583. package/templates/lib/orionplace/productLabels.ts +82 -0
  584. package/templates/lib/orionplace/productPage.ts +308 -0
  585. package/templates/lib/orionplace/productPhotos.ts +67 -0
  586. package/templates/lib/orionplace/productSearch.ts +232 -0
  587. package/templates/lib/orionplace/productSeller.ts +56 -0
  588. package/templates/lib/orionplace/profile.ts +157 -0
  589. package/templates/lib/orionplace/profileLabels.ts +151 -0
  590. package/templates/lib/orionplace/promoLabels.ts +75 -0
  591. package/templates/lib/orionplace/promoPresentation.ts +381 -0
  592. package/templates/lib/orionplace/reviewLabels.ts +172 -0
  593. package/templates/lib/orionplace/reviewPresentation.ts +64 -0
  594. package/templates/lib/orionplace/reviewScope.ts +38 -0
  595. package/templates/lib/orionplace/searchFilters.ts +99 -0
  596. package/templates/lib/orionplace/searchHistory.ts +144 -0
  597. package/templates/lib/orionplace/sellerDirectory.ts +120 -0
  598. package/templates/lib/orionplace/seo.ts +52 -0
  599. package/templates/lib/orionplace/serverApi.ts +158 -0
  600. package/templates/lib/orionplace/serverLocale.ts +29 -0
  601. package/templates/lib/orionplace/serverMetadata.ts +86 -0
  602. package/templates/lib/orionplace/serverRecords.ts +25 -0
  603. package/templates/lib/orionplace/serverRoute.tsx +51 -0
  604. package/templates/lib/orionplace/sessionLabels.ts +27 -0
  605. package/templates/lib/orionplace/signInReturn.ts +89 -0
  606. package/templates/lib/orionplace/storeDirectory.ts +47 -0
  607. package/templates/lib/orionplace/storefrontRecords.ts +29 -0
  608. package/templates/lib/orionplace/subscriptionChanges.ts +120 -0
  609. package/templates/lib/orionplace/subscriptionLabels.ts +67 -0
  610. package/templates/lib/orionplace/subscriptionManageLabels.ts +306 -0
  611. package/templates/lib/orionplace/subscriptionPlans.ts +122 -0
  612. package/templates/lib/orionplace/subscriptionRemote.ts +85 -0
  613. package/templates/lib/orionplace/subscriptionUsage.ts +58 -0
  614. package/templates/lib/orionplace/tariffLabels.ts +123 -0
  615. package/templates/lib/orionplace/tariffPage.ts +54 -0
  616. package/templates/lib/orionplace/tariffVariables.ts +136 -0
  617. package/templates/lib/orionplace/tariffs.ts +192 -0
  618. package/templates/lib/orionplace/ticketItems.ts +75 -0
  619. package/templates/lib/orionplace/ticketLabels.ts +335 -0
  620. package/templates/lib/orionplace/ticketLocation.ts +79 -0
  621. package/templates/lib/orionplace/ticketRequests.ts +70 -0
  622. package/templates/lib/orionplace/walletTransaction.ts +105 -0
  623. package/templates/orionplace/COMPONENT-DOWNLOAD.md +66 -0
  624. package/templates/orionplace/COMPONENTS.md +35 -0
  625. package/templates/providers/OrionplaceProvider.tsx +164 -12
  626. package/templates/proxy.ts +8 -3
  627. package/templates/stores/orionplace.ts +212 -49
  628. package/templates/stores/orionplaceBrowse.ts +89 -0
  629. package/templates/stores/orionplaceCatalog.ts +144 -0
  630. package/templates/stores/orionplaceProducts.ts +389 -0
  631. package/templates/stores/orionplaceScope.ts +104 -0
  632. package/templates/stores/orionplaceSelections.ts +130 -0
  633. package/templates/themes/orionplace.ts +106 -0
@@ -0,0 +1,503 @@
1
+ 'use client';
2
+
3
+ import {
4
+ useEffect,
5
+ useMemo,
6
+ useRef,
7
+ useState,
8
+ type ChangeEvent,
9
+ type FormEvent,
10
+ } from 'react';
11
+ import {
12
+ useOrionplaceProductsStore,
13
+ useOrionplaceSelections,
14
+ } from '@/providers/OrionplaceProvider';
15
+ import type {
16
+ ICartOptionGroup,
17
+ } from '@/interfaces/orionplace/cart/ICartData';
18
+ import type { IProductSecondaryVariantRequest } from '@/interfaces/orionplace/products/IProductSecondaryVariantRequest';
19
+ import {
20
+ cartOptionActiveRow,
21
+ cartOptionCards,
22
+ cartOptionGroupFilled,
23
+ cartOptionProducts,
24
+ type ICartOptionCard,
25
+ type ICartOptionRow,
26
+ } from '@/lib/orionplace/cartOptions';
27
+ import {
28
+ getAvailableNestedValueFromObject,
29
+ getAvailableValueFromObject,
30
+ } from '@/lib/orionplace/presentation';
31
+ import { formatCurrency } from '@/lib/orionplace/currency';
32
+ import { cartLabels } from '@/lib/orionplace/cartLabels';
33
+ import { featureLabels } from '@/lib/orionplace/featureLabels';
34
+ import { productLabels } from '@/lib/orionplace/productLabels';
35
+ import { ProductCard } from '@/components/orionplace/products/ProductCard';
36
+ import styles from './CartItemOptions.module.css';
37
+ import { apiErrorMessage } from '@/lib/orionplace/api';
38
+
39
+ export type CartItemOptionAction =
40
+ | {
41
+ endpoint: 'cart_customer_option_first_set';
42
+ request: { quantity: number };
43
+ params: { delivery_option_item_id: number };
44
+ }
45
+ | {
46
+ endpoint: 'cart_customer_option_add_additional';
47
+ request: FormData;
48
+ params: { option_group_id: number };
49
+ }
50
+ | {
51
+ endpoint: 'cart_customer_option_cleanup_additional';
52
+ request: Record<string, never>;
53
+ params: { option_group_id: number };
54
+ };
55
+
56
+ export interface CartItemOptionsProps {
57
+ group: ICartOptionGroup;
58
+ disabled?: boolean;
59
+ pending?: boolean;
60
+ error?: string;
61
+ // false when the parent already shows a rejected action (StorefrontCart
62
+ // does, above the lines), so the error is not shown twice.
63
+ showRequestErrors?: boolean;
64
+ // The page of an offered product; its picture and name link there.
65
+ productHref?: (productId: number) => string;
66
+ onChange?: (
67
+ action: CartItemOptionAction,
68
+ ) => Promise<unknown> | unknown;
69
+ onRequestSecondaryVariants?: (
70
+ request: IProductSecondaryVariantRequest,
71
+ ) => void;
72
+ }
73
+
74
+ export function CartItemOptions({
75
+ group,
76
+ disabled = false,
77
+ pending = false,
78
+ error = '',
79
+ showRequestErrors = true,
80
+ productHref,
81
+ onChange,
82
+ onRequestSecondaryVariants,
83
+ }: CartItemOptionsProps) {
84
+ const locale = useOrionplaceSelections((state) => state.localeCode);
85
+ const currencyId = useOrionplaceSelections((state) => state.currencyId);
86
+ const currency = useOrionplaceSelections(
87
+ (state) => state.init?.currencies[currencyId],
88
+ );
89
+ const productStore = useOrionplaceProductsStore();
90
+ const labels = cartLabels(locale);
91
+ const common = featureLabels(locale);
92
+ const productCopy = productLabels(locale);
93
+ const title = getAvailableValueFromObject(group.option_name, locale)
94
+ ?.option_group_display_name;
95
+ const [text, setText] = useState(group.option_text_data || '');
96
+ const [file, setFile] = useState<File>();
97
+ const [chosenRows, setChosenRows] = useState<Record<string, number>>({});
98
+ const [taskPending, setTaskPending] = useState(false);
99
+ const [taskError, setTaskError] = useState('');
100
+ const textEdited = useRef(false);
101
+ const fileInput = useRef<HTMLInputElement>(null);
102
+ const busy = disabled || pending || taskPending;
103
+ const optionType = group.option_type?.option_type || '';
104
+ const isTextOption = ['text', 'textarea', 'file'].includes(optionType);
105
+ // A file group saves only a newly chosen file: the stored file stays until
106
+ // the customer clears it.
107
+ const isFileOption = optionType === 'file';
108
+ // The backend limits uploads by the domain setting cart_option_file_max_mb
109
+ // and answers a larger file with a field error; 0 means no limit.
110
+ const fileLimit = group.limits?.file_max_mb ?? 0;
111
+ const fileTooLarge =
112
+ !!file && fileLimit > 0 && file.size > fileLimit * 1024 * 1024;
113
+ const cards = useMemo(
114
+ () => isTextOption ? [] : cartOptionCards(group),
115
+ [group, isTextOption],
116
+ );
117
+ const choiceHint = isTextOption
118
+ ? ''
119
+ : group.option_type?.multiple_choices
120
+ ? labels.optionMultiple
121
+ : labels.optionSingle;
122
+ const missing = group.option_group_required &&
123
+ !cartOptionGroupFilled(group);
124
+ const offeredIds = cards.flatMap((card) => card.productIds);
125
+ const entries = cards.flatMap((card) => {
126
+ const row = cartOptionActiveRow(card, chosenRows[card.key]);
127
+ if (!row) {
128
+ return [];
129
+ }
130
+ const others = card.rows.filter((other) =>
131
+ other.option.id !== row.option.id && other.option.quantity > 0,
132
+ );
133
+ return [{ card, row, alsoSelected: alsoSelectedText(others) }];
134
+ });
135
+
136
+ useEffect(() => {
137
+ if (!textEdited.current) {
138
+ setText(group.option_text_data || '');
139
+ }
140
+ for (const product of cartOptionProducts(group)) {
141
+ const stored = productStore.getState().getProduct(product.id, 'products');
142
+ productStore.getState().setProduct({
143
+ ...product,
144
+ cart_counts: stored?.cart_counts ?? product.cart_counts ?? null,
145
+ }, 'products');
146
+ }
147
+ }, [group, productStore]);
148
+
149
+ function rowName(row: ICartOptionRow) {
150
+ return getAvailableNestedValueFromObject(
151
+ row.product.locale,
152
+ locale,
153
+ 'product_name',
154
+ ) || `#${row.product.id}`;
155
+ }
156
+
157
+ function alsoSelectedText(rows: ICartOptionRow[]) {
158
+ return rows
159
+ .map((row) => `${rowName(row)} × ${row.option.quantity}`)
160
+ .join(', ');
161
+ }
162
+
163
+ function showVariantRow(
164
+ card: ICartOptionCard,
165
+ productId: number | null | undefined,
166
+ ) {
167
+ const row = card.rows.find((item) => item.product.id === productId);
168
+ if (row) {
169
+ setChosenRows((current) => ({
170
+ ...current,
171
+ [card.key]: row.option.id,
172
+ }));
173
+ }
174
+ }
175
+
176
+ function resetFile() {
177
+ setFile(undefined);
178
+ if (fileInput.current) {
179
+ fileInput.current.value = '';
180
+ }
181
+ }
182
+
183
+ async function change(
184
+ action: CartItemOptionAction,
185
+ confirmed?: () => void,
186
+ ) {
187
+ if (busy) {
188
+ return;
189
+ }
190
+ setTaskPending(true);
191
+ setTaskError('');
192
+ try {
193
+ await onChange?.(action);
194
+ confirmed?.();
195
+ } catch (reason) {
196
+ if (showRequestErrors) {
197
+ setTaskError(
198
+ apiErrorMessage(reason) || common.failed,
199
+ );
200
+ }
201
+ } finally {
202
+ setTaskPending(false);
203
+ }
204
+ }
205
+
206
+ function setQuantity(row: ICartOptionRow, quantity: number) {
207
+ if (
208
+ !Number.isInteger(quantity) ||
209
+ quantity < 0 ||
210
+ quantity > row.maxQuantity
211
+ ) {
212
+ return;
213
+ }
214
+ void change({
215
+ endpoint: 'cart_customer_option_first_set',
216
+ request: { quantity },
217
+ params: { delivery_option_item_id: row.option.id },
218
+ });
219
+ }
220
+
221
+ function clear() {
222
+ void change({
223
+ endpoint: 'cart_customer_option_cleanup_additional',
224
+ request: {},
225
+ params: { option_group_id: group.id },
226
+ }, () => {
227
+ setText('');
228
+ textEdited.current = false;
229
+ resetFile();
230
+ });
231
+ }
232
+
233
+ function chooseFile(event: ChangeEvent<HTMLInputElement>) {
234
+ setFile(event.target.files?.[0]);
235
+ }
236
+
237
+ function save(event: FormEvent<HTMLFormElement>) {
238
+ event.preventDefault();
239
+ if ((isFileOption && !file) || fileTooLarge) {
240
+ return;
241
+ }
242
+ const body = new FormData();
243
+ body.append(
244
+ 'data',
245
+ JSON.stringify(file ? {} : { option_text_data: text }),
246
+ );
247
+ if (file) {
248
+ body.append('option_file_data', file, file.name);
249
+ }
250
+ void change({
251
+ endpoint: 'cart_customer_option_add_additional',
252
+ request: body,
253
+ params: { option_group_id: group.id },
254
+ }, () => {
255
+ textEdited.current = false;
256
+ resetFile();
257
+ });
258
+ }
259
+
260
+ function rowTotal(row: ICartOptionRow) {
261
+ const amount = row.option.option_price
262
+ ?.options_price_after_promo[currencyId]?.transform_value;
263
+ return formatCurrency(amount, currency, locale);
264
+ }
265
+
266
+ return (
267
+ <details
268
+ className={styles.root}
269
+ data-feature-part="CartItemOptions"
270
+ data-option-state={
271
+ group.option_group_required ? (missing ? 'missing' : 'done') : undefined
272
+ }
273
+ >
274
+ <summary>
275
+ <span className={styles.title}>
276
+ <span className={styles.name}>{title || labels.options}</span>
277
+ {choiceHint ? <span className={styles.hint}>{choiceHint}</span> : null}
278
+ {missing ? (
279
+ <span className={styles.missing}>{labels.optionMissing}</span>
280
+ ) : null}
281
+ </span>
282
+ {group.option_group_required ? (
283
+ <span
284
+ className={styles.required}
285
+ data-state={missing ? 'missing' : 'done'}
286
+ data-cart-option-required
287
+ >
288
+ <svg viewBox="0 0 24 24" aria-hidden="true">
289
+ <path d={missing ? 'M12 7v6M12 17h.01' : 'm5 12.5 4.5 4.5L19 7.5'} />
290
+ </svg>
291
+ {labels.optionRequired}
292
+ </span>
293
+ ) : null}
294
+ </summary>
295
+
296
+ {isTextOption ? (
297
+ <form className={styles.form} onSubmit={save}>
298
+ {optionType !== 'file' ? (
299
+ <label className={styles.field}>
300
+ <span>
301
+ {labels.optionText}
302
+ {group.option_group_required ? (
303
+ <b aria-hidden="true">*</b>
304
+ ) : null}
305
+ </span>
306
+ <textarea
307
+ value={text}
308
+ disabled={busy}
309
+ required={group.option_group_required}
310
+ onChange={(event) => {
311
+ textEdited.current = true;
312
+ setText(event.target.value);
313
+ }}
314
+ />
315
+ </label>
316
+ ) : (
317
+ <label className={styles.field}>
318
+ <span>
319
+ {labels.optionFile}
320
+ {group.option_group_required && !group.option_file_data ? (
321
+ <b aria-hidden="true">*</b>
322
+ ) : null}
323
+ </span>
324
+ <input
325
+ ref={fileInput}
326
+ type="file"
327
+ disabled={busy}
328
+ required={
329
+ group.option_group_required && !group.option_file_data
330
+ }
331
+ onChange={chooseFile}
332
+ />
333
+ {fileLimit > 0 ? (
334
+ <span className={styles.hint}>
335
+ {labels.optionFileLimit.replace('{size}', String(fileLimit))}
336
+ </span>
337
+ ) : null}
338
+ {group.option_file_data ? (
339
+ <span>
340
+ {labels.selectedFile}:{' '}
341
+ {group.option_file_data.split('/').pop()}
342
+ </span>
343
+ ) : null}
344
+ {fileTooLarge ? (
345
+ <span
346
+ className={styles.error}
347
+ role="alert"
348
+ >
349
+ {labels.optionFileTooLarge.replace('{size}', String(fileLimit))}
350
+ </span>
351
+ ) : null}
352
+ </label>
353
+ )}
354
+ <div className={styles.actions}>
355
+ <button
356
+ type="submit"
357
+ className={`${styles.button} ${styles.primary}`.trim()}
358
+ disabled={busy || (isFileOption && !file) || fileTooLarge}
359
+ >
360
+ {common.save}
361
+ </button>
362
+ {group.option_text_data || group.option_file_data ? (
363
+ <button
364
+ type="button"
365
+ className={styles.button}
366
+ disabled={busy}
367
+ aria-label={labels.clearOptionHint}
368
+ onClick={clear}
369
+ >
370
+ {labels.clearOption}
371
+ </button>
372
+ ) : null}
373
+ </div>
374
+ </form>
375
+ ) : (
376
+ <ul className={styles.cards}>
377
+ {entries.map(({ card, row, alsoSelected }) => (
378
+ <li key={card.key} data-cart-option-card>
379
+ <ProductCard
380
+ productId={row.product.id}
381
+ initialProduct={row.product}
382
+ variantProductIds={offeredIds}
383
+ productHref={productHref}
384
+ disabled={busy}
385
+ purchaseActions={false}
386
+ compact
387
+ onSelectVariant={({ variant }) =>
388
+ showVariantRow(card, variant.reload_product)
389
+ }
390
+ onSelectSecondaryVariant={({ variant }) =>
391
+ showVariantRow(card, variant.product.id)
392
+ }
393
+ onRequestSecondaryVariants={onRequestSecondaryVariants}
394
+ renderFooter={() => (
395
+ <OptionControls
396
+ row={row}
397
+ rowName={rowName(row)}
398
+ total={rowTotal(row)}
399
+ alsoSelected={alsoSelected}
400
+ disabled={busy}
401
+ onQuantity={(quantity) => setQuantity(row, quantity)}
402
+ />
403
+ )}
404
+ />
405
+ </li>
406
+ ))}
407
+ </ul>
408
+ )}
409
+ {error || taskError ? (
410
+ <p className={styles.error} role="alert">{error || taskError}</p>
411
+ ) : null}
412
+ </details>
413
+ );
414
+ }
415
+
416
+ function OptionControls({
417
+ row,
418
+ rowName,
419
+ total,
420
+ alsoSelected,
421
+ disabled,
422
+ onQuantity,
423
+ }: {
424
+ row: ICartOptionRow;
425
+ rowName: string;
426
+ total: string;
427
+ alsoSelected: string;
428
+ disabled: boolean;
429
+ onQuantity: (quantity: number) => void;
430
+ }) {
431
+ const locale = useOrionplaceSelections((state) => state.localeCode);
432
+ const labels = cartLabels(locale);
433
+ const productCopy = productLabels(locale);
434
+
435
+ return (
436
+ <div className={styles.controls}>
437
+ {row.option.quantity > 0 ? (
438
+ <div
439
+ className={styles.quantity}
440
+ role="group"
441
+ aria-label={productCopy.quantity}
442
+ data-cart-option-quantity
443
+ >
444
+ <button
445
+ type="button"
446
+ disabled={disabled}
447
+ aria-label={
448
+ row.option.quantity === 1
449
+ ? labels.remove
450
+ : productCopy.decrease
451
+ }
452
+ data-cart-option-decrease
453
+ onClick={() => onQuantity(row.option.quantity - 1)}
454
+ >
455
+ −
456
+ </button>
457
+ <span aria-live="polite" aria-atomic="true">
458
+ {row.option.quantity}
459
+ </span>
460
+ <button
461
+ type="button"
462
+ disabled={disabled || row.option.quantity >= row.maxQuantity}
463
+ aria-label={productCopy.increase}
464
+ data-cart-option-increase
465
+ onClick={() => onQuantity(row.option.quantity + 1)}
466
+ >
467
+ +
468
+ </button>
469
+ </div>
470
+ ) : row.maxQuantity > 0 ? (
471
+ <button
472
+ type="button"
473
+ className={styles.add}
474
+ disabled={disabled}
475
+ aria-label={`${productCopy.add}: ${rowName}`}
476
+ data-cart-option-add
477
+ onClick={() => onQuantity(1)}
478
+ >
479
+ {productCopy.add}
480
+ </button>
481
+ ) : (
482
+ <p className={styles.note} data-cart-option-unavailable>
483
+ {labels.optionUnavailable}
484
+ </p>
485
+ )}
486
+ {row.option.quantity > 0 ? (
487
+ <p className={styles.total} data-cart-option-total>
488
+ {labels.total}: {total}
489
+ </p>
490
+ ) : null}
491
+ {row.maxQuantity > 0 && row.option.quantity >= row.maxQuantity ? (
492
+ <p className={styles.note} data-cart-option-limit>
493
+ {labels.optionLimit.replace('{count}', String(row.maxQuantity))}
494
+ </p>
495
+ ) : null}
496
+ {alsoSelected ? (
497
+ <p className={styles.note} data-cart-option-other>
498
+ {labels.optionSelected}: {alsoSelected}
499
+ </p>
500
+ ) : null}
501
+ </div>
502
+ );
503
+ }
@@ -0,0 +1,138 @@
1
+ # CartLineItem · React
2
+
3
+ ## English
4
+
5
+ One cart or checkout item with its image, name, price, quantity and options.
6
+
7
+ ## Contract and dependencies
8
+
9
+ `product` accepts the ordinary `IProduct` returned in the cart step or an
10
+ `ICartCheckoutProduct` returned inside a checkout shipment. Both forms render
11
+ their localized name and first small image in a real product link. The image
12
+ has fixed intrinsic dimensions. `productHref` can replace the default localized
13
+ `/product/{id}` destination.
14
+
15
+ For an ordinary cart item, the editable quantity starts from
16
+ `product.cart_counts.quantity`. Save calls `onChange` with
17
+ `cart_guest_first_set` and `{ product: product.id, quantity }`. Remove calls
18
+ `cart_guest_remove_by_cart_item` with
19
+ `params.cart_item_id = product.cart_counts.cart_id`. An unsaved quantity stays
20
+ in the input during unrelated product updates. A rejected action preserves it
21
+ and displays the error.
22
+
23
+ An `ICartCheckoutProduct` shows the read-only `dlf_count` and
24
+ `dlf_prices.total_price_after_promo`. Remove calls
25
+ `cart_customer_remove_by_dlf_item` with `params.dlf_item_id = dlf_id`.
26
+ `unavailable` also makes an ordinary product quantity read-only.
27
+
28
+ Each `option_group` is rendered below its checkout item through
29
+ `CartItemOptions`; `optionProps` supplies its action handlers and secondary
30
+ variant loader. The list has an accessible name containing the item name.
31
+ `disabled` and `pending` block line and option controls; `error` displays a
32
+ parent request error. A rejected action is shown under the line unless
33
+ `showRequestErrors` is `false`, as inside `StorefrontCart`, which shows it
34
+ once above the lines.
35
+
36
+ Source is maintained in `components/orionplace/cart/CartLineItem.tsx`; its
37
+ physical interfaces are in `interfaces/orionplace/products/IProduct.ts` and
38
+ `interfaces/orionplace/cart/ICartData.ts`.
39
+
40
+ ### Props
41
+
42
+ | Prop | Meaning |
43
+ | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
44
+ | `product: IProduct \| ICartCheckoutProduct` | Product or checkout item displayed by the component. |
45
+ | `unavailable?: boolean` | Makes an unavailable item read-only and prevents its actions. |
46
+ | `disabled?: boolean` | Disables the component controls and prevents new actions. |
47
+ | `pending?: boolean` | Shows the loading state and blocks duplicate actions. |
48
+ | `error?: string` | Customer-visible error for the component request; omit it when no request failed. |
49
+ | `showRequestErrors?: boolean` | Shows a rejected action inside the component (default `true`). `StorefrontCart` passes `false`: it shows the error above the lines.|
50
+ | `productHref?: (productId: number, locale: string) => string` | Builds the product destination from the callback arguments. |
51
+ | `optionProps?: Omit<CartItemOptionsProps, "group">` | Props forwarded to the option child component. |
52
+ | `onChange?: (action: CartLineItemAction) => Promise<unknown> \| unknown` | Called when the visitor confirms a new value. The callback payload is shown in its type. |
53
+
54
+ ## Русский
55
+
56
+ Компонент показывает один товар корзины или оформления заказа: изображение,
57
+ название, цену, количество и дополнения.
58
+
59
+ `product` принимает обычный `IProduct` из шага корзины или
60
+ `ICartCheckoutProduct` из отправления на шаге оформления. В обоих случаях
61
+ локализованное название и первое маленькое изображение находятся внутри обычной
62
+ ссылки на товар. У изображения заданы физические размеры. `productHref` заменяет
63
+ стандартный локализованный путь `/product/{id}`.
64
+
65
+ Для обычного товара редактируемое количество начинается со значения
66
+ `product.cart_counts.quantity`. Сохранение передаёт в `onChange` действие
67
+ `cart_guest_first_set` и `{ product: product.id, quantity }`. Удаление передаёт
68
+ `cart_guest_remove_by_cart_item` и
69
+ `params.cart_item_id = product.cart_counts.cart_id`. Несохранённое количество
70
+ не теряется при постороннем обновлении товара. При отклонённом действии значение
71
+ остаётся в поле, а компонент показывает ошибку.
72
+
73
+ Для `ICartCheckoutProduct` показаны `dlf_count` без редактирования и сумма
74
+ `dlf_prices.total_price_after_promo`. Удаление передаёт
75
+ `cart_customer_remove_by_dlf_item` и `params.dlf_item_id = dlf_id`. Значение
76
+ `unavailable` также делает количество обычного товара доступным только для
77
+ чтения.
78
+
79
+ Каждая группа `option_group` выводится под товаром через `CartItemOptions`;
80
+ `optionProps` передаёт обработчики действий и загрузчик дополнительных
81
+ вариантов. Доступное имя списка содержит название товара. `disabled` и `pending`
82
+ блокируют элементы товара и его дополнений, а `error` показывает ошибку
83
+ родительского запроса. Ошибка отклонённого действия выводится под товаром,
84
+ если `showRequestErrors` не `false`; внутри `StorefrontCart` она показывается
85
+ один раз над товарами.
86
+
87
+ Исходный файл: `components/orionplace/cart/CartLineItem.tsx`; физические
88
+ интерфейсы: `interfaces/orionplace/products/IProduct.ts` и
89
+ `interfaces/orionplace/cart/ICartData.ts`.
90
+
91
+ ### Свойства
92
+
93
+ | Свойство | Назначение |
94
+ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
95
+ | `product: IProduct \| ICartCheckoutProduct` | Товар или позиция оформления, которую показывает компонент. |
96
+ | `unavailable?: boolean` | Делает недоступную позицию доступной только для чтения и блокирует её действия. |
97
+ | `disabled?: boolean` | Блокирует элементы компонента и новые действия. |
98
+ | `pending?: boolean` | Показывает загрузку и блокирует повторные действия. |
99
+ | `error?: string` | Ошибка запроса для покупателя; не передавайте её, если запрос не завершился ошибкой. |
100
+ | `showRequestErrors?: boolean` | Показывать ошибку отклонённого действия в самом компоненте (по умолчанию `true`). `StorefrontCart` передаёт `false`: ошибку он показывает над товарами.|
101
+ | `productHref?: (productId: number, locale: string) => string` | Строит адрес ссылки товара из аргументов обработчика. |
102
+ | `optionProps?: Omit<CartItemOptionsProps, "group">` | Свойства, передаваемые дочернему компоненту дополнений. |
103
+ | `onChange?: (action: CartLineItemAction) => Promise<unknown> \| unknown` | Вызывается, когда покупатель подтверждает новое значение. Данные обработчика указаны в его типе. |
104
+ ## Response fields and application actions
105
+
106
+ The following tables describe the response and the supplied composition’s follow-up actions. The framework-specific props and events above identify which work belongs to the component and which belongs to its parent.
107
+
108
+ ### English
109
+
110
+ ### Cart and checkout values
111
+
112
+ `product` — In CART, page_data.cart_data contains products. In CHECKOUT, each shipment in page_data.cart_data contains product_items. One product may be split between shipments; each shipment item has its own ID and quantity.
113
+
114
+ | Field or condition | Meaning and application action |
115
+ | --- | --- |
116
+ | CART quantity and total | Use `product.cart_counts.quantity` and `product.cart_counts.cart_item_price_after_promo`. The price is a currency-ID dictionary; display the selected currency’s `transform_value`. |
117
+ | CHECKOUT quantity and total | Use `product.dlf_count` and `product.dlf_prices.total_price_after_promo`. This total includes the shipment item’s options. Quantity is read-only here. |
118
+ | Save quantity | `cart_guest_first_set` receives `product: product.id` and the new total `quantity`. The unsaved quantity remains during unrelated refreshes; confirmed saving allows the next cart response to replace it. |
119
+ | Remove in CART | Pass `product.cart_counts.cart_id` as `cart_item_id` to `cart_guest_remove_by_cart_item`. |
120
+ | Remove in CHECKOUT | Pass `product.dlf_id` as `dlf_item_id` to `cart_customer_remove_by_dlf_item`. Reload all cart shipments and totals after confirmation. |
121
+ | Unavailable or incomplete data | `unavailable` hides quantity editing. If shipment/cart total data is absent, the displayed amount falls back to `product.product_price_dict`; it does not establish a confirmed checkout total. |
122
+
123
+ ### Русский
124
+
125
+ ### Значения в корзине и при оформлении
126
+
127
+ `product` — В CART page_data.cart_data содержит товары. В CHECKOUT каждая отправка в page_data.cart_data содержит product_items. Товар может быть разделён между отправками; у каждой позиции отправки свои ID и количество.
128
+
129
+ | Поле или условие | Значение и действие приложения |
130
+ | --- | --- |
131
+ | Количество и сумма в CART | Используются `product.cart_counts.quantity` и `product.cart_counts.cart_item_price_after_promo`. Цена — словарь по ID валюты; выводится `transform_value` выбранной валюты. |
132
+ | Количество и сумма в CHECKOUT | Используются `product.dlf_count` и `product.dlf_prices.total_price_after_promo`. Сумма включает опции позиции отправки. Количество здесь доступно только для чтения. |
133
+ | Сохранение количества | `cart_guest_first_set` получает `product: product.id` и новое полное `quantity`. Несохранённое количество сохраняется при других обновлениях; после подтверждения сохранения его заменяет следующий ответ корзины. |
134
+ | Удаление в CART | Передайте `product.cart_counts.cart_id` как `cart_item_id` в `cart_guest_remove_by_cart_item`. |
135
+ | Удаление в CHECKOUT | Передайте `product.dlf_id` как `dlf_item_id` в `cart_customer_remove_by_dlf_item`. После подтверждения загрузите все отправки и суммы корзины заново. |
136
+ | Недоступные или неполные данные | `unavailable` скрывает редактирование количества. Если суммы позиции отправки/корзины отсутствуют, выводится `product.product_price_dict`; эта цена не подтверждает итог оформления. |
137
+
138
+ [English guide](https://orionmarket.place/en/sandbox/components/react/cart-line-item) · [Русский](https://orionmarket.place/ru/sandbox/components/react/cart-line-item)