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.
- package/README.md +276 -35
- package/bin/orionplace-react.mjs +4 -1
- package/package.json +18 -5
- package/runtime/app.d.mts +6 -0
- package/runtime/app.mjs +48 -0
- package/runtime/marketplace.d.mts +13 -8
- package/runtime/marketplace.mjs +287 -211
- package/src/project-readme.mjs +95 -35
- package/src/setup.mjs +36 -13
- package/templates/app/StorefrontShell.tsx +435 -0
- package/templates/app/[[...path]]/page.app.tsx +11 -0
- package/templates/app/_storefront/ActivityPage.tsx +23 -0
- package/templates/app/_storefront/AddressesPage.tsx +29 -0
- package/templates/app/_storefront/AppRoutes.tsx +182 -0
- package/templates/app/_storefront/ArticlePage.tsx +81 -0
- package/templates/app/_storefront/CartPage.tsx +53 -0
- package/templates/app/_storefront/CatalogPage.tsx +37 -0
- package/templates/app/_storefront/CategoryPage.tsx +64 -0
- package/templates/app/_storefront/ContactPage.tsx +32 -0
- package/templates/app/_storefront/HomePage.tsx +140 -0
- package/templates/app/_storefront/JournalPage.tsx +36 -0
- package/templates/app/_storefront/LogoutPage.tsx +91 -0
- package/templates/app/_storefront/ManufacturersPage.tsx +64 -0
- package/templates/app/_storefront/OrdersPage.tsx +129 -0
- package/templates/app/_storefront/ProductPage.tsx +105 -0
- package/templates/app/_storefront/ProfilePage.tsx +75 -0
- package/templates/app/_storefront/PromoPage.tsx +66 -0
- package/templates/app/_storefront/PromocodesPage.tsx +17 -0
- package/templates/app/_storefront/SearchPage.tsx +220 -0
- package/templates/app/_storefront/SellersPage.tsx +160 -0
- package/templates/app/_storefront/StorefrontErrorRoute.tsx +42 -0
- package/templates/app/_storefront/StorefrontPageMetadata.tsx +74 -0
- package/templates/app/_storefront/StorefrontPageStatus.tsx +61 -0
- package/templates/app/_storefront/StoresPage.tsx +53 -0
- package/templates/app/_storefront/SubscriptionsPage.tsx +62 -0
- package/templates/app/_storefront/SupportPage.tsx +141 -0
- package/templates/app/_storefront/TariffsPage.tsx +180 -0
- package/templates/app/_storefront/UnsubscribePage.tsx +29 -0
- package/templates/app/_storefront/WalletPage.tsx +78 -0
- package/templates/app/_storefront/WishlistPage.tsx +79 -0
- package/templates/app/_storefront/storefrontRoutes.tsx +738 -0
- package/templates/app/_storefront/useAccountWallet.ts +27 -0
- package/templates/app/_storefront/useBlogComments.ts +389 -0
- package/templates/app/_storefront/useProductSearch.ts +171 -0
- package/templates/app/_storefront/useStorefrontNavigation.ts +36 -0
- package/templates/app/activity/page.tsx +9 -0
- package/templates/app/addresses/page.tsx +9 -0
- package/templates/app/api/[...orionplace]/route.ts +11 -4
- package/templates/app/browse/page.tsx +27 -0
- package/templates/app/cart/page.tsx +9 -0
- package/templates/app/catalog/page.tsx +9 -0
- package/templates/app/category/[id]/page.tsx +9 -0
- package/templates/app/contact/page.tsx +9 -0
- package/templates/app/error.tsx +7 -0
- package/templates/app/featured/page.tsx +9 -0
- package/templates/app/global-error.tsx +61 -0
- package/templates/app/globals.css +50 -2
- package/templates/app/journal/[id]/page.tsx +9 -0
- package/templates/app/journal/page.tsx +9 -0
- package/templates/app/layout.app.tsx +20 -0
- package/templates/app/layout.tsx +44 -10
- package/templates/app/logout/page.tsx +9 -0
- package/templates/app/manufacturers/page.tsx +9 -0
- package/templates/app/not-found.tsx +5 -0
- package/templates/app/orders/page.tsx +9 -0
- package/templates/app/page.module.css +12 -8
- package/templates/app/page.tsx +8 -79
- package/templates/app/product/[id]/page.tsx +9 -0
- package/templates/app/profile/page.tsx +9 -0
- package/templates/app/promo/[id]/page.tsx +9 -0
- package/templates/app/promocodes/page.tsx +9 -0
- package/templates/app/ps3/blog/[...orionplace]/route.ts +13 -0
- package/templates/app/sellers/page.tsx +9 -0
- package/templates/app/storefront.module.css +406 -0
- package/templates/app/stores/page.tsx +9 -0
- package/templates/app/subscriptions/page.tsx +9 -0
- package/templates/app/tariffs/[slug]/[id]/page.tsx +9 -0
- package/templates/app/tariffs/page.tsx +9 -0
- package/templates/app/tickets/page.tsx +9 -0
- package/templates/app/unsubscribe/page.tsx +9 -0
- package/templates/app/wallet/page.tsx +9 -0
- package/templates/app/wishlist/page.tsx +9 -0
- package/templates/components/orionplace/account/AccountActivity.README.md +70 -0
- package/templates/components/orionplace/account/AccountActivity.module.css +16 -0
- package/templates/components/orionplace/account/AccountActivity.tsx +94 -0
- package/templates/components/orionplace/account/AccountPromocodes.README.md +70 -0
- package/templates/components/orionplace/account/AccountPromocodes.module.css +92 -0
- package/templates/components/orionplace/account/AccountPromocodes.tsx +257 -0
- package/templates/components/orionplace/account/AccountSection.README.md +46 -0
- package/templates/components/orionplace/account/AccountSection.module.css +110 -0
- package/templates/components/orionplace/account/AccountSection.tsx +109 -0
- package/templates/components/orionplace/account/ProfileAvatar.README.md +48 -0
- package/templates/components/orionplace/account/ProfileAvatar.module.css +31 -0
- package/templates/components/orionplace/account/ProfileAvatar.tsx +138 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.README.md +59 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.module.css +51 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.tsx +171 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.README.md +44 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.module.css +35 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.tsx +178 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.README.md +52 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.module.css +51 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.tsx +276 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.README.md +45 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.module.css +43 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.tsx +227 -0
- package/templates/components/orionplace/account/ProfileSignIn.README.md +64 -0
- package/templates/components/orionplace/account/ProfileSignIn.module.css +86 -0
- package/templates/components/orionplace/account/ProfileSignIn.tsx +463 -0
- package/templates/components/orionplace/account/SignInHistory.README.md +52 -0
- package/templates/components/orionplace/account/SignInHistory.module.css +81 -0
- package/templates/components/orionplace/account/SignInHistory.tsx +231 -0
- package/templates/components/orionplace/account/StorefrontLogout.README.md +48 -0
- package/templates/components/orionplace/account/StorefrontLogout.module.css +166 -0
- package/templates/components/orionplace/account/StorefrontLogout.tsx +73 -0
- package/templates/components/orionplace/account/StorefrontProfile.README.md +71 -0
- package/templates/components/orionplace/account/StorefrontProfile.module.css +65 -0
- package/templates/components/orionplace/account/StorefrontProfile.tsx +189 -0
- package/templates/components/orionplace/account/account.module.css +1180 -0
- package/templates/components/orionplace/account/profile.module.css +696 -0
- package/templates/components/orionplace/address/AddressForm.README.md +152 -0
- package/templates/components/orionplace/address/AddressForm.module.css +336 -0
- package/templates/components/orionplace/address/AddressForm.tsx +827 -0
- package/templates/components/orionplace/address/StorefrontAddresses.README.md +99 -0
- package/templates/components/orionplace/address/StorefrontAddresses.module.css +271 -0
- package/templates/components/orionplace/address/StorefrontAddresses.tsx +438 -0
- package/templates/components/orionplace/banners/MainBanner.README.md +65 -0
- package/templates/components/orionplace/banners/MainBanner.module.css +112 -0
- package/templates/components/orionplace/banners/MainBanner.tsx +159 -0
- package/templates/components/orionplace/blog/BlogArticle.README.md +143 -0
- package/templates/components/orionplace/blog/BlogArticle.module.css +304 -0
- package/templates/components/orionplace/blog/BlogArticle.tsx +371 -0
- package/templates/components/orionplace/blog/BlogCommentForm.README.md +51 -0
- package/templates/components/orionplace/blog/BlogCommentForm.module.css +93 -0
- package/templates/components/orionplace/blog/BlogCommentForm.tsx +125 -0
- package/templates/components/orionplace/blog/BlogComments.README.md +98 -0
- package/templates/components/orionplace/blog/BlogComments.module.css +151 -0
- package/templates/components/orionplace/blog/BlogComments.tsx +590 -0
- package/templates/components/orionplace/blog/BlogPostCard.README.md +51 -0
- package/templates/components/orionplace/blog/BlogPostCard.module.css +167 -0
- package/templates/components/orionplace/blog/BlogPostCard.tsx +177 -0
- package/templates/components/orionplace/blog/BlogPostGroup.README.md +49 -0
- package/templates/components/orionplace/blog/BlogPostGroup.module.css +37 -0
- package/templates/components/orionplace/blog/BlogPostGroup.tsx +129 -0
- package/templates/components/orionplace/blog/StorefrontJournal.README.md +105 -0
- package/templates/components/orionplace/blog/StorefrontJournal.module.css +387 -0
- package/templates/components/orionplace/blog/StorefrontJournal.tsx +548 -0
- package/templates/components/orionplace/branding/BrandLogos.README.md +29 -0
- package/templates/components/orionplace/branding/BrandLogos.module.css +7 -0
- package/templates/components/orionplace/branding/BrandLogos.tsx +30 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.README.md +92 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.module.css +159 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.tsx +370 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.README.md +166 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.module.css +105 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.tsx +679 -0
- package/templates/components/orionplace/cart/CartItemOptions.README.md +172 -0
- package/templates/components/orionplace/cart/CartItemOptions.module.css +113 -0
- package/templates/components/orionplace/cart/CartItemOptions.tsx +503 -0
- package/templates/components/orionplace/cart/CartLineItem.README.md +138 -0
- package/templates/components/orionplace/cart/CartLineItem.module.css +57 -0
- package/templates/components/orionplace/cart/CartLineItem.tsx +263 -0
- package/templates/components/orionplace/cart/CartPreview.README.md +99 -0
- package/templates/components/orionplace/cart/CartPreview.module.css +225 -0
- package/templates/components/orionplace/cart/CartPreview.tsx +188 -0
- package/templates/components/orionplace/cart/DeliveryMap.README.md +65 -0
- package/templates/components/orionplace/cart/DeliveryMap.module.css +32 -0
- package/templates/components/orionplace/cart/DeliveryMap.tsx +131 -0
- package/templates/components/orionplace/cart/StorefrontCart.README.md +281 -0
- package/templates/components/orionplace/cart/StorefrontCart.module.css +460 -0
- package/templates/components/orionplace/cart/StorefrontCart.tsx +937 -0
- package/templates/components/orionplace/catalog/CatalogHeader.README.md +136 -0
- package/templates/components/orionplace/catalog/CatalogHeader.module.css +387 -0
- package/templates/components/orionplace/catalog/CatalogHeader.tsx +644 -0
- package/templates/components/orionplace/catalog/CatalogRepresentative.README.md +68 -0
- package/templates/components/orionplace/catalog/CatalogRepresentative.tsx +51 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.README.md +120 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.module.css +179 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.tsx +304 -0
- package/templates/components/orionplace/categories/CategoryGroup.README.md +68 -0
- package/templates/components/orionplace/categories/CategoryGroup.module.css +110 -0
- package/templates/components/orionplace/categories/CategoryGroup.tsx +123 -0
- package/templates/components/orionplace/categories/StorefrontCategory.README.md +155 -0
- package/templates/components/orionplace/categories/StorefrontCategory.module.css +148 -0
- package/templates/components/orionplace/categories/StorefrontCategory.tsx +225 -0
- package/templates/components/orionplace/contact/AboutPage.README.md +40 -0
- package/templates/components/orionplace/contact/AboutPage.module.css +216 -0
- package/templates/components/orionplace/contact/AboutPage.tsx +191 -0
- package/templates/components/orionplace/contact/ContactForm.README.md +93 -0
- package/templates/components/orionplace/contact/ContactForm.module.css +264 -0
- package/templates/components/orionplace/contact/ContactForm.tsx +382 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.README.md +67 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.module.css +94 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.tsx +130 -0
- package/templates/components/orionplace/contact/StorefrontContact.README.md +73 -0
- package/templates/components/orionplace/contact/StorefrontContact.module.css +101 -0
- package/templates/components/orionplace/contact/StorefrontContact.tsx +62 -0
- package/templates/components/orionplace/currencies/MainCurrencySwitcher.README.md +37 -0
- package/templates/components/orionplace/currencies/MainCurrencySwitcher.tsx +68 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.README.md +108 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.module.css +110 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.tsx +315 -0
- package/templates/components/orionplace/events/EventsBlock.README.md +58 -0
- package/templates/components/orionplace/events/EventsBlock.module.css +101 -0
- package/templates/components/orionplace/events/EventsBlock.tsx +109 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.README.md +46 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.module.css +196 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.tsx +387 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.README.md +83 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.module.css +271 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.tsx +218 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.README.md +122 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.module.css +92 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.tsx +455 -0
- package/templates/components/orionplace/orders/OrderDetails.README.md +116 -0
- package/templates/components/orionplace/orders/OrderDetails.module.css +730 -0
- package/templates/components/orionplace/orders/OrderDetails.tsx +693 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.README.md +92 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.module.css +105 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.tsx +90 -0
- package/templates/components/orionplace/orders/StorefrontOrders.README.md +131 -0
- package/templates/components/orionplace/orders/StorefrontOrders.module.css +633 -0
- package/templates/components/orionplace/orders/StorefrontOrders.tsx +922 -0
- package/templates/components/orionplace/payments/PaymentPanel.README.md +114 -0
- package/templates/components/orionplace/payments/PaymentPanel.module.css +134 -0
- package/templates/components/orionplace/payments/PaymentPanel.tsx +76 -0
- package/templates/components/orionplace/products/HoverImageViewer.README.md +62 -0
- package/templates/components/orionplace/products/HoverImageViewer.module.css +88 -0
- package/templates/components/orionplace/products/HoverImageViewer.tsx +179 -0
- package/templates/components/orionplace/products/ProductCard.README.md +152 -0
- package/templates/components/orionplace/products/ProductCard.module.css +333 -0
- package/templates/components/orionplace/products/ProductCard.tsx +716 -0
- package/templates/components/orionplace/products/ProductCardActions.README.md +84 -0
- package/templates/components/orionplace/products/ProductCardActions.module.css +146 -0
- package/templates/components/orionplace/products/ProductCardActions.tsx +311 -0
- package/templates/components/orionplace/products/ProductCardBadges.README.md +44 -0
- package/templates/components/orionplace/products/ProductCardBadges.module.css +15 -0
- package/templates/components/orionplace/products/ProductCardBadges.tsx +78 -0
- package/templates/components/orionplace/products/ProductCardDescription.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardDescription.module.css +6 -0
- package/templates/components/orionplace/products/ProductCardDescription.tsx +43 -0
- package/templates/components/orionplace/products/ProductCardFavorite.README.md +52 -0
- package/templates/components/orionplace/products/ProductCardFavorite.module.css +64 -0
- package/templates/components/orionplace/products/ProductCardFavorite.tsx +90 -0
- package/templates/components/orionplace/products/ProductCardPrice.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardPrice.module.css +22 -0
- package/templates/components/orionplace/products/ProductCardPrice.tsx +50 -0
- package/templates/components/orionplace/products/ProductCardRating.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardRating.module.css +7 -0
- package/templates/components/orionplace/products/ProductCardRating.tsx +56 -0
- package/templates/components/orionplace/products/ProductCardSeller.README.md +36 -0
- package/templates/components/orionplace/products/ProductCardSeller.module.css +31 -0
- package/templates/components/orionplace/products/ProductCardSeller.tsx +61 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.README.md +36 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.module.css +8 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.tsx +35 -0
- package/templates/components/orionplace/products/ProductCardTitle.README.md +30 -0
- package/templates/components/orionplace/products/ProductCardTitle.module.css +13 -0
- package/templates/components/orionplace/products/ProductCardTitle.tsx +31 -0
- package/templates/components/orionplace/products/ProductCardVariants.README.md +77 -0
- package/templates/components/orionplace/products/ProductCardVariants.module.css +97 -0
- package/templates/components/orionplace/products/ProductCardVariants.tsx +350 -0
- package/templates/components/orionplace/products/ProductGroup.README.md +89 -0
- package/templates/components/orionplace/products/ProductGroup.module.css +64 -0
- package/templates/components/orionplace/products/ProductGroup.tsx +183 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.README.md +89 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.module.css +320 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.tsx +346 -0
- package/templates/components/orionplace/products/ProductReviewForm.README.md +72 -0
- package/templates/components/orionplace/products/ProductReviewForm.module.css +217 -0
- package/templates/components/orionplace/products/ProductReviewForm.tsx +288 -0
- package/templates/components/orionplace/products/ProductReviewGallery.README.md +61 -0
- package/templates/components/orionplace/products/ProductReviewGallery.module.css +108 -0
- package/templates/components/orionplace/products/ProductReviewGallery.tsx +110 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.README.md +49 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.module.css +50 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.tsx +260 -0
- package/templates/components/orionplace/products/ProductReviews.README.md +137 -0
- package/templates/components/orionplace/products/ProductReviews.module.css +602 -0
- package/templates/components/orionplace/products/ProductReviews.tsx +944 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.README.md +67 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.module.css +79 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.tsx +324 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.README.md +52 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.module.css +138 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.tsx +117 -0
- package/templates/components/orionplace/products/StorefrontProduct.README.md +200 -0
- package/templates/components/orionplace/products/StorefrontProduct.module.css +767 -0
- package/templates/components/orionplace/products/StorefrontProduct.tsx +1339 -0
- package/templates/components/orionplace/products/StorefrontWishlist.README.md +162 -0
- package/templates/components/orionplace/products/StorefrontWishlist.module.css +71 -0
- package/templates/components/orionplace/products/StorefrontWishlist.tsx +402 -0
- package/templates/components/orionplace/promo/PromoProducts.README.md +133 -0
- package/templates/components/orionplace/promo/PromoProducts.module.css +68 -0
- package/templates/components/orionplace/promo/PromoProducts.tsx +345 -0
- package/templates/components/orionplace/search/MainSearch.README.md +73 -0
- package/templates/components/orionplace/search/MainSearch.module.css +202 -0
- package/templates/components/orionplace/search/MainSearch.tsx +217 -0
- package/templates/components/orionplace/search/ProductSearchResults.README.md +166 -0
- package/templates/components/orionplace/search/ProductSearchResults.module.css +358 -0
- package/templates/components/orionplace/search/ProductSearchResults.tsx +308 -0
- package/templates/components/orionplace/search/SearchFilters.README.md +109 -0
- package/templates/components/orionplace/search/SearchFilters.module.css +274 -0
- package/templates/components/orionplace/search/SearchFilters.tsx +439 -0
- package/templates/components/orionplace/sellers/SellerFilters.README.md +66 -0
- package/templates/components/orionplace/sellers/SellerFilters.module.css +232 -0
- package/templates/components/orionplace/sellers/SellerFilters.tsx +201 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.README.md +72 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.module.css +314 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.tsx +335 -0
- package/templates/components/orionplace/sellers/SellerSummary.README.md +62 -0
- package/templates/components/orionplace/sellers/SellerSummary.module.css +182 -0
- package/templates/components/orionplace/sellers/SellerSummary.tsx +107 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.README.md +120 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.module.css +147 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.tsx +360 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.README.md +35 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.module.css +35 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.tsx +61 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +33 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.module.css +81 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +91 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.README.md +37 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.module.css +126 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.tsx +78 -0
- package/templates/components/orionplace/shared/OrionplaceImage.README.md +45 -0
- package/templates/components/orionplace/shared/OrionplaceImage.module.css +22 -0
- package/templates/components/orionplace/shared/OrionplaceImage.tsx +96 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.README.md +31 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.module.css +59 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.tsx +126 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.README.md +39 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.module.css +79 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.tsx +103 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.README.md +97 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.module.css +246 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.tsx +367 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.README.md +69 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.module.css +233 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.tsx +439 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.README.md +52 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.module.css +141 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.tsx +103 -0
- package/templates/components/orionplace/shared/StorefrontPagination.README.md +39 -0
- package/templates/components/orionplace/shared/StorefrontPagination.module.css +69 -0
- package/templates/components/orionplace/shared/StorefrontPagination.tsx +102 -0
- package/templates/components/orionplace/shared/dialogs.css +36 -0
- package/templates/components/orionplace/shared/emptyStateArt.ts +231 -0
- package/templates/components/orionplace/shared/features.module.css +162 -0
- package/templates/components/orionplace/social/SocialLinks.README.md +16 -0
- package/templates/components/orionplace/social/SocialLinks.module.css +36 -0
- package/templates/components/orionplace/social/SocialLinks.tsx +59 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.README.md +59 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.module.css +159 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.tsx +303 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.README.md +47 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.module.css +88 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.tsx +54 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.README.md +55 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.module.css +118 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.tsx +165 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.README.md +150 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.module.css +186 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.tsx +389 -0
- package/templates/components/orionplace/storefront/StorefrontHome.README.md +138 -0
- package/templates/components/orionplace/storefront/StorefrontHome.module.css +116 -0
- package/templates/components/orionplace/storefront/StorefrontHome.tsx +282 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.README.md +51 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.module.css +95 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.tsx +80 -0
- package/templates/components/orionplace/stores/StorefrontStores.README.md +87 -0
- package/templates/components/orionplace/stores/StorefrontStores.module.css +218 -0
- package/templates/components/orionplace/stores/StorefrontStores.tsx +396 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +183 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.module.css +347 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.tsx +884 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.README.md +111 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.module.css +311 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.tsx +474 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.README.md +102 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.module.css +219 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.tsx +350 -0
- package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +67 -0
- package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.tsx +175 -0
- package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +95 -0
- package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.tsx +634 -0
- package/templates/components/orionplace/subscriptions/SubscriptionDialog.module.css +453 -0
- package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +75 -0
- package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.tsx +384 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +116 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.module.css +168 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.tsx +236 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +123 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.module.css +57 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.tsx +101 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +109 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.tsx +253 -0
- package/templates/components/orionplace/support/StorefrontSupport.README.md +157 -0
- package/templates/components/orionplace/support/StorefrontSupport.tsx +1040 -0
- package/templates/components/orionplace/support/Support.module.css +1133 -0
- package/templates/components/orionplace/support/TicketConversation.README.md +105 -0
- package/templates/components/orionplace/support/TicketConversation.tsx +502 -0
- package/templates/components/orionplace/support/TicketImage.README.md +52 -0
- package/templates/components/orionplace/support/TicketImage.tsx +254 -0
- package/templates/components/orionplace/support/TicketItemCard.README.md +66 -0
- package/templates/components/orionplace/support/TicketItemCard.tsx +140 -0
- package/templates/components/orionplace/support/TicketMessageForm.README.md +88 -0
- package/templates/components/orionplace/support/TicketMessageForm.tsx +261 -0
- package/templates/components/orionplace/support/TicketSubscriptionCard.README.md +53 -0
- package/templates/components/orionplace/support/TicketSubscriptionCard.tsx +118 -0
- package/templates/components/orionplace/tariffs/TariffCard.README.md +108 -0
- package/templates/components/orionplace/tariffs/TariffCard.module.css +86 -0
- package/templates/components/orionplace/tariffs/TariffCard.tsx +218 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.README.md +40 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.module.css +72 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.tsx +58 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.README.md +58 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.module.css +60 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.tsx +140 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.README.md +36 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.module.css +8 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.tsx +32 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.README.md +74 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.module.css +142 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.tsx +181 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.README.md +32 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.module.css +9 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.tsx +29 -0
- package/templates/components/orionplace/tariffs/TariffCards.README.md +88 -0
- package/templates/components/orionplace/tariffs/TariffCards.module.css +24 -0
- package/templates/components/orionplace/tariffs/TariffCards.tsx +44 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.README.md +92 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.module.css +214 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.tsx +299 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.README.md +30 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.module.css +8 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.tsx +32 -0
- package/templates/components/orionplace/units/UnitSwitcher.README.md +35 -0
- package/templates/components/orionplace/units/UnitSwitcher.tsx +58 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.README.md +154 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.module.css +507 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.tsx +915 -0
- package/templates/components/orionplace/wallet/WalletBalance.README.md +46 -0
- package/templates/components/orionplace/wallet/WalletBalance.module.css +46 -0
- package/templates/components/orionplace/wallet/WalletBalance.tsx +51 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.README.md +54 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.module.css +152 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.tsx +181 -0
- package/templates/hooks/useAccountActivity.ts +251 -0
- package/templates/hooks/useAccountAddresses.ts +81 -0
- package/templates/hooks/useAccountPromocodes.ts +91 -0
- package/templates/hooks/useOrionplaceActionMenu.ts +118 -0
- package/templates/hooks/useOrionplaceAddressForm.ts +262 -0
- package/templates/hooks/useOrionplaceApi.ts +98 -0
- package/templates/hooks/useOrionplaceAppLoad.ts +38 -6
- package/templates/hooks/useOrionplaceBlogReading.ts +351 -0
- package/templates/hooks/useOrionplaceDialog.ts +85 -0
- package/templates/hooks/useOrionplaceHomeProducts.ts +97 -0
- package/templates/hooks/useOrionplaceMap.tsx +230 -0
- package/templates/hooks/useOrionplaceMediaFormat.ts +33 -0
- package/templates/hooks/useOrionplaceProduct.ts +28 -0
- package/templates/hooks/useOrionplaceProfile.ts +347 -0
- package/templates/hooks/useOrionplaceReviews.ts +352 -0
- package/templates/hooks/useOrionplaceStableHeight.ts +65 -0
- package/templates/hooks/useOrionplaceStorefront.tsx +575 -0
- package/templates/hooks/useOrionplaceTariffPurchase.ts +152 -0
- package/templates/interfaces/orionplace/accounts/IContact.ts +21 -0
- package/templates/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +17 -0
- package/templates/interfaces/orionplace/accounts/IEmailVerification.ts +59 -0
- package/templates/interfaces/orionplace/accounts/IProfileActions.ts +38 -0
- package/templates/interfaces/orionplace/accounts/IProfileData.ts +123 -0
- package/templates/interfaces/orionplace/accounts/IProfileMedia.ts +17 -0
- package/templates/interfaces/orionplace/accounts/IStorefrontProfile.ts +54 -0
- package/templates/interfaces/orionplace/address/IAddressCitySuggestion.ts +19 -0
- package/templates/interfaces/orionplace/address/IAddressEditor.ts +9 -0
- package/templates/interfaces/orionplace/address/IAddressLocationSuggestion.ts +22 -0
- package/templates/interfaces/orionplace/address/IAddressRegionSearch.ts +30 -0
- package/templates/interfaces/orionplace/address/IAddressSuggestion.ts +20 -0
- package/templates/interfaces/orionplace/address/IUserAddress.ts +87 -0
- package/templates/interfaces/orionplace/appBase/IAppLoad.ts +4 -3
- package/templates/interfaces/orionplace/appBase/IAppLoadCommon.ts +22 -31
- package/templates/interfaces/orionplace/appBase/IApploadUserProfile.ts +1 -1
- package/templates/interfaces/orionplace/appBase/IForm.ts +1 -1
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +7 -7
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +2 -2
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +20 -7
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +2 -2
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +1 -0
- package/templates/interfaces/orionplace/blog/IBlogApi.ts +247 -0
- package/templates/interfaces/orionplace/blog/IBlogPostPreview.ts +30 -0
- package/templates/interfaces/orionplace/cart/ICartActions.ts +67 -0
- package/templates/interfaces/orionplace/cart/ICartData.ts +382 -0
- package/templates/interfaces/orionplace/cart/ICartDeliveryActions.ts +68 -0
- package/templates/interfaces/orionplace/cart/ICartModal.ts +22 -0
- package/templates/interfaces/orionplace/cart/IDeliveryMap.ts +29 -0
- package/templates/interfaces/orionplace/catalog/ICatalogDirectory.ts +75 -0
- package/templates/interfaces/orionplace/category/ICategory.ts +2 -1
- package/templates/interfaces/orionplace/domains/IDomain.ts +2 -2
- package/templates/interfaces/orionplace/forms/ICustomerSubfilter.ts +19 -0
- package/templates/interfaces/orionplace/index.ts +64 -30
- package/templates/interfaces/orionplace/marketing/IPromoActions.ts +51 -0
- package/templates/interfaces/orionplace/orders/IOrderActions.ts +99 -0
- package/templates/interfaces/orionplace/orders/IOrderHistory.ts +259 -0
- package/templates/interfaces/orionplace/orders/IProductPreorder.ts +31 -0
- package/templates/interfaces/orionplace/payments/IInvoice.ts +147 -0
- package/templates/interfaces/orionplace/products/IProduct.ts +178 -151
- package/templates/interfaces/orionplace/products/IProductFeedbackApi.ts +218 -0
- package/templates/interfaces/orionplace/products/IProductSearchApi.ts +146 -0
- package/templates/interfaces/orionplace/products/IProductSearchFacets.ts +35 -0
- package/templates/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +15 -0
- package/templates/interfaces/orionplace/products/IProductSpecification.ts +14 -0
- package/templates/interfaces/orionplace/products/IWishlist.ts +22 -0
- package/templates/interfaces/orionplace/sellers/ISellerDirectory.ts +70 -0
- package/templates/interfaces/orionplace/shared/IBreadcrumb.ts +10 -0
- package/templates/interfaces/orionplace/shared/IStorefrontControls.ts +6 -0
- package/templates/interfaces/orionplace/state.ts +1 -1
- package/templates/interfaces/orionplace/stores/IStoreDirectory.ts +63 -0
- package/templates/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +41 -31
- package/templates/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +11 -0
- package/templates/interfaces/orionplace/subscribes/ISubscribe.ts +1 -1
- package/templates/interfaces/orionplace/subscribes/ISubscriptionApi.ts +125 -0
- package/templates/interfaces/orionplace/tickets/ICustomerTicketApi.ts +223 -0
- package/templates/interfaces/orionplace/transport.ts +7 -3
- package/templates/lib/orionplace/accountLabels.ts +22 -0
- package/templates/lib/orionplace/activityLabels.ts +65 -0
- package/templates/lib/orionplace/activityPresentation.ts +9 -0
- package/templates/lib/orionplace/addressChanges.ts +26 -0
- package/templates/lib/orionplace/addressPresentation.ts +58 -0
- package/templates/lib/orionplace/api.ts +326 -0
- package/templates/lib/orionplace/appLoadClient.ts +63 -21
- package/templates/lib/orionplace/appLoadResult.ts +75 -21
- package/templates/lib/orionplace/appLoadServer.ts +66 -21
- package/templates/lib/orionplace/blogArticle.ts +97 -0
- package/templates/lib/orionplace/blogArticleHtml.ts +370 -0
- package/templates/lib/orionplace/blogComments.ts +102 -0
- package/templates/lib/orionplace/blogJournal.ts +115 -0
- package/templates/lib/orionplace/blogLabels.ts +108 -0
- package/templates/lib/orionplace/blogPresentation.ts +67 -0
- package/templates/lib/orionplace/browseLabels.ts +98 -0
- package/templates/lib/orionplace/cartAddress.ts +86 -0
- package/templates/lib/orionplace/cartController.ts +104 -0
- package/templates/lib/orionplace/cartLabels.ts +261 -0
- package/templates/lib/orionplace/cartOptions.ts +115 -0
- package/templates/lib/orionplace/cartPreview.ts +120 -0
- package/templates/lib/orionplace/cartPromo.ts +150 -0
- package/templates/lib/orionplace/cartShipment.ts +61 -0
- package/templates/lib/orionplace/cartSnapshot.ts +21 -0
- package/templates/lib/orionplace/catalog.ts +150 -0
- package/templates/lib/orionplace/categoryLabels.ts +21 -0
- package/templates/lib/orionplace/contact.ts +47 -0
- package/templates/lib/orionplace/contactLabels.ts +102 -0
- package/templates/lib/orionplace/currency.ts +128 -0
- package/templates/lib/orionplace/deliveryMap.ts +86 -0
- package/templates/lib/orionplace/directoryLabels.ts +133 -0
- package/templates/lib/orionplace/domain.ts +11 -6
- package/templates/lib/orionplace/errorPageLabels.ts +74 -0
- package/templates/lib/orionplace/eventEnrollment.ts +22 -0
- package/templates/lib/orionplace/featureData.ts +28 -0
- package/templates/lib/orionplace/featureLabels.ts +271 -0
- package/templates/lib/orionplace/featuredLabels.ts +28 -0
- package/templates/lib/orionplace/footerLabels.ts +35 -0
- package/templates/lib/orionplace/guestSession.ts +55 -0
- package/templates/lib/orionplace/headerLabels.ts +68 -0
- package/templates/lib/orionplace/homeContent.ts +193 -0
- package/templates/lib/orionplace/homeLabels.ts +52 -0
- package/templates/lib/orionplace/htmlText.ts +51 -0
- package/templates/lib/orionplace/manufacturerDirectory.ts +71 -0
- package/templates/lib/orionplace/manufacturerIndex.ts +92 -0
- package/templates/lib/orionplace/modalWindow.ts +109 -0
- package/templates/lib/orionplace/nativeApp.ts +365 -0
- package/templates/lib/orionplace/navigation.tsx +121 -0
- package/templates/lib/orionplace/notice.ts +22 -0
- package/templates/lib/orionplace/orderLabels.ts +311 -0
- package/templates/lib/orionplace/orderPresentation.ts +574 -0
- package/templates/lib/orionplace/pageMetadata.ts +247 -0
- package/templates/lib/orionplace/pageSeo.ts +274 -0
- package/templates/lib/orionplace/paginationScroll.ts +131 -0
- package/templates/lib/orionplace/phone.ts +22 -0
- package/templates/lib/orionplace/presentation.ts +84 -0
- package/templates/lib/orionplace/productActionLabels.ts +60 -0
- package/templates/lib/orionplace/productAvailability.ts +30 -0
- package/templates/lib/orionplace/productGallery.ts +64 -0
- package/templates/lib/orionplace/productLabels.ts +82 -0
- package/templates/lib/orionplace/productPage.ts +308 -0
- package/templates/lib/orionplace/productPhotos.ts +67 -0
- package/templates/lib/orionplace/productSearch.ts +232 -0
- package/templates/lib/orionplace/productSeller.ts +56 -0
- package/templates/lib/orionplace/profile.ts +157 -0
- package/templates/lib/orionplace/profileLabels.ts +151 -0
- package/templates/lib/orionplace/promoLabels.ts +75 -0
- package/templates/lib/orionplace/promoPresentation.ts +381 -0
- package/templates/lib/orionplace/reviewLabels.ts +172 -0
- package/templates/lib/orionplace/reviewPresentation.ts +64 -0
- package/templates/lib/orionplace/reviewScope.ts +38 -0
- package/templates/lib/orionplace/searchFilters.ts +99 -0
- package/templates/lib/orionplace/searchHistory.ts +144 -0
- package/templates/lib/orionplace/sellerDirectory.ts +120 -0
- package/templates/lib/orionplace/seo.ts +52 -0
- package/templates/lib/orionplace/serverApi.ts +158 -0
- package/templates/lib/orionplace/serverLocale.ts +29 -0
- package/templates/lib/orionplace/serverMetadata.ts +86 -0
- package/templates/lib/orionplace/serverRecords.ts +25 -0
- package/templates/lib/orionplace/serverRoute.tsx +51 -0
- package/templates/lib/orionplace/sessionLabels.ts +27 -0
- package/templates/lib/orionplace/signInReturn.ts +89 -0
- package/templates/lib/orionplace/storeDirectory.ts +47 -0
- package/templates/lib/orionplace/storefrontRecords.ts +29 -0
- package/templates/lib/orionplace/subscriptionChanges.ts +120 -0
- package/templates/lib/orionplace/subscriptionLabels.ts +67 -0
- package/templates/lib/orionplace/subscriptionManageLabels.ts +306 -0
- package/templates/lib/orionplace/subscriptionPlans.ts +122 -0
- package/templates/lib/orionplace/subscriptionRemote.ts +85 -0
- package/templates/lib/orionplace/subscriptionUsage.ts +58 -0
- package/templates/lib/orionplace/tariffLabels.ts +123 -0
- package/templates/lib/orionplace/tariffPage.ts +54 -0
- package/templates/lib/orionplace/tariffVariables.ts +136 -0
- package/templates/lib/orionplace/tariffs.ts +192 -0
- package/templates/lib/orionplace/ticketItems.ts +75 -0
- package/templates/lib/orionplace/ticketLabels.ts +335 -0
- package/templates/lib/orionplace/ticketLocation.ts +79 -0
- package/templates/lib/orionplace/ticketRequests.ts +70 -0
- package/templates/lib/orionplace/walletTransaction.ts +105 -0
- package/templates/orionplace/COMPONENT-DOWNLOAD.md +66 -0
- package/templates/orionplace/COMPONENTS.md +35 -0
- package/templates/providers/OrionplaceProvider.tsx +164 -12
- package/templates/proxy.ts +8 -3
- package/templates/stores/orionplace.ts +212 -49
- package/templates/stores/orionplaceBrowse.ts +89 -0
- package/templates/stores/orionplaceCatalog.ts +144 -0
- package/templates/stores/orionplaceProducts.ts +389 -0
- package/templates/stores/orionplaceScope.ts +104 -0
- package/templates/stores/orionplaceSelections.ts +130 -0
- package/templates/themes/orionplace.ts +106 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
useId,
|
|
5
|
+
useLayoutEffect,
|
|
6
|
+
useRef,
|
|
7
|
+
useState,
|
|
8
|
+
type ChangeEvent,
|
|
9
|
+
type FormEvent,
|
|
10
|
+
} from 'react';
|
|
11
|
+
import { useOrionplaceSelections } from '@/providers/OrionplaceProvider';
|
|
12
|
+
import { featureLabels } from '@/lib/orionplace/featureLabels';
|
|
13
|
+
import { ticketLabels } from '@/lib/orionplace/ticketLabels';
|
|
14
|
+
import type { OrderRefundWindow } from '@/interfaces/orionplace/orders/IOrderHistory';
|
|
15
|
+
import styles from './Support.module.css';
|
|
16
|
+
|
|
17
|
+
export interface TicketMessageFormProps {
|
|
18
|
+
pending?: boolean;
|
|
19
|
+
creating?: boolean;
|
|
20
|
+
// Locks the form and explains why: the backend would reject a new message
|
|
21
|
+
// now (see `ticketReplyWaitText`).
|
|
22
|
+
waitHint?: string;
|
|
23
|
+
// Turns a new return request into a choice about a defect: optional
|
|
24
|
+
// inside the regular return period, required (and fixed) after it.
|
|
25
|
+
refundWindow?: OrderRefundWindow | null;
|
|
26
|
+
onSubmit?: (text: string, files: File[], isDefect: boolean) => void;
|
|
27
|
+
onCancel?: () => void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function Icon({ path }: { path: string }) {
|
|
31
|
+
return (
|
|
32
|
+
<svg
|
|
33
|
+
className={styles.icon}
|
|
34
|
+
viewBox="0 0 24 24"
|
|
35
|
+
fill="none"
|
|
36
|
+
stroke="currentColor"
|
|
37
|
+
strokeWidth="1.6"
|
|
38
|
+
strokeLinecap="round"
|
|
39
|
+
strokeLinejoin="round"
|
|
40
|
+
aria-hidden="true"
|
|
41
|
+
>
|
|
42
|
+
<path d={path} />
|
|
43
|
+
</svg>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function TicketMessageForm({
|
|
48
|
+
pending = false,
|
|
49
|
+
creating = false,
|
|
50
|
+
waitHint = '',
|
|
51
|
+
refundWindow = null,
|
|
52
|
+
onSubmit,
|
|
53
|
+
onCancel,
|
|
54
|
+
}: TicketMessageFormProps) {
|
|
55
|
+
const locale = useOrionplaceSelections((state) => state.localeCode);
|
|
56
|
+
const labels = ticketLabels(locale);
|
|
57
|
+
const common = featureLabels(locale);
|
|
58
|
+
const id = useId();
|
|
59
|
+
const textarea = useRef<HTMLTextAreaElement>(null);
|
|
60
|
+
const fileInput = useRef<HTMLInputElement>(null);
|
|
61
|
+
const [message, setMessage] = useState('');
|
|
62
|
+
const [files, setFiles] = useState<File[]>([]);
|
|
63
|
+
const [chosen, setChosen] = useState(false);
|
|
64
|
+
const tooMany = files.length > 5;
|
|
65
|
+
const locked = pending || Boolean(waitHint);
|
|
66
|
+
const defectOnly = refundWindow === 'defect';
|
|
67
|
+
const isDefect = defectOnly || chosen;
|
|
68
|
+
|
|
69
|
+
useLayoutEffect(() => {
|
|
70
|
+
const field = textarea.current;
|
|
71
|
+
if (!field) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
field.style.height = 'auto';
|
|
75
|
+
field.style.height = `${field.scrollHeight + 2}px`;
|
|
76
|
+
}, [message]);
|
|
77
|
+
|
|
78
|
+
function chooseFiles(event: ChangeEvent<HTMLInputElement>) {
|
|
79
|
+
// Copy the files first: clearing the input empties its live FileList
|
|
80
|
+
// before React runs the state update.
|
|
81
|
+
const picked = Array.from(event.target.files ?? []);
|
|
82
|
+
setFiles((current) => [...current, ...picked]);
|
|
83
|
+
event.target.value = '';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function submit(event: FormEvent<HTMLFormElement>) {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
if (!tooMany && !locked) {
|
|
89
|
+
onSubmit?.(message, files, isDefect);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<form
|
|
95
|
+
className={`${styles.root} ${styles.stack} ${styles.form}`}
|
|
96
|
+
data-feature-part="TicketMessageForm"
|
|
97
|
+
onSubmit={submit}
|
|
98
|
+
>
|
|
99
|
+
<label
|
|
100
|
+
className={styles.label}
|
|
101
|
+
htmlFor={`${id}-message`}
|
|
102
|
+
>
|
|
103
|
+
{labels.message}{' '}
|
|
104
|
+
<span
|
|
105
|
+
className={styles.required}
|
|
106
|
+
aria-hidden="true"
|
|
107
|
+
>
|
|
108
|
+
*
|
|
109
|
+
</span>
|
|
110
|
+
</label>
|
|
111
|
+
<textarea
|
|
112
|
+
ref={textarea}
|
|
113
|
+
id={`${id}-message`}
|
|
114
|
+
className={styles.textarea}
|
|
115
|
+
name="ticket_body"
|
|
116
|
+
rows={3}
|
|
117
|
+
required
|
|
118
|
+
minLength={2}
|
|
119
|
+
maxLength={2048}
|
|
120
|
+
disabled={locked}
|
|
121
|
+
value={message}
|
|
122
|
+
onChange={(event) => setMessage(event.target.value)}
|
|
123
|
+
/>
|
|
124
|
+
{creating && refundWindow ? (
|
|
125
|
+
<div
|
|
126
|
+
className={styles.defect}
|
|
127
|
+
data-ticket-defect
|
|
128
|
+
data-refund-window={refundWindow}
|
|
129
|
+
>
|
|
130
|
+
<label className={styles.defectChoice}>
|
|
131
|
+
<input
|
|
132
|
+
type="checkbox"
|
|
133
|
+
name="is_defect"
|
|
134
|
+
checked={isDefect}
|
|
135
|
+
disabled={locked || defectOnly}
|
|
136
|
+
aria-describedby={defectOnly ? `${id}-defect` : undefined}
|
|
137
|
+
onChange={(event) => setChosen(event.target.checked)}
|
|
138
|
+
/>
|
|
139
|
+
<span>{defectOnly ? labels.defect : labels.defectOptional}</span>
|
|
140
|
+
</label>
|
|
141
|
+
{defectOnly ? (
|
|
142
|
+
<p
|
|
143
|
+
id={`${id}-defect`}
|
|
144
|
+
data-ticket-defect-hint
|
|
145
|
+
>
|
|
146
|
+
{labels.defectOnly}
|
|
147
|
+
</p>
|
|
148
|
+
) : null}
|
|
149
|
+
</div>
|
|
150
|
+
) : null}
|
|
151
|
+
<input
|
|
152
|
+
ref={fileInput}
|
|
153
|
+
id={`${id}-files`}
|
|
154
|
+
className={styles.screenReaderOnly}
|
|
155
|
+
type="file"
|
|
156
|
+
accept=".jpg,.jpeg,.gif,.png,.webp,.ico"
|
|
157
|
+
multiple
|
|
158
|
+
tabIndex={-1}
|
|
159
|
+
aria-label={labels.images}
|
|
160
|
+
disabled={locked}
|
|
161
|
+
onChange={chooseFiles}
|
|
162
|
+
/>
|
|
163
|
+
{files.length ? (
|
|
164
|
+
<ul
|
|
165
|
+
className={styles.files}
|
|
166
|
+
aria-label={labels.images}
|
|
167
|
+
>
|
|
168
|
+
{files.map((file, index) => (
|
|
169
|
+
<li
|
|
170
|
+
key={`${file.name}:${file.lastModified}:${index}`}
|
|
171
|
+
className={styles.file}
|
|
172
|
+
>
|
|
173
|
+
<svg
|
|
174
|
+
className={styles.icon}
|
|
175
|
+
viewBox="0 0 24 24"
|
|
176
|
+
fill="none"
|
|
177
|
+
stroke="currentColor"
|
|
178
|
+
strokeWidth="1.6"
|
|
179
|
+
strokeLinecap="round"
|
|
180
|
+
strokeLinejoin="round"
|
|
181
|
+
aria-hidden="true"
|
|
182
|
+
>
|
|
183
|
+
<path d="M4 4h16v16H4Z" />
|
|
184
|
+
<circle
|
|
185
|
+
cx="9"
|
|
186
|
+
cy="9"
|
|
187
|
+
r="2"
|
|
188
|
+
/>
|
|
189
|
+
<path d="m20 15-5-5L4 20" />
|
|
190
|
+
</svg>
|
|
191
|
+
<span className={styles.fileName}>{file.name}</span>
|
|
192
|
+
<button
|
|
193
|
+
className={`${styles.tool} ${styles.iconButton}`}
|
|
194
|
+
type="button"
|
|
195
|
+
aria-label={`${labels.removeImage}: ${file.name}`}
|
|
196
|
+
title={labels.removeImage}
|
|
197
|
+
disabled={locked}
|
|
198
|
+
onClick={() =>
|
|
199
|
+
setFiles((current) =>
|
|
200
|
+
current.filter((_, item) => item !== index),
|
|
201
|
+
)
|
|
202
|
+
}
|
|
203
|
+
>
|
|
204
|
+
<Icon path="M6 6l12 12M18 6 6 18" />
|
|
205
|
+
</button>
|
|
206
|
+
</li>
|
|
207
|
+
))}
|
|
208
|
+
</ul>
|
|
209
|
+
) : null}
|
|
210
|
+
{waitHint ? (
|
|
211
|
+
<p
|
|
212
|
+
className={styles.notice}
|
|
213
|
+
role="status"
|
|
214
|
+
data-ticket-wait
|
|
215
|
+
>
|
|
216
|
+
{waitHint}
|
|
217
|
+
</p>
|
|
218
|
+
) : null}
|
|
219
|
+
{tooMany ? (
|
|
220
|
+
<p
|
|
221
|
+
className={`${styles.notice} ${styles.noticeError}`}
|
|
222
|
+
role="alert"
|
|
223
|
+
>
|
|
224
|
+
{labels.tooMany}
|
|
225
|
+
</p>
|
|
226
|
+
) : null}
|
|
227
|
+
<div className={styles.formActions}>
|
|
228
|
+
<button
|
|
229
|
+
className={styles.tool}
|
|
230
|
+
type="button"
|
|
231
|
+
data-ticket-attach
|
|
232
|
+
disabled={locked}
|
|
233
|
+
onClick={() => fileInput.current?.click()}
|
|
234
|
+
>
|
|
235
|
+
<Icon path="m20 11.5-8.2 8.2a5 5 0 0 1-7.1-7.1l8.5-8.5a3.3 3.3 0 0 1 4.7 4.7l-8.5 8.5a1.7 1.7 0 0 1-2.4-2.4l7.8-7.8" />
|
|
236
|
+
{labels.attach}
|
|
237
|
+
</button>
|
|
238
|
+
<div className={styles.actions}>
|
|
239
|
+
{creating ? (
|
|
240
|
+
<button
|
|
241
|
+
className={styles.button}
|
|
242
|
+
type="button"
|
|
243
|
+
disabled={pending}
|
|
244
|
+
onClick={() => onCancel?.()}
|
|
245
|
+
>
|
|
246
|
+
{common.cancel}
|
|
247
|
+
</button>
|
|
248
|
+
) : null}
|
|
249
|
+
<button
|
|
250
|
+
className={`${styles.button} ${styles.primary}`}
|
|
251
|
+
type="submit"
|
|
252
|
+
disabled={locked || tooMany}
|
|
253
|
+
>
|
|
254
|
+
<Icon path="M4 12 20 4l-4 16-4-7Zm8 1 8-9" />
|
|
255
|
+
{creating ? labels.create : labels.send}
|
|
256
|
+
</button>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
</form>
|
|
260
|
+
);
|
|
261
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# TicketSubscriptionCard · React
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
`TicketSubscriptionCard` identifies the customer subscription that a support
|
|
6
|
+
conversation is about. `subscription` is an item returned by
|
|
7
|
+
`subscriptions_get`; `plan` is the matching tariff. The card shows the plan's
|
|
8
|
+
first small image in a reserved 96 by 96 area, or a plan icon, plus the
|
|
9
|
+
localized plan name and subscription number.
|
|
10
|
+
|
|
11
|
+
The state comes from the subscription data: active while `active_until` is in
|
|
12
|
+
the future, ended after that date, and pending while the remote service is
|
|
13
|
+
still being set up. The facts show the paid-until date and automatic renewal.
|
|
14
|
+
Renewal displays its length and the combined plan and option amount in the
|
|
15
|
+
selected currency; a missing `renew_period` displays Off.
|
|
16
|
+
|
|
17
|
+
The name links to `subscriptionsHref(locale)`. The component makes no request
|
|
18
|
+
and reports no action. Source is maintained in
|
|
19
|
+
`components/orionplace/support/TicketSubscriptionCard.tsx`.
|
|
20
|
+
|
|
21
|
+
### Props
|
|
22
|
+
|
|
23
|
+
| Prop | Meaning |
|
|
24
|
+
| ------------------------------------------------ | ----------------------------------------------------------------- |
|
|
25
|
+
| `subscription: ICustomerSubscription` | Customer subscription displayed or changed by the component. |
|
|
26
|
+
| `plan?: ISubscribeTariff` | Tariff plan associated with the current card or subscription. |
|
|
27
|
+
| `subscriptionsHref?: (locale: string) => string` | Builds the subscriptions destination from the callback arguments. |
|
|
28
|
+
|
|
29
|
+
## Русский
|
|
30
|
+
|
|
31
|
+
`TicketSubscriptionCard` показывает подписку покупателя, к которой относится
|
|
32
|
+
обращение. `subscription` — элемент ответа `subscriptions_get`, а `plan` —
|
|
33
|
+
соответствующий тариф. Карточка выводит первое малое изображение тарифа в
|
|
34
|
+
заранее выделенной области 96 на 96 или значок тарифа, локализованное название
|
|
35
|
+
и номер подписки.
|
|
36
|
+
|
|
37
|
+
Состояние определяется данными подписки: подписка активна, пока
|
|
38
|
+
`active_until` находится в будущем, завершена после этой даты и настраивается,
|
|
39
|
+
пока внешний сервис ещё не подтвердил её. Ниже показаны дата оплаты и
|
|
40
|
+
автопродление. Для автопродления выводятся срок и общая стоимость тарифа и
|
|
41
|
+
дополнения в выбранной валюте; без `renew_period` выводится «Выключено».
|
|
42
|
+
|
|
43
|
+
Название ведёт по адресу `subscriptionsHref(locale)`. Компонент не выполняет
|
|
44
|
+
запросы и не сообщает о действиях. Исходный файл:
|
|
45
|
+
`components/orionplace/support/TicketSubscriptionCard.tsx`.
|
|
46
|
+
|
|
47
|
+
### Свойства
|
|
48
|
+
|
|
49
|
+
| Свойство | Назначение |
|
|
50
|
+
| ------------------------------------------------ | --------------------------------------------------------------- |
|
|
51
|
+
| `subscription: ICustomerSubscription` | Подписка покупателя, которую показывает или изменяет компонент. |
|
|
52
|
+
| `plan?: ISubscribeTariff` | Тарифный план текущей карточки или подписки. |
|
|
53
|
+
| `subscriptionsHref?: (locale: string) => string` | Строит адрес ссылки подписок из аргументов обработчика. |
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useOrionplaceSelections } from '@/providers/OrionplaceProvider';
|
|
4
|
+
import type { ISubscribeTariff } from '@/interfaces/orionplace/subscribeTariff/ISubscribeTariff';
|
|
5
|
+
import type { ICustomerSubscription } from '@/interfaces/orionplace/subscribes/ISubscriptionApi';
|
|
6
|
+
import { getAvailableNestedValueFromObject } from '@/lib/orionplace/presentation';
|
|
7
|
+
import { subscriptionLabels } from '@/lib/orionplace/subscriptionLabels';
|
|
8
|
+
import {
|
|
9
|
+
subscriptionDays,
|
|
10
|
+
subscriptionManageLabels,
|
|
11
|
+
} from '@/lib/orionplace/subscriptionManageLabels';
|
|
12
|
+
import {
|
|
13
|
+
renewalTotalAmount,
|
|
14
|
+
subscriptionStatus,
|
|
15
|
+
} from '@/lib/orionplace/subscriptionPlans';
|
|
16
|
+
import { tariffMoney } from '@/lib/orionplace/tariffs';
|
|
17
|
+
import { OrionplaceImage } from '@/components/orionplace/shared/OrionplaceImage';
|
|
18
|
+
import styles from './Support.module.css';
|
|
19
|
+
|
|
20
|
+
export interface TicketSubscriptionCardProps {
|
|
21
|
+
subscription: ICustomerSubscription;
|
|
22
|
+
plan?: ISubscribeTariff;
|
|
23
|
+
subscriptionsHref?: (locale: string) => string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const statusKeys = {
|
|
27
|
+
active: 'statusActive',
|
|
28
|
+
ended: 'statusExpired',
|
|
29
|
+
pending: 'statusPending',
|
|
30
|
+
} as const;
|
|
31
|
+
|
|
32
|
+
export function TicketSubscriptionCard({
|
|
33
|
+
subscription,
|
|
34
|
+
plan,
|
|
35
|
+
subscriptionsHref = (locale) =>
|
|
36
|
+
`/subscriptions?locale=${encodeURIComponent(locale)}`,
|
|
37
|
+
}: TicketSubscriptionCardProps) {
|
|
38
|
+
const locale = useOrionplaceSelections((state) => state.localeCode);
|
|
39
|
+
const currencyId = useOrionplaceSelections((state) => state.currencyId);
|
|
40
|
+
const currency = useOrionplaceSelections(
|
|
41
|
+
(state) => state.init?.currencies[state.currencyId],
|
|
42
|
+
);
|
|
43
|
+
const labels = subscriptionLabels(locale);
|
|
44
|
+
const manage = subscriptionManageLabels(locale);
|
|
45
|
+
const planName =
|
|
46
|
+
getAvailableNestedValueFromObject(plan?.locales, locale, 'tariff_name') ||
|
|
47
|
+
labels.subscription;
|
|
48
|
+
const picture = plan?.tariff_image?.small?.[0];
|
|
49
|
+
const status = subscriptionStatus(subscription);
|
|
50
|
+
const period = subscription.renew_period;
|
|
51
|
+
const renewal = period
|
|
52
|
+
? `${subscriptionDays(period.days, locale)} · ${tariffMoney(
|
|
53
|
+
renewalTotalAmount(period, currencyId),
|
|
54
|
+
locale,
|
|
55
|
+
currency,
|
|
56
|
+
)}`
|
|
57
|
+
: labels.disabled;
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<div
|
|
61
|
+
className={`${styles.root} ${styles.item}`}
|
|
62
|
+
data-feature-part="TicketSubscriptionCard"
|
|
63
|
+
data-ticket-subscription
|
|
64
|
+
>
|
|
65
|
+
<div
|
|
66
|
+
className={styles.subscriptionPhoto}
|
|
67
|
+
data-ticket-subscription-picture
|
|
68
|
+
>
|
|
69
|
+
{picture ? (
|
|
70
|
+
<OrionplaceImage
|
|
71
|
+
src={picture}
|
|
72
|
+
alt={planName}
|
|
73
|
+
width={96}
|
|
74
|
+
height={96}
|
|
75
|
+
/>
|
|
76
|
+
) : (
|
|
77
|
+
<svg
|
|
78
|
+
viewBox="0 0 24 24"
|
|
79
|
+
fill="none"
|
|
80
|
+
stroke="currentColor"
|
|
81
|
+
strokeWidth="1.5"
|
|
82
|
+
strokeLinecap="round"
|
|
83
|
+
strokeLinejoin="round"
|
|
84
|
+
aria-hidden="true"
|
|
85
|
+
>
|
|
86
|
+
<path d="M4 7.5 12 3l8 4.5v9L12 21l-8-4.5zM4 7.5 12 12l8-4.5M12 12v9" />
|
|
87
|
+
</svg>
|
|
88
|
+
)}
|
|
89
|
+
</div>
|
|
90
|
+
<div className={styles.itemBody}>
|
|
91
|
+
<div className={styles.subscriptionHeading}>
|
|
92
|
+
<a
|
|
93
|
+
className={styles.link}
|
|
94
|
+
href={subscriptionsHref(locale)}
|
|
95
|
+
>
|
|
96
|
+
{planName} #{subscription.id}
|
|
97
|
+
</a>
|
|
98
|
+
<span
|
|
99
|
+
className={styles.subscriptionState}
|
|
100
|
+
data-state={status}
|
|
101
|
+
>
|
|
102
|
+
{manage[statusKeys[status]]}
|
|
103
|
+
</span>
|
|
104
|
+
</div>
|
|
105
|
+
<dl className={styles.facts}>
|
|
106
|
+
<div>
|
|
107
|
+
<dt>{labels.until}</dt>
|
|
108
|
+
<dd>{subscription.active_until?.date || '—'}</dd>
|
|
109
|
+
</div>
|
|
110
|
+
<div>
|
|
111
|
+
<dt>{labels.renewal}</dt>
|
|
112
|
+
<dd>{renewal}</dd>
|
|
113
|
+
</div>
|
|
114
|
+
</dl>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# TariffCard · React
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
`TariffCard` composes the image, localized name, descriptions, feature limits,
|
|
6
|
+
additional option, paid periods and trial action for the plan identified by
|
|
7
|
+
`tariffId`. The image and name link to the localized plan address. Use
|
|
8
|
+
`tariffHref(tariff, locale)` when the application has a different router.
|
|
9
|
+
`image`, `title`, `description`, `features` and `prices(choose)` replace the
|
|
10
|
+
corresponding regions while preserving the card and dialog behavior.
|
|
11
|
+
|
|
12
|
+
Choosing an available paid period or trial calls
|
|
13
|
+
`onSelect({ tariff, price })` and opens `TariffSubscriptionModal`. The selected
|
|
14
|
+
additional option is passed to the dialog. `open` restores the same selection
|
|
15
|
+
after navigation when it still belongs to this plan and remains available.
|
|
16
|
+
Changes to the tariff catalog close a choice whose period, trial, plan or
|
|
17
|
+
parent subscription is no longer available. `disabled` and `pending` block a
|
|
18
|
+
new choice. `suspended`, `error` and `completed` control the open dialog, and
|
|
19
|
+
its confirmed request is passed unchanged to `onSubscribe(request)`.
|
|
20
|
+
|
|
21
|
+
With `guest`, the price action calls `onRequireSignIn(returnPath)` and does not
|
|
22
|
+
open the dialog. `periodLabel` and `label` customize the price controls.
|
|
23
|
+
`subscriptionsHref` and `walletHref` customize the dialog links.
|
|
24
|
+
|
|
25
|
+
The component makes no request. Source is maintained in
|
|
26
|
+
`components/orionplace/tariffs/TariffCard.tsx`; the selection and submit
|
|
27
|
+
contracts are in
|
|
28
|
+
`interfaces/orionplace/subscribeTariff/ITariffSelection.ts`.
|
|
29
|
+
|
|
30
|
+
### Props
|
|
31
|
+
|
|
32
|
+
| Prop | Meaning |
|
|
33
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
34
|
+
| `tariffId: number` | ID of the tariff handled by TariffCard. |
|
|
35
|
+
| `disabled?: boolean` | Disables the component controls and prevents new actions. |
|
|
36
|
+
| `pending?: boolean` | Shows the loading state and blocks duplicate actions. |
|
|
37
|
+
| `suspended?: boolean` | Keeps entered purchase values visible while a recoverable external step is open. |
|
|
38
|
+
| `error?: string` | Customer-visible error for the component request; omit it when no request failed. |
|
|
39
|
+
| `completed?: boolean` | Successful result displayed after the action finishes. |
|
|
40
|
+
| `periodLabel?: string` | Visible or accessible label for period. |
|
|
41
|
+
| `label?: string` | Visible or accessible name for the component’s main control or region. |
|
|
42
|
+
| `guest?: boolean` | Uses the signed-out purchase path and sign-in action. |
|
|
43
|
+
| `open?: ITariffSelection` | Controls whether the panel or dialog is open. |
|
|
44
|
+
| `image?: ReactNode` | Image region or replacement renderer for the current card. |
|
|
45
|
+
| `title?: ReactNode` | Title region or replacement renderer for the current card. |
|
|
46
|
+
| `description?: ReactNode` | Supporting text shown below the main message. |
|
|
47
|
+
| `features?: ReactNode` | Feature-summary region or replacement renderer for the tariff card. |
|
|
48
|
+
| `prices?: (choose: (selection: ITariffSelection) => void) => ReactNode` | Price region or replacement renderer for the tariff card. |
|
|
49
|
+
| `tariffHref?: (tariff: ISubscribeTariff, locale: string) => string` | Builds the tariff destination from the callback arguments. |
|
|
50
|
+
| `subscriptionsHref?: (locale: string) => string` | Builds the subscriptions destination from the callback arguments. |
|
|
51
|
+
| `walletHref?: (locale: string) => string` | Builds the wallet destination from the callback arguments. |
|
|
52
|
+
| `onSelect?: (selection: ITariffSelection) => void` | Passes `tariff` and `price` after saving the selected subscription choice and opening confirmation. A trial has `price: null`. |
|
|
53
|
+
| `onSubscribe?: (request: ITariffSubscribeRequest) => void` | Confirmation passes the tariff ID in `tariff`, selected `period`, `option` and a nonempty `attach_issue` promo code where applicable. A trial omits `period` and the promo code; the application submits the request. |
|
|
54
|
+
| `onRequireSignIn?: (returnPath: string) => void` | Called when the visitor must sign in before continuing. The callback payload is shown in its type. |
|
|
55
|
+
|
|
56
|
+
## Русский
|
|
57
|
+
|
|
58
|
+
`TariffCard` объединяет изображение, локализованное название, описания,
|
|
59
|
+
ограничения возможностей, дополнительную опцию, платные периоды и пробное
|
|
60
|
+
подключение тарифа с указанным `tariffId`. Изображение и название ведут на
|
|
61
|
+
локализованную страницу тарифа. Для другого маршрутизатора передайте
|
|
62
|
+
`tariffHref(tariff, locale)`. Свойства `image`, `title`, `description`,
|
|
63
|
+
`features` и `prices(choose)` заменяют соответствующие области, сохраняя
|
|
64
|
+
поведение карточки и окна оформления.
|
|
65
|
+
|
|
66
|
+
Выбор доступного платного периода или пробного подключения вызывает
|
|
67
|
+
`onSelect({ tariff, price })` и открывает `TariffSubscriptionModal`. Выбранная
|
|
68
|
+
дополнительная опция передаётся в окно. `open` восстанавливает тот же выбор
|
|
69
|
+
после перехода, если он относится к карточке и остаётся доступным. При
|
|
70
|
+
обновлении каталога окно закрывается, если тариф, его родительская подписка,
|
|
71
|
+
период или пробное подключение стали недоступны. `disabled` и `pending`
|
|
72
|
+
блокируют новый выбор. `suspended`, `error` и `completed` управляют открытым
|
|
73
|
+
окном, а подтверждённый запрос без изменений передаётся в
|
|
74
|
+
`onSubscribe(request)`.
|
|
75
|
+
|
|
76
|
+
С `guest` действие периода вызывает `onRequireSignIn(returnPath)` и не
|
|
77
|
+
открывает окно. `periodLabel` и `label` меняют подписи элементов цены.
|
|
78
|
+
`subscriptionsHref` и `walletHref` задают ссылки окна.
|
|
79
|
+
|
|
80
|
+
Компонент не отправляет запросы. Исходный файл:
|
|
81
|
+
`components/orionplace/tariffs/TariffCard.tsx`; контракты выбора и отправки:
|
|
82
|
+
`interfaces/orionplace/subscribeTariff/ITariffSelection.ts`.
|
|
83
|
+
|
|
84
|
+
### Свойства
|
|
85
|
+
|
|
86
|
+
| Свойство | Назначение |
|
|
87
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
88
|
+
| `tariffId: number` | ID тарифа, с которым работает TariffCard. |
|
|
89
|
+
| `disabled?: boolean` | Блокирует элементы компонента и новые действия. |
|
|
90
|
+
| `pending?: boolean` | Показывает загрузку и блокирует повторные действия. |
|
|
91
|
+
| `suspended?: boolean` | Сохраняет введённые данные покупки во время внешнего шага, после которого можно продолжить. |
|
|
92
|
+
| `error?: string` | Ошибка запроса для покупателя; не передавайте её, если запрос не завершился ошибкой. |
|
|
93
|
+
| `completed?: boolean` | Успешный результат после завершения действия. |
|
|
94
|
+
| `periodLabel?: string` | Видимая или доступная подпись для периода. |
|
|
95
|
+
| `label?: string` | Видимое или доступное название основного элемента компонента. |
|
|
96
|
+
| `guest?: boolean` | Использует сценарий покупки без входа и действие входа. |
|
|
97
|
+
| `open?: ITariffSelection` | Управляет открытым состоянием панели или диалога. |
|
|
98
|
+
| `image?: ReactNode` | Блок изображения или функция, которая его заменяет. |
|
|
99
|
+
| `title?: ReactNode` | Блок названия карточки или функция, которая его заменяет. |
|
|
100
|
+
| `description?: ReactNode` | Пояснение под основным сообщением. |
|
|
101
|
+
| `features?: ReactNode` | Блок характеристик тарифа или функция, которая его заменяет. |
|
|
102
|
+
| `prices?: (choose: (selection: ITariffSelection) => void) => ReactNode` | Блок цен тарифа или функция, которая его заменяет. |
|
|
103
|
+
| `tariffHref?: (tariff: ISubscribeTariff, locale: string) => string` | Строит адрес ссылки тарифа из аргументов обработчика. |
|
|
104
|
+
| `subscriptionsHref?: (locale: string) => string` | Строит адрес ссылки подписок из аргументов обработчика. |
|
|
105
|
+
| `walletHref?: (locale: string) => string` | Строит адрес ссылки кошелька из аргументов обработчика. |
|
|
106
|
+
| `onSelect?: (selection: ITariffSelection) => void` | Передаёт `tariff` и `price` после сохранения выбранного подключения и открытия подтверждения. Для пробного подключения `price` равен `null`. |
|
|
107
|
+
| `onSubscribe?: (request: ITariffSubscribeRequest) => void` | Подтверждение передаёт ID тарифа `tariff`, выбранные `period`, `option` и непустой промокод `attach_issue`, когда они применимы. Пробное подключение пропускает `period` и промокод; приложение отправляет запрос. |
|
|
108
|
+
| `onRequireSignIn?: (returnPath: string) => void` | Вызывается, когда покупателю нужно войти перед продолжением. Данные обработчика указаны в его типе. |
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
.card {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
display: grid;
|
|
4
|
+
min-width: 0;
|
|
5
|
+
grid-row: span 11;
|
|
6
|
+
grid-template-rows: subgrid;
|
|
7
|
+
gap: 0;
|
|
8
|
+
padding: 1.5rem;
|
|
9
|
+
border: 1px solid var(--orionplace-border);
|
|
10
|
+
background: var(--orionplace-surface);
|
|
11
|
+
color: var(--orionplace-text);
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
font-size: 0.875rem;
|
|
14
|
+
line-height: calc(1.25 / 0.875);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.imageLink {
|
|
18
|
+
display: block;
|
|
19
|
+
min-width: 0;
|
|
20
|
+
grid-row: 1;
|
|
21
|
+
color: inherit;
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.trial {
|
|
26
|
+
width: fit-content;
|
|
27
|
+
grid-row: 2;
|
|
28
|
+
margin-top: 1.25rem;
|
|
29
|
+
padding: 0.125rem 0.5rem;
|
|
30
|
+
background: var(--orionplace-inverse-surface);
|
|
31
|
+
color: var(--orionplace-inverse-text);
|
|
32
|
+
font-size: 0.6875rem;
|
|
33
|
+
letter-spacing: 0.08em;
|
|
34
|
+
text-transform: uppercase;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.title {
|
|
38
|
+
grid-row: 3;
|
|
39
|
+
margin-top: 0.75rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.title a {
|
|
43
|
+
display: block;
|
|
44
|
+
color: inherit;
|
|
45
|
+
text-decoration: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.title a:focus-visible,
|
|
49
|
+
.imageLink:focus-visible {
|
|
50
|
+
opacity: 0.7;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (hover: hover) {
|
|
54
|
+
.title a:hover,
|
|
55
|
+
.imageLink:hover {
|
|
56
|
+
opacity: 0.7;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* The description takes two rows of the card grid and the features three,
|
|
61
|
+
as in the other packages, so their parts start level across a row. */
|
|
62
|
+
.description {
|
|
63
|
+
display: grid;
|
|
64
|
+
grid-row: 4 / span 2;
|
|
65
|
+
grid-template-rows: subgrid;
|
|
66
|
+
gap: 0;
|
|
67
|
+
margin-top: 0.75rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.features {
|
|
71
|
+
display: grid;
|
|
72
|
+
grid-row: 6 / span 3;
|
|
73
|
+
grid-template-rows: subgrid;
|
|
74
|
+
gap: 0;
|
|
75
|
+
margin-top: 1.25rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.prices {
|
|
79
|
+
display: grid;
|
|
80
|
+
grid-row: 9 / span 3;
|
|
81
|
+
grid-template-rows: subgrid;
|
|
82
|
+
gap: 0;
|
|
83
|
+
margin-top: 1.25rem;
|
|
84
|
+
padding-top: 1.25rem;
|
|
85
|
+
border-top: 1px solid var(--orionplace-border);
|
|
86
|
+
}
|