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,159 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useMemo, useState } from 'react';
4
+ import type { MouseEvent } from 'react';
5
+ import {
6
+ useOrionplace,
7
+ useOrionplaceSelections,
8
+ } from '@/providers/OrionplaceProvider';
9
+ import { selectInit } from '@/stores/orionplace';
10
+ import type {
11
+ IAppLoadCommonBanner,
12
+ TBannerFormats,
13
+ } from '@/interfaces/orionplace';
14
+ import { useOrionplaceMediaFormat } from '@/hooks/useOrionplaceMediaFormat';
15
+ import { bannerFormatSizes, homeBannerSlides } from '@/lib/orionplace/homeContent';
16
+ import { homeLabels } from '@/lib/orionplace/homeLabels';
17
+ import { safePublicUrl } from '@/lib/orionplace/presentation';
18
+ import { OrionplaceImage } from '@/components/orionplace/shared/OrionplaceImage';
19
+ import styles from './MainBanner.module.css';
20
+
21
+ export interface MainBannerProps {
22
+ label?: string;
23
+ format?: TBannerFormats | 'auto';
24
+ categoryHref?: (categoryId: number) => string;
25
+ onSelect?: (banner: IAppLoadCommonBanner) => void;
26
+ }
27
+
28
+ export function MainBanner({
29
+ label = '',
30
+ format = 'auto',
31
+ categoryHref,
32
+ onSelect,
33
+ }: MainBannerProps) {
34
+ const init = useOrionplace(selectInit);
35
+ const locale = useOrionplaceSelections((state) => state.localeCode);
36
+ const mediaFormat = useOrionplaceMediaFormat();
37
+ const copy = homeLabels(locale);
38
+ const selectedFormat = format === 'auto' ? mediaFormat : format;
39
+ // The box has the shape of the chosen format's picture.
40
+ const size = bannerFormatSizes[selectedFormat];
41
+ const shape = { aspectRatio: `${size.width} / ${size.height}` };
42
+ const slides = useMemo(
43
+ () => homeBannerSlides(init, locale, selectedFormat),
44
+ [init, locale, selectedFormat],
45
+ );
46
+ const [index, setIndex] = useState(0);
47
+ const activeIndex = index < slides.length ? index : 0;
48
+ const active = slides[activeIndex];
49
+ const category = active?.banner.category;
50
+ const linked = category != null;
51
+ const href = linked && categoryHref
52
+ ? safePublicUrl(categoryHref(category))
53
+ : '';
54
+
55
+ useEffect(() => {
56
+ setIndex(0);
57
+ }, [slides]);
58
+
59
+ function move(offset: number) {
60
+ if (!slides.length) {
61
+ return;
62
+ }
63
+ setIndex((current) => (
64
+ current + offset + slides.length
65
+ ) % slides.length);
66
+ }
67
+
68
+ function select(event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) {
69
+ const modified = event.button > 0 || event.metaKey || event.ctrlKey ||
70
+ event.shiftKey || event.altKey;
71
+ if (href && modified) {
72
+ return;
73
+ }
74
+
75
+ event.preventDefault();
76
+ if (active && linked) {
77
+ onSelect?.(active.banner);
78
+ }
79
+ }
80
+
81
+ if (!active) {
82
+ return null;
83
+ }
84
+
85
+ const caption = label || copy.banner;
86
+ const media = (
87
+ <OrionplaceImage
88
+ src={active.src}
89
+ alt={`${caption} · ${activeIndex + 1}`}
90
+ width={size.width}
91
+ height={size.height}
92
+ loading="eager"
93
+ className={styles.image}
94
+ />
95
+ );
96
+ const banner = href ? (
97
+ <a
98
+ href={href}
99
+ data-banner-id={active.banner.id}
100
+ style={shape}
101
+ className={`${styles.banner} ${styles.interactive}`}
102
+ onClick={select}
103
+ >
104
+ {media}
105
+ </a>
106
+ ) : linked ? (
107
+ <button
108
+ type="button"
109
+ data-banner-id={active.banner.id}
110
+ style={shape}
111
+ className={`${styles.banner} ${styles.interactive}`}
112
+ onClick={select}
113
+ >
114
+ {media}
115
+ </button>
116
+ ) : (
117
+ <div
118
+ data-banner-id={active.banner.id}
119
+ style={shape}
120
+ className={styles.banner}
121
+ >
122
+ {media}
123
+ </div>
124
+ );
125
+
126
+ return (
127
+ <section
128
+ className={styles.root}
129
+ data-main-banner
130
+ aria-label={caption}
131
+ aria-roledescription="carousel"
132
+ >
133
+ {banner}
134
+ {slides.length > 1 && (
135
+ <div className={styles.controls}>
136
+ <span role="status" aria-live="polite" className={styles.counter}>
137
+ {activeIndex + 1} / {slides.length}
138
+ </span>
139
+ <button
140
+ type="button"
141
+ aria-label={copy.previous}
142
+ className={styles.control}
143
+ onClick={() => move(-1)}
144
+ >
145
+ ←
146
+ </button>
147
+ <button
148
+ type="button"
149
+ aria-label={copy.next}
150
+ className={styles.control}
151
+ onClick={() => move(1)}
152
+ >
153
+ →
154
+ </button>
155
+ </div>
156
+ )}
157
+ </section>
158
+ );
159
+ }
@@ -0,0 +1,143 @@
1
+ # BlogArticle
2
+
3
+ ## English
4
+
5
+ `BlogArticle` shows one journal article, its subscription access state, attached
6
+ products and discussion. `postId` identifies the article. A route can pass the
7
+ matching `initialPost` from its server request; the first server HTML then
8
+ contains the title, author, date, cover dimensions and readable article text,
9
+ and the browser does not repeat the request. Without that value, `onLoad`
10
+ receives `blog_posts_get` with `filters.id = postId`, page 1 and one requested
11
+ item. A successful empty result calls `onMissing` only until an article has
12
+ been shown. If a previously shown article disappears after the session changes,
13
+ the component shows its unavailable state instead.
14
+
15
+ Full text appears only while both `is_full` and `has_full_access` are true.
16
+ Otherwise the component uses `post_preview_text` and links to `/tariffs` with
17
+ the selected locale. When `premium_tariff_ids` contains plan IDs, the link also
18
+ passes them in `ids`. The cover uses the earliest `preview_images` item, then
19
+ the first `preview_image_urls` value. It reserves a 3:2 area and disappears if
20
+ the image fails. Article videos accept HTTP or HTTPS addresses and the
21
+ backend's `/ps3/...` paths. In an Android app build those paths (cover, videos,
22
+ images and videos inside the text) load from the storefront address.
23
+
24
+ During server rendering, editor HTML is converted to escaped text paragraphs.
25
+ After hydration, DOMPurify replaces those paragraphs with sanitized formatting.
26
+ The allowlist retains headings, text formatting, links, lists, quotes, code,
27
+ tables, images and galleries, audio and video controls, collapsible sections,
28
+ alignment and supported text styles. External links open in a new tab with
29
+ `noopener noreferrer`; editor article links use `/journal/<id>`. Scripts,
30
+ frames, forms, event attributes, unsafe URLs and unsupported styles are removed.
31
+ A leading heading that repeats the page title is removed.
32
+
33
+ For an authenticated, accessible non-public article with a positive reading
34
+ time, trusted interaction with visible article text calls `onReading` with
35
+ `blog_reading_start`. Timely follow-up requests use
36
+ `blog_reading_heartbeat` and the interval returned by the previous response.
37
+ Hiding the page, moving away, losing focus or becoming inactive pauses the
38
+ requests. A 401, 403 or returned field error removes the full text and shows
39
+ the access-changed notice.
40
+
41
+ `related_products` supplies complete product objects to `ProductGroup`, so
42
+ their standard cards are present during server rendering. The product callbacks
43
+ forward the same payloads as `ProductGroup`; `productActionsDisabled` blocks
44
+ their actions while the host is processing a request. `commentsProps` controls
45
+ the article's `BlogComments` instance. Authentication changes reload the
46
+ article. Loading, refreshable failure, access change and unavailable states are
47
+ separate.
48
+
49
+ ### Props
50
+
51
+ | Prop | Meaning |
52
+ | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
53
+ | `postId: number` | ID of the post handled by BlogArticle. |
54
+ | `productActionsDisabled?: boolean` | Disables cart, wishlist, subscription and preorder actions. |
55
+ | `initialPost?: IBlogPost` | Server-provided initial post used for the first render and hydration. |
56
+ | `commentsProps?: Omit<BlogCommentsProps, "postId">` | Props forwarded to the comments child component. |
57
+ | `onLoad?: (action: BlogArticleLoadAction) => Promise<IBlogPost \| null \| undefined> \| IBlogPost \| null \| undefined` | Called when the component needs its primary data. The callback payload is shown in its type. |
58
+ | `onReading?: (action: BlogReadingAction) => Promise<IBlogReadingData> \| IBlogReadingData` | Called when the article reading session starts, continues or stops. The callback payload is shown in its type. |
59
+ | `onBack?: () => void` | Called when the visitor chooses Back. The callback has no payload. |
60
+ | `onLoaded?: (post: IBlogPost) => void` | Called when the requested data loads successfully. The callback payload is shown in its type. |
61
+ | `onMissing?: () => void` | Called when the requested public record does not exist. The callback has no payload. |
62
+ | `onSelect?: (product: IProduct) => void` | Passes the displayed product object when its image or name is selected. The application handles product navigation. |
63
+ | `onSelectSeller?: (seller: IProductSeller) => void` | Passes the displayed product’s seller object when the seller is selected. The application opens the seller page. |
64
+ | `onSelectVariant?: (selection: ProductActionSelection & { variant: IProductVariantValue; }) => void` | Passes the previously displayed product ID in `product` and chosen primary variant in `variant`. An available variant product replaces the card; the application loads missing product data. |
65
+ | `onRequestSecondaryVariants?: (request: IProductSecondaryVariantRequest) => void` | Passes the product ID in `product`, product group ID in `productGroup` and primary variant in `variant` when its secondary variants need loading. The application loads them and supplies them to the product store. |
66
+ | `onSelectSecondaryVariant?: (selection: ProductActionSelection & { variant: IProductSecondaryVariant; }) => void` | Passes the previously displayed product ID in `product` and chosen secondary variant in `variant` after replacing the displayed product. The secondary-variant data remains available. |
67
+ | `onToggleFavorite?: (selection: ProductActionSelection & { selected: boolean; }) => void` | Passes the product ID in `product` and desired wishlist state in `selected` after the heart is pressed. The application confirms the change with a request and updates product data. |
68
+ | `onAdd?: (selection: ProductActionSelection & { quantity: number; }) => void` | Passes the product ID in `product` and the requested total quantity in `quantity` when adding an item or changing its quantity. The application sends the request and supplies confirmed product data. |
69
+ | `onRemove?: (selection: ProductActionSelection & { cartItem: number; }) => void` | Passes the product ID in `product` and cart item ID in `cartItem` when removing the last unit. The application removes that cart item and supplies confirmed product data. |
70
+ | `onSubscribe?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when an availability notification is requested. The application handles any required sign-in, sends the request and updates subscription state. |
71
+ | `onUnsubscribe?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when cancelling an availability notification. The application sends the request and supplies the confirmed subscription state. |
72
+ | `onPreorder?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when preorder is selected. The application collects the required contact details and submits the request. |
73
+
74
+ ## Русский
75
+
76
+ `BlogArticle` показывает одну статью журнала, её доступ по подписке,
77
+ прикреплённые товары и обсуждение. `postId` задаёт статью. Маршрут может
78
+ передать подходящий `initialPost`, полученный серверным запросом. Тогда первый
79
+ серверный HTML уже содержит название, автора, дату, размеры обложки и
80
+ читаемый текст, а браузер не повторяет запрос. Без этого значения `onLoad`
81
+ получает `blog_posts_get` с `filters.id = postId`, первой страницей и одним
82
+ запрошенным элементом. Первый успешный пустой результат вызывает `onMissing`.
83
+ Если ранее показанная статья исчезла после смены сессии, компонент оставляет
84
+ на странице состояние недоступной статьи.
85
+
86
+ Полный текст показывается, только когда `is_full` и `has_full_access` равны
87
+ `true`. В остальных случаях компонент использует `post_preview_text` и даёт
88
+ ссылку на `/tariffs` с выбранной локалью. Если в `premium_tariff_ids` есть
89
+ ID тарифов, ссылка также передаёт их в `ids`. Для обложки используется первое
90
+ по `display_order` изображение из `preview_images`, затем первое значение
91
+ `preview_image_urls`. Область сохраняет пропорции 3:2. После ошибки загрузки
92
+ обложка исчезает. Компонент выводит только видео с адресами HTTP или HTTPS.
93
+
94
+ При серверном рендеринге HTML редактора превращается в экранированные
95
+ текстовые абзацы. После гидратации DOMPurify заменяет их очищенным
96
+ форматированным HTML. Разрешены заголовки, оформление текста, ссылки, списки,
97
+ цитаты, код, таблицы, изображения и галереи, аудио и видео с управлением,
98
+ раскрываемые разделы, выравнивание и поддерживаемые стили текста. Внешние
99
+ ссылки открываются в новой вкладке с `noopener noreferrer`, а ссылки редактора
100
+ на статьи ведут на `/journal/<id>`. Скрипты, фреймы, формы, обработчики
101
+ событий, небезопасные адреса и неподдерживаемые стили удаляются. Первый
102
+ заголовок, повторяющий название страницы, удаляется.
103
+
104
+ Для вошедшего покупателя чтение доступной непубличной статьи с положительным
105
+ временем чтения учитывается после реального действия внутри видимого текста.
106
+ Первый вызов `onReading` передаёт `blog_reading_start`, следующие
107
+ своевременные вызовы — `blog_reading_heartbeat` с интервалом из предыдущего
108
+ ответа. Скрытие страницы, уход от текста, потеря фокуса и отсутствие действий
109
+ приостанавливают запросы. Ответ 401, 403 или ошибка поля удаляет полный текст
110
+ и показывает сообщение об изменении доступа.
111
+
112
+ `related_products` передаёт полные объекты товаров в `ProductGroup`, поэтому
113
+ обычные карточки есть уже в серверном HTML. Обработчики товаров получают те
114
+ же данные, что и в `ProductGroup`; `productActionsDisabled` блокирует
115
+ действия, пока магазин обрабатывает запрос. `commentsProps` управляет
116
+ экземпляром `BlogComments` этой статьи. При смене авторизации статья
117
+ загружается снова. Загрузка, ошибка с повтором, изменение доступа и
118
+ недоступная статья показаны как отдельные состояния.
119
+
120
+ ### Свойства
121
+
122
+ | Свойство | Назначение |
123
+ | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
124
+ | `postId: number` | ID статьи, с которым работает BlogArticle. |
125
+ | `productActionsDisabled?: boolean` | Блокирует корзину, избранное, подписку и предзаказ. |
126
+ | `initialPost?: IBlogPost` | Начальное значение статьи, полученное на сервере для первого рендера и гидратации. |
127
+ | `commentsProps?: Omit<BlogCommentsProps, "postId">` | Свойства, передаваемые дочернему компоненту комментариев. |
128
+ | `onLoad?: (action: BlogArticleLoadAction) => Promise<IBlogPost \| null \| undefined> \| IBlogPost \| null \| undefined` | Вызывается, когда компоненту нужны основные данные. Данные обработчика указаны в его типе. |
129
+ | `onReading?: (action: BlogReadingAction) => Promise<IBlogReadingData> \| IBlogReadingData` | Вызывается, когда сеанс чтения статьи начинается, продолжается или завершается. Данные обработчика указаны в его типе. |
130
+ | `onBack?: () => void` | Вызывается, когда покупатель выбирает «Назад». Обработчик не получает данные. |
131
+ | `onLoaded?: (post: IBlogPost) => void` | Вызывается, когда запрошенные данные успешно загружены. Данные обработчика указаны в его типе. |
132
+ | `onMissing?: () => void` | Вызывается, когда запрошенная общедоступная запись не существует. Обработчик не получает данные. |
133
+ | `onSelect?: (product: IProduct) => void` | Передаёт объект отображаемого товара при выборе его изображения или названия. Приложение выполняет переход к товару. |
134
+ | `onSelectSeller?: (seller: IProductSeller) => void` | Передаёт объект продавца отображаемого товара при выборе продавца. Приложение открывает его страницу. |
135
+ | `onSelectVariant?: (selection: ProductActionSelection & { variant: IProductVariantValue; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный основной вариант в `variant`. Доступный товар выбранного варианта заменяет карточку; отсутствующие данные загружает приложение. |
136
+ | `onRequestSecondaryVariants?: (request: IProductSecondaryVariantRequest) => void` | Передаёт ID товара в `product`, ID группы товаров в `productGroup` и основной вариант в `variant`, когда для него нужно загрузить дополнительные варианты. Приложение загружает и передаёт их в хранилище товаров. |
137
+ | `onSelectSecondaryVariant?: (selection: ProductActionSelection & { variant: IProductSecondaryVariant; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный дополнительный вариант в `variant` после замены отображаемого товара. Выбор сохраняет данные дополнительных вариантов. |
138
+ | `onToggleFavorite?: (selection: ProductActionSelection & { selected: boolean; }) => void` | Передаёт ID товара в `product` и желаемое состояние избранного в `selected` после нажатия сердца. Приложение подтверждает изменение запросом и обновляет данные товара. |
139
+ | `onAdd?: (selection: ProductActionSelection & { quantity: number; }) => void` | Передаёт `product` — ID товара и `quantity` — запрошенное итоговое количество при добавлении или изменении количества. Приложение выполняет запрос и передаёт подтверждённые данные товара. |
140
+ | `onRemove?: (selection: ProductActionSelection & { cartItem: number; }) => void` | Передаёт ID товара в `product` и ID позиции корзины в `cartItem` при удалении последней единицы. Приложение удаляет эту позицию и передаёт подтверждённые данные товара. |
141
+ | `onSubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе уведомления о поступлении. Приложение выполняет вход, если он нужен, отправляет запрос и обновляет состояние подписки. |
142
+ | `onUnsubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при отмене уведомления о поступлении. Приложение отправляет запрос и передаёт подтверждённое состояние подписки. |
143
+ | `onPreorder?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе предзаказа. Приложение собирает необходимые контактные данные и отправляет запрос. |
@@ -0,0 +1,304 @@
1
+ /* The gap and base text of `op-feature-stack` in the other packages. */
2
+ .feature,
3
+ .article,
4
+ .header,
5
+ .related {
6
+ display: grid;
7
+ min-width: 0;
8
+ gap: 1.25rem;
9
+ }
10
+
11
+ .feature {
12
+ color: var(--orionplace-text);
13
+ font-size: 0.875rem;
14
+ line-height: 1.5rem;
15
+ container: article / inline-size;
16
+ }
17
+
18
+ .article,
19
+ .skeleton {
20
+ width: 100%;
21
+ max-width: 45rem;
22
+ margin-inline: auto;
23
+ }
24
+
25
+ /* The shared storefront button, as op-feature-button in Nuxt and Svelte. */
26
+ .button {
27
+ composes: button from '../shared/features.module.css';
28
+ width: fit-content;
29
+ }
30
+
31
+ .error {
32
+ composes: notice noticeError from '../account/account.module.css';
33
+ }
34
+
35
+ .header h1 {
36
+ margin: 0;
37
+ font-size: 1.5rem;
38
+ font-weight: 500;
39
+ line-height: 1.25;
40
+ text-transform: uppercase;
41
+ letter-spacing: 0.04em;
42
+ }
43
+
44
+ .meta {
45
+ display: flex;
46
+ flex-wrap: wrap;
47
+ align-items: center;
48
+ gap: 0.75rem;
49
+ color: var(--orionplace-muted);
50
+ font-size: 0.75rem;
51
+ line-height: 1rem;
52
+ text-transform: uppercase;
53
+ letter-spacing: 0.08em;
54
+ }
55
+
56
+ .cover {
57
+ box-sizing: border-box;
58
+ display: block;
59
+ width: 100%;
60
+ height: auto;
61
+ aspect-ratio: 3 / 2;
62
+ object-fit: cover;
63
+ background: var(--orionplace-surface);
64
+ }
65
+
66
+ .prose {
67
+ min-width: 0;
68
+ overflow-wrap: anywhere;
69
+ line-height: 1.85;
70
+ }
71
+
72
+ .prose::after {
73
+ display: table;
74
+ clear: both;
75
+ content: '';
76
+ }
77
+
78
+ .prose :where(p, ul, ol, blockquote, pre, figure) {
79
+ margin: 1rem 0;
80
+ }
81
+
82
+ .prose :where(h1, h2, h3, h4, h5, h6, figure, table, pre) {
83
+ clear: both;
84
+ }
85
+
86
+ .prose :where(h1, h2, h3, h4, h5, h6) {
87
+ margin: 2rem 0 1rem;
88
+ font-weight: 500;
89
+ line-height: 1.3;
90
+ }
91
+
92
+ .prose h1 { font-size: 1.875rem; }
93
+ .prose h2 { font-size: 1.5rem; }
94
+ .prose h3 { font-size: 1.25rem; }
95
+ .prose h4 { font-size: 1.125rem; }
96
+ .prose h5 { font-size: 1rem; }
97
+ .prose h6 {
98
+ font-size: 0.875rem;
99
+ text-transform: uppercase;
100
+ letter-spacing: 0.08em;
101
+ }
102
+
103
+ .prose :where(strong, b) { font-weight: 500; }
104
+ .prose :where(sub, sup) { font-size: 0.75em; line-height: 0; }
105
+ .prose mark { color: inherit; background: var(--orionplace-attention-surface); }
106
+
107
+ .prose a {
108
+ border-bottom: 1px solid currentColor;
109
+ color: var(--orionplace-text);
110
+ text-decoration: none;
111
+ }
112
+
113
+ .prose a:not([href]) { border-bottom: 0; }
114
+ .prose a:focus-visible { color: var(--orionplace-accent); outline: none; }
115
+ @media (hover: hover) {
116
+ .prose a:hover {
117
+ color: var(--orionplace-accent);
118
+ outline: none;
119
+ }
120
+ }
121
+ .prose :where(ul, ol) { padding-left: 1.5rem; }
122
+ .prose ul { list-style: disc; }
123
+ .prose ol { list-style: decimal; }
124
+ .prose li > :where(ul, ol) { margin: 0.25rem 0; }
125
+ .prose li > p { margin: 0; }
126
+ .prose ul[data-type='taskList'] { padding-left: 0; list-style: none; }
127
+
128
+ .prose li[data-type='taskItem'] {
129
+ display: flex;
130
+ align-items: flex-start;
131
+ gap: 0.5rem;
132
+ }
133
+
134
+ .prose li[data-type='taskItem'] > label {
135
+ display: flex;
136
+ align-items: center;
137
+ min-height: 1.85em;
138
+ }
139
+
140
+ .prose blockquote {
141
+ padding-left: 1rem;
142
+ border-left: 2px solid var(--orionplace-border);
143
+ color: var(--orionplace-muted);
144
+ }
145
+
146
+ .prose hr {
147
+ margin: 2rem 0;
148
+ border: 0;
149
+ border-top: 1px solid var(--orionplace-border);
150
+ }
151
+
152
+ .prose code {
153
+ padding: 0.1em 0.3em;
154
+ background: var(--orionplace-muted-surface);
155
+ font-size: 0.875em;
156
+ }
157
+
158
+ .prose pre {
159
+ overflow-x: auto;
160
+ padding: 1rem;
161
+ border: 1px solid var(--orionplace-border);
162
+ background: var(--orionplace-muted-surface);
163
+ line-height: 1.6;
164
+ }
165
+
166
+ .prose pre code { padding: 0; background: transparent; }
167
+
168
+ .prose table {
169
+ display: block;
170
+ max-width: 100%;
171
+ overflow-x: auto;
172
+ margin: 1rem 0;
173
+ border-collapse: collapse;
174
+ }
175
+
176
+ .prose :where(th, td) {
177
+ padding: 0.5rem 0.75rem;
178
+ border: 1px solid var(--orionplace-border);
179
+ text-align: left;
180
+ vertical-align: top;
181
+ }
182
+
183
+ .prose :where(img, video, audio) { max-width: 100%; }
184
+ .prose img { height: auto; }
185
+ .prose figure { max-width: 100%; }
186
+ .prose figure > img { display: block; margin-inline: auto; }
187
+ .prose figcaption { margin-top: 0.5rem; color: var(--orionplace-muted); }
188
+
189
+ .prose :where(img, figure)[data-float='left'],
190
+ .prose :where(img, figure)[style*='float: left'] {
191
+ float: left;
192
+ max-width: 50%;
193
+ margin: 0.25rem 1.5rem 1rem 0;
194
+ }
195
+
196
+ .prose :where(img, figure)[data-float='right'],
197
+ .prose :where(img, figure)[style*='float: right'] {
198
+ float: right;
199
+ max-width: 50%;
200
+ margin: 0.25rem 0 1rem 1.5rem;
201
+ }
202
+
203
+ .prose details {
204
+ margin: 1rem 0;
205
+ padding: 0.75rem 1rem;
206
+ border: 1px solid var(--orionplace-border);
207
+ }
208
+
209
+ .prose summary { cursor: pointer; font-weight: 500; }
210
+
211
+ /* `op-feature-panel op-feature-stack` in the other packages. */
212
+ .access {
213
+ display: grid;
214
+ gap: 1.25rem;
215
+ padding: 1.25rem;
216
+ border: 1px solid var(--orionplace-border);
217
+ background: var(--orionplace-surface);
218
+ }
219
+
220
+ .access h2,
221
+ .related h2 {
222
+ margin: 0;
223
+ font-size: 0.875rem;
224
+ line-height: 1.25rem;
225
+ font-weight: 500;
226
+ text-transform: uppercase;
227
+ letter-spacing: 0.08em;
228
+ }
229
+
230
+ .access p { margin: 0; color: var(--orionplace-muted); line-height: 1.5rem; }
231
+ .video { display: block; width: 100%; aspect-ratio: 16 / 9; background: #000; }
232
+
233
+ .skeleton {
234
+ display: grid;
235
+ gap: 0.75rem;
236
+ animation: pulse 1.5s ease-in-out infinite;
237
+ }
238
+
239
+ .skeleton span { display: block; background: var(--orionplace-border); }
240
+ .skeletonTitle { width: 92%; height: 1.75rem; }
241
+ .skeletonTitleShort { width: 60%; height: 1.75rem; }
242
+ .skeletonMeta { display: flex; gap: 1rem; }
243
+ .skeletonMeta span { width: 7rem; height: 0.75rem; }
244
+ .skeletonCover {
245
+ width: 100%;
246
+ aspect-ratio: 3 / 2;
247
+ border: 1px solid var(--orionplace-border);
248
+ background: transparent !important;
249
+ }
250
+ .skeletonText { display: grid; gap: 1rem; padding-block: 0.5rem; }
251
+ .skeletonText span { height: 0.75rem; }
252
+ .skeletonText span:nth-child(3) { width: 92%; }
253
+ .skeletonText span:nth-child(5) { width: 80%; }
254
+ .skeletonText span:last-child { width: 66%; }
255
+ .skeletonRelated { width: 10rem; height: 0.75rem; }
256
+ .skeletonCards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
257
+ .skeletonCards span {
258
+ aspect-ratio: 3 / 4;
259
+ border: 1px solid var(--orionplace-border);
260
+ background: transparent;
261
+ }
262
+
263
+ .screenReaderOnly {
264
+ position: absolute;
265
+ width: 1px;
266
+ height: 1px;
267
+ padding: 0;
268
+ overflow: hidden;
269
+ clip: rect(0, 0, 0, 0);
270
+ white-space: nowrap;
271
+ border: 0;
272
+ }
273
+
274
+ @keyframes pulse {
275
+ 0%, 100% { opacity: 1; }
276
+ 50% { opacity: 0.5; }
277
+ }
278
+
279
+ @container article (min-width: 592px) {
280
+ .header h1 { font-size: 1.875rem; }
281
+ }
282
+
283
+ /* A narrow article has no room for text beside a floated image; 592px is
284
+ the article's width in the /journal page on a 640px screen. */
285
+ @container article (max-width: 591px) {
286
+ .prose :where(img, figure)[data-float],
287
+ .prose :where(img, figure)[style*='float:'] {
288
+ float: none !important;
289
+ width: auto !important;
290
+ max-width: 100%;
291
+ margin: 1rem 0 !important;
292
+ }
293
+ }
294
+
295
+ /* The related products' placeholder shows three cards from 660px of article
296
+ width, as on Nuxt. */
297
+ @container article (max-width: 659px) {
298
+ .skeletonCards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
299
+ .skeletonCards span:last-child { display: none; }
300
+ }
301
+
302
+ @media (prefers-reduced-motion: reduce) {
303
+ .skeleton { animation: none; }
304
+ }