orionplace-react 0.1.0 → 0.2.1

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 +332 -38
  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,167 @@
1
+ .article {
2
+ min-width: 0;
3
+ background: var(--orionplace-surface);
4
+ color: var(--orionplace-text);
5
+ }
6
+
7
+ .card {
8
+ display: grid;
9
+ width: 100%;
10
+ height: 100%;
11
+ min-width: 0;
12
+ padding: 0;
13
+ overflow: hidden;
14
+ color: inherit;
15
+ text-align: left;
16
+ text-decoration: none;
17
+ cursor: pointer;
18
+ background: transparent;
19
+ border: 0;
20
+ border-radius: 0;
21
+ }
22
+
23
+ .card:focus-visible {
24
+ outline: 2px solid currentColor;
25
+ outline-offset: 3px;
26
+ }
27
+
28
+ .cover {
29
+ position: relative;
30
+ display: block;
31
+ width: 100%;
32
+ aspect-ratio: 3 / 2;
33
+ overflow: hidden;
34
+ background: var(--orionplace-surface);
35
+ }
36
+
37
+ .cover img {
38
+ display: block;
39
+ width: 100%;
40
+ height: 100%;
41
+ object-fit: cover;
42
+ transition: opacity 160ms ease;
43
+ }
44
+
45
+ @media (hover: hover) {
46
+ .card:hover .cover img {
47
+ opacity: 0.85;
48
+ }
49
+ }
50
+
51
+ .fallback {
52
+ position: absolute;
53
+ inset: 0;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ color: var(--orionplace-muted);
58
+ border: 1px solid var(--orionplace-border);
59
+ }
60
+
61
+ .pattern {
62
+ position: absolute;
63
+ inset: 0;
64
+ width: 100%;
65
+ height: 100%;
66
+ color: var(--orionplace-border);
67
+ }
68
+
69
+ .initial {
70
+ position: relative;
71
+ display: flex;
72
+ width: 4rem;
73
+ height: 4rem;
74
+ align-items: center;
75
+ justify-content: center;
76
+ font-size: 1.875rem;
77
+ line-height: calc(2.25 / 1.875);
78
+ text-transform: uppercase;
79
+ background: var(--orionplace-surface);
80
+ border: 1px solid var(--orionplace-border);
81
+ }
82
+
83
+ .initial svg {
84
+ width: 1.75rem;
85
+ height: 1.75rem;
86
+ }
87
+
88
+ .paid {
89
+ position: absolute;
90
+ top: 0;
91
+ left: 0;
92
+ padding: 0.125rem 0.5rem;
93
+ color: var(--orionplace-inverse-text);
94
+ font-size: 0.6875rem;
95
+ letter-spacing: 0.08em;
96
+ text-transform: uppercase;
97
+ background: var(--orionplace-inverse-surface);
98
+ }
99
+
100
+ .copy {
101
+ display: grid;
102
+ min-width: 0;
103
+ align-content: start;
104
+ gap: 0.5rem;
105
+ padding-block: 1rem;
106
+ }
107
+
108
+ .meta {
109
+ display: flex;
110
+ flex-wrap: wrap;
111
+ gap: 0.25rem 0.75rem;
112
+ color: var(--orionplace-muted);
113
+ font-size: 0.75rem;
114
+ line-height: calc(1 / 0.75);
115
+ letter-spacing: 0.08em;
116
+ text-transform: uppercase;
117
+ }
118
+
119
+ .title {
120
+ overflow-wrap: anywhere;
121
+ font-size: 0.875rem;
122
+ font-weight: 500;
123
+ line-height: 1.25rem;
124
+ letter-spacing: 0.04em;
125
+ text-transform: uppercase;
126
+ }
127
+
128
+ .preview {
129
+ display: -webkit-box;
130
+ overflow: hidden;
131
+ color: var(--orionplace-muted);
132
+ font-size: 0.875rem;
133
+ line-height: 1.5rem;
134
+ overflow-wrap: anywhere;
135
+ -webkit-box-orient: vertical;
136
+ -webkit-line-clamp: 2;
137
+ }
138
+
139
+ /* The title size and the list and hero layouts follow BlogPostGroup's
140
+ width (`posts`), so a card looks the same wherever the group is placed. */
141
+ @container posts (min-width: 592px) {
142
+ .title {
143
+ font-size: 1rem;
144
+ line-height: 1.5rem;
145
+ }
146
+
147
+ .card[data-layout='list'],
148
+ .card[data-layout='hero'] {
149
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
150
+ column-gap: 1.5rem;
151
+ align-items: center;
152
+ }
153
+
154
+ .card[data-layout='hero'] {
155
+ grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
156
+ }
157
+
158
+ .card[data-layout='hero'] .copy {
159
+ padding-block: 1.5rem;
160
+ }
161
+ }
162
+
163
+ @media (prefers-reduced-motion: reduce) {
164
+ .cover img {
165
+ transition: none;
166
+ }
167
+ }
@@ -0,0 +1,177 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useState, type MouseEvent } from 'react';
4
+ import {
5
+ useOrionplaceBrowse,
6
+ useOrionplaceSelections,
7
+ } from '@/providers/OrionplaceProvider';
8
+ import type { IBlogPostPreview } from '@/interfaces/orionplace/blog/IBlogPostPreview';
9
+ import {
10
+ blogCoverInitial,
11
+ blogCoverPattern,
12
+ blogPostCover,
13
+ blogPostIsPaid,
14
+ blogPostPreview,
15
+ blogPostTitle,
16
+ } from '@/lib/orionplace/blogPresentation';
17
+ import { blogLabels } from '@/lib/orionplace/blogLabels';
18
+ import styles from './BlogPostCard.module.css';
19
+
20
+ export interface BlogPostCardProps {
21
+ postId: number;
22
+ post?: IBlogPostPreview;
23
+ layout?: 'portrait' | 'list' | 'hero';
24
+ articlePath?: string;
25
+ onSelect?: (post: IBlogPostPreview) => void;
26
+ }
27
+
28
+ export function BlogPostCard({
29
+ postId,
30
+ post: suppliedPost,
31
+ layout = 'portrait',
32
+ articlePath = '',
33
+ onSelect,
34
+ }: BlogPostCardProps) {
35
+ const storedPost = useOrionplaceBrowse((state) =>
36
+ state.blogPosts.find((item) => item.id === postId),
37
+ );
38
+ const post = suppliedPost?.id === postId ? suppliedPost : storedPost;
39
+ const locale = useOrionplaceSelections((state) => state.localeCode);
40
+ const labels = blogLabels(locale);
41
+ const [coverFailed, setCoverFailed] = useState(false);
42
+ const title = post ? blogPostTitle(post, locale) : String(postId);
43
+ const preview = post ? blogPostPreview(post, locale) : '';
44
+ const cover = post ? blogPostCover(post) : '';
45
+ const showCover = Boolean(cover) && !coverFailed;
46
+ const href = articlePath
47
+ ? `${articlePath.replace(/\/+$/, '')}/${postId}?locale=${encodeURIComponent(locale)}`
48
+ : '';
49
+
50
+ useEffect(() => {
51
+ setCoverFailed(false);
52
+ }, [cover]);
53
+
54
+ if (!post) {
55
+ return null;
56
+ }
57
+
58
+ function select(event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) {
59
+ if (!event.defaultPrevented) {
60
+ onSelect?.(post!);
61
+ }
62
+ }
63
+
64
+ const content = (
65
+ <>
66
+ <span className={styles.cover}>
67
+ {showCover ? (
68
+ <img
69
+ src={cover}
70
+ alt=""
71
+ width={600}
72
+ height={400}
73
+ loading="lazy"
74
+ decoding="async"
75
+ data-blog-card-cover
76
+ onError={() => setCoverFailed(true)}
77
+ />
78
+ ) : (
79
+ <CoverFallback
80
+ postId={post.id}
81
+ title={title}
82
+ />
83
+ )}
84
+ {blogPostIsPaid(post) ? (
85
+ <span className={styles.paid}>{labels.subscription}</span>
86
+ ) : null}
87
+ </span>
88
+ <span className={styles.copy}>
89
+ {post.date_created?.date || post.read_time_min ? (
90
+ <span className={styles.meta}>
91
+ {post.date_created?.date ? (
92
+ <time>{post.date_created.date}</time>
93
+ ) : null}
94
+ {post.read_time_min ? (
95
+ <span>{post.read_time_min} {labels.minutes}</span>
96
+ ) : null}
97
+ </span>
98
+ ) : null}
99
+ <span className={styles.title}>{title}</span>
100
+ {preview ? <span className={styles.preview}>{preview}</span> : null}
101
+ </span>
102
+ </>
103
+ );
104
+
105
+ return (
106
+ <article
107
+ className={styles.article}
108
+ data-blog-card={layout}
109
+ data-blog-post={post.id}
110
+ >
111
+ {href ? (
112
+ <a
113
+ href={href}
114
+ className={styles.card}
115
+ data-layout={layout}
116
+ onClick={select}
117
+ >
118
+ {content}
119
+ </a>
120
+ ) : (
121
+ <button
122
+ type="button"
123
+ className={styles.card}
124
+ data-layout={layout}
125
+ onClick={select}
126
+ >
127
+ {content}
128
+ </button>
129
+ )}
130
+ </article>
131
+ );
132
+ }
133
+
134
+ function CoverFallback({ postId, title }: { postId: number; title: string }) {
135
+ const pattern = blogCoverPattern(postId);
136
+ const initial = blogCoverInitial(title);
137
+ return (
138
+ <span className={styles.fallback} data-blog-cover-fallback aria-hidden="true">
139
+ <svg
140
+ className={styles.pattern}
141
+ preserveAspectRatio="xMidYMid slice"
142
+ viewBox="0 0 300 200"
143
+ fill="none"
144
+ stroke="currentColor"
145
+ strokeWidth="1"
146
+ >
147
+ {pattern === 0 ? Array.from({ length: 16 }, (_, index) => (
148
+ <path
149
+ key={index}
150
+ d={`M${(index + 1) * 24 - 60} 200 L${(index + 1) * 24 + 40} 0`}
151
+ />
152
+ )) : null}
153
+ {pattern === 1 ? Array.from({ length: 7 }, (_, index) => (
154
+ <circle key={index} cx="150" cy="100" r={(index + 1) * 22} />
155
+ )) : null}
156
+ {pattern === 2 ? Array.from({ length: 9 }, (_, index) => (
157
+ <path key={index} d={`M0 ${(index + 1) * 22} H300`} />
158
+ )) : null}
159
+ </svg>
160
+ <span className={styles.initial}>
161
+ {initial || (
162
+ <svg
163
+ viewBox="0 0 24 24"
164
+ fill="none"
165
+ stroke="currentColor"
166
+ strokeWidth="1.5"
167
+ strokeLinecap="round"
168
+ strokeLinejoin="round"
169
+ >
170
+ <path d="M6 3h9l3 3v15H6z" />
171
+ <path d="M9 10h6M9 14h6M9 18h4" />
172
+ </svg>
173
+ )}
174
+ </span>
175
+ </span>
176
+ );
177
+ }
@@ -0,0 +1,49 @@
1
+ # BlogPostGroup
2
+
3
+ ## English
4
+
5
+ `BlogPostGroup` renders `posts` when a server page supplies them; otherwise it
6
+ uses `orionplaceBrowse.blogPosts`. Application Load
7
+ `visual_settings.blog_view_type` selects a portrait grid, a list or the custom
8
+ composition. The custom composition shows the first post as a hero and groups
9
+ the remaining posts in their original order. An empty collection shows the
10
+ journal empty state.
11
+
12
+ `articlePath` and every `onSelect` event are forwarded to `BlogPostCard`.
13
+
14
+ Columns follow the width of the group itself, not the screen width: the
15
+ portrait grid has two columns from 592px and three from 912px, a custom group
16
+ puts its cards side by side from 664px, and list and hero cards place the cover
17
+ beside the text from 592px.
18
+
19
+ ### Props
20
+
21
+ | Prop | Meaning |
22
+ | --------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
23
+ | `posts?: readonly IBlogPostPreview[]` | Journal articles rendered in the supplied order. |
24
+ | `articlePath?: string` | Base storefront path used to build article links. |
25
+ | `onSelect?: (post: IBlogPostPreview) => void` | Passes the article object selected in one of the list’s cards. |
26
+
27
+ ## Русский
28
+
29
+ `BlogPostGroup` выводит переданные серверной страницей `posts`, а без них —
30
+ публикации из `orionplaceBrowse.blogPosts`. Настройка
31
+ Application Load `visual_settings.blog_view_type` выбирает сетку вертикальных
32
+ карточек, список или специальную композицию. В специальной композиции первая
33
+ публикация показана крупно, а остальные объединены в группы с сохранением
34
+ исходного порядка. Для пустого списка показывается состояние пустого журнала.
35
+
36
+ `articlePath` и каждое событие `onSelect` передаются через `BlogPostCard`.
37
+
38
+ Колонки зависят от ширины самой группы, а не экрана: сетка вертикальных
39
+ карточек получает две колонки с 592px и три с 912px, группа специальной
40
+ композиции ставит карточки рядом с 664px, а у карточек списка и крупных
41
+ карточек обложка стоит рядом с текстом с 592px.
42
+
43
+ ### Свойства
44
+
45
+ | Свойство | Назначение |
46
+ | --------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
47
+ | `posts?: readonly IBlogPostPreview[]` | Статьи журнала в переданном порядке. |
48
+ | `articlePath?: string` | Базовый путь магазина для ссылок на статьи. |
49
+ | `onSelect?: (post: IBlogPostPreview) => void` | Передаёт объект статьи, выбранной в одной из карточек списка. |
@@ -0,0 +1,37 @@
1
+ /* Columns follow the width of this group, not of the screen: 592, 664 and
2
+ 912px are its widths in the /journal page on 640, 1024 and 1280px
3
+ screens. The cards take their list and hero layout from it too. */
4
+ .group {
5
+ container: posts / inline-size;
6
+ }
7
+
8
+ .grid,
9
+ .custom,
10
+ .customGroup,
11
+ .customRemainder {
12
+ display: grid;
13
+ gap: 1.5rem;
14
+ }
15
+
16
+ .grid,
17
+ .custom {
18
+ row-gap: 2.5rem;
19
+ }
20
+
21
+ @container posts (min-width: 592px) {
22
+ .grid[data-layout='portrait'] {
23
+ grid-template-columns: repeat(2, minmax(0, 1fr));
24
+ }
25
+ }
26
+
27
+ @container posts (min-width: 664px) {
28
+ .customGroup[data-columns='two'] {
29
+ grid-template-columns: repeat(2, minmax(0, 1fr));
30
+ }
31
+ }
32
+
33
+ @container posts (min-width: 912px) {
34
+ .grid[data-layout='portrait'] {
35
+ grid-template-columns: repeat(3, minmax(0, 1fr));
36
+ }
37
+ }
@@ -0,0 +1,129 @@
1
+ 'use client';
2
+
3
+ import {
4
+ useOrionplace,
5
+ useOrionplaceBrowse,
6
+ useOrionplaceSelections,
7
+ } from '@/providers/OrionplaceProvider';
8
+ import { selectInit } from '@/stores/orionplace';
9
+ import {
10
+ EBlogViewType,
11
+ type IBlogPostPreview,
12
+ } from '@/interfaces/orionplace/blog/IBlogPostPreview';
13
+ import {
14
+ blogCustomGroups,
15
+ blogViewType,
16
+ } from '@/lib/orionplace/blogPresentation';
17
+ import { blogLabels } from '@/lib/orionplace/blogLabels';
18
+ import { BlogPostCard } from '@/components/orionplace/blog/BlogPostCard';
19
+ import { OrionplaceEmptyState } from '@/components/orionplace/shared/OrionplaceEmptyState';
20
+ import styles from './BlogPostGroup.module.css';
21
+
22
+ export interface BlogPostGroupProps {
23
+ posts?: readonly IBlogPostPreview[];
24
+ articlePath?: string;
25
+ onSelect?: (post: IBlogPostPreview) => void;
26
+ }
27
+
28
+ export function BlogPostGroup({
29
+ posts: suppliedPosts,
30
+ articlePath = '',
31
+ onSelect,
32
+ }: BlogPostGroupProps) {
33
+ const init = useOrionplace(selectInit);
34
+ const storedPosts = useOrionplaceBrowse((state) => state.blogPosts);
35
+ const posts = suppliedPosts ?? storedPosts;
36
+ const locale = useOrionplaceSelections((state) => state.localeCode);
37
+ const view = blogViewType(init?.visual_settings?.blog_view_type);
38
+ const labels = blogLabels(locale);
39
+
40
+ if (!posts.length) {
41
+ return (
42
+ <section
43
+ className={styles.group}
44
+ aria-label={labels.journal}
45
+ data-blog-view={view}
46
+ >
47
+ <OrionplaceEmptyState
48
+ kind="journal"
49
+ size="large"
50
+ message={labels.emptyJournal}
51
+ />
52
+ </section>
53
+ );
54
+ }
55
+
56
+ if (view === EBlogViewType.CUSTOM) {
57
+ return (
58
+ <section
59
+ className={styles.group}
60
+ aria-label={labels.journal}
61
+ data-blog-view={view}
62
+ >
63
+ <div className={styles.custom}>
64
+ <BlogPostCard
65
+ postId={posts[0]!.id}
66
+ post={posts[0]}
67
+ layout="hero"
68
+ articlePath={articlePath}
69
+ onSelect={onSelect}
70
+ />
71
+ {blogCustomGroups(posts).map((group) => (
72
+ <div
73
+ key={group[0]!.id}
74
+ className={styles.customGroup}
75
+ data-blog-custom-group
76
+ data-columns={group.length > 1 ? 'two' : 'one'}
77
+ >
78
+ <BlogPostCard
79
+ postId={group[0]!.id}
80
+ post={group[0]}
81
+ layout={group.length === 1 ? 'hero' : 'portrait'}
82
+ articlePath={articlePath}
83
+ onSelect={onSelect}
84
+ />
85
+ {group.length > 1 ? (
86
+ <div className={styles.customRemainder}>
87
+ {group.slice(1).map((post) => (
88
+ <BlogPostCard
89
+ key={post.id}
90
+ postId={post.id}
91
+ post={post}
92
+ layout={group.length === 2 ? 'portrait' : 'list'}
93
+ articlePath={articlePath}
94
+ onSelect={onSelect}
95
+ />
96
+ ))}
97
+ </div>
98
+ ) : null}
99
+ </div>
100
+ ))}
101
+ </div>
102
+ </section>
103
+ );
104
+ }
105
+
106
+ return (
107
+ <section
108
+ className={styles.group}
109
+ aria-label={labels.journal}
110
+ data-blog-view={view}
111
+ >
112
+ <div
113
+ className={styles.grid}
114
+ data-layout={view === EBlogViewType.LIST ? 'list' : 'portrait'}
115
+ >
116
+ {posts.map((post) => (
117
+ <BlogPostCard
118
+ key={post.id}
119
+ postId={post.id}
120
+ post={post}
121
+ layout={view === EBlogViewType.LIST ? 'list' : 'portrait'}
122
+ articlePath={articlePath}
123
+ onSelect={onSelect}
124
+ />
125
+ ))}
126
+ </div>
127
+ </section>
128
+ );
129
+ }
@@ -0,0 +1,105 @@
1
+ # StorefrontJournal
2
+
3
+ ## English
4
+
5
+ `StorefrontJournal` shows the journal list with category and author filters.
6
+ `page` is the current list page and `onPageChange` lets the route keep that
7
+ value in its address. A route can pass `initial` from its server request when
8
+ its page and layout match the current values. The first server HTML then
9
+ contains links to every returned article, and hydration does not repeat the
10
+ request. Without matching initial data, `onLoad` receives `blog_posts_get`
11
+ with the current page and enough items to fill whole rows of the layout selected
12
+ by `visual_settings.blog_view_type`.
13
+
14
+ The heading uses `posts.rpag.selected_count`, which is the number of articles
15
+ matching the current filters. Category checkboxes send IDs in
16
+ `filters.categories`; author checkboxes send IDs in `filters.writers`. A
17
+ category can represent articles in its public descendants. The category and
18
+ author choices come from the first successful response and remain available
19
+ while results are filtered. A category is hidden when neither it nor its
20
+ descendants contain articles.
21
+
22
+ Changing a filter returns to page one. Reset clears both groups. Page changes
23
+ keep the selected filters and preserve pagination values that later responses
24
+ omit. The previous list remains visible while a later request is pending. An
25
+ initial request uses a layout-shaped placeholder. A filtered empty response
26
+ shows Reset; a failed request keeps a Retry action.
27
+
28
+ When `articlePath` is set, every card links to
29
+ `{articlePath}/{id}?locale=<selected locale>` and still calls `onSelect` with
30
+ the article ID. The link is present in server HTML and supports normal browser
31
+ navigation. Without `articlePath`, selecting a card replaces the list with
32
+ `BlogArticle`; `articleProps` provides that article's API and product handlers,
33
+ and its Back action restores the list.
34
+
35
+ The layout follows the width of the component itself, not the screen width, so
36
+ it is the same wherever the component is placed: from 960px of its own width
37
+ the filters stand in a column beside the articles (it stays in view while the
38
+ articles scroll and scrolls on its own when it is taller than the window), and a
39
+ narrower journal opens them with its Filters button. The article columns follow
40
+ the width of the list:
41
+ two portrait columns from 592px and three from 912px.
42
+
43
+ ### Props
44
+
45
+ | Prop | Meaning |
46
+ | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
47
+ | `articlePath?: string` | Base storefront path used to build article links. |
48
+ | `initial?: BlogJournalPage` | Server-provided initial data used for the first render and hydration. |
49
+ | `page?: number` | Current result page. |
50
+ | `onPageChange?: (page: number) => void` | Called when the visitor requests another page. The callback payload is shown in its type. |
51
+ | `onLoad?: (action: BlogJournalLoadAction) => Promise<BlogPostsPage \| null \| undefined> \| BlogPostsPage \| null \| undefined` | Called when the component needs its primary data. The callback payload is shown in its type. |
52
+ | `onSelect?: (postId: number) => void` | Passes the selected article ID after changing the open article when the application does not control `postId`. |
53
+ | `articleProps?: Omit<BlogArticleProps, "onBack" \| "postId">` | Props forwarded to the article child component. |
54
+
55
+ ## Русский
56
+
57
+ `StorefrontJournal` показывает список статей с фильтрами по категориям и
58
+ авторам. `page` задаёт текущую страницу, а `onPageChange` позволяет маршруту
59
+ хранить это значение в адресе. Маршрут может передать `initial` из серверного
60
+ запроса, если страница и вид списка совпадают с текущими значениями. Тогда
61
+ первый серверный HTML уже содержит ссылки на все полученные статьи, а после
62
+ гидратации запрос не повторяется. Без подходящих начальных данных `onLoad`
63
+ получает `blog_posts_get` с текущей страницей и количеством статей, которое
64
+ заполняет целые ряды вида из `visual_settings.blog_view_type`.
65
+
66
+ В заголовке используется `posts.rpag.selected_count`: это количество статей,
67
+ подходящих под текущие фильтры. Флажки категорий передают ID в
68
+ `filters.categories`, а флажки авторов — в `filters.writers`. Категория также
69
+ может находить статьи в своих публичных дочерних категориях. Варианты
70
+ категорий и авторов берутся из первого успешного ответа и не исчезают во время
71
+ фильтрации. Категория скрыта, если статей нет ни в ней, ни в её дочерних
72
+ категориях.
73
+
74
+ Изменение фильтра возвращает список на первую страницу. Сброс очищает оба
75
+ набора. При переходе между страницами выбранные фильтры сохраняются, как и
76
+ значения пагинации, которые могут отсутствовать в последующих ответах. Во
77
+ время следующего запроса прежний список остаётся видимым. Для первого запроса
78
+ показывается заполнитель выбранного вида. Пустой результат с фильтрами даёт
79
+ действие сброса, а ошибка — действие повторного запроса.
80
+
81
+ Если передан `articlePath`, каждая карточка содержит ссылку
82
+ `{articlePath}/{id}?locale=<выбранная локаль>` и вызывает `onSelect` с ID
83
+ статьи. Ссылка присутствует в серверном HTML и поддерживает обычную навигацию
84
+ браузера. Без `articlePath` выбор карточки заменяет список компонентом
85
+ `BlogArticle`. `articleProps` передаёт ему обработчики API и товаров, а действие
86
+ «Назад» восстанавливает список.
87
+
88
+ Раскладка зависит от ширины самого компонента, а не экрана, поэтому она
89
+ одинакова, где бы компонент ни стоял: начиная с 960px собственной ширины
90
+ фильтры стоят колонкой рядом со статьями (она остаётся на виду при прокрутке
91
+ статей и прокручивается сама, если выше окна), а в более узком журнале их
92
+ открывает кнопка «Фильтры». Колонки статей зависят от ширины списка: две колонки
93
+ вертикальных карточек с 592px и три с 912px.
94
+
95
+ ### Свойства
96
+
97
+ | Свойство | Назначение |
98
+ | ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
99
+ | `articlePath?: string` | Базовый путь магазина для ссылок на статьи. |
100
+ | `initial?: BlogJournalPage` | Начальные данные с сервера для первого рендера и гидратации. |
101
+ | `page?: number` | Текущая страница результата. |
102
+ | `onPageChange?: (page: number) => void` | Вызывается, когда покупатель открывает другую страницу. Данные обработчика указаны в его типе. |
103
+ | `onLoad?: (action: BlogJournalLoadAction) => Promise<BlogPostsPage \| null \| undefined> \| BlogPostsPage \| null \| undefined` | Вызывается, когда компоненту нужны основные данные. Данные обработчика указаны в его типе. |
104
+ | `onSelect?: (postId: number) => void` | Передаёт ID выбранной статьи после изменения открытой статьи, если `postId` не управляется приложением. |
105
+ | `articleProps?: Omit<BlogArticleProps, "onBack" \| "postId">` | Свойства, передаваемые дочернему компоненту статьи. |