orionplace-nuxt 0.7.9 → 0.8.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 +7 -1167
- package/bin/orionplace-nuxt.mjs +10 -172
- package/package.json +7 -62
- package/LICENSE +0 -21
- package/runtime/api.mjs +0 -14
- package/runtime/domain.mjs +0 -15
- package/runtime/marketplace.mjs +0 -905
- package/runtime/seo.mjs +0 -17
- package/src/asset-loading-plugin.mjs +0 -10
- package/src/favicon-handler.mjs +0 -12
- package/src/install.mjs +0 -356
- package/src/module.d.ts +0 -3
- package/src/module.mjs +0 -88
- package/src/project-readme.mjs +0 -702
- package/src/service.mjs +0 -186
- package/src/setup.mjs +0 -250
- package/src/sitemap.mjs +0 -93
- package/src/update.mjs +0 -36
- package/src/validation.mjs +0 -33
- package/templates/.vscode/settings.json +0 -5
- package/templates/app/app.vue +0 -52
- package/templates/app/assets/css/orionplace-tokens.css +0 -21
- package/templates/app/assets/css/orionplace.css +0 -28
- package/templates/app/components/orionplace/account/AccountActivity.README.md +0 -31
- package/templates/app/components/orionplace/account/AccountActivity.vue +0 -61
- package/templates/app/components/orionplace/account/AccountPromocodes.README.md +0 -50
- package/templates/app/components/orionplace/account/AccountPromocodes.vue +0 -267
- package/templates/app/components/orionplace/account/AccountSection.README.md +0 -31
- package/templates/app/components/orionplace/account/AccountSection.vue +0 -132
- package/templates/app/components/orionplace/account/ProfileAvatar.vue +0 -139
- package/templates/app/components/orionplace/account/ProfileDeleteAccount.vue +0 -161
- package/templates/app/components/orionplace/account/ProfileDetailsForm.vue +0 -182
- package/templates/app/components/orionplace/account/ProfileEmailSettings.vue +0 -269
- package/templates/app/components/orionplace/account/ProfilePasswordForm.vue +0 -201
- package/templates/app/components/orionplace/account/ProfileSignIn.vue +0 -446
- package/templates/app/components/orionplace/account/SignInHistory.README.md +0 -27
- package/templates/app/components/orionplace/account/SignInHistory.vue +0 -218
- package/templates/app/components/orionplace/account/StorefrontLogout.README.md +0 -15
- package/templates/app/components/orionplace/account/StorefrontLogout.vue +0 -109
- package/templates/app/components/orionplace/account/StorefrontProfile.README.md +0 -145
- package/templates/app/components/orionplace/account/StorefrontProfile.vue +0 -168
- package/templates/app/components/orionplace/account/account.css +0 -1047
- package/templates/app/components/orionplace/account/profile.css +0 -696
- package/templates/app/components/orionplace/address/AddressForm.README.md +0 -67
- package/templates/app/components/orionplace/address/AddressForm.vue +0 -537
- package/templates/app/components/orionplace/address/StorefrontAddresses.README.md +0 -44
- package/templates/app/components/orionplace/address/StorefrontAddresses.vue +0 -438
- package/templates/app/components/orionplace/banners/MainBanner.vue +0 -171
- package/templates/app/components/orionplace/banners/examples/BannerExample.vue +0 -6
- package/templates/app/components/orionplace/blog/BlogArticle.README.md +0 -44
- package/templates/app/components/orionplace/blog/BlogArticle.vue +0 -1023
- package/templates/app/components/orionplace/blog/BlogCommentForm.README.md +0 -28
- package/templates/app/components/orionplace/blog/BlogCommentForm.vue +0 -129
- package/templates/app/components/orionplace/blog/BlogComments.README.md +0 -36
- package/templates/app/components/orionplace/blog/BlogComments.vue +0 -373
- package/templates/app/components/orionplace/blog/BlogPostCard.vue +0 -307
- package/templates/app/components/orionplace/blog/BlogPostGroup.vue +0 -108
- package/templates/app/components/orionplace/blog/StorefrontJournal.README.md +0 -42
- package/templates/app/components/orionplace/blog/StorefrontJournal.vue +0 -670
- package/templates/app/components/orionplace/branding/BrandLogos.vue +0 -25
- package/templates/app/components/orionplace/branding/examples/BrandLogosExample.vue +0 -6
- package/templates/app/components/orionplace/cart/CartCheckoutDetails.README.md +0 -85
- package/templates/app/components/orionplace/cart/CartCheckoutDetails.vue +0 -377
- package/templates/app/components/orionplace/cart/CartDeliverySelector.README.md +0 -95
- package/templates/app/components/orionplace/cart/CartDeliverySelector.vue +0 -724
- package/templates/app/components/orionplace/cart/CartItemOptions.README.md +0 -98
- package/templates/app/components/orionplace/cart/CartItemOptions.vue +0 -693
- package/templates/app/components/orionplace/cart/CartLineItem.README.md +0 -70
- package/templates/app/components/orionplace/cart/CartLineItem.vue +0 -271
- package/templates/app/components/orionplace/cart/CartPreview.README.md +0 -43
- package/templates/app/components/orionplace/cart/CartPreview.vue +0 -263
- package/templates/app/components/orionplace/cart/DeliveryMap.README.md +0 -48
- package/templates/app/components/orionplace/cart/DeliveryMap.vue +0 -155
- package/templates/app/components/orionplace/cart/StorefrontCart.README.md +0 -89
- package/templates/app/components/orionplace/cart/StorefrontCart.vue +0 -689
- package/templates/app/components/orionplace/catalog/CatalogHeader.vue +0 -681
- package/templates/app/components/orionplace/catalog/CatalogRepresentative.vue +0 -59
- package/templates/app/components/orionplace/catalog/StorefrontCatalog.README.md +0 -35
- package/templates/app/components/orionplace/catalog/StorefrontCatalog.vue +0 -179
- package/templates/app/components/orionplace/catalog/examples/CatalogHeaderExample.vue +0 -6
- package/templates/app/components/orionplace/categories/CategoryGroup.vue +0 -125
- package/templates/app/components/orionplace/categories/StorefrontCategory.README.md +0 -60
- package/templates/app/components/orionplace/categories/StorefrontCategory.vue +0 -277
- package/templates/app/components/orionplace/categories/examples/CategoryGroupExample.vue +0 -7
- package/templates/app/components/orionplace/contact/AboutPage.README.md +0 -23
- package/templates/app/components/orionplace/contact/AboutPage.vue +0 -409
- package/templates/app/components/orionplace/contact/ContactForm.README.md +0 -29
- package/templates/app/components/orionplace/contact/ContactForm.vue +0 -289
- package/templates/app/components/orionplace/contact/EmailUnsubscribe.README.md +0 -27
- package/templates/app/components/orionplace/contact/EmailUnsubscribe.vue +0 -95
- package/templates/app/components/orionplace/contact/StorefrontContact.README.md +0 -18
- package/templates/app/components/orionplace/contact/StorefrontContact.vue +0 -89
- package/templates/app/components/orionplace/contact/examples/ContactExample.vue +0 -6
- package/templates/app/components/orionplace/currencies/MainCurrencySwitcher.vue +0 -80
- package/templates/app/components/orionplace/currencies/examples/CurrencyExample.vue +0 -6
- package/templates/app/components/orionplace/events/EventEnrollmentDialog.README.md +0 -58
- package/templates/app/components/orionplace/events/EventEnrollmentDialog.vue +0 -294
- package/templates/app/components/orionplace/events/EventsBlock.vue +0 -138
- package/templates/app/components/orionplace/events/examples/EventsExample.vue +0 -6
- package/templates/app/components/orionplace/legal/CookieNotice.README.md +0 -34
- package/templates/app/components/orionplace/legal/CookieNotice.vue +0 -84
- package/templates/app/components/orionplace/legal/StorefrontPrivacy.README.md +0 -35
- package/templates/app/components/orionplace/legal/StorefrontPrivacy.vue +0 -124
- package/templates/app/components/orionplace/locale/MainLanguageSwitcher.vue +0 -506
- package/templates/app/components/orionplace/locale/examples/LocaleExample.vue +0 -6
- package/templates/app/components/orionplace/manufacturers/ManufacturerIndex.README.md +0 -36
- package/templates/app/components/orionplace/manufacturers/ManufacturerIndex.vue +0 -495
- package/templates/app/components/orionplace/manufacturers/StorefrontManufacturers.README.md +0 -30
- package/templates/app/components/orionplace/manufacturers/StorefrontManufacturers.vue +0 -263
- package/templates/app/components/orionplace/orders/OrderDetails.README.md +0 -39
- package/templates/app/components/orionplace/orders/OrderDetails.vue +0 -1074
- package/templates/app/components/orionplace/orders/OrderPaymentForm.README.md +0 -59
- package/templates/app/components/orionplace/orders/OrderPaymentForm.vue +0 -73
- package/templates/app/components/orionplace/orders/StorefrontOrders.README.md +0 -39
- package/templates/app/components/orionplace/orders/StorefrontOrders.vue +0 -869
- package/templates/app/components/orionplace/orders/orders.css +0 -612
- package/templates/app/components/orionplace/payments/PaymentPanel.README.md +0 -76
- package/templates/app/components/orionplace/payments/PaymentPanel.vue +0 -108
- package/templates/app/components/orionplace/products/HoverImageViewer.vue +0 -190
- package/templates/app/components/orionplace/products/ProductCard.README.md +0 -63
- package/templates/app/components/orionplace/products/ProductCard.vue +0 -911
- package/templates/app/components/orionplace/products/ProductCardActions.README.md +0 -33
- package/templates/app/components/orionplace/products/ProductCardActions.vue +0 -412
- package/templates/app/components/orionplace/products/ProductCardBadges.vue +0 -83
- package/templates/app/components/orionplace/products/ProductCardDescription.vue +0 -46
- package/templates/app/components/orionplace/products/ProductCardFavorite.vue +0 -99
- package/templates/app/components/orionplace/products/ProductCardPrice.vue +0 -66
- package/templates/app/components/orionplace/products/ProductCardRating.vue +0 -65
- package/templates/app/components/orionplace/products/ProductCardSeller.vue +0 -66
- package/templates/app/components/orionplace/products/ProductCardStockNotice.vue +0 -43
- package/templates/app/components/orionplace/products/ProductCardTitle.vue +0 -46
- package/templates/app/components/orionplace/products/ProductCardVariants.vue +0 -388
- package/templates/app/components/orionplace/products/ProductGroup.vue +0 -259
- package/templates/app/components/orionplace/products/ProductPreorderDialog.README.md +0 -22
- package/templates/app/components/orionplace/products/ProductPreorderDialog.vue +0 -471
- package/templates/app/components/orionplace/products/ProductReviewForm.README.md +0 -39
- package/templates/app/components/orionplace/products/ProductReviewForm.vue +0 -312
- package/templates/app/components/orionplace/products/ProductReviewGallery.README.md +0 -28
- package/templates/app/components/orionplace/products/ProductReviewGallery.vue +0 -141
- package/templates/app/components/orionplace/products/ProductReviewImageViewer.README.md +0 -52
- package/templates/app/components/orionplace/products/ProductReviewImageViewer.vue +0 -425
- package/templates/app/components/orionplace/products/ProductReviews.README.md +0 -70
- package/templates/app/components/orionplace/products/ProductReviews.vue +0 -1025
- package/templates/app/components/orionplace/products/ProductSecondaryVariantModal.vue +0 -460
- package/templates/app/components/orionplace/products/ProductSpecificationsDialog.README.md +0 -65
- package/templates/app/components/orionplace/products/ProductSpecificationsDialog.vue +0 -174
- package/templates/app/components/orionplace/products/StorefrontProduct.README.md +0 -52
- package/templates/app/components/orionplace/products/StorefrontProduct.vue +0 -1468
- package/templates/app/components/orionplace/products/StorefrontWishlist.README.md +0 -33
- package/templates/app/components/orionplace/products/StorefrontWishlist.vue +0 -290
- package/templates/app/components/orionplace/products/examples/FeaturedExample.vue +0 -6
- package/templates/app/components/orionplace/products/examples/FeaturedHoverImageViewerExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardActionsExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardBadgesExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardDescriptionExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardFavoriteExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardPriceExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardRatingExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardSellerExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardStockNoticeExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardTitleExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/FeaturedProductCardVariantsExample.vue +0 -14
- package/templates/app/components/orionplace/products/examples/ProductsExample.vue +0 -6
- package/templates/app/components/orionplace/products/examples/ProductsHoverImageViewerExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardActionsExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardBadgesExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardDescriptionExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardFavoriteExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardPriceExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardRatingExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardSellerExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardStockNoticeExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardTitleExample.vue +0 -13
- package/templates/app/components/orionplace/products/examples/ProductsProductCardVariantsExample.vue +0 -13
- package/templates/app/components/orionplace/promo/PromoProducts.README.md +0 -45
- package/templates/app/components/orionplace/promo/PromoProducts.vue +0 -287
- package/templates/app/components/orionplace/search/MainSearch.vue +0 -340
- package/templates/app/components/orionplace/search/ProductSearchResults.README.md +0 -81
- package/templates/app/components/orionplace/search/ProductSearchResults.vue +0 -506
- package/templates/app/components/orionplace/search/SearchFilters.vue +0 -546
- package/templates/app/components/orionplace/search/examples/MainSearchExample.vue +0 -6
- package/templates/app/components/orionplace/sellers/SellerFilters.README.md +0 -32
- package/templates/app/components/orionplace/sellers/SellerFilters.vue +0 -317
- package/templates/app/components/orionplace/sellers/SellerPhotoGallery.README.md +0 -45
- package/templates/app/components/orionplace/sellers/SellerPhotoGallery.vue +0 -406
- package/templates/app/components/orionplace/sellers/SellerSummary.README.md +0 -33
- package/templates/app/components/orionplace/sellers/SellerSummary.vue +0 -162
- package/templates/app/components/orionplace/sellers/StorefrontSellers.README.md +0 -73
- package/templates/app/components/orionplace/sellers/StorefrontSellers.vue +0 -300
- package/templates/app/components/orionplace/shared/OrionplaceAvatar.README.md +0 -30
- package/templates/app/components/orionplace/shared/OrionplaceAvatar.vue +0 -83
- package/templates/app/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +0 -65
- package/templates/app/components/orionplace/shared/OrionplaceBreadcrumbs.vue +0 -118
- package/templates/app/components/orionplace/shared/OrionplaceEmptyState.README.md +0 -38
- package/templates/app/components/orionplace/shared/OrionplaceEmptyState.vue +0 -143
- package/templates/app/components/orionplace/shared/OrionplaceImage.vue +0 -84
- package/templates/app/components/orionplace/shared/OrionplaceInfoHint.README.md +0 -32
- package/templates/app/components/orionplace/shared/OrionplaceInfoHint.vue +0 -158
- package/templates/app/components/orionplace/shared/OrionplacePasswordInput.README.md +0 -30
- package/templates/app/components/orionplace/shared/OrionplacePasswordInput.vue +0 -197
- package/templates/app/components/orionplace/shared/OrionplaceSearchSelect.README.md +0 -38
- package/templates/app/components/orionplace/shared/OrionplaceSearchSelect.vue +0 -411
- package/templates/app/components/orionplace/shared/OrionplaceSelect.README.md +0 -31
- package/templates/app/components/orionplace/shared/OrionplaceSelect.vue +0 -525
- package/templates/app/components/orionplace/shared/StorefrontErrorPage.README.md +0 -55
- package/templates/app/components/orionplace/shared/StorefrontErrorPage.vue +0 -151
- package/templates/app/components/orionplace/shared/StorefrontPagination.README.md +0 -50
- package/templates/app/components/orionplace/shared/StorefrontPagination.vue +0 -148
- package/templates/app/components/orionplace/shared/dialogs.css +0 -36
- package/templates/app/components/orionplace/shared/features.css +0 -364
- package/templates/app/components/orionplace/social/SocialLinks.vue +0 -72
- package/templates/app/components/orionplace/social/examples/SocialLinksExample.vue +0 -6
- package/templates/app/components/orionplace/storefront/StorefrontAccount.README.md +0 -47
- package/templates/app/components/orionplace/storefront/StorefrontAccount.vue +0 -332
- package/templates/app/components/orionplace/storefront/StorefrontCartButton.vue +0 -68
- package/templates/app/components/orionplace/storefront/StorefrontFooter.README.md +0 -26
- package/templates/app/components/orionplace/storefront/StorefrontFooter.vue +0 -236
- package/templates/app/components/orionplace/storefront/StorefrontHeader.README.md +0 -93
- package/templates/app/components/orionplace/storefront/StorefrontHeader.vue +0 -509
- package/templates/app/components/orionplace/storefront/StorefrontHome.README.md +0 -79
- package/templates/app/components/orionplace/storefront/StorefrontHome.vue +0 -315
- package/templates/app/components/orionplace/storefront/StorefrontWishlistButton.vue +0 -105
- package/templates/app/components/orionplace/storefront/examples/StorefrontAccountExample.vue +0 -7
- package/templates/app/components/orionplace/stores/StorefrontStores.README.md +0 -41
- package/templates/app/components/orionplace/stores/StorefrontStores.vue +0 -346
- package/templates/app/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +0 -151
- package/templates/app/components/orionplace/subscriptions/StorefrontSubscriptions.vue +0 -851
- package/templates/app/components/orionplace/subscriptions/StorefrontTariff.README.md +0 -38
- package/templates/app/components/orionplace/subscriptions/StorefrontTariff.vue +0 -555
- package/templates/app/components/orionplace/subscriptions/StorefrontTariffs.README.md +0 -36
- package/templates/app/components/orionplace/subscriptions/StorefrontTariffs.vue +0 -416
- package/templates/app/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +0 -39
- package/templates/app/components/orionplace/subscriptions/SubscriptionCancelDialog.vue +0 -292
- package/templates/app/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +0 -85
- package/templates/app/components/orionplace/subscriptions/SubscriptionChangeDialog.vue +0 -874
- package/templates/app/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +0 -53
- package/templates/app/components/orionplace/subscriptions/SubscriptionExtendDialog.vue +0 -536
- package/templates/app/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +0 -101
- package/templates/app/components/orionplace/subscriptions/SubscriptionPlanSummary.vue +0 -286
- package/templates/app/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +0 -138
- package/templates/app/components/orionplace/subscriptions/SubscriptionRemoteDetails.vue +0 -134
- package/templates/app/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +0 -85
- package/templates/app/components/orionplace/subscriptions/SubscriptionRenewalDialog.vue +0 -364
- package/templates/app/components/orionplace/support/StorefrontSupport.README.md +0 -39
- package/templates/app/components/orionplace/support/StorefrontSupport.vue +0 -484
- package/templates/app/components/orionplace/support/TicketConversation.README.md +0 -38
- package/templates/app/components/orionplace/support/TicketConversation.vue +0 -524
- package/templates/app/components/orionplace/support/TicketImage.README.md +0 -27
- package/templates/app/components/orionplace/support/TicketImage.vue +0 -186
- package/templates/app/components/orionplace/support/TicketItemCard.README.md +0 -59
- package/templates/app/components/orionplace/support/TicketItemCard.vue +0 -177
- package/templates/app/components/orionplace/support/TicketMessageForm.README.md +0 -35
- package/templates/app/components/orionplace/support/TicketMessageForm.vue +0 -258
- package/templates/app/components/orionplace/support/TicketSubscriptionCard.README.md +0 -40
- package/templates/app/components/orionplace/support/TicketSubscriptionCard.vue +0 -154
- package/templates/app/components/orionplace/tariffs/TariffCard.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCard.vue +0 -251
- package/templates/app/components/orionplace/tariffs/TariffCardDescription.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCardDescription.vue +0 -97
- package/templates/app/components/orionplace/tariffs/TariffCardFeatures.README.md +0 -14
- package/templates/app/components/orionplace/tariffs/TariffCardFeatures.vue +0 -172
- package/templates/app/components/orionplace/tariffs/TariffCardImage.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCardImage.vue +0 -33
- package/templates/app/components/orionplace/tariffs/TariffCardPrices.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCardPrices.vue +0 -300
- package/templates/app/components/orionplace/tariffs/TariffCardTitle.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCardTitle.vue +0 -30
- package/templates/app/components/orionplace/tariffs/TariffCards.README.md +0 -12
- package/templates/app/components/orionplace/tariffs/TariffCards.vue +0 -94
- package/templates/app/components/orionplace/tariffs/TariffSubscriptionModal.README.md +0 -31
- package/templates/app/components/orionplace/tariffs/TariffSubscriptionModal.vue +0 -411
- package/templates/app/components/orionplace/tariffs/examples/TariffCardDescriptionExample.vue +0 -13
- package/templates/app/components/orionplace/tariffs/examples/TariffCardExample.vue +0 -13
- package/templates/app/components/orionplace/tariffs/examples/TariffCardFeaturesExample.vue +0 -14
- package/templates/app/components/orionplace/tariffs/examples/TariffCardImageExample.vue +0 -13
- package/templates/app/components/orionplace/tariffs/examples/TariffCardPricesExample.vue +0 -13
- package/templates/app/components/orionplace/tariffs/examples/TariffCardTitleExample.vue +0 -13
- package/templates/app/components/orionplace/tariffs/examples/TariffCardsExample.vue +0 -6
- package/templates/app/components/orionplace/theme/OrionplaceThemeProvider.vue +0 -38
- package/templates/app/components/orionplace/units/UnitSwitcher.vue +0 -71
- package/templates/app/components/orionplace/units/examples/LengthExample.vue +0 -6
- package/templates/app/components/orionplace/units/examples/WeightExample.vue +0 -6
- package/templates/app/components/orionplace/wallet/StorefrontWallet.README.md +0 -117
- package/templates/app/components/orionplace/wallet/StorefrontWallet.vue +0 -863
- package/templates/app/components/orionplace/wallet/WalletBalance.vue +0 -47
- package/templates/app/components/orionplace/wallet/WalletTopUpForm.README.md +0 -32
- package/templates/app/components/orionplace/wallet/WalletTopUpForm.vue +0 -224
- package/templates/app/components/orionplace/wallet/examples/WalletExample.vue +0 -6
- package/templates/app/composables/useOrionplaceActionMenu.ts +0 -126
- package/templates/app/composables/useOrionplaceAddressEditor.ts +0 -343
- package/templates/app/composables/useOrionplaceAddresses.ts +0 -75
- package/templates/app/composables/useOrionplaceApi.ts +0 -190
- package/templates/app/composables/useOrionplaceAppLoad.ts +0 -83
- package/templates/app/composables/useOrionplaceBlogComments.ts +0 -325
- package/templates/app/composables/useOrionplaceBlogReading.ts +0 -270
- package/templates/app/composables/useOrionplaceCart.ts +0 -226
- package/templates/app/composables/useOrionplaceCartPreview.ts +0 -142
- package/templates/app/composables/useOrionplaceCategoryLink.ts +0 -24
- package/templates/app/composables/useOrionplaceCategoryProducts.ts +0 -16
- package/templates/app/composables/useOrionplaceFeature.ts +0 -100
- package/templates/app/composables/useOrionplaceFeaturedProducts.ts +0 -14
- package/templates/app/composables/useOrionplaceGeolocation.ts +0 -28
- package/templates/app/composables/useOrionplaceHomeProducts.ts +0 -90
- package/templates/app/composables/useOrionplaceManufacturerIndex.ts +0 -83
- package/templates/app/composables/useOrionplaceMap.ts +0 -240
- package/templates/app/composables/useOrionplaceMediaFormat.ts +0 -24
- package/templates/app/composables/useOrionplaceMissingPage.ts +0 -67
- package/templates/app/composables/useOrionplaceOrders.ts +0 -185
- package/templates/app/composables/useOrionplacePageSeo.ts +0 -133
- package/templates/app/composables/useOrionplaceProductActions.ts +0 -116
- package/templates/app/composables/useOrionplaceProductLink.ts +0 -24
- package/templates/app/composables/useOrionplaceProductSearch.ts +0 -363
- package/templates/app/composables/useOrionplaceProductVariants.ts +0 -176
- package/templates/app/composables/useOrionplaceProfile.ts +0 -309
- package/templates/app/composables/useOrionplaceProgress.ts +0 -89
- package/templates/app/composables/useOrionplaceReviews.ts +0 -242
- package/templates/app/composables/useOrionplaceSearchHistory.ts +0 -23
- package/templates/app/composables/useOrionplaceSearchScopeNames.ts +0 -99
- package/templates/app/composables/useOrionplaceServerData.ts +0 -72
- package/templates/app/composables/useOrionplaceSignIn.ts +0 -66
- package/templates/app/composables/useOrionplaceStableHeight.ts +0 -69
- package/templates/app/composables/useOrionplaceStorefront.ts +0 -29
- package/templates/app/composables/useOrionplaceSubscriptions.ts +0 -260
- package/templates/app/composables/useOrionplaceTheme.ts +0 -27
- package/templates/app/composables/useOrionplaceTicketSubject.ts +0 -180
- package/templates/app/composables/useOrionplaceTickets.ts +0 -335
- package/templates/app/composables/useOrionplaceWallet.ts +0 -166
- package/templates/app/error.vue +0 -108
- package/templates/app/interfaces/orionplace/accounts/IContact.ts +0 -21
- package/templates/app/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +0 -17
- package/templates/app/interfaces/orionplace/accounts/IEmailVerification.ts +0 -59
- package/templates/app/interfaces/orionplace/accounts/IProfileActions.ts +0 -38
- package/templates/app/interfaces/orionplace/accounts/IProfileData.ts +0 -125
- package/templates/app/interfaces/orionplace/accounts/IProfileMedia.ts +0 -17
- package/templates/app/interfaces/orionplace/accounts/IStorefrontProfile.ts +0 -54
- package/templates/app/interfaces/orionplace/address/IAddressCitySuggestion.ts +0 -19
- package/templates/app/interfaces/orionplace/address/IAddressEditor.ts +0 -9
- package/templates/app/interfaces/orionplace/address/IAddressLocationSuggestion.ts +0 -22
- package/templates/app/interfaces/orionplace/address/IAddressRegionSearch.ts +0 -30
- package/templates/app/interfaces/orionplace/address/IAddressSuggestion.ts +0 -20
- package/templates/app/interfaces/orionplace/address/IUserAddress.ts +0 -87
- package/templates/app/interfaces/orionplace/apiBase/TMethod.ts +0 -1
- package/templates/app/interfaces/orionplace/appBase/IAppLoad.ts +0 -16
- package/templates/app/interfaces/orionplace/appBase/IAppLoadCommon.ts +0 -47
- package/templates/app/interfaces/orionplace/appBase/IApploadUserProfile.ts +0 -15
- package/templates/app/interfaces/orionplace/appBase/IForm.ts +0 -21
- package/templates/app/interfaces/orionplace/appBase/ISEO.ts +0 -21
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +0 -11
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonContact.ts +0 -8
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonCurrency.ts +0 -15
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonEvents.ts +0 -18
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonLocale.ts +0 -14
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonLogos.ts +0 -6
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +0 -22
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +0 -26
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSocial.ts +0 -15
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +0 -7
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonUnit.ts +0 -12
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +0 -8
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVisualSettings.ts +0 -11
- package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonWalletValue.ts +0 -3
- package/templates/app/interfaces/orionplace/blog/IBlogApi.ts +0 -247
- package/templates/app/interfaces/orionplace/blog/IBlogPostPreview.ts +0 -30
- package/templates/app/interfaces/orionplace/cart/ICartActions.ts +0 -67
- package/templates/app/interfaces/orionplace/cart/ICartData.ts +0 -382
- package/templates/app/interfaces/orionplace/cart/ICartDeliveryActions.ts +0 -68
- package/templates/app/interfaces/orionplace/cart/ICartModal.ts +0 -22
- package/templates/app/interfaces/orionplace/cart/IDeliveryMap.ts +0 -29
- package/templates/app/interfaces/orionplace/catalog/ICatalogDirectory.ts +0 -75
- package/templates/app/interfaces/orionplace/category/ICategory.ts +0 -41
- package/templates/app/interfaces/orionplace/domains/IDomain.ts +0 -13
- package/templates/app/interfaces/orionplace/forms/ICustomerSubfilter.ts +0 -19
- package/templates/app/interfaces/orionplace/index.ts +0 -57
- package/templates/app/interfaces/orionplace/marketing/IPromoActions.ts +0 -51
- package/templates/app/interfaces/orionplace/orders/IOrderActions.ts +0 -99
- package/templates/app/interfaces/orionplace/orders/IOrderHistory.ts +0 -259
- package/templates/app/interfaces/orionplace/orders/IProductPreorder.ts +0 -31
- package/templates/app/interfaces/orionplace/payments/IInvoice.ts +0 -147
- package/templates/app/interfaces/orionplace/products/IProduct.ts +0 -262
- package/templates/app/interfaces/orionplace/products/IProductFeedbackApi.ts +0 -218
- package/templates/app/interfaces/orionplace/products/IProductSearchApi.ts +0 -146
- package/templates/app/interfaces/orionplace/products/IProductSearchFacets.ts +0 -35
- package/templates/app/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +0 -15
- package/templates/app/interfaces/orionplace/products/IProductSpecification.ts +0 -14
- package/templates/app/interfaces/orionplace/products/IWishlist.ts +0 -22
- package/templates/app/interfaces/orionplace/sellers/ISellerDirectory.ts +0 -70
- package/templates/app/interfaces/orionplace/shared/IBreadcrumb.ts +0 -10
- package/templates/app/interfaces/orionplace/shared/IGeoCoordinates.ts +0 -4
- package/templates/app/interfaces/orionplace/shared/IStorefrontControls.ts +0 -13
- package/templates/app/interfaces/orionplace/shared/ITransformValue.ts +0 -3
- package/templates/app/interfaces/orionplace/state.ts +0 -4
- package/templates/app/interfaces/orionplace/stores/IStoreDirectory.ts +0 -63
- package/templates/app/interfaces/orionplace/subscribeOptions/ISubscribeOption.ts +0 -9
- package/templates/app/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +0 -56
- package/templates/app/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +0 -11
- package/templates/app/interfaces/orionplace/subscribes/ISubscribe.ts +0 -28
- package/templates/app/interfaces/orionplace/subscribes/ISubscriptionApi.ts +0 -127
- package/templates/app/interfaces/orionplace/tickets/ICustomerTicketApi.ts +0 -223
- package/templates/app/interfaces/orionplace/transport.ts +0 -34
- package/templates/app/layouts/default.vue +0 -382
- package/templates/app/middleware/00.orionplace.global.ts +0 -27
- package/templates/app/middleware/01.orionplace-sellers.global.ts +0 -15
- package/templates/app/middleware/orionplace-account.ts +0 -40
- package/templates/app/pages/activity.vue +0 -19
- package/templates/app/pages/addresses.vue +0 -23
- package/templates/app/pages/browse.vue +0 -253
- package/templates/app/pages/cart.vue +0 -20
- package/templates/app/pages/catalog.vue +0 -17
- package/templates/app/pages/category/[id].vue +0 -150
- package/templates/app/pages/contact.vue +0 -17
- package/templates/app/pages/featured.vue +0 -152
- package/templates/app/pages/index.vue +0 -194
- package/templates/app/pages/journal/[id].vue +0 -164
- package/templates/app/pages/journal/index.vue +0 -74
- package/templates/app/pages/logout.vue +0 -71
- package/templates/app/pages/manufacturers.vue +0 -33
- package/templates/app/pages/orders.vue +0 -40
- package/templates/app/pages/privacy.vue +0 -17
- package/templates/app/pages/product/[id].vue +0 -150
- package/templates/app/pages/profile.vue +0 -118
- package/templates/app/pages/promo/[id].vue +0 -67
- package/templates/app/pages/promocodes.vue +0 -21
- package/templates/app/pages/sellers.vue +0 -203
- package/templates/app/pages/stores.vue +0 -36
- package/templates/app/pages/subscriptions.vue +0 -21
- package/templates/app/pages/tariffs/[slug]/[id].vue +0 -126
- package/templates/app/pages/tariffs/index.vue +0 -50
- package/templates/app/pages/tickets.vue +0 -56
- package/templates/app/pages/unsubscribe.vue +0 -32
- package/templates/app/pages/wallet.vue +0 -23
- package/templates/app/pages/wishlist.vue +0 -48
- package/templates/app/stores/orionplace.ts +0 -493
- package/templates/app/stores/orionplaceBrowse.ts +0 -79
- package/templates/app/stores/orionplaceCatalog.ts +0 -141
- package/templates/app/stores/orionplaceDomainAccess.ts +0 -55
- package/templates/app/stores/orionplaceProducts.ts +0 -249
- package/templates/app/stores/orionplaceSelections.ts +0 -132
- package/templates/app/themes/orionplace.ts +0 -108
- package/templates/app/utils/orionplace/accountLabels.ts +0 -29
- package/templates/app/utils/orionplace/activityLabels.ts +0 -96
- package/templates/app/utils/orionplace/activityPresentation.ts +0 -16
- package/templates/app/utils/orionplace/addressChanges.ts +0 -26
- package/templates/app/utils/orionplace/addressRegions.ts +0 -17
- package/templates/app/utils/orionplace/api.ts +0 -333
- package/templates/app/utils/orionplace/blogArticleHtml.ts +0 -318
- package/templates/app/utils/orionplace/blogComments.ts +0 -133
- package/templates/app/utils/orionplace/blogImageViewer.ts +0 -84
- package/templates/app/utils/orionplace/blogLabels.ts +0 -167
- package/templates/app/utils/orionplace/blogLayout.ts +0 -108
- package/templates/app/utils/orionplace/blogProductPlacements.ts +0 -105
- package/templates/app/utils/orionplace/breadcrumbLabels.ts +0 -14
- package/templates/app/utils/orionplace/browseLabels.ts +0 -145
- package/templates/app/utils/orionplace/cartAddress.ts +0 -94
- package/templates/app/utils/orionplace/cartLabels.ts +0 -390
- package/templates/app/utils/orionplace/cartOptions.ts +0 -143
- package/templates/app/utils/orionplace/cartPreview.ts +0 -123
- package/templates/app/utils/orionplace/cartPromo.ts +0 -150
- package/templates/app/utils/orionplace/cartShipment.ts +0 -74
- package/templates/app/utils/orionplace/cartSnapshot.ts +0 -20
- package/templates/app/utils/orionplace/catalog.ts +0 -106
- package/templates/app/utils/orionplace/category.ts +0 -52
- package/templates/app/utils/orionplace/categoryLabels.ts +0 -44
- package/templates/app/utils/orionplace/contactLabels.ts +0 -152
- package/templates/app/utils/orionplace/currency.ts +0 -128
- package/templates/app/utils/orionplace/deliveryMap.ts +0 -89
- package/templates/app/utils/orionplace/directoryLabels.ts +0 -196
- package/templates/app/utils/orionplace/emptyStateArt.ts +0 -231
- package/templates/app/utils/orionplace/errorPageLabels.ts +0 -95
- package/templates/app/utils/orionplace/featureData.ts +0 -25
- package/templates/app/utils/orionplace/featureLabels.ts +0 -406
- package/templates/app/utils/orionplace/featuredLabels.ts +0 -38
- package/templates/app/utils/orionplace/files.ts +0 -71
- package/templates/app/utils/orionplace/footerLabels.ts +0 -53
- package/templates/app/utils/orionplace/guestSession.ts +0 -50
- package/templates/app/utils/orionplace/headerLabels.ts +0 -98
- package/templates/app/utils/orionplace/homeContent.ts +0 -129
- package/templates/app/utils/orionplace/homeLabels.ts +0 -74
- package/templates/app/utils/orionplace/htmlText.ts +0 -59
- package/templates/app/utils/orionplace/links.ts +0 -14
- package/templates/app/utils/orionplace/manufacturerIndex.ts +0 -108
- package/templates/app/utils/orionplace/modalWindow.ts +0 -109
- package/templates/app/utils/orionplace/nativeApp.ts +0 -361
- package/templates/app/utils/orionplace/notice.ts +0 -22
- package/templates/app/utils/orionplace/orderLabels.ts +0 -454
- package/templates/app/utils/orionplace/orderPresentation.ts +0 -629
- package/templates/app/utils/orionplace/pageSeo.ts +0 -662
- package/templates/app/utils/orionplace/paginationScroll.ts +0 -131
- package/templates/app/utils/orionplace/phone.ts +0 -22
- package/templates/app/utils/orionplace/presentation.ts +0 -72
- package/templates/app/utils/orionplace/privacyLabels.ts +0 -273
- package/templates/app/utils/orionplace/productActionLabels.ts +0 -108
- package/templates/app/utils/orionplace/productActions.ts +0 -574
- package/templates/app/utils/orionplace/productAvailability.ts +0 -36
- package/templates/app/utils/orionplace/productGallery.ts +0 -72
- package/templates/app/utils/orionplace/productLabels.ts +0 -119
- package/templates/app/utils/orionplace/productListLocation.ts +0 -130
- package/templates/app/utils/orionplace/productManufacturer.ts +0 -30
- package/templates/app/utils/orionplace/productPage.ts +0 -46
- package/templates/app/utils/orionplace/productPhotos.ts +0 -67
- package/templates/app/utils/orionplace/productSearchScope.ts +0 -237
- package/templates/app/utils/orionplace/productSeller.ts +0 -51
- package/templates/app/utils/orionplace/productStructuredData.ts +0 -221
- package/templates/app/utils/orionplace/profile.ts +0 -148
- package/templates/app/utils/orionplace/profileLabels.ts +0 -229
- package/templates/app/utils/orionplace/promoLabels.ts +0 -111
- package/templates/app/utils/orionplace/promoPresentation.ts +0 -381
- package/templates/app/utils/orionplace/reviewLabels.ts +0 -256
- package/templates/app/utils/orionplace/reviewScope.ts +0 -41
- package/templates/app/utils/orionplace/richText.ts +0 -13
- package/templates/app/utils/orionplace/searchFilters.ts +0 -99
- package/templates/app/utils/orionplace/searchHistory.ts +0 -144
- package/templates/app/utils/orionplace/sellerDirectory.ts +0 -134
- package/templates/app/utils/orionplace/seo.ts +0 -52
- package/templates/app/utils/orionplace/serverCookies.ts +0 -88
- package/templates/app/utils/orionplace/sessionLabels.ts +0 -38
- package/templates/app/utils/orionplace/signInReturn.ts +0 -89
- package/templates/app/utils/orionplace/storeDirectory.ts +0 -50
- package/templates/app/utils/orionplace/subscriptionChanges.ts +0 -167
- package/templates/app/utils/orionplace/subscriptionLabels.ts +0 -100
- package/templates/app/utils/orionplace/subscriptionManageLabels.ts +0 -424
- package/templates/app/utils/orionplace/subscriptionPlans.ts +0 -162
- package/templates/app/utils/orionplace/subscriptionRemote.ts +0 -110
- package/templates/app/utils/orionplace/subscriptionUsage.ts +0 -82
- package/templates/app/utils/orionplace/tariffLabels.ts +0 -182
- package/templates/app/utils/orionplace/tariffPage.ts +0 -77
- package/templates/app/utils/orionplace/tariffVariables.ts +0 -203
- package/templates/app/utils/orionplace/tariffs.ts +0 -333
- package/templates/app/utils/orionplace/ticketItems.ts +0 -87
- package/templates/app/utils/orionplace/ticketLabels.ts +0 -428
- package/templates/app/utils/orionplace/ticketLocation.ts +0 -79
- package/templates/app/utils/orionplace/walletTransaction.ts +0 -135
- package/templates/app/utils/orionplaceAppLoad.ts +0 -83
- package/templates/orionplace/COMPONENT-DOWNLOAD.md +0 -40
- package/templates/orionplace/COMPONENTS.md +0 -1993
- package/templates/orionplace/THEMES.md +0 -94
package/README.md
CHANGED
|
@@ -1,1173 +1,13 @@
|
|
|
1
|
-
# orionplace-nuxt
|
|
1
|
+
# orionplace-nuxt → basklee-nuxt
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
`orionplace-nuxt` creates a server-rendered shop connected to your personal
|
|
6
|
-
marketplace API: catalog and search, product pages, cart and checkout, customer
|
|
7
|
-
account, journal and support, in English, Russian and Spanish. The package includes a Nuxt module, a
|
|
8
|
-
setup CLI and the full storefront source, so every page and component in your
|
|
9
|
-
project is yours to change.
|
|
10
|
-
|
|
11
|
-
- **Setup CLI:** `init`, `set backend`, `add frontend`, `set mimic`, `sitemap rebuild` and `update`.
|
|
12
|
-
- **Server install:** `install` builds the storefront on your Linux server and
|
|
13
|
-
runs it as a system service behind nginx with HTTPS.
|
|
14
|
-
- **API gateway:** the browser calls `/api/...` on your own domain; the server
|
|
15
|
-
forwards it to your marketplace backend with cookies bound to the storefront.
|
|
16
|
-
- **Typed store:** one Application Load request fills it before the first render.
|
|
17
|
-
- **124 storefront components**, each with an English and Russian README
|
|
18
|
-
([list](#components)).
|
|
19
|
-
- **Several storefront domains** on one backend, each with its own mapping.
|
|
20
|
-
- **Android app** from the same project with Capacitor 8.
|
|
21
|
-
|
|
22
|
-
**Contents:** [Quick start](#quick-start-from-zero) ·
|
|
23
|
-
[Existing project](#existing-nuxt-4-project) · [Components](#components) ·
|
|
24
|
-
[Commands](#commands) · [Server install](#install-on-your-server) ·
|
|
25
|
-
[Android app](#android-app) · [Update](#update-an-existing-project)
|
|
26
|
-
|
|
27
|
-
Requires Node.js 22.12+ and a Node server deployment. Static-only and edge
|
|
28
|
-
hosting are not supported by this filesystem-based integration.
|
|
29
|
-
|
|
30
|
-
## Android app
|
|
31
|
-
|
|
32
|
-
The same project builds as an Android app with Capacitor 8. Set
|
|
33
|
-
`ORIONPLACE_APP_ORIGIN` to your deployed public storefront (HTTPS) for that
|
|
34
|
-
build: the module then makes a client-only build, and every API request goes to
|
|
35
|
-
`<origin>/api/...` through Capacitor's native HTTP with the storefront Origin,
|
|
36
|
-
so your storefront gateway answers it as for the website. With the
|
|
37
|
-
`@capacitor/app` plugin installed, the Android back button closes an open
|
|
38
|
-
dialog, opens the previous page, or leaves the app on the first page. With
|
|
39
|
-
`@capacitor/filesystem` and `@capacitor/share`, a purchased file is saved in
|
|
40
|
-
the app and opened from the Android share sheet. Without
|
|
41
|
-
the variable nothing changes. Setup, build and release steps:
|
|
42
|
-
[Android app guide](https://orionmarket.place/en/sandbox/android-app).
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
ORIONPLACE_APP_ORIGIN=https://shop.example.com npx nuxt generate
|
|
46
|
-
npx cap sync android
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Asset loading
|
|
50
|
-
|
|
51
|
-
The starter preloads only the current route's module graph. Navigation assets
|
|
52
|
-
start loading after pointer or keyboard interaction. Closed dialogs and catalog
|
|
53
|
-
content load when opened, while product rows and events below the first screen
|
|
54
|
-
hydrate as they approach the viewport.
|
|
55
|
-
|
|
56
|
-
Storefront image components emit intrinsic dimensions or a stable aspect ratio
|
|
57
|
-
to reserve layout space. Product cards include the primary image in the initial
|
|
58
|
-
page and add secondary images after hover or keyboard focus.
|
|
59
|
-
|
|
60
|
-
## Quick start from zero
|
|
61
|
-
|
|
62
|
-
Your personal backend domain is already provided in your account at
|
|
63
|
-
[orionmarket.place](https://orionmarket.place). You can change it there.
|
|
64
|
-
Replace `your-project.orionplace.app` below with that domain and
|
|
65
|
-
`shop.example.com` with the public domain of your own storefront.
|
|
66
|
-
With Node.js 22.12+ and npm installed, run this from the parent folder;
|
|
67
|
-
no existing Nuxt project is needed:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npx --yes orionplace-nuxt init my-marketplace
|
|
71
|
-
cd my-marketplace
|
|
72
|
-
npm install
|
|
73
|
-
npx orionplace-nuxt set backend your-project.orionplace.app
|
|
74
|
-
npx orionplace-nuxt add frontend shop.example.com
|
|
75
|
-
npm run dev
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
The first command creates the Nuxt configuration, app and integration README.
|
|
79
|
-
The first frontend becomes the local MIMIC domain. Open the local URL printed
|
|
80
|
-
by Nuxt (normally http://localhost:3000). The storefront opens after Application Load
|
|
81
|
-
succeeds. If initialization fails, check your domain mapping and backend response.
|
|
82
|
-
The backend command accepts either a hostname or its full HTTPS `/api` URL.
|
|
83
|
-
The frontend command accepts a public hostname or its root HTTPS URL.
|
|
84
|
-
|
|
85
|
-
## Existing Nuxt 4 project
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npm install orionplace-nuxt
|
|
89
|
-
npx orionplace-nuxt init --dry-run
|
|
90
|
-
npx orionplace-nuxt set backend your-project.orionplace.app
|
|
91
|
-
npx orionplace-nuxt add frontend shop.example.com
|
|
92
|
-
npm install
|
|
93
|
-
npm run dev
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
The CLI preserves unrelated Nuxt settings, scripts, and environment variables.
|
|
97
|
-
It supports a standard root `nuxt.config.ts`, `.js`, or `.mjs` with a literal
|
|
98
|
-
configuration object and module array. Resolve existing `/api` proxy or
|
|
99
|
-
catch-all conflicts before setup. Custom source/server directories, Nuxt layers,
|
|
100
|
-
and dynamic configuration expressions require manual integration.
|
|
101
|
-
|
|
102
|
-
No install or postinstall hook changes your application. Only explicitly running
|
|
103
|
-
the CLI writes files. Use `--cwd <directory>` to select a project and `--dry-run`
|
|
104
|
-
to inspect planned changes without writing them.
|
|
105
|
-
|
|
106
|
-
## Nuxt compatibility date
|
|
107
|
-
|
|
108
|
-
The local setup implementation adds `compatibilityDate: '2025-07-15'` when it is
|
|
109
|
-
missing from `nuxt.config.ts`, including during updates. Existing dates are
|
|
110
|
-
preserved. This retains Nuxt's fallback behavior and prevents `NUXT_B5001`.
|
|
111
|
-
This fix will be available on npm after the next publication.
|
|
112
|
-
|
|
113
|
-
For an already generated project, add this property inside the existing
|
|
114
|
-
`defineNuxtConfig({ ... })` object and restart development:
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
compatibilityDate: '2025-07-15',
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Keep the other settings. The date controls compatibility behavior, rather than
|
|
121
|
-
tracking today's date; see the [Nuxt configuration reference](https://nuxt.com/docs/4.x/api/nuxt-config#compatibilitydate).
|
|
122
|
-
|
|
123
|
-
## Import aliases
|
|
124
|
-
|
|
125
|
-
Use `@/` for application imports. Nuxt resolves it to `app/`, so an import such
|
|
126
|
-
as `@/stores/orionplace` works from any page, composable or component folder.
|
|
127
|
-
Framework imports such as `#imports` keep their own names.
|
|
128
|
-
|
|
129
|
-
<!-- components:start (generated by scripts/generate-package-readme-components.mjs) -->
|
|
130
|
-
## Components
|
|
131
|
-
|
|
132
|
-
The starter includes **126 storefront components**, copied into
|
|
133
|
-
`app/components/orionplace/` of your project. Each one has a README in English and Russian
|
|
134
|
-
next to its source that describes its inputs, data and actions.
|
|
135
|
-
|
|
136
|
-
### Storefront structure
|
|
137
|
-
|
|
138
|
-
Main pages and the shared storefront frame.
|
|
139
|
-
|
|
140
|
-
| Component | Name | What it does |
|
|
141
|
-
| --- | --- | --- |
|
|
142
|
-
| **Header** | `StorefrontHeader` | The storefront header and its search, catalog, manufacturer and journal links, locale, currency, account, wishlist and cart controls. |
|
|
143
|
-
| **Storefront logo** | `BrandLogos` | Displays one logo from store.init.logos. |
|
|
144
|
-
| **Product search** | `MainSearch` | A search input with suggestions in the storefront language. |
|
|
145
|
-
| **Language selector** | `MainLanguageSwitcher` | Selects the storefront language and its associated currency and measurement units. |
|
|
146
|
-
| **Currency selector** | `MainCurrencySwitcher` | Selects the current storefront currency from the available options. |
|
|
147
|
-
| **Storefront account** | `StorefrontAccount` | Guest sign-in button and signed-in account menu with profile and wallet actions. |
|
|
148
|
-
| **Wallet balance** | `WalletBalance` | Displays the wallet balance in the selected storefront currency. |
|
|
149
|
-
| **Sign-out page** | `StorefrontLogout` | Session sign-out, failure retry and return to the storefront. |
|
|
150
|
-
| **Wishlist button** | `StorefrontWishlistButton` | Displays the wishlist count and links to the wishlist page. |
|
|
151
|
-
| **Cart button** | `StorefrontCartButton` | Displays the cart count and emits a request to open the cart page. |
|
|
152
|
-
| **Cart preview** | `CartPreview` | A compact dropdown under the header's cart button with cart products, quantities and amounts in the selected currency. |
|
|
153
|
-
| **Catalog menu** | `CatalogHeader` | Category navigation with nested sections and representative product cards. |
|
|
154
|
-
| **Catalog representative** | `CatalogRepresentative` | A compact product card used in the catalog menu, with the same navigation, variant, wishlist and purchase actions. |
|
|
155
|
-
| **Storefront home** | `StorefrontHome` | Banners, the optional Popular categories block, product sections, storefront events and recommendations. |
|
|
156
|
-
| **Storefront banners** | `MainBanner` | A carousel of banner images for the current storefront language, with responsive image formats. |
|
|
157
|
-
| **Popular categories block** | `CategoryGroup` | Optional home-page block of public category tiles. |
|
|
158
|
-
| **Product group** | `ProductGroup` | Displays a collection of product cards with images, prices, variant selection and purchase controls. |
|
|
159
|
-
| **Product card** | `ProductCard` | Combines a product’s image, name, price, variants, wishlist button and purchase controls in one card. |
|
|
160
|
-
| **Product photo viewer** | `HoverImageViewer` | A separate product photo viewer with dot buttons: it switches photos with the pointer, with a swipe and from the keyboard, and a click passes the chosen photo's address to the application. |
|
|
161
|
-
| **Product card title** | `ProductCardTitle` | Displays the localized product name in the card. |
|
|
162
|
-
| **Product card description** | `ProductCardDescription` | Displays the localized short product description as plain text, with HTML tags removed. |
|
|
163
|
-
| **Product card badges** | `ProductCardBadges` | Marks new, popular, good-deal and low-stock products with badges in the card. |
|
|
164
|
-
| **Product card wishlist button** | `ProductCardFavorite` | Requests adding or removing the product from the wishlist; the supplied storefront sends guests to sign-in. |
|
|
165
|
-
| **Seller in the product card** | `ProductCardSeller` | Displays the product seller’s name and rating in the card. |
|
|
166
|
-
| **Product card rating** | `ProductCardRating` | Displays the product’s average rating and review count in the card. |
|
|
167
|
-
| **Product card variants** | `ProductCardVariants` | Selects a primary or secondary product variant. |
|
|
168
|
-
| **Secondary variant selector** | `ProductSecondaryVariantModal` | Shows primary and secondary product choices in a modal and can continue the selected purchase action. |
|
|
169
|
-
| **Product card price** | `ProductCardPrice` | Displays the price in the selected currency and the original price when the product is discounted. |
|
|
170
|
-
| **Low-stock notice** | `ProductCardStockNotice` | Warns that the product will soon run out of stock. |
|
|
171
|
-
| **Product card purchase controls** | `ProductCardActions` | Product-card controls for the cart, quantity, availability notifications and preorder when available. |
|
|
172
|
-
| **Preorder dialog** | `ProductPreorderDialog` | The selected product and contact details for a preorder request. |
|
|
173
|
-
| **Storefront events** | `EventsBlock` | A full-width carousel of layout-event images for the current storefront language, with responsive image formats. |
|
|
174
|
-
| **Event block and promotion enrollment** | `EventEnrollmentDialog` | Displaying the event block and opening promotion enrollment from the selected event. |
|
|
175
|
-
| **Footer** | `StorefrontFooter` | Store identity, navigation, a contact-page link and social links. |
|
|
176
|
-
| **Social links** | `SocialLinks` | Display the store’s published social links and icons. |
|
|
177
|
-
| **Error page** | `StorefrontErrorPage` | Page-not-found (404) and failure (500) page with Home, Catalog and Retry actions. |
|
|
178
|
-
| **Storefront theme** | `OrionplaceThemeProvider` | Applies the selected light or dark storefront theme and optional color overrides to its content. |
|
|
179
|
-
|
|
180
|
-
### Catalog and discovery
|
|
181
|
-
|
|
182
|
-
Browse categories, search results and product sources.
|
|
183
|
-
|
|
184
|
-
| Component | Name | What it does |
|
|
185
|
-
| --- | --- | --- |
|
|
186
|
-
| **Catalog component** | `StorefrontCatalog` | The component shows store categories, subcategories and product links. |
|
|
187
|
-
| **Category page** | `StorefrontCategory` | A category with its breadcrumb path, subcategories, filters and paginated product cards. |
|
|
188
|
-
| **Search results** | `ProductSearchResults` | Filters, products, loading and empty states for search, category, seller and recommendation results. |
|
|
189
|
-
| **Search filters** | `SearchFilters` | Price, discount, rating, review, category, seller, manufacturer and variant facets with selectable values and optional result counts. |
|
|
190
|
-
| **Sellers** | `StorefrontSellers` | Seller directory with filters and sorting, and a seller profile with its products. |
|
|
191
|
-
| **Seller filters** | `SellerFilters` | Seller name, minimum rating and category filters for the seller directory. |
|
|
192
|
-
| **Seller summary** | `SellerSummary` | Seller logo, name, rating, selling-since badge, product count and description. |
|
|
193
|
-
| **Seller photos** | `SellerPhotoGallery` | The seller’s approved photos as a square grid with a photo viewer. |
|
|
194
|
-
| **Stores** | `StorefrontStores` | Store addresses, map, phone numbers, opening hours and products. |
|
|
195
|
-
| **Manufacturers and their products** | `StorefrontManufacturers` | Alphabetical index, letter-based lists and manufacturer details. |
|
|
196
|
-
| **Manufacturer index** | `ManufacturerIndex` | Manufacturer logos and letter groups. |
|
|
197
|
-
|
|
198
|
-
### Products and shopping
|
|
199
|
-
|
|
200
|
-
Product details, saved items and the cart.
|
|
201
|
-
|
|
202
|
-
| Component | Name | What it does |
|
|
203
|
-
| --- | --- | --- |
|
|
204
|
-
| **Product details** | `StorefrontProduct` | Loads and displays a published product or a secret-key preview with images, purchase choices, details and reviews. |
|
|
205
|
-
| **Page path** | `OrionplaceBreadcrumbs` | Linked path from the storefront home page through parent categories to the current page. |
|
|
206
|
-
| **Product characteristics** | `ProductSpecificationsDialog` | Every characteristic of the product in a dialog over the page. |
|
|
207
|
-
| **Product reviews** | `ProductReviews` | Reviews, replies, ratings and the user’s submissions. |
|
|
208
|
-
| **Review form** | `ProductReviewForm` | Rating, text and photos for a review or reply. |
|
|
209
|
-
| **Customer review photos** | `ProductReviewGallery` | Review photos for the selected product. |
|
|
210
|
-
| **Review photo viewer** | `ProductReviewImageViewer` | The photos of one review, shown large on the same page. |
|
|
211
|
-
| **Promo code products** | `PromoProducts` | The products a promo code offer applies to, with the offer’s conditions. |
|
|
212
|
-
| **Wishlist and availability notices** | `StorefrontWishlist` | Saved products and products with availability notifications, shown as standard product cards. |
|
|
213
|
-
| **Cart and checkout** | `StorefrontCart` | Cart items, promo codes, delivery, payment and order creation. |
|
|
214
|
-
| **Cart item** | `CartLineItem` | Item name, image, price, quantity and removal. |
|
|
215
|
-
| **Cart item options** | `CartItemOptions` | Option products as product cards, with text and file attachment for an item. |
|
|
216
|
-
| **Checkout details** | `CartCheckoutDetails` | Delivery address, payment method, recipient and comment. |
|
|
217
|
-
| **Shipment delivery selection** | `CartDeliverySelector` | Delivery methods with icons, pickup points and their map for one shipment. |
|
|
218
|
-
| **Delivery map** | `DeliveryMap` | Selectable locations on Yandex Maps for delivery pickup and the store directory. |
|
|
219
|
-
|
|
220
|
-
### Customer account
|
|
221
|
-
|
|
222
|
-
Profile, orders, addresses and account activity.
|
|
223
|
-
|
|
224
|
-
| Component | Name | What it does |
|
|
225
|
-
| --- | --- | --- |
|
|
226
|
-
| **Account sections** | `AccountSection` | Account navigation and sign-in for private storefront sections. |
|
|
227
|
-
| **Personal profile** | `StorefrontProfile` | Account overview and forms for personal details, verified email, notification preferences, avatar, password and account deletion. |
|
|
228
|
-
| **Profile photo** | `ProfileAvatar` | Upload or remove the current account’s avatar. |
|
|
229
|
-
| **Personal details** | `ProfileDetailsForm` | Edit the account holder’s name and date of birth. |
|
|
230
|
-
| **Email and notifications** | `ProfileEmailSettings` | Verify an email address and choose optional email-notification and email-language preferences. |
|
|
231
|
-
| **Account password** | `ProfilePasswordForm` | Create or change the account password. |
|
|
232
|
-
| **Password field** | `OrionplacePasswordInput` | Password input with a button that shows or hides the entered password. |
|
|
233
|
-
| **Delete account** | `ProfileDeleteAccount` | Delete the signed-in customer's own account. |
|
|
234
|
-
| **Account sign-in** | `ProfileSignIn` | Phone-based account sign-in and registration. |
|
|
235
|
-
| **User promo codes** | `AccountPromocodes` | Available promo codes and applying a selected code to the cart. |
|
|
236
|
-
| **My activity** | `AccountActivity` | The user’s promo codes, reviews and sign-in history. |
|
|
237
|
-
| **Sign-in history** | `SignInHistory` | The user’s sign-in dates, devices, browsers and IP addresses. |
|
|
238
|
-
| **User orders** | `StorefrontOrders` | Order history, purchased items, payment, cancellation and repeat. |
|
|
239
|
-
| **Order details** | `OrderDetails` | Order items, shipments, tracking, purchased content and attachments. |
|
|
240
|
-
| **Order payment selection** | `OrderPaymentForm` | Available payment-method selection for an existing order. |
|
|
241
|
-
| **User addresses** | `StorefrontAddresses` | Saved addresses, address editing and default delivery selection. |
|
|
242
|
-
| **Address form** | `AddressForm` | Address creation and editing with country selection, region search, text suggestions and location lookup. |
|
|
243
|
-
| **Value selector** | `OrionplaceSelect` | Selects one value from a labeled list, with keyboard controls, country flags and option icons. |
|
|
244
|
-
| **Search selector** | `OrionplaceSearchSelect` | Selects one value from options searched as the user types, with a loading spinner and retry. |
|
|
245
|
-
| **Wallet and payments** | `StorefrontWallet` | Payment history, balance top-ups and cancellation of unpaid invoices. |
|
|
246
|
-
| **Wallet top-up form** | `WalletTopUpForm` | Amount, currency and payment-method selection for a wallet top-up. |
|
|
247
|
-
| **Payment panel** | `PaymentPanel` | Opens the payment link and lets the user refresh its status. |
|
|
248
|
-
| **Pagination** | `StorefrontPagination` | Previous and next controls with the current page for a returned list. |
|
|
249
|
-
|
|
250
|
-
### Subscriptions and support
|
|
251
|
-
|
|
252
|
-
Plans, active subscriptions and support requests.
|
|
253
|
-
|
|
254
|
-
| Component | Name | What it does |
|
|
255
|
-
| --- | --- | --- |
|
|
256
|
-
| **Subscription plans** | `StorefrontTariffs` | Plans grouped by subscription, with search, sign-in for guests and subscription purchase. |
|
|
257
|
-
| **Subscription plan details** | `StorefrontTariff` | One public plan with its media, description, features, periods, options and subscription purchase. |
|
|
258
|
-
| **Subscription plans** | `TariffCards` | Plan cards in a responsive grid. |
|
|
259
|
-
| **Subscription plan card** | `TariffCard` | A plan card with its image, trial badge, name, description, the modules and limits of the plan, the option chooser, period prices and subscribe actions. |
|
|
260
|
-
| **Plan image** | `TariffCardImage` | The first small plan image. |
|
|
261
|
-
| **Plan name** | `TariffCardTitle` | The tariff name in its card, in the selected language. |
|
|
262
|
-
| **Plan description** | `TariffCardDescription` | The short plan description without HTML tags, and the full description under Details. |
|
|
263
|
-
| **Plan modules, limits and options** | `TariffCardFeatures` | The modules and limits of a plan from `tariff_variables_json`, each with its explanation, and the chooser of the plan options. |
|
|
264
|
-
| **Information hint** | `OrionplaceInfoHint` | Small information button that explains the term beside it. |
|
|
265
|
-
| **Plan prices** | `TariffCardPrices` | The period switcher, the price for the chosen period and the Subscribe and Try actions. |
|
|
266
|
-
| **Plan purchase** | `TariffSubscriptionModal` | Select an option, enter a promotion code and confirm a subscription purchase. |
|
|
267
|
-
| **My subscriptions** | `StorefrontSubscriptions` | Subscription dates, plan, usage, service details, automatic renewal, renewal payment and support. |
|
|
268
|
-
| **Renewal payment** | `SubscriptionExtendDialog` | The period, the promo code and the amount for extending a subscription. |
|
|
269
|
-
| **Automatic renewal** | `SubscriptionRenewalDialog` | The period that is paid automatically, or turning it off. |
|
|
270
|
-
| **Plan and option change** | `SubscriptionChangeDialog` | The new plan or service option, its period and the amount that is charged. |
|
|
271
|
-
| **Subscription cancellation** | `SubscriptionCancelDialog` | The confirmation that stops automatic renewal and keeps the paid period. |
|
|
272
|
-
| **Plan and usage** | `SubscriptionPlanSummary` | The plan picture, description and parameters with the usage the subscription service reported. |
|
|
273
|
-
| **Subscription service details** | `SubscriptionRemoteDetails` | The identifier, confirmation time and host a subscription service returned. |
|
|
274
|
-
| **Support conversations** | `StorefrontSupport` | Customer support conversations for general questions, sellers, order items and subscriptions. |
|
|
275
|
-
| **Conversation messages** | `TicketConversation` | Messages, attachments, conversation closing and support rating. |
|
|
276
|
-
| **Conversation item** | `TicketItemCard` | The purchased item a conversation is about, with its image, variant or option, quantity and paid amount. |
|
|
277
|
-
| **Subscription of a conversation** | `TicketSubscriptionCard` | The subscription a support conversation is about: plan, number, state, paid-until date and automatic renewal. |
|
|
278
|
-
| **Conversation image** | `TicketImage` | Loading and viewing an image from the user’s conversation. |
|
|
279
|
-
| **Support message form** | `TicketMessageForm` | Message text and images for a new conversation or reply. |
|
|
280
|
-
|
|
281
|
-
### Content and contact
|
|
282
|
-
|
|
283
|
-
Journal content and customer contact flows.
|
|
284
|
-
|
|
285
|
-
| Component | Name | What it does |
|
|
286
|
-
| --- | --- | --- |
|
|
287
|
-
| **Journal** | `StorefrontJournal` | Paged journal of store articles with category and author filters. |
|
|
288
|
-
| **Journal article** | `BlogArticle` | An article, subscription access and its discussion. |
|
|
289
|
-
| **Article comments** | `BlogComments` | Discussion, replies and the user’s own comments. |
|
|
290
|
-
| **Comment form** | `BlogCommentForm` | Text for a new comment, reply or edit. |
|
|
291
|
-
| **Blog posts** | `BlogPostGroup` | Publication previews in a grid, list or layout with a lead card. |
|
|
292
|
-
| **Blog post card** | `BlogPostCard` | Publication image, localized title, plain-text preview and reading time. |
|
|
293
|
-
| **Contact page** | `StorefrontContact` | Company contact and registration details, with a form for messaging the store. |
|
|
294
|
-
| **Contact details** | `AboutPage` | Display the store’s published company and contact information. |
|
|
295
|
-
| **Contact form** | `ContactForm` | Sending a question to the store. |
|
|
296
|
-
| **Unsubscribe from emails** | `EmailUnsubscribe` | Confirming an unsubscribe request from an email link. |
|
|
297
|
-
| **Privacy policy page** | `StorefrontPrivacy` | The store’s personal data policy with a cookies section and the operator’s details. |
|
|
298
|
-
| **Cookie notice** | `CookieNotice` | A small notice about the necessary cookies with a link to the cookies section of the policy. |
|
|
299
|
-
|
|
300
|
-
### Shared interface
|
|
301
|
-
|
|
302
|
-
Small reusable states and identity elements.
|
|
303
|
-
|
|
304
|
-
| Component | Name | What it does |
|
|
305
|
-
| --- | --- | --- |
|
|
306
|
-
| **Empty state** | `OrionplaceEmptyState` | Line drawing and message shown when a list, history or search result has no items. |
|
|
307
|
-
| **Avatar** | `OrionplaceAvatar` | Round user photo with initials when no photo is available. |
|
|
308
|
-
| **Storefront image** | `OrionplaceImage` | Loads a safe public image lazily and shows an accessible placeholder when the image is missing or fails. |
|
|
309
|
-
| **Measurement unit selector** | `UnitSwitcher` | Selects a weight or length unit from those available in the storefront. |
|
|
310
|
-
|
|
311
|
-
<!-- components:end -->
|
|
312
|
-
|
|
313
|
-
## Commands
|
|
314
|
-
|
|
315
|
-
```bash
|
|
316
|
-
npx orionplace-nuxt init [directory]
|
|
317
|
-
npx orionplace-nuxt update
|
|
318
|
-
npx orionplace-nuxt set backend your-project.orionplace.app
|
|
319
|
-
npx orionplace-nuxt add frontend shop.example.com
|
|
320
|
-
npx orionplace-nuxt add frontend www.shop.example.com
|
|
321
|
-
npx orionplace-nuxt remove frontend www.shop.example.com
|
|
322
|
-
npx orionplace-nuxt set mimic shop.example.com
|
|
323
|
-
npx orionplace-nuxt sitemap rebuild [shop.example.com]
|
|
324
|
-
npx orionplace-nuxt sitemap status
|
|
325
|
-
sudo npx orionplace-nuxt install
|
|
326
|
-
npx orionplace-nuxt status
|
|
327
|
-
sudo npx orionplace-nuxt restart
|
|
328
|
-
npx orionplace-nuxt help
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
Either domain command can run first. Both settings are needed for a usable mapping.
|
|
332
|
-
After setup, these npm script aliases are also available:
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
npm run orionplace:backend -- your-project.orionplace.app
|
|
336
|
-
npm run orionplace:add-frontend -- shop.example.com
|
|
337
|
-
npm run orionplace:remove-frontend -- www.shop.example.com
|
|
338
|
-
npm run orionplace:mimic -- shop.example.com
|
|
339
|
-
npm run orionplace:help
|
|
340
|
-
npm run orionplace:update
|
|
341
|
-
npm run orionplace:sitemap
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
The storefront serves `/robots.txt` and `/sitemap.xml` (public pages, categories,
|
|
345
|
-
products and journal publications in every language). The sitemap is rebuilt
|
|
346
|
-
from the backend once an hour; `npm run orionplace:sitemap` rebuilds it at once,
|
|
347
|
-
for example after new publications, and the running storefront serves it without
|
|
348
|
-
a restart.
|
|
349
|
-
|
|
350
|
-
`npm set` belongs to npm's own configuration system; use the commands above.
|
|
351
|
-
The setup commands configure local integration files. They do not provision a
|
|
352
|
-
backend, change your account or create DNS records. `install` deploys the
|
|
353
|
-
storefront on your server; see [Install on your server](#install-on-your-server).
|
|
354
|
-
|
|
355
|
-
## Install on your server
|
|
356
|
-
|
|
357
|
-
Prepare a Linux server once with the OrionMarketplace server script: it installs
|
|
358
|
-
Node.js, nginx and certbot and adds the `orionplace` command
|
|
359
|
-
([server guide](https://orionmarket.place/en/sandbox/install)).
|
|
360
|
-
|
|
361
|
-
```bash
|
|
362
|
-
curl -fsSLo orionplace.sh https://orionmarket.place/downloads/orionplace.sh
|
|
363
|
-
sudo sh orionplace.sh setup
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
Then create the storefront in `/srv/orionplace` and install it:
|
|
367
|
-
|
|
368
|
-
```bash
|
|
369
|
-
cd /srv/orionplace
|
|
370
|
-
sudo npx --yes orionplace-nuxt init shop
|
|
371
|
-
cd shop
|
|
372
|
-
sudo npm install
|
|
373
|
-
sudo npx orionplace-nuxt install
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
`install` asks for your backend and storefront domain when they are missing,
|
|
377
|
-
builds the project, runs it as the system service `orionplace-shop` on a free
|
|
378
|
-
local port and connects each storefront domain with nginx and a Let's Encrypt
|
|
379
|
-
certificate. Run it again after code or package updates; the service keeps its
|
|
380
|
-
port. Options: `--name <service>`, `--port <port>`, `--user <user>`,
|
|
381
|
-
`--no-build` (install the build already in the folder), `--no-domains`, `--yes`,
|
|
382
|
-
`--dry-run`. Full guide:
|
|
383
|
-
[Install a storefront](https://orionmarket.place/en/sandbox/install/storefront).
|
|
384
|
-
|
|
385
|
-
### Manage the service
|
|
386
|
-
|
|
387
|
-
Run these in the project folder, or name the service from anywhere with
|
|
388
|
-
`--name shop`:
|
|
389
|
-
|
|
390
|
-
```bash
|
|
391
|
-
npx orionplace-nuxt status # running?, autostart, port, home page answer, domains
|
|
392
|
-
sudo npx orionplace-nuxt start
|
|
393
|
-
sudo npx orionplace-nuxt stop
|
|
394
|
-
sudo npx orionplace-nuxt restart # waits until the home page answers again
|
|
395
|
-
sudo npx orionplace-nuxt logs 200 # last log lines; --follow keeps reading
|
|
396
|
-
npx orionplace-nuxt list # every storefront service on this server
|
|
397
|
-
sudo npx orionplace-nuxt uninstall # stop and remove the service (alias: cleanup)
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
`start` and `restart` wait up to 90 seconds for the home page and print the
|
|
401
|
-
last log lines when it does not answer. `status` ends with code 3 when the
|
|
402
|
-
storefront is stopped or does not answer, so scripts and monitors can use it.
|
|
403
|
-
`uninstall` (or `cleanup`) stops the service, takes it out of autostart and
|
|
404
|
-
deletes its unit file and registration; the project folder and its build stay.
|
|
405
|
-
With the `orionplace` server tool it runs `orionplace app remove`, which also
|
|
406
|
-
turns the storefront's domains into a placeholder page. `--dry-run` shows what it
|
|
407
|
-
would remove; `--yes` skips the question.
|
|
408
|
-
|
|
409
|
-
## Generated files
|
|
410
|
-
|
|
411
|
-
| Path | Purpose |
|
|
412
|
-
| --- | --- |
|
|
413
|
-
| `nuxt.config.ts` | Registers the module; an existing supported config keeps its filename. |
|
|
414
|
-
| `orionplace/runtime/marketplace.mjs` | Commented domain lookup and HTTP transport. |
|
|
415
|
-
| `orionplace/runtime/api.mjs` | Nitro handler registered for `/api/**` and blog media under `/ps3/blog/**`. |
|
|
416
|
-
| `orionplace/runtime/domain.mjs` | Domain resolution middleware. |
|
|
417
|
-
| `orionplace/README.md` | Your settings, API examples, file explanations, verification and VPS deployment. |
|
|
418
|
-
| `orionplace/settings.json` | Domain values selected by the CLI. |
|
|
419
|
-
| `orionplace/.generated.json` | File hashes used to preserve your edits on subsequent setup. |
|
|
420
|
-
| `sitemaps/shop.example.com.cfg` | One line: `https://your-project.orionplace.app/api`. |
|
|
421
|
-
| `.env` | `MIMIC_FRONT_DOMAIN="shop.example.com"` for localhost. |
|
|
422
|
-
| `.vscode/settings.json` | Tells the editor's CSS checker to accept Tailwind's `@apply`, `@reference` and `@theme`. An existing file is kept. |
|
|
423
|
-
|
|
424
|
-
The module executes the generated local runtime files. You can read and customize
|
|
425
|
-
them. Later setup runs preserve edited runtime files and the project README,
|
|
426
|
-
reporting which files were preserved. Unchanged generated files can be refreshed
|
|
427
|
-
with `npx orionplace-nuxt update`. A manually edited domain file is
|
|
428
|
-
never silently overwritten. Keep the hash manifest in version control.
|
|
429
|
-
|
|
430
|
-
## Multiple frontend domains
|
|
431
|
-
|
|
432
|
-
Each frontend gets its own `sitemaps/<domain>.cfg`. `add frontend` preserves other
|
|
433
|
-
domains and can be repeated safely. `set backend` updates every CLI-managed mapping
|
|
434
|
-
to the new personal API; it refuses to overwrite a manually edited mapping.
|
|
435
|
-
|
|
436
|
-
A new project starts with `MIMIC_FRONT_DOMAIN=""` in `.env`. Setting a backend
|
|
437
|
-
alone leaves it empty. The first added frontend becomes MIMIC; further additions
|
|
438
|
-
preserve that choice. `set mimic <domain>` selects an already-added frontend and
|
|
439
|
-
updates MIMIC without changing any domain mappings. Unknown domains are rejected;
|
|
440
|
-
add them with `add frontend` first.
|
|
441
|
-
|
|
442
|
-
`help`, `--help`, and `-h` display commands without writing files. The legacy
|
|
443
|
-
`set frontend <domain>` shortcut remains supported: it adds and selects a domain.
|
|
444
|
-
|
|
445
|
-
`remove frontend <domain>` removes that domain from the list and deletes only its
|
|
446
|
-
unchanged generated `.cfg`. Removing the MIMIC domain selects the first remaining
|
|
447
|
-
domain. Removing the last one clears MIMIC. Unknown or edited mappings cause a
|
|
448
|
-
clear error without changing files. Unrelated configurations remain untouched.
|
|
449
|
-
|
|
450
|
-
Restart development after domain changes to refresh Vite's allowed hosts and
|
|
451
|
-
Nuxt's environment. Production reloads mapping files on each API request; reload
|
|
452
|
-
the process environment when changing MIMIC. Configure DNS, TLS, and the hosting
|
|
453
|
-
proxy for each frontend separately.
|
|
454
|
-
|
|
455
|
-
Existing 0.1.0 setup state is migrated automatically, including other domain
|
|
456
|
-
mappings recorded in its generated-file manifest.
|
|
457
|
-
|
|
458
|
-
## Runtime behavior
|
|
459
|
-
|
|
460
|
-
The hosting proxy must overwrite `X-Front-Domain`, `X-Forwarded-Host`, and `Host`.
|
|
461
|
-
The gateway selects the first valid public domain in that order, with the request
|
|
462
|
-
URL hostname as another fallback. On localhost it uses `MIMIC_FRONT_DOMAIN`.
|
|
463
|
-
An unknown public domain returns `503`; it never uses another domain's mapping.
|
|
464
|
-
|
|
465
|
-
The corresponding `.cfg` is read on every request. Backend URLs must use HTTPS,
|
|
466
|
-
end in `/api`, and belong to `*.orionplace.app`. API methods, query strings, bodies,
|
|
467
|
-
authorization and cookies are forwarded. Backend statuses are retained and cookie
|
|
468
|
-
Domain attributes are removed to bind cookies to the storefront. Gateway responses
|
|
469
|
-
use `Cache-Control: no-store`, except public blog images and videos: they keep the
|
|
470
|
-
backend's `private, max-age` rule, so the browser does not download them again on
|
|
471
|
-
every page. When the network drops the connection before the backend answers, GET,
|
|
472
|
-
HEAD and Application Load requests are sent once more on a new connection; other
|
|
473
|
-
requests are never repeated. Network failures return `502`.
|
|
474
|
-
|
|
475
|
-
A changing request (POST, PUT, PATCH, DELETE) from another site is rejected with
|
|
476
|
-
`403`. A request from the page's own host or the storefront domain passes, and the
|
|
477
|
-
backend receives it with the storefront domain's origin
|
|
478
|
-
(`https://shop.example.com`), the one it accepts forms from. So a host that shows
|
|
479
|
-
the storefront through `X-Front-Domain`, such as a preview host or a local port,
|
|
480
|
-
can sign in too.
|
|
481
|
-
|
|
482
|
-
A changing request (POST, PUT, PATCH, DELETE) from another site is rejected with
|
|
483
|
-
`403`. A request from the page's own host or the storefront domain passes, and the
|
|
484
|
-
backend receives it with the storefront domain's origin
|
|
485
|
-
(`https://shop.example.com`), the one it accepts forms from. So a host that shows
|
|
486
|
-
the storefront through `X-Front-Domain`, such as a preview host or a local port,
|
|
487
|
-
can sign in too.
|
|
488
|
-
|
|
489
|
-
Browser requests use `/api/...`. For SSR, use Nuxt's `useRequestFetch()` to pass
|
|
490
|
-
the current request's domain and authentication to the same gateway. See the
|
|
491
|
-
project README for examples and cookie handling.
|
|
492
|
-
|
|
493
|
-
The module sets private `runtimeConfig.mimicFrontDomain`, adds domain `Vary`
|
|
494
|
-
headers, extends Vite's allowed hosts from `.cfg` filenames, and defaults Nitro
|
|
495
|
-
to `node-server`. It does not set a fixed public site URL or generate canonical
|
|
496
|
-
links for your pages; use the resolved request domain for your own SEO metadata.
|
|
497
|
-
|
|
498
|
-
Deploy `sitemaps` with the production server, or set an absolute `SITEMAPS_DIR`.
|
|
499
|
-
The production process reads `MIMIC_FRONT_DOMAIN` without rebuilding. Run the
|
|
500
|
-
server from the project root or explicitly point it at the configuration directory.
|
|
501
|
-
|
|
502
|
-
## Page metadata
|
|
503
|
-
|
|
504
|
-
Every supplied page sets its title, description and keywords through
|
|
505
|
-
`app/composables/useOrionplacePageSeo.ts` and Nuxt's `useSeoMeta()`.
|
|
506
|
-
The homepage prefers `init.seo`, and category pages prefer their localized SEO
|
|
507
|
-
fields. Empty values fall back to page-specific Russian, Spanish or English copy in
|
|
508
|
-
`app/utils/orionplace/pageSeo.ts`. Metadata updates with the current locale and
|
|
509
|
-
route data. The homepage retains additional backend Open Graph and Twitter tags
|
|
510
|
-
through `useHead()`. Profile and logout pages remain excluded from indexing;
|
|
511
|
-
search results retain their `noindex, follow` policy.
|
|
512
|
-
Pages with a canonical address also link the same page in the other storefront languages (`hreflang`) and set `og:type` and `og:locale`; a journal article adds its publication date (`article:published_time`) and schema.org `BlogPosting` data. The store icon (`logos.ico`) is the page's `<link rel="icon">`. An unknown `?locale` opens the default language.
|
|
513
|
-
|
|
514
|
-
List pages (journal, categories, stores) link their previous and next pages as real links (`?page=2`). Each later page has its own canonical address and a title with its page number; a journal page past the last one answers 404.
|
|
515
|
-
|
|
516
|
-
## Documentation
|
|
517
|
-
|
|
518
|
-
- [Create a Nuxt frontend](https://orionmarket.place/en/sandbox/new-project/nuxt)
|
|
519
|
-
- [Install the Nuxt package and connect your personal backend](https://orionmarket.place/en/sandbox/new-project/nuxt)
|
|
520
|
-
- [Marketplace API documentation](https://orionmarket.place/en/sandbox/)
|
|
521
|
-
- [Android app for your Nuxt storefront](https://orionmarket.place/en/sandbox/android-app)
|
|
522
|
-
|
|
523
|
-
## Development
|
|
524
|
-
|
|
525
|
-
In this repository checkout, the package demo uses its own
|
|
526
|
-
`packages/orionplace-nuxt/.env` and
|
|
527
|
-
`packages/orionplace-nuxt/sitemaps/<storefront-domain>.cfg`.
|
|
528
|
-
Set the storefront's `MIMIC_FRONT_DOMAIN` and personal backend mapping there.
|
|
529
|
-
See [local demo configuration](DEVELOPMENT.md#local-demo-configuration).
|
|
3
|
+
This package is now **[basklee-nuxt](https://www.npmjs.com/package/basklee-nuxt)**. This last release runs
|
|
4
|
+
`basklee-nuxt@latest` with the same command.
|
|
530
5
|
|
|
6
|
+
In a project made with orionplace-nuxt:
|
|
531
7
|
|
|
532
8
|
```bash
|
|
533
|
-
|
|
534
|
-
npm test
|
|
535
|
-
npm pack --dry-run
|
|
9
|
+
npx basklee-nuxt update
|
|
536
10
|
```
|
|
537
11
|
|
|
538
|
-
The
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
## Application Load starter
|
|
542
|
-
|
|
543
|
-
The CLI generates global route middleware, a shared Pinia store and the full
|
|
544
|
-
nested TypeScript contract under `app/interfaces/orionplace/`. Middleware awaits
|
|
545
|
-
`POST /api/appload` before page setup. `useOrionplaceStore()` exposes
|
|
546
|
-
initialization, profile and live endpoint discovery to pages and components.
|
|
547
|
-
`useOrionplaceAppLoad()` provides explicit initialize, refresh and reset actions.
|
|
548
|
-
`app.vue` wraps `NuxtLayout` and `NuxtPage` in the shared theme provider and
|
|
549
|
-
renders `NuxtLoadingIndicator`: a thin bar in the header text color
|
|
550
|
-
(`inverseText`) at the top of the window during navigation and storefront
|
|
551
|
-
requests (`useOrionplaceProgress()`).
|
|
552
|
-
`app/layouts/default.vue` renders the storefront header, cart preview, product
|
|
553
|
-
action feedback, preorder dialog and footer on every route; `pages/index.vue`
|
|
554
|
-
displays the home sections. A failed Application Load replaces every page with
|
|
555
|
-
the error page (HTTP 503, Retry reloads the page); unknown addresses keep 404.
|
|
556
|
-
`app/error.vue` renders `StorefrontErrorPage` for unknown addresses and unhandled
|
|
557
|
-
errors, keeping the HTTP status: 404 shows “Page not found” with Home and
|
|
558
|
-
Catalog, other statuses show “Something went wrong” with Retry and Home. Pages
|
|
559
|
-
use `noindex, nofollow`; customers never see error messages or stack traces.
|
|
560
|
-
The not-found page keeps the header and footer when Application Load succeeded;
|
|
561
|
-
otherwise, and for failures, it renders without the layout. See the
|
|
562
|
-
[error page guide](https://orionmarket.place/en/sandbox/components/nuxt/error-page).
|
|
563
|
-
`/product/:id`, `/tariffs/:slug/:id`, `/category/:id`, `/browse`, `/featured`,
|
|
564
|
-
`/journal` and `/journal/:id` load their first data while the server renders
|
|
565
|
-
the page, with
|
|
566
|
-
the visitor's cookies, so the HTML contains product names, prices, article
|
|
567
|
-
links and article text; the browser reuses that data without repeating the
|
|
568
|
-
request (`useOrionplaceServerData()`). An ID that is not a positive integer, or
|
|
569
|
-
a record that `products_search` or `blog_posts_get` does not return, answers 404
|
|
570
|
-
from the server. A failed request keeps the page with its Retry button, and a
|
|
571
|
-
failed server request is loaded again in the browser. Product cards link to
|
|
572
|
-
`/product/:id` through `provideOrionplaceProductLink()` in the default layout,
|
|
573
|
-
while `/product/:id?key=<preview key>` uses `products_preview` and lets anyone
|
|
574
|
-
with the complete seller or staff preview address view the key owner's product
|
|
575
|
-
without signing in.
|
|
576
|
-
Unpublished and option-only products show a preview notice, and the page uses
|
|
577
|
-
`noindex, nofollow`. Category tiles, banners and the category path link to `/category/:id`
|
|
578
|
-
through `provideOrionplaceCategoryLink()`. Products
|
|
579
|
-
attached to a journal article are shown as standard product cards with variants
|
|
580
|
-
and purchase controls.
|
|
581
|
-
The dark header bar combines catalog navigation with Manufacturers and Journal
|
|
582
|
-
links, search hints and borderless currency/language selectors.
|
|
583
|
-
Currency labels and amounts use `symbol_left` and `symbol_right` from Application
|
|
584
|
-
Load. If both are empty, amounts use the uppercase currency code. This formatting
|
|
585
|
-
is shared by selectors, product prices, wallet balances, cart totals and tariffs;
|
|
586
|
-
it does not convert or round amounts.
|
|
587
|
-
Its home link uses `BrandLogos` with `store.init.logos.medium`; contact data is
|
|
588
|
-
not a header dependency. Missing or failed logo images use the shared placeholder.
|
|
589
|
-
Its labels follow the storefront locale (English/Russian/Spanish). `StorefrontAccount`
|
|
590
|
-
shows guest sign-in or an authenticated profile menu with the selected currency
|
|
591
|
-
wallet balance. Its `signIn`, `signOut`, `selectProfile` and `selectWallet` events are handled
|
|
592
|
-
by the host; the generated layout opens `/profile` for sign-in (with the current
|
|
593
|
-
page in `redirect`, where the user returns after sign-in) and profile
|
|
594
|
-
selection, `/logout` for sign-out and `/wallet` for wallet selection. The component does not
|
|
595
|
-
submit credentials or create payments. Its [EN/RU preview and source downloads](https://orionmarket.place/en/sandbox/appload/nuxt/init/is_authenticated)
|
|
596
|
-
share the maintained package component. `StorefrontWishlistButton` and
|
|
597
|
-
`StorefrontCartButton` display counts from `store.counters`. Their clicks emit
|
|
598
|
-
`selectWishlist` and `selectCart` through the header without changing data;
|
|
599
|
-
the generated layout opens `/wishlist` for the wishlist button and `CartPreview` for
|
|
600
|
-
the cart button. The starter opens `CartPreview` through
|
|
601
|
-
`useOrionplaceCartPreview` and the discovered `cart_guest_modal_get` endpoint.
|
|
602
|
-
The dialog shows product images, translated names, quantities and cart-item
|
|
603
|
-
totals in the selected currency, with loading, empty and retry states. Closing
|
|
604
|
-
it cancels a pending request. Selecting a product in the preview closes it and
|
|
605
|
-
opens `/product/<id>`; selecting the full cart closes it and opens `/cart`.
|
|
606
|
-
Search opens `/browse?q=<query>`, category selection opens `/category/<id>`,
|
|
607
|
-
product selection opens `/product/<id>` and seller selection opens
|
|
608
|
-
`/sellers?seller=<id>`. Variant selection
|
|
609
|
-
replaces the full representative card and loads missing products or secondary choices through the
|
|
610
|
-
shared API client. Cart, wishlist, availability-notification and preorder events
|
|
611
|
-
run the product action controller described below.
|
|
612
|
-
See [the header contract](templates/orionplace/COMPONENTS.md#storefront-header)
|
|
613
|
-
for the supplied slots and integration boundaries.
|
|
614
|
-
It preserves custom apps and edited generated files. Generated instructions in
|
|
615
|
-
`orionplace/README.md` explain how to integrate the composable in an existing app.
|
|
616
|
-
|
|
617
|
-
### Application Load component library
|
|
618
|
-
|
|
619
|
-
The starter also supplies `ManufacturerIndex` and its
|
|
620
|
-
`useOrionplaceManufacturerIndex` controller. `/manufacturers` loads the discovered
|
|
621
|
-
manufacturer-index endpoint and renders logo previews and letter groups, with
|
|
622
|
-
alphabet switching, loading, empty and retry states. The home page links to this
|
|
623
|
-
index beside the journal. The page renders `StorefrontManufacturers`, which loads
|
|
624
|
-
the index itself. Letter and manufacturer selections are `ManufacturerIndex`
|
|
625
|
-
events; `StorefrontManufacturers` handles them by loading that letter's or that
|
|
626
|
-
manufacturer's records through `manufactures_manufactures_get`. See the
|
|
627
|
-
[component reference](https://orionmarket.place/en/sandbox/components/nuxt/manufacturer-index)
|
|
628
|
-
for its contract, live preview and source downloads.
|
|
629
|
-
|
|
630
|
-
The website [Components section](https://orionmarket.place/en/sandbox/components/nuxt)
|
|
631
|
-
sits beside Application Load and documents Header with its child components,
|
|
632
|
-
plus ProductGroup, ProductCard and its parts. Both English and Russian guides provide live
|
|
633
|
-
previews, contracts and physical source downloads.
|
|
634
|
-
|
|
635
|
-
Storefront components live under `app/components/orionplace/`, grouped by feature.
|
|
636
|
-
The [field and component catalog](templates/orionplace/COMPONENTS.md) maps each
|
|
637
|
-
initialization field to its consumers. Configuration, session flags and shared
|
|
638
|
-
counters have data references with links to the features that use them.
|
|
639
|
-
The catalog is also installed as `orionplace/COMPONENTS.md`.
|
|
640
|
-
|
|
641
|
-
The [Application Load sandbox](https://orionmarket.place/en/sandbox/appload/nuxt) renders
|
|
642
|
-
these physical components and lets you edit their input locally. Component
|
|
643
|
-
selections emit events; account, cart and subscription requests remain the host
|
|
644
|
-
application's responsibility.
|
|
645
|
-
|
|
646
|
-
### Locale selector
|
|
647
|
-
|
|
648
|
-
`app/components/orionplace/locale/MainLanguageSwitcher.vue` renders the language record
|
|
649
|
-
from `store.locales` directly. Import it without a data prop. It accepts a
|
|
650
|
-
`label` (default `Language`), `disabled` (default `false`) and `codeOnly`
|
|
651
|
-
(default `false`). Missing names
|
|
652
|
-
fall back to another translation, then the human name or code. Empty data
|
|
653
|
-
disables the selector. The store initially selects its first available language.
|
|
654
|
-
|
|
655
|
-
Flags from `flag_img` appear beside the selected language and in every dropdown
|
|
656
|
-
option that has an available image. Missing or failed images leave the language
|
|
657
|
-
name readable. The dropdown uses the shared theme, supports arrow keys and typing
|
|
658
|
-
to find a language, and closes on Escape or an outside click. Press Enter, Space
|
|
659
|
-
or Tab to confirm the highlighted option.
|
|
660
|
-
Options stay on one line. The dropdown expands within the viewport; longer names
|
|
661
|
-
use an ellipsis, with the full name available on hover.
|
|
662
|
-
|
|
663
|
-
The component gets `selectionStore` from `useOrionplaceSelectionsStore()`.
|
|
664
|
-
Selection calls `selectionStore.setLocale(code)`, updating `selectionStore.localeCode` and the
|
|
665
|
-
language’s default currency and units. It then emits `change` with the locale object. The component does not navigate or change your translation settings;
|
|
666
|
-
connect these events to your application's language handling as needed.
|
|
667
|
-
|
|
668
|
-
Setup installs Tailwind CSS 4 and its Vite plugin. Upgrade an existing Tailwind 3
|
|
669
|
-
installation first; setup rejects incompatible versions before writing files.
|
|
670
|
-
The module registers
|
|
671
|
-
`app/assets/css/orionplace.css`, which scans the generated components and pages.
|
|
672
|
-
It includes theme variables and utilities without a global CSS reset, preserving
|
|
673
|
-
your application's base styles. An existing Tailwind Vite plugin is reused.
|
|
674
|
-
It requires no Sass or translation plugin. Keyboard focus changes the existing border and background;
|
|
675
|
-
controls do not use outlines. The
|
|
676
|
-
[locale sandbox](https://orionmarket.place/en/sandbox/appload/nuxt/init/locale)
|
|
677
|
-
previews the same component and provides its source and locale types.
|
|
678
|
-
|
|
679
|
-
### Themes
|
|
680
|
-
|
|
681
|
-
Define any number of named themes in `app/themes/orionplace.ts`. Components inherit
|
|
682
|
-
semantic colors from the active theme. Setup includes the shared
|
|
683
|
-
[theme guide](templates/orionplace/THEMES.md) as `orionplace/THEMES.md` in the
|
|
684
|
-
customer project; it covers adding themes, selecting the default and applying them.
|
|
685
|
-
|
|
686
|
-
### Session and CSRF cookies
|
|
687
|
-
|
|
688
|
-
Application Load establishes the guest/customer session and CSRF cookie through HTTP
|
|
689
|
-
`Set-Cookie` headers, not through `page_data.init`. The browser handles the signed
|
|
690
|
-
HttpOnly `sessionid` cookie; never parse, rewrite, log or store its value in Pinia
|
|
691
|
-
or localStorage. The readable `csrftoken` supplies `X-CSRFToken` for later protected
|
|
692
|
-
requests through the same-origin `/api/` gateway with credentials enabled. Read
|
|
693
|
-
the CSRF cookie again for every action because login can rotate it.
|
|
694
|
-
|
|
695
|
-
`useOrionplaceApi()` supplies the per-application `OrionplaceApi` client used by
|
|
696
|
-
Application Load and browser requests. It resolves later endpoints from
|
|
697
|
-
current discovery, reads CSRF per request and renews a missing token. A
|
|
698
|
-
CSRF rejection (HTTP 419, or HTTP 403 with `page_data.csrf: false`) renews the
|
|
699
|
-
token for the next action and returns the failed request. The customer must
|
|
700
|
-
submit again; the client never repeats a failed request automatically. Components send discovered requests in the browser. Page data
|
|
701
|
-
that the server render needs goes through `useOrionplaceServerApi()`, the same
|
|
702
|
-
class with the same transport, usually through `useOrionplaceServerData()`.
|
|
703
|
-
The global route middleware passes `to.query.locale` to the first Application
|
|
704
|
-
Load request. Later requests use the selected locale held by the store.
|
|
705
|
-
During SSR the transport sends the incoming cookies plus every cookie the
|
|
706
|
-
backend set earlier in the same render (`app/utils/orionplace/serverCookies.ts`),
|
|
707
|
-
and relays each raw response `Set-Cookie` separately to the browser. That
|
|
708
|
-
cookie list belongs to one render and is never shared between visitors.
|
|
709
|
-
|
|
710
|
-
Use `POST /api/csrf_renew` with `{}` to renew CSRF, then re-read the cookie.
|
|
711
|
-
The backend signals CSRF rejection with HTTP `419` from Django views, or with
|
|
712
|
-
HTTP `403` and `page_data.csrf: false` from API endpoints; a `403` without that
|
|
713
|
-
flag may mean permissions or origin rejection. Do not automatically
|
|
714
|
-
replay mutations. After confirmed login/logout, reset and refresh Application Load.
|
|
715
|
-
Those store actions update data; they do not authenticate or delete cookies.
|
|
716
|
-
|
|
717
|
-
HTTP `401` means the request has no signed-in session. When it arrives while
|
|
718
|
-
`store.isAuthenticated` is `true`, the client calls the store's `endSession()`
|
|
719
|
-
once: the profile, wallet, authenticated discovery, cart/wishlist counters and
|
|
720
|
-
account values of known products are removed at once, then Application Load
|
|
721
|
-
reloads for the guest session. The failed request is not repeated and no
|
|
722
|
-
sign-in dialog opens; a guest `401`, `403`, CSRF rejection or network failure
|
|
723
|
-
stays an ordinary request error.
|
|
724
|
-
|
|
725
|
-
See the [cookie lifecycle and browser example](https://orionmarket.place/en/sandbox/appload/nuxt#session-cookies)
|
|
726
|
-
for exact source references and a copyable component.
|
|
727
|
-
|
|
728
|
-
## Update an existing project
|
|
729
|
-
|
|
730
|
-
After the initial setup, use one command to get the latest package and components:
|
|
731
|
-
|
|
732
|
-
```bash
|
|
733
|
-
npx orionplace-nuxt update
|
|
734
|
-
```
|
|
735
|
-
|
|
736
|
-
It runs the latest CLI, adds new template files, refreshes unchanged generated
|
|
737
|
-
files, updates the package dependency and runs `npm install` to synchronize the
|
|
738
|
-
lockfile and installed dependencies. Edited files are preserved and listed in the
|
|
739
|
-
output. Review their new versions under `node_modules/orionplace-nuxt/templates`
|
|
740
|
-
or `runtime` and merge your changes manually when needed. Removed upstream files
|
|
741
|
-
are retained locally; the updater does not delete customer source.
|
|
742
|
-
|
|
743
|
-
Domain mappings, domain settings and `.env` remain unchanged. The command does
|
|
744
|
-
not deploy your application: restart development, or rebuild and redeploy the
|
|
745
|
-
production frontend after updating.
|
|
746
|
-
|
|
747
|
-
```bash
|
|
748
|
-
npx orionplace-nuxt update --dry-run
|
|
749
|
-
npm run orionplace:update
|
|
750
|
-
```
|
|
751
|
-
|
|
752
|
-
Dry-run downloads the latest CLI into npm's cache to inspect its templates but
|
|
753
|
-
leaves project files and dependencies unchanged. `update --local` applies the
|
|
754
|
-
version of the CLI being executed instead of fetching the latest CLI; it still
|
|
755
|
-
installs project dependencies. Use this only when intentionally selecting a version.
|
|
756
|
-
|
|
757
|
-
For a project on 0.1.2 or older, bootstrap the new command once:
|
|
758
|
-
|
|
759
|
-
```bash
|
|
760
|
-
npx --yes orionplace-nuxt@latest update
|
|
761
|
-
```
|
|
762
|
-
|
|
763
|
-
Updates require the existing `orionplace/settings.json` and `.generated.json`.
|
|
764
|
-
Conflicting untracked files stop the source update before any writes. If dependency
|
|
765
|
-
installation fails after source generation, run `npm install` and retry `update`.
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
## Representative product actions
|
|
769
|
-
|
|
770
|
-
The Nuxt header forwards cart, wishlist, availability-notification and preorder
|
|
771
|
-
intents. The generated layout binds `useOrionplaceProductActions` to the shared API
|
|
772
|
-
client; confirmed responses update the product and `store.counters`. Controls
|
|
773
|
-
stay visible while disabled, and the catalog stays open. At quantity one the
|
|
774
|
-
trash control removes the confirmed cart item. Secondary variants must be
|
|
775
|
-
selected before confirming an addition, subscription or preorder in the picker.
|
|
776
|
-
Guest preorder collects contact details. Wishlist controls require authentication;
|
|
777
|
-
notifications can request sign-in, and subscription requires profile email. The
|
|
778
|
-
generated storefront supplies sign-in and personal details at `/profile`. Failed mutations retain confirmed
|
|
779
|
-
data; a failed follow-up refresh retries only that read. Components previews
|
|
780
|
-
record actions without changing the reader's cart or session.
|
|
781
|
-
|
|
782
|
-
### Component compositions and source
|
|
783
|
-
|
|
784
|
-
The Components overview renders the maintained Header and StorefrontHome.
|
|
785
|
-
Dashed outlines identify children; child guides retain their real parent context.
|
|
786
|
-
Home links to its categories, banners, events and ProductGroup children.
|
|
787
|
-
ProductGroup links to ProductCard and its parts. Component guides finish with a
|
|
788
|
-
Related pages section: links to the parent composition, related controls and
|
|
789
|
-
Application Load fields, each with a short description. This is the last entry
|
|
790
|
-
in the right-hand outline; parent links are not repeated below the page title.
|
|
791
|
-
Links preserve the selected language and framework. AppLoad selector previews
|
|
792
|
-
remain standalone. Source lists contain the selected `.vue` and its primary
|
|
793
|
-
physical interface when one exists; imports remain supplied by the package.
|
|
794
|
-
|
|
795
|
-
MainSearch owns its input/button styling. Locale and currency `codeOnly`
|
|
796
|
-
controls own their compact layout and hidden accessible labels; Header supplies
|
|
797
|
-
layout and defaults. `OrionplaceSelect.compact` defaults to false.
|
|
798
|
-
|
|
799
|
-
Header slots `logo`, `search`, `locale`, `currency`, `account`, `wishlist`, `cart`
|
|
800
|
-
and `catalog` preserve surrounding layout. Logo receives the localized home
|
|
801
|
-
`label`. Search receives `label`, `buttonLabel`, `disabled`; selectors receive
|
|
802
|
-
`label`, `codeOnly: true`, `disabled`; account receives `disabled`; wishlist/cart
|
|
803
|
-
receive `disabled` and `compact: true`; catalog receives no props. Slot replacements
|
|
804
|
-
must bind their own events. Replacing `actions` replaces its account, wishlist and
|
|
805
|
-
cart slots.
|
|
806
|
-
Account's `balance` slot receives `label` and `compact: true` at both wallet
|
|
807
|
-
locations, preserving the surrounding wallet action.
|
|
808
|
-
|
|
809
|
-
## Storefront home sections
|
|
810
|
-
|
|
811
|
-
`StorefrontHome` follows the header with `MainBanner`, `CategoryGroup`, ordinary
|
|
812
|
-
products, discounts, new products, `EventsBlock` and featured products. Empty sections are
|
|
813
|
-
omitted. Category tiles use public catalog records, localized names and logo
|
|
814
|
-
images. Category count and ordering follow `visual_settings.front_categories_*`:
|
|
815
|
-
`order` sorts public roots by `ordering`, `views` includes public descendants and
|
|
816
|
-
sorts by `c_views`, and `do_not_show` hides the section. Non-shortcut roots are
|
|
817
|
-
preferred; when every public root is a shortcut, all public roots are included.
|
|
818
|
-
Equal values preserve response order; zero count includes all candidates.
|
|
819
|
-
|
|
820
|
-
`store.homeProductSections` derives four independent blocks. Ordinary products
|
|
821
|
-
exclude discounted, new and featured IDs. Discounts use `discount < 1`; New uses
|
|
822
|
-
`flags.flag_is_new`. A product may appear in both Discounts and New. Featured uses
|
|
823
|
-
only `store.featured` and follows events. Empty blocks are hidden, and source
|
|
824
|
-
order is preserved. Each section passes its own `productIds` to the same cards.
|
|
825
|
-
|
|
826
|
-
If AppLoad has no new products, the generated home page uses
|
|
827
|
-
`useOrionplaceHomeProducts()` after mounting to call the available `products_search` endpoint with
|
|
828
|
-
`filters: { only_new: true }` and `paginate: { page: 1, pp_items: 20 }`.
|
|
829
|
-
`store.setHomeNewProducts(products, sellers)` stores the confirmed products and IDs.
|
|
830
|
-
A failed request can be retried explicitly. AppLoad refresh/reset clears the
|
|
831
|
-
supplemental IDs and cancels stale results. The home component itself does not
|
|
832
|
-
request products. The [Home guide](https://orionmarket.place/en/sandbox/components/nuxt/home#groups)
|
|
833
|
-
documents the rules and lets readers edit existing products in its preview.
|
|
834
|
-
|
|
835
|
-
`productLimit` defaults to 12 per section. More reveals the rest of the
|
|
836
|
-
loaded section without a request. Refresh and prop changes restore the
|
|
837
|
-
limit. In the Featured section, More is a link to `/featured`: an ordinary
|
|
838
|
-
click emits `selectFeatured` and the generated page opens that route. `ProductGroup.limit` defaults to 0 (all records). Variant and purchase
|
|
839
|
-
controls remain the supplied ProductCard controls. Home forwards their typed
|
|
840
|
-
events and the generated page binds the existing product controllers. Product
|
|
841
|
-
selection opens `/product/<id>` and seller selection opens `/sellers?seller=<id>`.
|
|
842
|
-
Category tiles, catalog actions and linked banners open `/category/<id>`;
|
|
843
|
-
the category view loads products through the discovered `products_search` endpoint.
|
|
844
|
-
Selecting an event with a `promo` opens `EventEnrollmentDialog`; enrollment is
|
|
845
|
-
sent with `profile_event_subscribe` only after its explicit confirmation. Events
|
|
846
|
-
without `promo` do nothing in the generated page. A guest's selection opens the
|
|
847
|
-
sign-in page at once; it returns to `/?event=<id>`, and the home page then opens
|
|
848
|
-
the dialog for that event.
|
|
849
|
-
|
|
850
|
-
Banners and events use `format: 'auto'` by default, which follows the window
|
|
851
|
-
width and picks the mobile, tablet, wide or desktop image. An explicit format
|
|
852
|
-
stays fixed.
|
|
853
|
-
MainBanner includes every image in response order, with manual wraparound arrows
|
|
854
|
-
and no autoplay. A missing format falls back to the first non-empty desktop,
|
|
855
|
-
wide, tablet or mobile set. Language, data and format changes reset the slide.
|
|
856
|
-
A null or omitted `category` renders an inert image with a normal cursor. A
|
|
857
|
-
category ID enables the pointer cursor and emits the banner through `select`;
|
|
858
|
-
the host handles the category navigation. Arrow controls only change slides.
|
|
859
|
-
EventsBlock uses the same full-width image frame as MainBanner and keeps the
|
|
860
|
-
image proportions inside its reserved height. One event is visible at a time, in response
|
|
861
|
-
order. Multiple events show a counter and manual wraparound arrows; there is no
|
|
862
|
-
autoplay. Language, format and event-data changes reset to the first event. Arrow
|
|
863
|
-
buttons only change the visible event; clicking its image emits that event object.
|
|
864
|
-
Event images fall back through desktop, wide, tablet, mobile and account.
|
|
865
|
-
Other languages and modal-only events are not substituted into layout sections.
|
|
866
|
-
|
|
867
|
-
Home slots are `banners`, `categories`, `products` and `events`. The products
|
|
868
|
-
slot receives `section`, `productIds`, `collection`, `disabled` and the current
|
|
869
|
-
`limit`; preserve `productIds` to retain each section’s grouping. The other slots
|
|
870
|
-
receive no props. Slots render only when their section has data. Replacement
|
|
871
|
-
content owns its event bindings. Source and child guides are under
|
|
872
|
-
[Storefront home](https://orionmarket.place/en/sandbox/components/nuxt/home),
|
|
873
|
-
[Categories](https://orionmarket.place/en/sandbox/components/nuxt/categories),
|
|
874
|
-
[Banners](https://orionmarket.place/en/sandbox/components/nuxt/banners) and
|
|
875
|
-
[Events](https://orionmarket.place/en/sandbox/components/nuxt/events), with matching
|
|
876
|
-
Russian routes. They show the physical components in their parent with dashed
|
|
877
|
-
highlights and link back to Application Load.
|
|
878
|
-
|
|
879
|
-
### Visual settings, search filters and blog previews
|
|
880
|
-
|
|
881
|
-
[Visual settings](https://orionmarket.place/en/sandbox/appload/nuxt/init/visual_settings)
|
|
882
|
-
are consumed by the supplied Nuxt components:
|
|
883
|
-
|
|
884
|
-
- [CatalogHeader](https://orionmarket.place/en/sandbox/components/nuxt/catalog)
|
|
885
|
-
uses `menu_image` for shortcut thumbnails and `catalog_menu_image` inside its catalog panel.
|
|
886
|
-
- [ProductGroup](https://orionmarket.place/en/sandbox/components/nuxt/product-group)
|
|
887
|
-
becomes a swipeable row on a narrow screen. `mobile_show_arrows` controls its previous/next
|
|
888
|
-
buttons when the row overflows. Desktop grids and promotion carousels are unaffected.
|
|
889
|
-
Optional `productIds` resolves an ordered set through `productStore.getProduct`; an omitted
|
|
890
|
-
value uses the AppLoad collection, and an empty array displays no cards.
|
|
891
|
-
- [SearchFilters](https://orionmarket.place/en/sandbox/components/nuxt/search-filters)
|
|
892
|
-
uses `show_filter_counters` for counts supplied in `selects` and `variants`.
|
|
893
|
-
`browseStore.preserveSearchFacets(page_data)` retains the initial options and price
|
|
894
|
-
bounds from `products_search`; `browseStore.setSearchFacets` explicitly replaces them
|
|
895
|
-
for a new scope or editor. Selection updates `browseStore.searchFilters` before
|
|
896
|
-
`change` emits copied ID arrays and scalar fields. Subsequent narrowed responses
|
|
897
|
-
update products, leaving the original selectors available. `disabled` prevents
|
|
898
|
-
selection; there are no slots.
|
|
899
|
-
- `single_seller_mode` hides
|
|
900
|
-
[ProductCardSeller](https://orionmarket.place/en/sandbox/components/nuxt/productCardSeller)
|
|
901
|
-
and seller filters; manufacturer options remain visible.
|
|
902
|
-
- [BlogPostGroup](https://orionmarket.place/en/sandbox/components/nuxt/blog) uses
|
|
903
|
-
`blog_view_type`: `EBlogViewType.PORTRAIT` is a grid, `EBlogViewType.LIST` is a list,
|
|
904
|
-
and `EBlogViewType.CUSTOM` starts with a lead card, followed by groups of up to
|
|
905
|
-
three posts. Unknown values fall back to portrait; numeric strings are accepted.
|
|
906
|
-
`store.setBlogPosts(page_data.posts.data)` supplies previews from `blog_posts_get`.
|
|
907
|
-
[BlogPostCard](https://orionmarket.place/en/sandbox/components/nuxt/blog-post) takes
|
|
908
|
-
`postId` and `layout` (portrait by default, list or hero), reads the post from
|
|
909
|
-
the store, and shows its localized title, plain-text preview, first ordered image
|
|
910
|
-
and reading time. The group forwards its `select` event with `IBlogPostPreview`.
|
|
911
|
-
The application opens the article; neither component loads content or changes access.
|
|
912
|
-
The group has no props; neither component has slots. Empty collections show an empty state.
|
|
913
|
-
|
|
914
|
-
AppLoad refresh and reset clear search facets, selected filters and blog posts.
|
|
915
|
-
The generated `/browse?q=...` and `/browse?view=blog` pages load public responses
|
|
916
|
-
through endpoint discovery, handle pending/error/retry states and pagination.
|
|
917
|
-
Search requires at least three characters. Search connects the shared product action and variant handlers; article and
|
|
918
|
-
product-detail navigation remain host responsibilities.
|
|
919
|
-
The component guides include editable settings, real components and their maintained
|
|
920
|
-
source/downloads in English and Russian. Blog previews start empty when the backend
|
|
921
|
-
has no posts; the JSON editor accepts `IBlogPostPreview[]`.
|
|
922
|
-
|
|
923
|
-
## Category page
|
|
924
|
-
|
|
925
|
-
`app/components/orionplace/categories/StorefrontCategory.vue` renders a public
|
|
926
|
-
category resolved by `categoryId`, its breadcrumb path, immediate public children,
|
|
927
|
-
search filters and the supplied result IDs. Names and plain-text descriptions use
|
|
928
|
-
localized catalog fields; a missing/private category shows the not-found state.
|
|
929
|
-
|
|
930
|
-
`app/pages/category/[id].vue` binds it to `/category/:id`. Home tiles, catalog
|
|
931
|
-
category actions and linked banners open that route. The shared
|
|
932
|
-
`app/layouts/default.vue` retains the header and purchase feedback across routes;
|
|
933
|
-
`useOrionplaceStorefront()` supplies its product-action and variant controllers.
|
|
934
|
-
A missing/private category opens the storefront error page (`app/error.vue`)
|
|
935
|
-
with HTTP 404; a failed Application Load opens it with HTTP 503 and Retry.
|
|
936
|
-
|
|
937
|
-
The category page loads the first result page during the server render with
|
|
938
|
-
`loadProductSearchSnapshot()` and passes it to `useOrionplaceCategoryProducts()`,
|
|
939
|
-
which shows it without another request. Later pages and filters call
|
|
940
|
-
`products_search` in the browser, with `filters.categories` fixed to the
|
|
941
|
-
selected category and its public descendants. Category changes, filter reset and AppLoad refresh
|
|
942
|
-
clear filters and restart page 1. Filter changes also restart page 1. Defined
|
|
943
|
-
pagination fields merge with the previous result; omitted metadata is retained.
|
|
944
|
-
Pagination scrolls to the top. Requests are cancelled on replacement/unmount, and
|
|
945
|
-
late responses cannot replace current results. Errors expose an explicit retry.
|
|
946
|
-
Search products are cached with `setProduct`; AppLoad collections stay unchanged.
|
|
947
|
-
|
|
948
|
-
The component accepts `categoryId`, `productIds` (empty by default), `page` (1),
|
|
949
|
-
optional `pages` and `total`, plus `hasNext`, `pending`, `failed`, `loaded` and
|
|
950
|
-
`productActionsDisabled` (all false by default). It does not issue requests or
|
|
951
|
-
replace missing search results with home products. It emits `selectHome`,
|
|
952
|
-
`selectCategory`, `changeFilters`, `clearFilters`, `changePage`, `retry` and the
|
|
953
|
-
same typed product events as the home composition. There are no slots.
|
|
954
|
-
|
|
955
|
-
`CategoryGroup.parentId` shows immediate public children in catalog order;
|
|
956
|
-
omitting it preserves the home category settings. `SearchFilters.hideCategories`
|
|
957
|
-
is false by default and hides the category facet for a fixed category scope.
|
|
958
|
-
`ProductGroup.layout` defaults to `responsive` (desktop grid/mobile swipe row).
|
|
959
|
-
The category uses `grid`, which stays a vertical grid on a narrow screen and
|
|
960
|
-
shows no horizontal scroll arrows. Filters collapse behind a button in a narrow
|
|
961
|
-
result container; category navigation remains available while products load.
|
|
962
|
-
|
|
963
|
-
The [Category page guide](https://orionmarket.place/en/sandbox/components/nuxt/category-page)
|
|
964
|
-
contains the physical composition, dashed child boundaries, local preview
|
|
965
|
-
controls, field/input/event contracts and exact component/interface downloads.
|
|
966
|
-
The matching Russian guide uses `/ru/sandbox/components/nuxt/category-page`.
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
## Search, logout and preorder flows
|
|
970
|
-
|
|
971
|
-
The [search results component](https://orionmarket.place/en/sandbox/components/nuxt/search-results)
|
|
972
|
-
serves `/browse?q=...` and the category result area. It renders initial loading
|
|
973
|
-
placeholders, a recoverable empty result, error/retry, totals and pagination.
|
|
974
|
-
Changing the URL query starts a fresh search, including changes on an already
|
|
975
|
-
open browse page. Product actions and variant replacement use the same handlers
|
|
976
|
-
as home and category cards. Search requires at least three characters. The blog
|
|
977
|
-
alias `/browse?view=blog` redirects to `/journal`.
|
|
978
|
-
|
|
979
|
-
The generated `/featured` page renders the same results with
|
|
980
|
-
`useOrionplaceFeaturedProducts()` from
|
|
981
|
-
`app/composables/useOrionplaceFeaturedProducts.ts`. It adds the fixed
|
|
982
|
-
`only_featured: true` filter to every `products_search` request. The filter
|
|
983
|
-
panel does not show it; selected filters narrow the featured products, while
|
|
984
|
-
Clear and pagination keep it. The backend returns featured products only to a
|
|
985
|
-
signed-in customer, so a guest sees a short note that recommendations appear
|
|
986
|
-
after sign-in; the header's Login returns to `/featured`.
|
|
987
|
-
`ProductSearchResults.emptyDescription` replaces the
|
|
988
|
-
empty-result hint on that page. Application Load `init.featured` remains the
|
|
989
|
-
short home selection; the page loads the full list a page at a time.
|
|
990
|
-
|
|
991
|
-
`useOrionplaceProductSearch()` in `app/composables/useOrionplaceProductSearch.ts`
|
|
992
|
-
calls `products_search`. Components read each domain through its store hook:
|
|
993
|
-
`useOrionplaceSelectionsStore()`, `useOrionplaceCatalogStore()`,
|
|
994
|
-
`useOrionplaceProductsStore()` or `useOrionplaceBrowseStore()`.
|
|
995
|
-
`app/stores/orionplace.ts` owns Application Load and session changes and retains
|
|
996
|
-
a compatibility API for existing integrations. Smaller Pinia stores own the data: `orionplaceSelections.ts`
|
|
997
|
-
(language, currency and units), `orionplaceCatalog.ts` (catalog and tariffs),
|
|
998
|
-
`orionplaceProducts.ts` (products, variants and counters), and
|
|
999
|
-
`orionplaceBrowse.ts` (search and journal state). Each file is under
|
|
1000
|
-
`app/stores/` in the generated project. The stores share the current Pinia
|
|
1001
|
-
instance and preview scope, so separate server requests and documentation
|
|
1002
|
-
previews have separate data. Application Load refresh clears dependent results
|
|
1003
|
-
while preserving available selections; reset clears them all.
|
|
1004
|
-
|
|
1005
|
-
The search flow fills these values in the browse and product stores:
|
|
1006
|
-
|
|
1007
|
-
| Store value | How it is filled |
|
|
1008
|
-
| --- | --- |
|
|
1009
|
-
| `browseStore.searchFacets` | `preserveSearchFacets()` retains `page_data.selects` and `page_data.variants` from a successful search response. |
|
|
1010
|
-
| `browseStore.searchFilters` | `SearchFilters` writes selected conditions before emitting `change`. |
|
|
1011
|
-
| `productStore.productUpdates.products` | `setProduct()` saves each item from `page_data.products.data` by ID. Cards read it through `getProduct()`. |
|
|
1012
|
-
|
|
1013
|
-
The pages pass result IDs, pagination and loading state from the composable to
|
|
1014
|
-
`ProductSearchResults` as inputs.
|
|
1015
|
-
|
|
1016
|
-
The optional second argument of `useOrionplaceProductSearch()` accepts a
|
|
1017
|
-
`request(body, signal)` callback for an existing API client. It must return the
|
|
1018
|
-
validated `products_search` page data and reject failed requests. Without it,
|
|
1019
|
-
the supplied API client resolves `products_search` from Application Load. Set
|
|
1020
|
-
`scrollToTop: false` when the results are a section further down the page, then
|
|
1021
|
-
call `scrollToPaginatedList()` from `app/utils/orionplace/paginationScroll.ts`
|
|
1022
|
-
with that section after a page change. The seller page does this for its
|
|
1023
|
-
products, so pagination returns to the products heading.
|
|
1024
|
-
|
|
1025
|
-
`useOrionplaceProductSearch` preserves the first confirmed selector set for the
|
|
1026
|
-
current query/category. Further filters, empty results and pagination do not
|
|
1027
|
-
replace options, colors, counts or price bounds with narrowed responses. New
|
|
1028
|
-
queries, categories and AppLoad refreshes reset that scope; Clear keeps
|
|
1029
|
-
its original selectors. Superseded requests are cancelled and ignored.
|
|
1030
|
-
|
|
1031
|
-
Category, search, featured and seller lists keep their result page and
|
|
1032
|
-
filters in the URL as `?page=2&filters={...}` (JSON of the filter selection).
|
|
1033
|
-
The composable replaces the current history entry on each change, so the
|
|
1034
|
-
browser's Back button from a product, and a reload, open the same list, while
|
|
1035
|
-
Back from the list still leaves it in one step. Page loads read the same
|
|
1036
|
-
query through `productListLocationFromQuery()` in
|
|
1037
|
-
`app/utils/orionplace/productListLocation.ts`, which accepts only plain filter
|
|
1038
|
-
values within fixed limits. A list opened this way on a later page or with
|
|
1039
|
-
filters also requests the unfiltered first page once, so the filter panel
|
|
1040
|
-
keeps every choice. Pass `rememberInAddress: false` to keep a list out of the
|
|
1041
|
-
URL. The React and Svelte packages do the same in `useProductSearch()` and
|
|
1042
|
-
`useOrionplaceProductSearch()`.
|
|
1043
|
-
|
|
1044
|
-
`SearchFilters` supplies cumulative ID arrays and scalar price, discount and
|
|
1045
|
-
rating fields. Currency-keyed `selects.measures.min_price` and `max_price` supply
|
|
1046
|
-
the price range; Apply or a committed slider change emits `price_from`,
|
|
1047
|
-
`price_to` and `price_currency`. Selecting the full range removes the price
|
|
1048
|
-
constraint. Currency changes clear only price constraints. Color values render
|
|
1049
|
-
beside variant labels. Minimum discount uses `price_discount_from`; product/seller
|
|
1050
|
-
ratings and review availability use the corresponding API filters. Original
|
|
1051
|
-
counts describe the initial scope, not the narrowed result. Product grids use
|
|
1052
|
-
fewer columns as the container narrows. Mobile home
|
|
1053
|
-
rows retain their existing swipe behavior.
|
|
1054
|
-
|
|
1055
|
-
The [preorder dialog](https://orionmarket.place/en/sandbox/components/nuxt/preorder-dialog)
|
|
1056
|
-
is `app/components/orionplace/products/ProductPreorderDialog.vue`, nested under
|
|
1057
|
-
Product actions in Components. The default layout opens it for the card's
|
|
1058
|
-
`preorder` event. It shows the product and price; guests provide email or phone.
|
|
1059
|
-
`submit` emits `{ product, email, phone }`, with trimmed contact strings. The host
|
|
1060
|
-
checks eligibility, calls `preorders_create`, and closes only after success.
|
|
1061
|
-
Pending requests disable resubmission and dismissal. Errors remain by the form.
|
|
1062
|
-
`modal` defaults to true; false renders the same dialog within its container.
|
|
1063
|
-
Both storefront and documentation product previews use this physical component.
|
|
1064
|
-
|
|
1065
|
-
The [sign-out component](https://orionmarket.place/en/sandbox/components/nuxt/logout)
|
|
1066
|
-
is `app/components/orionplace/account/StorefrontLogout.vue`, under Profile menu.
|
|
1067
|
-
The default layout opens `/logout` after `signOut`. The route shows progress,
|
|
1068
|
-
uses `profile_logout` through the shared API client after mounting, refreshes
|
|
1069
|
-
AppLoad after confirmation and replaces the route with the localized home page.
|
|
1070
|
-
Failed logout leaves confirmed account data intact. Failed guest initialization
|
|
1071
|
-
after successful logout retries only AppLoad, without repeating the mutation.
|
|
1072
|
-
The presentation component emits `retry` and `selectHome`; its documentation
|
|
1073
|
-
preview never signs out the reader.
|
|
1074
|
-
|
|
1075
|
-
These components' Russian guides use the matching `/ru/sandbox/components/nuxt/`
|
|
1076
|
-
URLs. They include real composition previews, dashed child boundaries, state
|
|
1077
|
-
controls, event contracts, related references and physical source downloads.
|
|
1078
|
-
|
|
1079
|
-
## Personal profile, footer and stable layout
|
|
1080
|
-
|
|
1081
|
-
The supplied Nuxt storefront includes `/profile` with personal details, avatar,
|
|
1082
|
-
verified email, optional email-notification and email-language preferences, password management,
|
|
1083
|
-
phone sign-in/registration and navigation to `/logout`. Account requests use the
|
|
1084
|
-
shared named API client, which sends the selected storefront language as `lang`;
|
|
1085
|
-
registration saves it as the account's initial email-notification language.
|
|
1086
|
-
Avatar upload uses multipart. Data changes only after confirmation. See the
|
|
1087
|
-
[profile guide](https://orionmarket.place/en/sandbox/components/nuxt/profile)
|
|
1088
|
-
and its [Russian version](https://orionmarket.place/ru/sandbox/components/nuxt/profile).
|
|
1089
|
-
|
|
1090
|
-
The sign-in and registration form (`ProfileSignIn`) appears only on the
|
|
1091
|
-
`/profile` page. Header Login links there. A guest's click on an action that
|
|
1092
|
-
needs an account (a review, reaction or reply, a blog comment, the wishlist
|
|
1093
|
-
heart, an availability notification, Checkout in the cart, a plan's Subscribe
|
|
1094
|
-
or Try, an event) opens `/profile?locale=<locale>&redirect=<current page>` at
|
|
1095
|
-
once through `useOrionplaceSignIn().requireSignIn()` in
|
|
1096
|
-
`app/composables/useOrionplaceSignIn.ts`, with no separate sign-in notice.
|
|
1097
|
-
Background requests and an ended session never navigate.
|
|
1098
|
-
Account pages (`/orders`, `/wallet`, `/addresses`, `/subscriptions`, `/tickets`,
|
|
1099
|
-
`/activity`, `/wishlist`) declare the `orionplace-account` route middleware in
|
|
1100
|
-
`app/middleware/orionplace-account.ts`: after Application Load confirms a guest
|
|
1101
|
-
session, it replaces the page with that sign-in address. A pending or failed
|
|
1102
|
-
Application Load keeps the page, and no dialog opens automatically.
|
|
1103
|
-
|
|
1104
|
-
After the final sign-in step, a ring spinner and a moving progress line replace
|
|
1105
|
-
the form while Application Load refreshes; the top loading bar runs and screen
|
|
1106
|
-
readers receive “Signing in…”. With reduced motion, both indicators stay still.
|
|
1107
|
-
The profile page then opens the `redirect` page, or the home page when it is
|
|
1108
|
-
missing, and keeps the indicator until that page opens.
|
|
1109
|
-
`app/utils/orionplace/signInReturn.ts` accepts only paths on the same storefront
|
|
1110
|
-
that start with a single `/`; `/profile`, `/logout` and external addresses open
|
|
1111
|
-
the home page instead. If the refresh fails, the form shows an error with Retry,
|
|
1112
|
-
which refreshes Application Load without resending credentials.
|
|
1113
|
-
Returned field errors stay beside their inputs and `form_errors.__all__` stays
|
|
1114
|
-
in the general error notice, including after a development module reload. The
|
|
1115
|
-
generic retry message appears only when no structured API error reaches the
|
|
1116
|
-
form.
|
|
1117
|
-
|
|
1118
|
-
Messages share one square pattern from `components/orionplace/shared/features.css`:
|
|
1119
|
-
`op-notice op-notice-error` uses the danger colors, an error icon and
|
|
1120
|
-
`role="alert"`; `op-notice op-notice-success` uses the success colors, a check
|
|
1121
|
-
icon and `role="status"`; `op-notice op-notice-attention` uses the attention
|
|
1122
|
-
colors and a warning icon for a step still to complete, such as choosing a
|
|
1123
|
-
delivery method; plain `op-notice` is neutral information. Pending work shows
|
|
1124
|
-
the top loading bar from `app/app.vue` and a visually hidden `role="status"`
|
|
1125
|
-
message instead of a status strip. Field errors stay as red text beside their inputs. Required fields show a
|
|
1126
|
-
red `*` directly after the label text.
|
|
1127
|
-
|
|
1128
|
-
The default layout renders the [footer](https://orionmarket.place/en/sandbox/components/nuxt/footer)
|
|
1129
|
-
with real store categories, home-section anchors, profile/journal navigation,
|
|
1130
|
-
a contact-page link, a `/privacy` link and social links. On `/contact`, `StorefrontContact` places
|
|
1131
|
-
company details (address, `tel:` phone link, registration numbers with copy
|
|
1132
|
-
buttons and social links) in a column beside the bordered message-form panel;
|
|
1133
|
-
the columns stack on narrow screens and empty details are hidden. `/privacy`
|
|
1134
|
-
shows the store's privacy policy (`StorefrontPrivacy`, texts in
|
|
1135
|
-
`app/utils/orionplace/privacyLabels.ts`) with the operator's details; on the
|
|
1136
|
-
website the layout's `CookieNotice` links its `#cookies` section until the
|
|
1137
|
-
visitor dismisses it.
|
|
1138
|
-
The home banner spans the available viewport
|
|
1139
|
-
width without a frame. Its media area keeps the same proportions at every width; the image fills the
|
|
1140
|
-
area without distortion and crops its edges when needed. Event media keeps its
|
|
1141
|
-
own reserved proportions, which differ on a narrow screen.
|
|
1142
|
-
|
|
1143
|
-
Search/category filtering keeps current cards during requests and reserves the
|
|
1144
|
-
results area's height when a response is shorter. Product variant replacement
|
|
1145
|
-
retains card height. Width changes release these reserves for responsive layout;
|
|
1146
|
-
a new search scope resets its reserve. Stable scrollbar space avoids horizontal
|
|
1147
|
-
shifts. Initial search loading uses 12 skeletons. The wishlist heart appears
|
|
1148
|
-
for every visitor, including compact catalog representatives; a guest's click
|
|
1149
|
-
opens the sign-in page.
|
|
1150
|
-
|
|
1151
|
-
The React and Svelte packages supply the corresponding storefront and account UI.
|
|
1152
|
-
|
|
1153
|
-
## Customer API storefront sections
|
|
1154
|
-
|
|
1155
|
-
The Nuxt starter includes native product details/reviews, cart and checkout,
|
|
1156
|
-
orders and downloads, support conversations, account addresses, wallet,
|
|
1157
|
-
search history, sign-in history, promotion codes, wishlist/availability alerts,
|
|
1158
|
-
journal/comments, contact form, email unsubscribe, event enrollment and
|
|
1159
|
-
manufacturer/seller/store/catalog directories. A seller page shows the seller's
|
|
1160
|
-
photos, products and the reviews of all their products. `/tariffs` lists subscription
|
|
1161
|
-
plans with their periods, trials, explained plan modules and limits, and a
|
|
1162
|
-
chooser for the plans that offer more than one option, and
|
|
1163
|
-
`/tariffs?ids=3,7` narrows the page to the listed plans, as a journal article
|
|
1164
|
-
that needs a plan links to it. `/tariffs/:slug/:id` shows one plan with its
|
|
1165
|
-
media, description, features and purchase choices. Guests sign in
|
|
1166
|
-
through links that return to the chosen plan; signed-in customers confirm the
|
|
1167
|
-
purchase in a dialog that links to `/subscriptions` afterwards. The account shows
|
|
1168
|
-
purchased subscriptions and disabling automatic renewal. Choosing a new renewal period is not yet supplied.
|
|
1169
|
-
|
|
1170
|
-
See [`templates/orionplace/COMPONENTS.md`](templates/orionplace/COMPONENTS.md)
|
|
1171
|
-
for the maintained route/component/endpoint table. Components use the named
|
|
1172
|
-
API client, confirmed mutation results and English/Russian/Spanish labels. Customer
|
|
1173
|
-
source bundles include transitive dependencies and installation guidance.
|
|
12
|
+
The update renames the project to the new names first (a backup of every changed file goes to
|
|
13
|
+
`.basklee-backup-<date>/`; `--dry-run` lists the changes). New projects: `npx basklee-nuxt init`.
|