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,105 @@
1
+ # TicketConversation · React
2
+
3
+ ## English
4
+
5
+ `TicketConversation` renders one support conversation from `ticket` and its
6
+ complete `replies` list. It shows the localized type, open or closed state,
7
+ creation date and, for an order conversation, the return decision and order
8
+ link. A return request marked as a defect (`is_defect: true`) shows Defect
9
+ beside the type. A conversation about a purchased item or subscription includes the
10
+ matching subject card when the parent supplies that data.
11
+
12
+ For a return, the component shows the current shipment state and what the
13
+ customer should do next, carrier details, tracking number, and each returned
14
+ item with its stage counts and selected-currency refund amount. Customer
15
+ messages appear on the right and support replies on the left. Each protected
16
+ attachment is loaded through `onLoadImage` by `TicketImage`.
17
+
18
+ An open conversation displays `TicketMessageForm` and calls
19
+ `onSubmit(text, files)`. Close and delete require an inline confirmation before
20
+ calling `onClose` or `onDelete`; deletion is available only while the
21
+ conversation has at most one message and no approved decision. A closed
22
+ conversation displays the current rating and calls `onRate(rating)`. Refresh
23
+ calls `onRefresh`. `pending` disables all actions, and `sentRevision` remounts
24
+ the reply form after confirmed delivery.
25
+
26
+ When `ticket.reply_wait` is set, the reply form is locked with the
27
+ `ticketReplyWaitText()` hint: `support_reply` until support answers for the
28
+ first time, `delay` while the store's `ticket_reply_delay_minutes` after the
29
+ customer's last message have not passed. A `delay` wait unlocks by itself
30
+ after `reply_wait.seconds`; a `support_reply` wait ends when `onRefresh`
31
+ brings the ticket with the support reply. The backend applies the same rule to
32
+ `customer_tickets_reply`.
33
+
34
+ The component makes no list, reply or mutation request itself. Source is
35
+ maintained in `components/orionplace/support/TicketConversation.tsx`.
36
+
37
+ ### Props
38
+
39
+ | Prop | Meaning |
40
+ | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
41
+ | `ticket: ICustomerTicket` | Support ticket displayed in the conversation. |
42
+ | `replies: ICustomerTicketReply[]` | Replies grouped under their owning record. |
43
+ | `pending?: boolean` | Shows the loading state and blocks duplicate actions. |
44
+ | `sentRevision?: number` | Changes after a successful send so the message form can reset its draft. |
45
+ | `subscription?: ICustomerSubscription` | Customer subscription displayed or changed by the component. |
46
+ | `subscriptionPlan?: ISubscribeTariff` | Plan data used to describe the support ticket subscription. |
47
+ | `orderHref?: (orderId: number, locale: string) => string` | Builds the order destination from the callback arguments. |
48
+ | `onLoadImage: (action: TicketImageLoadAction) => Promise<Blob> \| Blob` | Called when a protected image must be loaded. The callback payload is shown in its type. |
49
+ | `onSubmit?: (text: string, files: File[]) => void` | Passes reply `text` and the `files` array from the message form. The application sends the reply and supplies the updated conversation and `sentRevision`. |
50
+ | `onClose?: () => void` | Called without arguments after the customer confirms closing the support ticket. The application submits the close request and updates ticket data. |
51
+ | `onDelete?: () => void` | Called without arguments after the customer confirms deleting the support ticket. The application submits the deletion request and updates the list. |
52
+ | `onRate?: (rating: number) => void` | Passes the numeric support rating when the closed ticket’s rating form is submitted. The application saves the rating and updates ticket data. |
53
+ | `onRefresh?: () => void` | The refresh button calls the handler without arguments. The application loads the current ticket and replies. |
54
+
55
+ ## Русский
56
+
57
+ `TicketConversation` выводит одно обращение из `ticket` и полный список его
58
+ сообщений `replies`. Компонент показывает локализованный тип, открытое или
59
+ закрытое состояние, дату создания, а для обращения по заказу — решение по
60
+ возврату и ссылку на заказ. Заявка на возврат, отмеченная как брак
61
+ (`is_defect: true`), показывает «Брак» рядом с типом. Для обращения по купленному товару или подписке
62
+ показывается соответствующая карточка, если родитель передал эти данные.
63
+
64
+ Для возврата выводятся текущее состояние отправления и следующее действие
65
+ покупателя, перевозчик, трек-номер и каждый возвращаемый товар с количеством на
66
+ этапах возврата и суммой в выбранной валюте. Сообщения покупателя находятся
67
+ справа, ответы поддержки — слева. Каждое защищённое вложение `TicketImage`
68
+ загружает через `onLoadImage`.
69
+
70
+ В открытом обращении `TicketMessageForm` вызывает `onSubmit(text, files)`.
71
+ Закрытие и удаление сначала требуют подтверждения, затем вызывают `onClose` или
72
+ `onDelete`; удалить можно только обращение не более чем с одним сообщением и
73
+ без одобренного решения. В закрытом обращении показывается текущая оценка, а
74
+ сохранение вызывает `onRate(rating)`. Обновление вызывает `onRefresh`.
75
+ `pending` блокирует действия, а смена `sentRevision` создаёт форму ответа
76
+ заново после подтверждённой отправки.
77
+
78
+ Если задан `ticket.reply_wait`, форма ответа блокируется с подсказкой
79
+ `ticketReplyWaitText()`: `support_reply` — до первого ответа поддержки,
80
+ `delay` — пока после последнего сообщения покупателя не прошло
81
+ `ticket_reply_delay_minutes` магазина. Ожидание `delay` снимается само через
82
+ `reply_wait.seconds`; ожидание `support_reply` заканчивается, когда
83
+ `onRefresh` приносит обращение с ответом поддержки. Сервер применяет то же
84
+ правило к `customer_tickets_reply`.
85
+
86
+ Сам компонент не загружает список и сообщения и не выполняет изменения.
87
+ Исходный файл: `components/orionplace/support/TicketConversation.tsx`.
88
+
89
+ ### Свойства
90
+
91
+ | Свойство | Назначение |
92
+ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
93
+ | `ticket: ICustomerTicket` | Обращение, которое показано в переписке с поддержкой. |
94
+ | `replies: ICustomerTicketReply[]` | Ответы, сгруппированные под исходной записью. |
95
+ | `pending?: boolean` | Показывает загрузку и блокирует повторные действия. |
96
+ | `sentRevision?: number` | Меняется после успешной отправки, чтобы форма очистила черновик. |
97
+ | `subscription?: ICustomerSubscription` | Подписка покупателя, которую показывает или изменяет компонент. |
98
+ | `subscriptionPlan?: ISubscribeTariff` | Данные тарифа для описания подписки в обращении. |
99
+ | `orderHref?: (orderId: number, locale: string) => string` | Строит адрес ссылки заказа из аргументов обработчика. |
100
+ | `onLoadImage: (action: TicketImageLoadAction) => Promise<Blob> \| Blob` | Вызывается, когда нужно загрузить защищённое изображение. Данные обработчика указаны в его типе. |
101
+ | `onSubmit?: (text: string, files: File[]) => void` | Передаёт текст ответа `text` и массив файлов `files` из формы сообщения. Приложение отправляет ответ и передаёт обновлённую переписку и `sentRevision`. |
102
+ | `onClose?: () => void` | Вызывается без аргументов после подтверждения закрытия обращения. Приложение отправляет запрос закрытия и обновляет данные обращения. |
103
+ | `onDelete?: () => void` | Вызывается без аргументов после подтверждения удаления обращения. Приложение отправляет запрос удаления и обновляет список. |
104
+ | `onRate?: (rating: number) => void` | Передаёт числовую оценку поддержки при отправке формы оценки закрытого обращения. Приложение сохраняет оценку и обновляет данные обращения. |
105
+ | `onRefresh?: () => void` | Кнопка обновления вызывает обработчик без аргументов. Приложение загружает актуальное обращение и ответы. |
@@ -0,0 +1,502 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { useOrionplaceSelections } from '@/providers/OrionplaceProvider';
5
+ import type { ISubscribeTariff } from '@/interfaces/orionplace/subscribeTariff/ISubscribeTariff';
6
+ import type { ICustomerSubscription } from '@/interfaces/orionplace/subscribes/ISubscriptionApi';
7
+ import {
8
+ ECustomerTicketSolution,
9
+ ECustomerTicketStatus,
10
+ ECustomerTicketType,
11
+ ETicketReplyDirection,
12
+ type ICustomerTicket,
13
+ type ICustomerTicketReply,
14
+ } from '@/interfaces/orionplace/tickets/ICustomerTicketApi';
15
+ import { featureLabels } from '@/lib/orionplace/featureLabels';
16
+ import { orderRefundEntries } from '@/lib/orionplace/orderPresentation';
17
+ import { getAvailableNestedValueFromObject } from '@/lib/orionplace/presentation';
18
+ import {
19
+ refundShipmentView,
20
+ ticketLabels,
21
+ ticketSolutionText,
22
+ ticketSolutionTone,
23
+ ticketReplyWaitText,
24
+ ticketStatusView,
25
+ ticketTypeText,
26
+ } from '@/lib/orionplace/ticketLabels';
27
+ import {
28
+ orderTicketLines,
29
+ ticketOrderLine,
30
+ } from '@/lib/orionplace/ticketItems';
31
+ import { OrionplaceSelect } from '@/components/orionplace/shared/OrionplaceSelect';
32
+ import { TicketImage, type TicketImageLoadAction } from './TicketImage';
33
+ import { TicketItemCard } from './TicketItemCard';
34
+ import { TicketMessageForm } from './TicketMessageForm';
35
+ import { TicketSubscriptionCard } from './TicketSubscriptionCard';
36
+ import styles from './Support.module.css';
37
+
38
+ export interface TicketConversationProps {
39
+ ticket: ICustomerTicket;
40
+ replies: ICustomerTicketReply[];
41
+ pending?: boolean;
42
+ sentRevision?: number;
43
+ subscription?: ICustomerSubscription;
44
+ subscriptionPlan?: ISubscribeTariff;
45
+ orderHref?: (orderId: number, locale: string) => string;
46
+ onLoadImage: (action: TicketImageLoadAction) => Promise<Blob> | Blob;
47
+ onSubmit?: (text: string, files: File[]) => void;
48
+ onClose?: () => void;
49
+ onDelete?: () => void;
50
+ onRate?: (rating: number) => void;
51
+ onRefresh?: () => void;
52
+ }
53
+
54
+ function Icon({ children }: { children: React.ReactNode }) {
55
+ return (
56
+ <svg
57
+ className={styles.icon}
58
+ viewBox="0 0 24 24"
59
+ fill="none"
60
+ stroke="currentColor"
61
+ strokeWidth="1.6"
62
+ strokeLinecap="round"
63
+ strokeLinejoin="round"
64
+ aria-hidden="true"
65
+ >
66
+ {children}
67
+ </svg>
68
+ );
69
+ }
70
+
71
+ function StatusIcon({ locked }: { locked: boolean }) {
72
+ return (
73
+ <svg
74
+ viewBox="0 0 24 24"
75
+ fill="none"
76
+ stroke="currentColor"
77
+ strokeWidth="1.6"
78
+ strokeLinecap="round"
79
+ strokeLinejoin="round"
80
+ aria-hidden="true"
81
+ >
82
+ <rect
83
+ x="5"
84
+ y="11"
85
+ width="14"
86
+ height="10"
87
+ />
88
+ <path
89
+ d={locked ? 'M8 11V7a4 4 0 0 1 8 0v4' : 'M8 11V7a4 4 0 0 1 7.6-1.7'}
90
+ />
91
+ </svg>
92
+ );
93
+ }
94
+
95
+ export function TicketConversation({
96
+ ticket,
97
+ replies,
98
+ pending = false,
99
+ sentRevision = 0,
100
+ subscription,
101
+ subscriptionPlan,
102
+ orderHref = (id, locale) =>
103
+ `/orders?order=${id}&locale=${encodeURIComponent(locale)}`,
104
+ onLoadImage,
105
+ onSubmit,
106
+ onClose,
107
+ onDelete,
108
+ onRate,
109
+ onRefresh,
110
+ }: TicketConversationProps) {
111
+ const locale = useOrionplaceSelections((state) => state.localeCode);
112
+ const currencyId = useOrionplaceSelections((state) => state.currencyId);
113
+ const labels = ticketLabels(locale);
114
+ const common = featureLabels(locale);
115
+ const [confirmation, setConfirmation] = useState<'close' | 'delete'>();
116
+ const [rating, setRating] = useState(String(ticket.rating));
117
+ const status = ticketStatusView(ticket.status, labels);
118
+ const type = ticketTypeText(ticket.type, labels);
119
+ const refund = ticket.refund;
120
+ const refundState = refund
121
+ ? refundShipmentView(refund.shipment_status, labels)
122
+ : undefined;
123
+ const carrier = getAvailableNestedValueFromObject(
124
+ refund?.track?.carrier_name,
125
+ locale,
126
+ 'carrier_name',
127
+ );
128
+ const orderLines = orderTicketLines(refund?.order, locale);
129
+ const refundItems = orderRefundEntries(refund?.order, currencyId).map(
130
+ (entry) => ({
131
+ ...entry,
132
+ option: orderLines.find((line) => line.key === entry.key)?.option,
133
+ }),
134
+ );
135
+ const line = ticketOrderLine(ticket, orderLines);
136
+ const subject =
137
+ ticket.type.int === ECustomerTicketType.ORDER &&
138
+ (ticket.product || line?.product)
139
+ ? {
140
+ product: line?.product ?? ticket.product ?? null,
141
+ quantity: line?.quantity,
142
+ option: line?.option,
143
+ amount: line?.amount,
144
+ }
145
+ : undefined;
146
+ const decision =
147
+ ticket.type.int === ECustomerTicketType.ORDER
148
+ ? {
149
+ text: ticketSolutionText(ticket.solution, labels),
150
+ tone: ticketSolutionTone(ticket.solution),
151
+ }
152
+ : undefined;
153
+ const created = [ticket.time_created?.date, ticket.time_created?.time]
154
+ .filter(Boolean)
155
+ .join(' ');
156
+ const canDelete =
157
+ ticket.counts.c_total_messages <= 1 &&
158
+ ticket.solution.int !== ECustomerTicketSolution.SOLUTION_APROOVED;
159
+ const ratings = {
160
+ 0: labels.unrated,
161
+ 1: '★',
162
+ 2: '★★',
163
+ 3: '★★★',
164
+ 4: '★★★★',
165
+ 5: '★★★★★',
166
+ };
167
+
168
+ useEffect(() => {
169
+ setRating(String(ticket.rating));
170
+ setConfirmation(undefined);
171
+ }, [ticket.id, ticket.rating]);
172
+
173
+ // A `delay` wait ends by itself, so a timer unlocks the form; a
174
+ // `support_reply` wait ends when a refresh brings the support reply.
175
+ const replyWait = ticket.reply_wait;
176
+ const [waitOver, setWaitOver] = useState(false);
177
+ const waitHint = waitOver
178
+ ? ''
179
+ : ticketReplyWaitText(replyWait, labels);
180
+ useEffect(() => {
181
+ setWaitOver(false);
182
+ if (replyWait?.reason !== 'delay' || !replyWait.seconds) {
183
+ return;
184
+ }
185
+ const timer = setTimeout(() => setWaitOver(true), replyWait.seconds * 1000);
186
+ return () => clearTimeout(timer);
187
+ }, [replyWait]);
188
+
189
+ function confirm() {
190
+ if (confirmation === 'close') {
191
+ onClose?.();
192
+ } else if (confirmation === 'delete') {
193
+ onDelete?.();
194
+ }
195
+ setConfirmation(undefined);
196
+ }
197
+
198
+ return (
199
+ <section
200
+ className={`${styles.root} ${styles.stack}`}
201
+ data-feature-part="TicketConversation"
202
+ >
203
+ <header className={styles.conversationHeader}>
204
+ <div className={styles.conversationHeading}>
205
+ <h2>
206
+ {labels.ticket} #{ticket.id}
207
+ </h2>
208
+ <p className={styles.meta}>
209
+ {type ? <span>{type}</span> : null}
210
+ {ticket.is_defect ? (
211
+ <span
212
+ className={styles.defectMark}
213
+ data-ticket-defect
214
+ >
215
+ {labels.defect}
216
+ </span>
217
+ ) : null}
218
+ {status.text ? (
219
+ <span
220
+ className={styles.status}
221
+ data-ticket-status={status.icon}
222
+ >
223
+ <StatusIcon locked={status.icon === 'lock'} />
224
+ {status.text}
225
+ </span>
226
+ ) : null}
227
+ {decision ? (
228
+ <span
229
+ className={styles.decision}
230
+ data-tone={decision.tone}
231
+ >
232
+ {labels.decision}: {decision.text}
233
+ </span>
234
+ ) : null}
235
+ {created ? <time>{created}</time> : null}
236
+ </p>
237
+ {ticket.order_id ? (
238
+ <a
239
+ className={`${styles.link} ${styles.orderLink}`}
240
+ href={orderHref(ticket.order_id, locale)}
241
+ >
242
+ {labels.order} #{ticket.order_id}
243
+ </a>
244
+ ) : null}
245
+ </div>
246
+ <div className={styles.tools}>
247
+ <button
248
+ className={`${styles.tool} ${styles.iconButton}`}
249
+ type="button"
250
+ aria-label={common.refresh}
251
+ title={common.refresh}
252
+ disabled={pending}
253
+ onClick={() => onRefresh?.()}
254
+ >
255
+ <Icon>
256
+ <path d="M20 11a8 8 0 1 0-2.3 5.7M20 4v7h-7" />
257
+ </Icon>
258
+ </button>
259
+ {ticket.status.int === ECustomerTicketStatus.OPEN ? (
260
+ <button
261
+ className={styles.tool}
262
+ type="button"
263
+ disabled={pending}
264
+ aria-label={labels.closeHint}
265
+ onClick={() => setConfirmation('close')}
266
+ >
267
+ <Icon>
268
+ <circle
269
+ cx="12"
270
+ cy="12"
271
+ r="9"
272
+ />
273
+ <path d="m8 12.5 2.5 2.5L16 9.5" />
274
+ </Icon>
275
+ {labels.close}
276
+ </button>
277
+ ) : null}
278
+ {canDelete ? (
279
+ <button
280
+ className={`${styles.tool} ${styles.danger}`}
281
+ type="button"
282
+ disabled={pending}
283
+ aria-label={labels.deleteHint}
284
+ onClick={() => setConfirmation('delete')}
285
+ >
286
+ <Icon>
287
+ <path d="M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v5m4-5v5" />
288
+ </Icon>
289
+ {labels.delete}
290
+ </button>
291
+ ) : null}
292
+ </div>
293
+ </header>
294
+
295
+ {subject ? (
296
+ <section
297
+ className={styles.subject}
298
+ data-ticket-subject
299
+ aria-labelledby={`ticket-${ticket.id}-subject`}
300
+ >
301
+ <h3
302
+ id={`ticket-${ticket.id}-subject`}
303
+ className={styles.subjectTitle}
304
+ >
305
+ {labels.subject}
306
+ </h3>
307
+ <TicketItemCard
308
+ {...subject}
309
+ gallery
310
+ />
311
+ </section>
312
+ ) : null}
313
+
314
+ {subscription ? (
315
+ <section
316
+ className={styles.subject}
317
+ data-ticket-subscription-subject
318
+ aria-labelledby={`ticket-${ticket.id}-subscription`}
319
+ >
320
+ <h3
321
+ id={`ticket-${ticket.id}-subscription`}
322
+ className={styles.subjectTitle}
323
+ >
324
+ {labels.subscriptionSubject}
325
+ </h3>
326
+ <TicketSubscriptionCard
327
+ subscription={subscription}
328
+ plan={subscriptionPlan}
329
+ />
330
+ </section>
331
+ ) : null}
332
+
333
+ {refund && refundState ? (
334
+ <section
335
+ className={styles.refund}
336
+ data-tone={refundState.tone}
337
+ data-ticket-refund
338
+ aria-labelledby={`ticket-${ticket.id}-refund`}
339
+ >
340
+ <header className={styles.refundHeader}>
341
+ <h3
342
+ id={`ticket-${ticket.id}-refund`}
343
+ className={styles.refundTitle}
344
+ >
345
+ {labels.refund} #{refund.id}
346
+ </h3>
347
+ <span className={styles.refundState}>{refundState.text}</span>
348
+ </header>
349
+ {refundState.hint ? (
350
+ <p className={styles.refundCopy}>{refundState.hint}</p>
351
+ ) : null}
352
+ <dl className={styles.refundFacts}>
353
+ {carrier ? (
354
+ <div>
355
+ <dt>{labels.refundCarrier}</dt>
356
+ <dd>{carrier}</dd>
357
+ </div>
358
+ ) : null}
359
+ {refund.track?.track ? (
360
+ <div>
361
+ <dt>{labels.refundTrack}</dt>
362
+ <dd>{refund.track.track}</dd>
363
+ </div>
364
+ ) : null}
365
+ {refund.track?.status ? (
366
+ <div>
367
+ <dt>{labels.refundCarrierStatus}</dt>
368
+ <dd>{refund.track.status}</dd>
369
+ </div>
370
+ ) : null}
371
+ </dl>
372
+ {refundItems.length ? (
373
+ <>
374
+ <h4 className={styles.subjectTitle}>{labels.refundItems}</h4>
375
+ <ul className={styles.refundItems}>
376
+ {refundItems.map((entry) => (
377
+ <li key={entry.key}>
378
+ <TicketItemCard
379
+ product={entry.product}
380
+ quantity={entry.quantity}
381
+ option={entry.option}
382
+ amount={entry.refund.amount}
383
+ amountLabel={labels.refundAmount}
384
+ >
385
+ {entry.refund.counts.map((count) => (
386
+ <span
387
+ key={count.key}
388
+ className={styles.refundCount}
389
+ >
390
+ {labels.refundCounts[count.key]}: {count.count}
391
+ </span>
392
+ ))}
393
+ </TicketItemCard>
394
+ </li>
395
+ ))}
396
+ </ul>
397
+ </>
398
+ ) : null}
399
+ </section>
400
+ ) : null}
401
+
402
+ {confirmation ? (
403
+ <div className={`${styles.notice} ${styles.confirmation}`}>
404
+ <p>
405
+ {confirmation === 'close'
406
+ ? labels.closeQuestion
407
+ : labels.deleteQuestion}
408
+ </p>
409
+ <div className={styles.actions}>
410
+ <button
411
+ className={`${styles.button} ${styles.primary}`}
412
+ type="button"
413
+ disabled={pending}
414
+ onClick={confirm}
415
+ >
416
+ {common.continue}
417
+ </button>
418
+ <button
419
+ className={styles.button}
420
+ type="button"
421
+ disabled={pending}
422
+ onClick={() => setConfirmation(undefined)}
423
+ >
424
+ {common.back}
425
+ </button>
426
+ </div>
427
+ </div>
428
+ ) : null}
429
+
430
+ <ol
431
+ className={styles.messages}
432
+ aria-live="polite"
433
+ >
434
+ {replies.map((reply) => {
435
+ const own =
436
+ reply.direction.int === ETicketReplyDirection.TO_MANAGMENT;
437
+ return (
438
+ <li
439
+ key={reply.id}
440
+ className={`${styles.message} ${own ? styles.ownMessage : ''}`.trim()}
441
+ >
442
+ <div className={styles.bubble}>
443
+ <p className={styles.sender}>
444
+ {reply.sender.first_name} {reply.sender.last_name}
445
+ </p>
446
+ <p className={styles.messageText}>{reply.reply_text}</p>
447
+ {reply.reply_images.length ? (
448
+ <div className={styles.attachments}>
449
+ {reply.reply_images.map((file) => (
450
+ <TicketImage
451
+ key={file.id}
452
+ imageId={file.id}
453
+ onLoad={onLoadImage}
454
+ />
455
+ ))}
456
+ </div>
457
+ ) : null}
458
+ </div>
459
+ <time className={styles.messageTime}>
460
+ {reply.reply_time?.date} {reply.reply_time?.time}
461
+ </time>
462
+ </li>
463
+ );
464
+ })}
465
+ </ol>
466
+
467
+ {ticket.status.int === ECustomerTicketStatus.OPEN ? (
468
+ <TicketMessageForm
469
+ key={`${ticket.id}:${sentRevision}`}
470
+ pending={pending}
471
+ waitHint={waitHint}
472
+ onSubmit={onSubmit}
473
+ />
474
+ ) : (
475
+ <form
476
+ className={`${styles.panel} ${styles.rating}`}
477
+ onSubmit={(event) => {
478
+ event.preventDefault();
479
+ onRate?.(Number(rating));
480
+ }}
481
+ >
482
+ <div className={styles.ratingField}>
483
+ <OrionplaceSelect
484
+ options={ratings}
485
+ label={labels.rating}
486
+ value={rating}
487
+ disabled={pending}
488
+ onValueChange={setRating}
489
+ />
490
+ </div>
491
+ <button
492
+ className={styles.button}
493
+ type="submit"
494
+ disabled={pending}
495
+ >
496
+ {common.save}
497
+ </button>
498
+ </form>
499
+ )}
500
+ </section>
501
+ );
502
+ }
@@ -0,0 +1,52 @@
1
+ # TicketImage · React
2
+
3
+ ## English
4
+
5
+ `TicketImage` loads one protected support attachment. After hydration it calls
6
+ `onLoad` with endpoint `customer_tickets_ticket_images`, an empty request,
7
+ `path.image_id` and an abort signal. The callback must return the image as a
8
+ `Blob`. JSON and HTML responses are rejected as failures.
9
+
10
+ The component reserves a square attachment area while loading. A successful
11
+ blob becomes a local object URL and opens in a new tab from a 96 by 96 image.
12
+ The object URL is revoked when the image changes or the component unmounts. A
13
+ failed request displays Retry and starts the same action again. `initialSource`
14
+ can supply a server-rendered URL and prevents the automatic request;
15
+ `loadOnMount={false}` also disables automatic loading.
16
+
17
+ Source is maintained in `components/orionplace/support/TicketImage.tsx`.
18
+
19
+ ### Props
20
+
21
+ | Prop | Meaning |
22
+ | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
23
+ | `imageId: number` | ID of the image handled by TicketImage. |
24
+ | `initialSource?: string` | Server-provided initial source used for the first render and hydration. |
25
+ | `loadOnMount?: boolean` | Starts the load callback after hydration when server data was not supplied. |
26
+ | `onLoad: (action: TicketImageLoadAction) => Promise<Blob> \| Blob` | Called when the component needs its primary data. The callback payload is shown in its type. |
27
+
28
+ ## Русский
29
+
30
+ `TicketImage` загружает одно защищённое изображение из обращения. После
31
+ гидратации компонент вызывает `onLoad` с методом
32
+ `customer_tickets_ticket_images`, пустым запросом, `path.image_id` и сигналом
33
+ отмены. Обработчик должен вернуть изображение как `Blob`. Ответы JSON и HTML
34
+ считаются ошибкой.
35
+
36
+ Во время загрузки компонент сохраняет квадратную область вложения. Успешный
37
+ `Blob` превращается в локальный URL и открывается в новой вкладке из изображения
38
+ 96 на 96. При смене изображения и удалении компонента локальный URL
39
+ освобождается. После ошибки появляется кнопка повтора того же запроса.
40
+ `initialSource` задаёт URL для серверного HTML и отменяет автоматический запрос;
41
+ `loadOnMount={false}` также отключает автоматическую загрузку.
42
+
43
+ Исходный файл: `components/orionplace/support/TicketImage.tsx`.
44
+
45
+ ### Свойства
46
+
47
+ | Свойство | Назначение |
48
+ | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- |
49
+ | `imageId: number` | ID изображения, с которым работает TicketImage. |
50
+ | `initialSource?: string` | Начальное значение адреса изображения, полученное на сервере для первого рендера и гидратации. |
51
+ | `loadOnMount?: boolean` | Запускает загрузку после гидратации, если серверные данные не переданы. |
52
+ | `onLoad: (action: TicketImageLoadAction) => Promise<Blob> \| Blob` | Вызывается, когда компоненту нужны основные данные. Данные обработчика указаны в его типе. |