orionplace-nuxt 0.7.8 → 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.
Files changed (537) hide show
  1. package/README.md +7 -1167
  2. package/bin/orionplace-nuxt.mjs +10 -172
  3. package/package.json +7 -62
  4. package/LICENSE +0 -21
  5. package/runtime/api.mjs +0 -14
  6. package/runtime/domain.mjs +0 -15
  7. package/runtime/marketplace.mjs +0 -905
  8. package/runtime/seo.mjs +0 -17
  9. package/src/asset-loading-plugin.mjs +0 -10
  10. package/src/favicon-handler.mjs +0 -12
  11. package/src/install.mjs +0 -356
  12. package/src/module.d.ts +0 -3
  13. package/src/module.mjs +0 -88
  14. package/src/project-readme.mjs +0 -702
  15. package/src/service.mjs +0 -186
  16. package/src/setup.mjs +0 -250
  17. package/src/sitemap.mjs +0 -93
  18. package/src/update.mjs +0 -36
  19. package/src/validation.mjs +0 -33
  20. package/templates/.vscode/settings.json +0 -5
  21. package/templates/app/app.vue +0 -52
  22. package/templates/app/assets/css/orionplace-tokens.css +0 -21
  23. package/templates/app/assets/css/orionplace.css +0 -28
  24. package/templates/app/components/orionplace/account/AccountActivity.README.md +0 -31
  25. package/templates/app/components/orionplace/account/AccountActivity.vue +0 -61
  26. package/templates/app/components/orionplace/account/AccountPromocodes.README.md +0 -50
  27. package/templates/app/components/orionplace/account/AccountPromocodes.vue +0 -267
  28. package/templates/app/components/orionplace/account/AccountSection.README.md +0 -31
  29. package/templates/app/components/orionplace/account/AccountSection.vue +0 -132
  30. package/templates/app/components/orionplace/account/ProfileAvatar.vue +0 -139
  31. package/templates/app/components/orionplace/account/ProfileDeleteAccount.vue +0 -161
  32. package/templates/app/components/orionplace/account/ProfileDetailsForm.vue +0 -182
  33. package/templates/app/components/orionplace/account/ProfileEmailSettings.vue +0 -269
  34. package/templates/app/components/orionplace/account/ProfilePasswordForm.vue +0 -201
  35. package/templates/app/components/orionplace/account/ProfileSignIn.vue +0 -446
  36. package/templates/app/components/orionplace/account/SignInHistory.README.md +0 -27
  37. package/templates/app/components/orionplace/account/SignInHistory.vue +0 -218
  38. package/templates/app/components/orionplace/account/StorefrontLogout.README.md +0 -15
  39. package/templates/app/components/orionplace/account/StorefrontLogout.vue +0 -109
  40. package/templates/app/components/orionplace/account/StorefrontProfile.README.md +0 -145
  41. package/templates/app/components/orionplace/account/StorefrontProfile.vue +0 -168
  42. package/templates/app/components/orionplace/account/account.css +0 -1047
  43. package/templates/app/components/orionplace/account/profile.css +0 -696
  44. package/templates/app/components/orionplace/address/AddressForm.README.md +0 -67
  45. package/templates/app/components/orionplace/address/AddressForm.vue +0 -537
  46. package/templates/app/components/orionplace/address/StorefrontAddresses.README.md +0 -44
  47. package/templates/app/components/orionplace/address/StorefrontAddresses.vue +0 -438
  48. package/templates/app/components/orionplace/banners/MainBanner.vue +0 -171
  49. package/templates/app/components/orionplace/banners/examples/BannerExample.vue +0 -6
  50. package/templates/app/components/orionplace/blog/BlogArticle.README.md +0 -44
  51. package/templates/app/components/orionplace/blog/BlogArticle.vue +0 -1023
  52. package/templates/app/components/orionplace/blog/BlogCommentForm.README.md +0 -28
  53. package/templates/app/components/orionplace/blog/BlogCommentForm.vue +0 -129
  54. package/templates/app/components/orionplace/blog/BlogComments.README.md +0 -36
  55. package/templates/app/components/orionplace/blog/BlogComments.vue +0 -373
  56. package/templates/app/components/orionplace/blog/BlogPostCard.vue +0 -307
  57. package/templates/app/components/orionplace/blog/BlogPostGroup.vue +0 -108
  58. package/templates/app/components/orionplace/blog/StorefrontJournal.README.md +0 -42
  59. package/templates/app/components/orionplace/blog/StorefrontJournal.vue +0 -670
  60. package/templates/app/components/orionplace/branding/BrandLogos.vue +0 -25
  61. package/templates/app/components/orionplace/branding/examples/BrandLogosExample.vue +0 -6
  62. package/templates/app/components/orionplace/cart/CartCheckoutDetails.README.md +0 -85
  63. package/templates/app/components/orionplace/cart/CartCheckoutDetails.vue +0 -377
  64. package/templates/app/components/orionplace/cart/CartDeliverySelector.README.md +0 -95
  65. package/templates/app/components/orionplace/cart/CartDeliverySelector.vue +0 -724
  66. package/templates/app/components/orionplace/cart/CartItemOptions.README.md +0 -98
  67. package/templates/app/components/orionplace/cart/CartItemOptions.vue +0 -693
  68. package/templates/app/components/orionplace/cart/CartLineItem.README.md +0 -70
  69. package/templates/app/components/orionplace/cart/CartLineItem.vue +0 -271
  70. package/templates/app/components/orionplace/cart/CartPreview.README.md +0 -43
  71. package/templates/app/components/orionplace/cart/CartPreview.vue +0 -263
  72. package/templates/app/components/orionplace/cart/DeliveryMap.README.md +0 -48
  73. package/templates/app/components/orionplace/cart/DeliveryMap.vue +0 -155
  74. package/templates/app/components/orionplace/cart/StorefrontCart.README.md +0 -89
  75. package/templates/app/components/orionplace/cart/StorefrontCart.vue +0 -689
  76. package/templates/app/components/orionplace/catalog/CatalogHeader.vue +0 -681
  77. package/templates/app/components/orionplace/catalog/CatalogRepresentative.vue +0 -59
  78. package/templates/app/components/orionplace/catalog/StorefrontCatalog.README.md +0 -35
  79. package/templates/app/components/orionplace/catalog/StorefrontCatalog.vue +0 -179
  80. package/templates/app/components/orionplace/catalog/examples/CatalogHeaderExample.vue +0 -6
  81. package/templates/app/components/orionplace/categories/CategoryGroup.vue +0 -125
  82. package/templates/app/components/orionplace/categories/StorefrontCategory.README.md +0 -60
  83. package/templates/app/components/orionplace/categories/StorefrontCategory.vue +0 -277
  84. package/templates/app/components/orionplace/categories/examples/CategoryGroupExample.vue +0 -7
  85. package/templates/app/components/orionplace/contact/AboutPage.README.md +0 -23
  86. package/templates/app/components/orionplace/contact/AboutPage.vue +0 -409
  87. package/templates/app/components/orionplace/contact/ContactForm.README.md +0 -29
  88. package/templates/app/components/orionplace/contact/ContactForm.vue +0 -289
  89. package/templates/app/components/orionplace/contact/EmailUnsubscribe.README.md +0 -27
  90. package/templates/app/components/orionplace/contact/EmailUnsubscribe.vue +0 -95
  91. package/templates/app/components/orionplace/contact/StorefrontContact.README.md +0 -18
  92. package/templates/app/components/orionplace/contact/StorefrontContact.vue +0 -89
  93. package/templates/app/components/orionplace/contact/examples/ContactExample.vue +0 -6
  94. package/templates/app/components/orionplace/currencies/MainCurrencySwitcher.vue +0 -80
  95. package/templates/app/components/orionplace/currencies/examples/CurrencyExample.vue +0 -6
  96. package/templates/app/components/orionplace/events/EventEnrollmentDialog.README.md +0 -58
  97. package/templates/app/components/orionplace/events/EventEnrollmentDialog.vue +0 -294
  98. package/templates/app/components/orionplace/events/EventsBlock.vue +0 -138
  99. package/templates/app/components/orionplace/events/examples/EventsExample.vue +0 -6
  100. package/templates/app/components/orionplace/legal/CookieNotice.README.md +0 -34
  101. package/templates/app/components/orionplace/legal/CookieNotice.vue +0 -84
  102. package/templates/app/components/orionplace/legal/StorefrontPrivacy.README.md +0 -35
  103. package/templates/app/components/orionplace/legal/StorefrontPrivacy.vue +0 -124
  104. package/templates/app/components/orionplace/locale/MainLanguageSwitcher.vue +0 -506
  105. package/templates/app/components/orionplace/locale/examples/LocaleExample.vue +0 -6
  106. package/templates/app/components/orionplace/manufacturers/ManufacturerIndex.README.md +0 -36
  107. package/templates/app/components/orionplace/manufacturers/ManufacturerIndex.vue +0 -495
  108. package/templates/app/components/orionplace/manufacturers/StorefrontManufacturers.README.md +0 -30
  109. package/templates/app/components/orionplace/manufacturers/StorefrontManufacturers.vue +0 -263
  110. package/templates/app/components/orionplace/orders/OrderDetails.README.md +0 -39
  111. package/templates/app/components/orionplace/orders/OrderDetails.vue +0 -1074
  112. package/templates/app/components/orionplace/orders/OrderPaymentForm.README.md +0 -59
  113. package/templates/app/components/orionplace/orders/OrderPaymentForm.vue +0 -73
  114. package/templates/app/components/orionplace/orders/StorefrontOrders.README.md +0 -39
  115. package/templates/app/components/orionplace/orders/StorefrontOrders.vue +0 -869
  116. package/templates/app/components/orionplace/orders/orders.css +0 -612
  117. package/templates/app/components/orionplace/payments/PaymentPanel.README.md +0 -76
  118. package/templates/app/components/orionplace/payments/PaymentPanel.vue +0 -108
  119. package/templates/app/components/orionplace/products/HoverImageViewer.vue +0 -190
  120. package/templates/app/components/orionplace/products/ProductCard.README.md +0 -63
  121. package/templates/app/components/orionplace/products/ProductCard.vue +0 -911
  122. package/templates/app/components/orionplace/products/ProductCardActions.README.md +0 -33
  123. package/templates/app/components/orionplace/products/ProductCardActions.vue +0 -412
  124. package/templates/app/components/orionplace/products/ProductCardBadges.vue +0 -83
  125. package/templates/app/components/orionplace/products/ProductCardDescription.vue +0 -46
  126. package/templates/app/components/orionplace/products/ProductCardFavorite.vue +0 -99
  127. package/templates/app/components/orionplace/products/ProductCardPrice.vue +0 -66
  128. package/templates/app/components/orionplace/products/ProductCardRating.vue +0 -65
  129. package/templates/app/components/orionplace/products/ProductCardSeller.vue +0 -66
  130. package/templates/app/components/orionplace/products/ProductCardStockNotice.vue +0 -43
  131. package/templates/app/components/orionplace/products/ProductCardTitle.vue +0 -46
  132. package/templates/app/components/orionplace/products/ProductCardVariants.vue +0 -388
  133. package/templates/app/components/orionplace/products/ProductGroup.vue +0 -259
  134. package/templates/app/components/orionplace/products/ProductPreorderDialog.README.md +0 -22
  135. package/templates/app/components/orionplace/products/ProductPreorderDialog.vue +0 -471
  136. package/templates/app/components/orionplace/products/ProductReviewForm.README.md +0 -39
  137. package/templates/app/components/orionplace/products/ProductReviewForm.vue +0 -312
  138. package/templates/app/components/orionplace/products/ProductReviewGallery.README.md +0 -28
  139. package/templates/app/components/orionplace/products/ProductReviewGallery.vue +0 -141
  140. package/templates/app/components/orionplace/products/ProductReviewImageViewer.README.md +0 -52
  141. package/templates/app/components/orionplace/products/ProductReviewImageViewer.vue +0 -425
  142. package/templates/app/components/orionplace/products/ProductReviews.README.md +0 -70
  143. package/templates/app/components/orionplace/products/ProductReviews.vue +0 -1025
  144. package/templates/app/components/orionplace/products/ProductSecondaryVariantModal.vue +0 -460
  145. package/templates/app/components/orionplace/products/ProductSpecificationsDialog.README.md +0 -65
  146. package/templates/app/components/orionplace/products/ProductSpecificationsDialog.vue +0 -174
  147. package/templates/app/components/orionplace/products/StorefrontProduct.README.md +0 -52
  148. package/templates/app/components/orionplace/products/StorefrontProduct.vue +0 -1468
  149. package/templates/app/components/orionplace/products/StorefrontWishlist.README.md +0 -33
  150. package/templates/app/components/orionplace/products/StorefrontWishlist.vue +0 -290
  151. package/templates/app/components/orionplace/products/examples/FeaturedExample.vue +0 -6
  152. package/templates/app/components/orionplace/products/examples/FeaturedHoverImageViewerExample.vue +0 -14
  153. package/templates/app/components/orionplace/products/examples/FeaturedProductCardActionsExample.vue +0 -14
  154. package/templates/app/components/orionplace/products/examples/FeaturedProductCardBadgesExample.vue +0 -14
  155. package/templates/app/components/orionplace/products/examples/FeaturedProductCardDescriptionExample.vue +0 -14
  156. package/templates/app/components/orionplace/products/examples/FeaturedProductCardExample.vue +0 -14
  157. package/templates/app/components/orionplace/products/examples/FeaturedProductCardFavoriteExample.vue +0 -14
  158. package/templates/app/components/orionplace/products/examples/FeaturedProductCardPriceExample.vue +0 -14
  159. package/templates/app/components/orionplace/products/examples/FeaturedProductCardRatingExample.vue +0 -14
  160. package/templates/app/components/orionplace/products/examples/FeaturedProductCardSellerExample.vue +0 -14
  161. package/templates/app/components/orionplace/products/examples/FeaturedProductCardStockNoticeExample.vue +0 -14
  162. package/templates/app/components/orionplace/products/examples/FeaturedProductCardTitleExample.vue +0 -14
  163. package/templates/app/components/orionplace/products/examples/FeaturedProductCardVariantsExample.vue +0 -14
  164. package/templates/app/components/orionplace/products/examples/ProductsExample.vue +0 -6
  165. package/templates/app/components/orionplace/products/examples/ProductsHoverImageViewerExample.vue +0 -13
  166. package/templates/app/components/orionplace/products/examples/ProductsProductCardActionsExample.vue +0 -13
  167. package/templates/app/components/orionplace/products/examples/ProductsProductCardBadgesExample.vue +0 -13
  168. package/templates/app/components/orionplace/products/examples/ProductsProductCardDescriptionExample.vue +0 -13
  169. package/templates/app/components/orionplace/products/examples/ProductsProductCardExample.vue +0 -13
  170. package/templates/app/components/orionplace/products/examples/ProductsProductCardFavoriteExample.vue +0 -13
  171. package/templates/app/components/orionplace/products/examples/ProductsProductCardPriceExample.vue +0 -13
  172. package/templates/app/components/orionplace/products/examples/ProductsProductCardRatingExample.vue +0 -13
  173. package/templates/app/components/orionplace/products/examples/ProductsProductCardSellerExample.vue +0 -13
  174. package/templates/app/components/orionplace/products/examples/ProductsProductCardStockNoticeExample.vue +0 -13
  175. package/templates/app/components/orionplace/products/examples/ProductsProductCardTitleExample.vue +0 -13
  176. package/templates/app/components/orionplace/products/examples/ProductsProductCardVariantsExample.vue +0 -13
  177. package/templates/app/components/orionplace/promo/PromoProducts.README.md +0 -45
  178. package/templates/app/components/orionplace/promo/PromoProducts.vue +0 -287
  179. package/templates/app/components/orionplace/search/MainSearch.vue +0 -340
  180. package/templates/app/components/orionplace/search/ProductSearchResults.README.md +0 -81
  181. package/templates/app/components/orionplace/search/ProductSearchResults.vue +0 -506
  182. package/templates/app/components/orionplace/search/SearchFilters.vue +0 -546
  183. package/templates/app/components/orionplace/search/examples/MainSearchExample.vue +0 -6
  184. package/templates/app/components/orionplace/sellers/SellerFilters.README.md +0 -32
  185. package/templates/app/components/orionplace/sellers/SellerFilters.vue +0 -317
  186. package/templates/app/components/orionplace/sellers/SellerPhotoGallery.README.md +0 -45
  187. package/templates/app/components/orionplace/sellers/SellerPhotoGallery.vue +0 -406
  188. package/templates/app/components/orionplace/sellers/SellerSummary.README.md +0 -33
  189. package/templates/app/components/orionplace/sellers/SellerSummary.vue +0 -162
  190. package/templates/app/components/orionplace/sellers/StorefrontSellers.README.md +0 -73
  191. package/templates/app/components/orionplace/sellers/StorefrontSellers.vue +0 -300
  192. package/templates/app/components/orionplace/shared/OrionplaceAvatar.README.md +0 -30
  193. package/templates/app/components/orionplace/shared/OrionplaceAvatar.vue +0 -83
  194. package/templates/app/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +0 -65
  195. package/templates/app/components/orionplace/shared/OrionplaceBreadcrumbs.vue +0 -118
  196. package/templates/app/components/orionplace/shared/OrionplaceEmptyState.README.md +0 -38
  197. package/templates/app/components/orionplace/shared/OrionplaceEmptyState.vue +0 -143
  198. package/templates/app/components/orionplace/shared/OrionplaceImage.vue +0 -84
  199. package/templates/app/components/orionplace/shared/OrionplaceInfoHint.README.md +0 -32
  200. package/templates/app/components/orionplace/shared/OrionplaceInfoHint.vue +0 -158
  201. package/templates/app/components/orionplace/shared/OrionplacePasswordInput.README.md +0 -30
  202. package/templates/app/components/orionplace/shared/OrionplacePasswordInput.vue +0 -197
  203. package/templates/app/components/orionplace/shared/OrionplaceSearchSelect.README.md +0 -38
  204. package/templates/app/components/orionplace/shared/OrionplaceSearchSelect.vue +0 -411
  205. package/templates/app/components/orionplace/shared/OrionplaceSelect.README.md +0 -31
  206. package/templates/app/components/orionplace/shared/OrionplaceSelect.vue +0 -525
  207. package/templates/app/components/orionplace/shared/StorefrontErrorPage.README.md +0 -55
  208. package/templates/app/components/orionplace/shared/StorefrontErrorPage.vue +0 -151
  209. package/templates/app/components/orionplace/shared/StorefrontPagination.README.md +0 -50
  210. package/templates/app/components/orionplace/shared/StorefrontPagination.vue +0 -148
  211. package/templates/app/components/orionplace/shared/dialogs.css +0 -36
  212. package/templates/app/components/orionplace/shared/features.css +0 -364
  213. package/templates/app/components/orionplace/social/SocialLinks.vue +0 -72
  214. package/templates/app/components/orionplace/social/examples/SocialLinksExample.vue +0 -6
  215. package/templates/app/components/orionplace/storefront/StorefrontAccount.README.md +0 -47
  216. package/templates/app/components/orionplace/storefront/StorefrontAccount.vue +0 -332
  217. package/templates/app/components/orionplace/storefront/StorefrontCartButton.vue +0 -68
  218. package/templates/app/components/orionplace/storefront/StorefrontFooter.README.md +0 -26
  219. package/templates/app/components/orionplace/storefront/StorefrontFooter.vue +0 -236
  220. package/templates/app/components/orionplace/storefront/StorefrontHeader.README.md +0 -93
  221. package/templates/app/components/orionplace/storefront/StorefrontHeader.vue +0 -509
  222. package/templates/app/components/orionplace/storefront/StorefrontHome.README.md +0 -79
  223. package/templates/app/components/orionplace/storefront/StorefrontHome.vue +0 -315
  224. package/templates/app/components/orionplace/storefront/StorefrontWishlistButton.vue +0 -105
  225. package/templates/app/components/orionplace/storefront/examples/StorefrontAccountExample.vue +0 -7
  226. package/templates/app/components/orionplace/stores/StorefrontStores.README.md +0 -41
  227. package/templates/app/components/orionplace/stores/StorefrontStores.vue +0 -346
  228. package/templates/app/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +0 -151
  229. package/templates/app/components/orionplace/subscriptions/StorefrontSubscriptions.vue +0 -851
  230. package/templates/app/components/orionplace/subscriptions/StorefrontTariff.README.md +0 -38
  231. package/templates/app/components/orionplace/subscriptions/StorefrontTariff.vue +0 -555
  232. package/templates/app/components/orionplace/subscriptions/StorefrontTariffs.README.md +0 -36
  233. package/templates/app/components/orionplace/subscriptions/StorefrontTariffs.vue +0 -416
  234. package/templates/app/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +0 -39
  235. package/templates/app/components/orionplace/subscriptions/SubscriptionCancelDialog.vue +0 -292
  236. package/templates/app/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +0 -85
  237. package/templates/app/components/orionplace/subscriptions/SubscriptionChangeDialog.vue +0 -874
  238. package/templates/app/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +0 -53
  239. package/templates/app/components/orionplace/subscriptions/SubscriptionExtendDialog.vue +0 -536
  240. package/templates/app/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +0 -101
  241. package/templates/app/components/orionplace/subscriptions/SubscriptionPlanSummary.vue +0 -286
  242. package/templates/app/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +0 -138
  243. package/templates/app/components/orionplace/subscriptions/SubscriptionRemoteDetails.vue +0 -134
  244. package/templates/app/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +0 -85
  245. package/templates/app/components/orionplace/subscriptions/SubscriptionRenewalDialog.vue +0 -364
  246. package/templates/app/components/orionplace/support/StorefrontSupport.README.md +0 -39
  247. package/templates/app/components/orionplace/support/StorefrontSupport.vue +0 -484
  248. package/templates/app/components/orionplace/support/TicketConversation.README.md +0 -38
  249. package/templates/app/components/orionplace/support/TicketConversation.vue +0 -524
  250. package/templates/app/components/orionplace/support/TicketImage.README.md +0 -27
  251. package/templates/app/components/orionplace/support/TicketImage.vue +0 -186
  252. package/templates/app/components/orionplace/support/TicketItemCard.README.md +0 -59
  253. package/templates/app/components/orionplace/support/TicketItemCard.vue +0 -177
  254. package/templates/app/components/orionplace/support/TicketMessageForm.README.md +0 -35
  255. package/templates/app/components/orionplace/support/TicketMessageForm.vue +0 -258
  256. package/templates/app/components/orionplace/support/TicketSubscriptionCard.README.md +0 -40
  257. package/templates/app/components/orionplace/support/TicketSubscriptionCard.vue +0 -154
  258. package/templates/app/components/orionplace/tariffs/TariffCard.README.md +0 -12
  259. package/templates/app/components/orionplace/tariffs/TariffCard.vue +0 -251
  260. package/templates/app/components/orionplace/tariffs/TariffCardDescription.README.md +0 -12
  261. package/templates/app/components/orionplace/tariffs/TariffCardDescription.vue +0 -97
  262. package/templates/app/components/orionplace/tariffs/TariffCardFeatures.README.md +0 -14
  263. package/templates/app/components/orionplace/tariffs/TariffCardFeatures.vue +0 -172
  264. package/templates/app/components/orionplace/tariffs/TariffCardImage.README.md +0 -12
  265. package/templates/app/components/orionplace/tariffs/TariffCardImage.vue +0 -33
  266. package/templates/app/components/orionplace/tariffs/TariffCardPrices.README.md +0 -12
  267. package/templates/app/components/orionplace/tariffs/TariffCardPrices.vue +0 -300
  268. package/templates/app/components/orionplace/tariffs/TariffCardTitle.README.md +0 -12
  269. package/templates/app/components/orionplace/tariffs/TariffCardTitle.vue +0 -30
  270. package/templates/app/components/orionplace/tariffs/TariffCards.README.md +0 -12
  271. package/templates/app/components/orionplace/tariffs/TariffCards.vue +0 -94
  272. package/templates/app/components/orionplace/tariffs/TariffSubscriptionModal.README.md +0 -31
  273. package/templates/app/components/orionplace/tariffs/TariffSubscriptionModal.vue +0 -411
  274. package/templates/app/components/orionplace/tariffs/examples/TariffCardDescriptionExample.vue +0 -13
  275. package/templates/app/components/orionplace/tariffs/examples/TariffCardExample.vue +0 -13
  276. package/templates/app/components/orionplace/tariffs/examples/TariffCardFeaturesExample.vue +0 -14
  277. package/templates/app/components/orionplace/tariffs/examples/TariffCardImageExample.vue +0 -13
  278. package/templates/app/components/orionplace/tariffs/examples/TariffCardPricesExample.vue +0 -13
  279. package/templates/app/components/orionplace/tariffs/examples/TariffCardTitleExample.vue +0 -13
  280. package/templates/app/components/orionplace/tariffs/examples/TariffCardsExample.vue +0 -6
  281. package/templates/app/components/orionplace/theme/OrionplaceThemeProvider.vue +0 -38
  282. package/templates/app/components/orionplace/units/UnitSwitcher.vue +0 -71
  283. package/templates/app/components/orionplace/units/examples/LengthExample.vue +0 -6
  284. package/templates/app/components/orionplace/units/examples/WeightExample.vue +0 -6
  285. package/templates/app/components/orionplace/wallet/StorefrontWallet.README.md +0 -117
  286. package/templates/app/components/orionplace/wallet/StorefrontWallet.vue +0 -863
  287. package/templates/app/components/orionplace/wallet/WalletBalance.vue +0 -47
  288. package/templates/app/components/orionplace/wallet/WalletTopUpForm.README.md +0 -32
  289. package/templates/app/components/orionplace/wallet/WalletTopUpForm.vue +0 -224
  290. package/templates/app/components/orionplace/wallet/examples/WalletExample.vue +0 -6
  291. package/templates/app/composables/useOrionplaceActionMenu.ts +0 -126
  292. package/templates/app/composables/useOrionplaceAddressEditor.ts +0 -343
  293. package/templates/app/composables/useOrionplaceAddresses.ts +0 -75
  294. package/templates/app/composables/useOrionplaceApi.ts +0 -187
  295. package/templates/app/composables/useOrionplaceAppLoad.ts +0 -83
  296. package/templates/app/composables/useOrionplaceBlogComments.ts +0 -325
  297. package/templates/app/composables/useOrionplaceBlogReading.ts +0 -270
  298. package/templates/app/composables/useOrionplaceCart.ts +0 -226
  299. package/templates/app/composables/useOrionplaceCartPreview.ts +0 -142
  300. package/templates/app/composables/useOrionplaceCategoryLink.ts +0 -24
  301. package/templates/app/composables/useOrionplaceCategoryProducts.ts +0 -16
  302. package/templates/app/composables/useOrionplaceFeature.ts +0 -100
  303. package/templates/app/composables/useOrionplaceFeaturedProducts.ts +0 -14
  304. package/templates/app/composables/useOrionplaceGeolocation.ts +0 -28
  305. package/templates/app/composables/useOrionplaceHomeProducts.ts +0 -90
  306. package/templates/app/composables/useOrionplaceManufacturerIndex.ts +0 -83
  307. package/templates/app/composables/useOrionplaceMap.ts +0 -240
  308. package/templates/app/composables/useOrionplaceMediaFormat.ts +0 -24
  309. package/templates/app/composables/useOrionplaceMissingPage.ts +0 -67
  310. package/templates/app/composables/useOrionplaceOrders.ts +0 -185
  311. package/templates/app/composables/useOrionplacePageSeo.ts +0 -133
  312. package/templates/app/composables/useOrionplaceProductActions.ts +0 -116
  313. package/templates/app/composables/useOrionplaceProductLink.ts +0 -24
  314. package/templates/app/composables/useOrionplaceProductSearch.ts +0 -363
  315. package/templates/app/composables/useOrionplaceProductVariants.ts +0 -176
  316. package/templates/app/composables/useOrionplaceProfile.ts +0 -309
  317. package/templates/app/composables/useOrionplaceProgress.ts +0 -89
  318. package/templates/app/composables/useOrionplaceReviews.ts +0 -242
  319. package/templates/app/composables/useOrionplaceSearchHistory.ts +0 -23
  320. package/templates/app/composables/useOrionplaceSearchScopeNames.ts +0 -99
  321. package/templates/app/composables/useOrionplaceServerData.ts +0 -72
  322. package/templates/app/composables/useOrionplaceSignIn.ts +0 -66
  323. package/templates/app/composables/useOrionplaceStableHeight.ts +0 -69
  324. package/templates/app/composables/useOrionplaceStorefront.ts +0 -29
  325. package/templates/app/composables/useOrionplaceSubscriptions.ts +0 -260
  326. package/templates/app/composables/useOrionplaceTheme.ts +0 -27
  327. package/templates/app/composables/useOrionplaceTicketSubject.ts +0 -180
  328. package/templates/app/composables/useOrionplaceTickets.ts +0 -335
  329. package/templates/app/composables/useOrionplaceWallet.ts +0 -166
  330. package/templates/app/error.vue +0 -108
  331. package/templates/app/interfaces/orionplace/accounts/IContact.ts +0 -21
  332. package/templates/app/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +0 -17
  333. package/templates/app/interfaces/orionplace/accounts/IEmailVerification.ts +0 -59
  334. package/templates/app/interfaces/orionplace/accounts/IProfileActions.ts +0 -38
  335. package/templates/app/interfaces/orionplace/accounts/IProfileData.ts +0 -125
  336. package/templates/app/interfaces/orionplace/accounts/IProfileMedia.ts +0 -17
  337. package/templates/app/interfaces/orionplace/accounts/IStorefrontProfile.ts +0 -54
  338. package/templates/app/interfaces/orionplace/address/IAddressCitySuggestion.ts +0 -19
  339. package/templates/app/interfaces/orionplace/address/IAddressEditor.ts +0 -9
  340. package/templates/app/interfaces/orionplace/address/IAddressLocationSuggestion.ts +0 -22
  341. package/templates/app/interfaces/orionplace/address/IAddressRegionSearch.ts +0 -30
  342. package/templates/app/interfaces/orionplace/address/IAddressSuggestion.ts +0 -20
  343. package/templates/app/interfaces/orionplace/address/IUserAddress.ts +0 -87
  344. package/templates/app/interfaces/orionplace/apiBase/TMethod.ts +0 -1
  345. package/templates/app/interfaces/orionplace/appBase/IAppLoad.ts +0 -16
  346. package/templates/app/interfaces/orionplace/appBase/IAppLoadCommon.ts +0 -47
  347. package/templates/app/interfaces/orionplace/appBase/IApploadUserProfile.ts +0 -15
  348. package/templates/app/interfaces/orionplace/appBase/IForm.ts +0 -21
  349. package/templates/app/interfaces/orionplace/appBase/ISEO.ts +0 -21
  350. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +0 -11
  351. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonContact.ts +0 -8
  352. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonCurrency.ts +0 -15
  353. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonEvents.ts +0 -18
  354. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonLocale.ts +0 -14
  355. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonLogos.ts +0 -6
  356. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +0 -22
  357. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +0 -26
  358. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSocial.ts +0 -15
  359. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +0 -7
  360. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonUnit.ts +0 -12
  361. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +0 -8
  362. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVisualSettings.ts +0 -11
  363. package/templates/app/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonWalletValue.ts +0 -3
  364. package/templates/app/interfaces/orionplace/blog/IBlogApi.ts +0 -247
  365. package/templates/app/interfaces/orionplace/blog/IBlogPostPreview.ts +0 -30
  366. package/templates/app/interfaces/orionplace/cart/ICartActions.ts +0 -67
  367. package/templates/app/interfaces/orionplace/cart/ICartData.ts +0 -382
  368. package/templates/app/interfaces/orionplace/cart/ICartDeliveryActions.ts +0 -68
  369. package/templates/app/interfaces/orionplace/cart/ICartModal.ts +0 -22
  370. package/templates/app/interfaces/orionplace/cart/IDeliveryMap.ts +0 -29
  371. package/templates/app/interfaces/orionplace/catalog/ICatalogDirectory.ts +0 -75
  372. package/templates/app/interfaces/orionplace/category/ICategory.ts +0 -41
  373. package/templates/app/interfaces/orionplace/domains/IDomain.ts +0 -13
  374. package/templates/app/interfaces/orionplace/forms/ICustomerSubfilter.ts +0 -19
  375. package/templates/app/interfaces/orionplace/index.ts +0 -57
  376. package/templates/app/interfaces/orionplace/marketing/IPromoActions.ts +0 -51
  377. package/templates/app/interfaces/orionplace/orders/IOrderActions.ts +0 -99
  378. package/templates/app/interfaces/orionplace/orders/IOrderHistory.ts +0 -259
  379. package/templates/app/interfaces/orionplace/orders/IProductPreorder.ts +0 -31
  380. package/templates/app/interfaces/orionplace/payments/IInvoice.ts +0 -147
  381. package/templates/app/interfaces/orionplace/products/IProduct.ts +0 -262
  382. package/templates/app/interfaces/orionplace/products/IProductFeedbackApi.ts +0 -218
  383. package/templates/app/interfaces/orionplace/products/IProductSearchApi.ts +0 -146
  384. package/templates/app/interfaces/orionplace/products/IProductSearchFacets.ts +0 -35
  385. package/templates/app/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +0 -15
  386. package/templates/app/interfaces/orionplace/products/IProductSpecification.ts +0 -14
  387. package/templates/app/interfaces/orionplace/products/IWishlist.ts +0 -22
  388. package/templates/app/interfaces/orionplace/sellers/ISellerDirectory.ts +0 -70
  389. package/templates/app/interfaces/orionplace/shared/IBreadcrumb.ts +0 -10
  390. package/templates/app/interfaces/orionplace/shared/IGeoCoordinates.ts +0 -4
  391. package/templates/app/interfaces/orionplace/shared/IStorefrontControls.ts +0 -13
  392. package/templates/app/interfaces/orionplace/shared/ITransformValue.ts +0 -3
  393. package/templates/app/interfaces/orionplace/state.ts +0 -4
  394. package/templates/app/interfaces/orionplace/stores/IStoreDirectory.ts +0 -63
  395. package/templates/app/interfaces/orionplace/subscribeOptions/ISubscribeOption.ts +0 -9
  396. package/templates/app/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +0 -56
  397. package/templates/app/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +0 -11
  398. package/templates/app/interfaces/orionplace/subscribes/ISubscribe.ts +0 -28
  399. package/templates/app/interfaces/orionplace/subscribes/ISubscriptionApi.ts +0 -127
  400. package/templates/app/interfaces/orionplace/tickets/ICustomerTicketApi.ts +0 -223
  401. package/templates/app/interfaces/orionplace/transport.ts +0 -34
  402. package/templates/app/layouts/default.vue +0 -382
  403. package/templates/app/middleware/00.orionplace.global.ts +0 -27
  404. package/templates/app/middleware/01.orionplace-sellers.global.ts +0 -15
  405. package/templates/app/middleware/orionplace-account.ts +0 -40
  406. package/templates/app/pages/activity.vue +0 -19
  407. package/templates/app/pages/addresses.vue +0 -23
  408. package/templates/app/pages/browse.vue +0 -253
  409. package/templates/app/pages/cart.vue +0 -20
  410. package/templates/app/pages/catalog.vue +0 -17
  411. package/templates/app/pages/category/[id].vue +0 -150
  412. package/templates/app/pages/contact.vue +0 -17
  413. package/templates/app/pages/featured.vue +0 -152
  414. package/templates/app/pages/index.vue +0 -194
  415. package/templates/app/pages/journal/[id].vue +0 -164
  416. package/templates/app/pages/journal/index.vue +0 -74
  417. package/templates/app/pages/logout.vue +0 -71
  418. package/templates/app/pages/manufacturers.vue +0 -33
  419. package/templates/app/pages/orders.vue +0 -40
  420. package/templates/app/pages/privacy.vue +0 -17
  421. package/templates/app/pages/product/[id].vue +0 -150
  422. package/templates/app/pages/profile.vue +0 -118
  423. package/templates/app/pages/promo/[id].vue +0 -67
  424. package/templates/app/pages/promocodes.vue +0 -21
  425. package/templates/app/pages/sellers.vue +0 -203
  426. package/templates/app/pages/stores.vue +0 -36
  427. package/templates/app/pages/subscriptions.vue +0 -21
  428. package/templates/app/pages/tariffs/[slug]/[id].vue +0 -126
  429. package/templates/app/pages/tariffs/index.vue +0 -50
  430. package/templates/app/pages/tickets.vue +0 -56
  431. package/templates/app/pages/unsubscribe.vue +0 -32
  432. package/templates/app/pages/wallet.vue +0 -23
  433. package/templates/app/pages/wishlist.vue +0 -48
  434. package/templates/app/stores/orionplace.ts +0 -493
  435. package/templates/app/stores/orionplaceBrowse.ts +0 -79
  436. package/templates/app/stores/orionplaceCatalog.ts +0 -141
  437. package/templates/app/stores/orionplaceDomainAccess.ts +0 -55
  438. package/templates/app/stores/orionplaceProducts.ts +0 -249
  439. package/templates/app/stores/orionplaceSelections.ts +0 -132
  440. package/templates/app/themes/orionplace.ts +0 -108
  441. package/templates/app/utils/orionplace/accountLabels.ts +0 -29
  442. package/templates/app/utils/orionplace/activityLabels.ts +0 -96
  443. package/templates/app/utils/orionplace/activityPresentation.ts +0 -16
  444. package/templates/app/utils/orionplace/addressChanges.ts +0 -26
  445. package/templates/app/utils/orionplace/addressRegions.ts +0 -17
  446. package/templates/app/utils/orionplace/api.ts +0 -333
  447. package/templates/app/utils/orionplace/blogArticleHtml.ts +0 -318
  448. package/templates/app/utils/orionplace/blogComments.ts +0 -133
  449. package/templates/app/utils/orionplace/blogImageViewer.ts +0 -84
  450. package/templates/app/utils/orionplace/blogLabels.ts +0 -167
  451. package/templates/app/utils/orionplace/blogLayout.ts +0 -108
  452. package/templates/app/utils/orionplace/blogProductPlacements.ts +0 -105
  453. package/templates/app/utils/orionplace/breadcrumbLabels.ts +0 -14
  454. package/templates/app/utils/orionplace/browseLabels.ts +0 -145
  455. package/templates/app/utils/orionplace/cartAddress.ts +0 -94
  456. package/templates/app/utils/orionplace/cartLabels.ts +0 -390
  457. package/templates/app/utils/orionplace/cartOptions.ts +0 -143
  458. package/templates/app/utils/orionplace/cartPreview.ts +0 -123
  459. package/templates/app/utils/orionplace/cartPromo.ts +0 -150
  460. package/templates/app/utils/orionplace/cartShipment.ts +0 -74
  461. package/templates/app/utils/orionplace/cartSnapshot.ts +0 -20
  462. package/templates/app/utils/orionplace/catalog.ts +0 -106
  463. package/templates/app/utils/orionplace/category.ts +0 -52
  464. package/templates/app/utils/orionplace/categoryLabels.ts +0 -44
  465. package/templates/app/utils/orionplace/contactLabels.ts +0 -152
  466. package/templates/app/utils/orionplace/currency.ts +0 -128
  467. package/templates/app/utils/orionplace/deliveryMap.ts +0 -89
  468. package/templates/app/utils/orionplace/directoryLabels.ts +0 -196
  469. package/templates/app/utils/orionplace/emptyStateArt.ts +0 -231
  470. package/templates/app/utils/orionplace/errorPageLabels.ts +0 -95
  471. package/templates/app/utils/orionplace/featureData.ts +0 -25
  472. package/templates/app/utils/orionplace/featureLabels.ts +0 -406
  473. package/templates/app/utils/orionplace/featuredLabels.ts +0 -38
  474. package/templates/app/utils/orionplace/files.ts +0 -71
  475. package/templates/app/utils/orionplace/footerLabels.ts +0 -53
  476. package/templates/app/utils/orionplace/guestSession.ts +0 -50
  477. package/templates/app/utils/orionplace/headerLabels.ts +0 -98
  478. package/templates/app/utils/orionplace/homeContent.ts +0 -129
  479. package/templates/app/utils/orionplace/homeLabels.ts +0 -74
  480. package/templates/app/utils/orionplace/htmlText.ts +0 -59
  481. package/templates/app/utils/orionplace/links.ts +0 -14
  482. package/templates/app/utils/orionplace/manufacturerIndex.ts +0 -108
  483. package/templates/app/utils/orionplace/modalWindow.ts +0 -109
  484. package/templates/app/utils/orionplace/nativeApp.ts +0 -361
  485. package/templates/app/utils/orionplace/notice.ts +0 -22
  486. package/templates/app/utils/orionplace/orderLabels.ts +0 -454
  487. package/templates/app/utils/orionplace/orderPresentation.ts +0 -629
  488. package/templates/app/utils/orionplace/pageSeo.ts +0 -662
  489. package/templates/app/utils/orionplace/paginationScroll.ts +0 -131
  490. package/templates/app/utils/orionplace/phone.ts +0 -22
  491. package/templates/app/utils/orionplace/presentation.ts +0 -72
  492. package/templates/app/utils/orionplace/privacyLabels.ts +0 -273
  493. package/templates/app/utils/orionplace/productActionLabels.ts +0 -108
  494. package/templates/app/utils/orionplace/productActions.ts +0 -574
  495. package/templates/app/utils/orionplace/productAvailability.ts +0 -36
  496. package/templates/app/utils/orionplace/productGallery.ts +0 -72
  497. package/templates/app/utils/orionplace/productLabels.ts +0 -119
  498. package/templates/app/utils/orionplace/productListLocation.ts +0 -130
  499. package/templates/app/utils/orionplace/productManufacturer.ts +0 -30
  500. package/templates/app/utils/orionplace/productPage.ts +0 -46
  501. package/templates/app/utils/orionplace/productPhotos.ts +0 -67
  502. package/templates/app/utils/orionplace/productSearchScope.ts +0 -237
  503. package/templates/app/utils/orionplace/productSeller.ts +0 -51
  504. package/templates/app/utils/orionplace/productStructuredData.ts +0 -221
  505. package/templates/app/utils/orionplace/profile.ts +0 -148
  506. package/templates/app/utils/orionplace/profileLabels.ts +0 -229
  507. package/templates/app/utils/orionplace/promoLabels.ts +0 -111
  508. package/templates/app/utils/orionplace/promoPresentation.ts +0 -381
  509. package/templates/app/utils/orionplace/reviewLabels.ts +0 -256
  510. package/templates/app/utils/orionplace/reviewScope.ts +0 -41
  511. package/templates/app/utils/orionplace/richText.ts +0 -13
  512. package/templates/app/utils/orionplace/searchFilters.ts +0 -99
  513. package/templates/app/utils/orionplace/searchHistory.ts +0 -144
  514. package/templates/app/utils/orionplace/sellerDirectory.ts +0 -134
  515. package/templates/app/utils/orionplace/seo.ts +0 -52
  516. package/templates/app/utils/orionplace/serverCookies.ts +0 -88
  517. package/templates/app/utils/orionplace/sessionLabels.ts +0 -38
  518. package/templates/app/utils/orionplace/signInReturn.ts +0 -89
  519. package/templates/app/utils/orionplace/storeDirectory.ts +0 -50
  520. package/templates/app/utils/orionplace/subscriptionChanges.ts +0 -167
  521. package/templates/app/utils/orionplace/subscriptionLabels.ts +0 -100
  522. package/templates/app/utils/orionplace/subscriptionManageLabels.ts +0 -424
  523. package/templates/app/utils/orionplace/subscriptionPlans.ts +0 -162
  524. package/templates/app/utils/orionplace/subscriptionRemote.ts +0 -110
  525. package/templates/app/utils/orionplace/subscriptionUsage.ts +0 -82
  526. package/templates/app/utils/orionplace/tariffLabels.ts +0 -182
  527. package/templates/app/utils/orionplace/tariffPage.ts +0 -77
  528. package/templates/app/utils/orionplace/tariffVariables.ts +0 -203
  529. package/templates/app/utils/orionplace/tariffs.ts +0 -333
  530. package/templates/app/utils/orionplace/ticketItems.ts +0 -87
  531. package/templates/app/utils/orionplace/ticketLabels.ts +0 -428
  532. package/templates/app/utils/orionplace/ticketLocation.ts +0 -79
  533. package/templates/app/utils/orionplace/walletTransaction.ts +0 -135
  534. package/templates/app/utils/orionplaceAppLoad.ts +0 -83
  535. package/templates/orionplace/COMPONENT-DOWNLOAD.md +0 -40
  536. package/templates/orionplace/COMPONENTS.md +0 -1993
  537. 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
- **A complete Nuxt 4 storefront for your Orionplace marketplace, set up with one command.**
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
- npm install
534
- npm test
535
- npm pack --dry-run
9
+ npx basklee-nuxt update
536
10
  ```
537
11
 
538
- The published tarball includes only the CLI, module, runtime source, README,
539
- license, starter templates, and package metadata.
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`.