@mohasinac/appkit 4.53.0 → 4.53.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +3 -3
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/client/theme/ThemeProvider.js +15 -1
- package/dist/_internal/server/features/auctions/og.d.ts +3 -1
- package/dist/_internal/server/features/auctions/og.js +3 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
- package/dist/_internal/server/features/business-documents/download.js +91 -0
- package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
- package/dist/_internal/server/features/categories/adapters.js +10 -0
- package/dist/_internal/server/features/categories/price-guidance-resolve.d.ts +66 -0
- package/dist/_internal/server/features/categories/price-guidance-resolve.js +138 -0
- package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
- package/dist/_internal/server/features/checkout/actions.js +106 -12
- package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
- package/dist/_internal/server/features/checkout/data.d.ts +22 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
- package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
- package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
- package/dist/_internal/server/features/classified/metadata.js +1 -1
- package/dist/_internal/server/features/classified/og.d.ts +3 -1
- package/dist/_internal/server/features/classified/og.js +3 -1
- package/dist/_internal/server/features/digital-code/metadata.js +1 -1
- package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
- package/dist/_internal/server/features/digital-code/og.js +3 -1
- package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
- package/dist/_internal/server/features/digital-code/pool.js +19 -4
- package/dist/_internal/server/features/live/metadata.js +1 -1
- package/dist/_internal/server/features/live/og.d.ts +3 -1
- package/dist/_internal/server/features/live/og.js +3 -1
- package/dist/_internal/server/features/messages/actions.js +1 -1
- package/dist/_internal/server/features/parts/og.js +1 -1
- package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
- package/dist/_internal/server/features/pre-orders/og.js +3 -1
- package/dist/_internal/server/features/price-index/market.d.ts +57 -0
- package/dist/_internal/server/features/price-index/market.js +120 -0
- package/dist/_internal/server/features/price-index/search.d.ts +18 -0
- package/dist/_internal/server/features/price-index/search.js +47 -7
- package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
- package/dist/_internal/server/features/prize-draws/og.js +3 -1
- package/dist/_internal/server/features/products/group-members.d.ts +26 -0
- package/dist/_internal/server/features/products/group-members.js +7 -1
- package/dist/_internal/server/features/products/list-public.d.ts +12 -0
- package/dist/_internal/server/features/products/list-public.js +10 -1
- package/dist/_internal/server/features/products/listing-tab-counts.d.ts +25 -1
- package/dist/_internal/server/features/products/listing-tab-counts.js +128 -10
- package/dist/_internal/server/features/products/og.d.ts +3 -1
- package/dist/_internal/server/features/products/og.js +3 -1
- package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
- package/dist/_internal/server/features/search/scoped-sources.js +252 -0
- package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
- package/dist/_internal/server/features/search/search-everything.js +70 -20
- package/dist/_internal/server/features/seo/sitemap.js +6 -0
- package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +11 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +1 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +3 -1
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +32 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +20 -1
- package/dist/_internal/server/features/sticker-trace/storage.js +20 -1
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +16 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +30 -0
- package/dist/_internal/server/features/stores/tabs.js +124 -0
- package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/index.js +9 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
- package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
- package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
- package/dist/_internal/shared/config/schema.d.ts +122 -0
- package/dist/_internal/shared/features/cart/schema.js +3 -2
- package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
- package/dist/_internal/shared/features/products/group-rules.js +142 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +24 -0
- package/dist/_internal/shared/listing-types/_registry.js +39 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/art/config.js +2 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/auction/config.js +2 -0
- package/dist/_internal/shared/listing-types/availability.js +48 -0
- package/dist/_internal/shared/listing-types/capabilities.js +19 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/config.js +2 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +2 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +1 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/config.js +2 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +2 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +2 -0
- package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
- package/dist/_internal/shared/listing-types/spares/config.js +60 -0
- package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
- package/dist/_internal/shared/listing-types/spares/og.js +1 -0
- package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
- package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/standard/config.js +2 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +2 -0
- package/dist/_internal/shared/search/match.d.ts +11 -0
- package/dist/_internal/shared/search/match.js +30 -3
- package/dist/_internal/shared/search/to-groups.d.ts +52 -0
- package/dist/_internal/shared/search/to-groups.js +141 -0
- package/dist/client.d.ts +8 -2
- package/dist/client.js +4 -1
- package/dist/constants/api-endpoints.d.ts +46 -15
- package/dist/constants/api-endpoints.js +35 -5
- package/dist/constants/cache-invalidation.js +3 -1
- package/dist/constants/field-names.d.ts +6 -0
- package/dist/constants/field-names.js +6 -0
- package/dist/features/about/components/PolicyPageView.d.ts +22 -2
- package/dist/features/about/components/PolicyPageView.js +14 -2
- package/dist/features/about/components/PublicProfileView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +42 -2
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/hooks/useProfileStats.js +5 -1
- package/dist/features/addresses/repository/addresses.repository.d.ts +16 -0
- package/dist/features/addresses/repository/addresses.repository.js +21 -0
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +19 -2
- package/dist/features/admin/components/AdminNavigationView.js +1 -1
- package/dist/features/admin/components/AdminPageHeader.js +1 -1
- package/dist/features/admin/components/AdminProductEditorView.js +17 -2
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
- package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
- package/dist/features/admin/components/AdminSparesView.js +30 -0
- package/dist/features/admin/components/AdminUsersView.js +9 -7
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
- package/dist/features/admin/constants/filter-tabs.js +1 -0
- package/dist/features/admin/schemas/firestore.d.ts +26 -2
- package/dist/features/auctions/components/AuctionDetailPageView.js +12 -18
- package/dist/features/auth/repository/user.repository.d.ts +13 -0
- package/dist/features/auth/repository/user.repository.js +28 -0
- package/dist/features/auth/schemas/firestore.d.ts +2 -0
- package/dist/features/auth/schemas/firestore.js +2 -0
- package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
- package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
- package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
- package/dist/features/business-documents/schemas/firestore.js +75 -0
- package/dist/features/cart/actions/cart-actions.js +83 -6
- package/dist/features/cart/repository/cart.repository.js +32 -4
- package/dist/features/cart/schemas/firestore.d.ts +20 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
- package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
- package/dist/features/categories/api/[id]/price-guidance/route.js +90 -0
- package/dist/features/categories/components/BrandDetailPageView.js +32 -8
- package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -1
- package/dist/features/categories/components/BrandDetailTabs.js +28 -3
- package/dist/features/categories/components/BundleCollage.js +3 -2
- package/dist/features/categories/components/BundleItemsPicker.js +3 -4
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +157 -20
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +7 -1
- package/dist/features/categories/components/CategoryDetailTabs.js +41 -7
- package/dist/features/categories/components/CategoryGrid.js +10 -1
- package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
- package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
- package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
- package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
- package/dist/features/categories/constants/category-tabs.d.ts +20 -25
- package/dist/features/categories/constants/category-tabs.js +22 -39
- package/dist/features/categories/repository/categories.repository.d.ts +12 -0
- package/dist/features/categories/repository/categories.repository.js +20 -0
- package/dist/features/categories/schemas/firestore.d.ts +22 -1
- package/dist/features/categories/schemas/firestore.js +10 -0
- package/dist/features/categories/schemas/index.d.ts +6 -0
- package/dist/features/categories/schemas/index.js +2 -0
- package/dist/features/categories/types/index.d.ts +8 -0
- package/dist/features/categories/utils/taxonomy-visual.d.ts +16 -3
- package/dist/features/categories/utils/taxonomy-visual.js +26 -10
- package/dist/features/classified/components/ClassifiedDetailPageView.js +14 -10
- package/dist/features/contact/components/ContactPageView.d.ts +33 -1
- package/dist/features/contact/components/ContactPageView.js +58 -28
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +14 -10
- package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
- package/dist/features/grouped/schemas/firestore.d.ts +5 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
- package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
- package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
- package/dist/features/homepage/components/HowItWorksSection.js +4 -4
- package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
- package/dist/features/homepage/components/PromoGrid.js +12 -3
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/index.d.ts +0 -20
- package/dist/features/homepage/components/index.js +0 -11
- package/dist/features/homepage/index.d.ts +0 -2
- package/dist/features/homepage/index.js +0 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
- package/dist/features/homepage/lib/section-renderer.js +202 -58
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
- package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
- package/dist/features/homepage/schemas/firestore.d.ts +106 -3
- package/dist/features/homepage/schemas/firestore.js +32 -2
- package/dist/features/homepage/schemas/index.d.ts +36 -7
- package/dist/features/homepage/schemas/index.js +39 -27
- package/dist/features/homepage/server.d.ts +0 -3
- package/dist/features/homepage/server.js +0 -3
- package/dist/features/homepage/types/index.d.ts +0 -47
- package/dist/features/homepage/types/index.js +49 -0
- package/dist/features/layout/AppLayoutShell.js +1 -1
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/TitleBarLayout.js +1 -1
- package/dist/features/live/components/LiveItemDetailPageView.js +14 -10
- package/dist/features/media/hooks/useMedia.js +17 -0
- package/dist/features/media/repository/media-assets.repository.d.ts +46 -0
- package/dist/features/media/repository/media-assets.repository.js +31 -0
- package/dist/features/media/trust-signals.d.ts +85 -0
- package/dist/features/media/trust-signals.js +126 -0
- package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
- package/dist/features/parts/components/PartDetailPageView.js +2 -2
- package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
- package/dist/features/parts/components/PartsIndexPageView.js +2 -2
- package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
- package/dist/features/parts/components/PartsSearchBox.js +57 -0
- package/dist/features/parts/schemas/firestore.d.ts +149 -3
- package/dist/features/parts/schemas/firestore.js +184 -0
- package/dist/features/payments/repository/payout.repository.d.ts +15 -0
- package/dist/features/payments/repository/payout.repository.js +21 -0
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +12 -18
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +24 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +299 -17
- package/dist/features/price-index/lookup-target.d.ts +48 -0
- package/dist/features/price-index/lookup-target.js +107 -0
- package/dist/features/products/components/AvailabilityScopeHint.d.ts +22 -0
- package/dist/features/products/components/AvailabilityScopeHint.js +27 -0
- package/dist/features/products/components/CompareOverlay.d.ts +20 -2
- package/dist/features/products/components/CompareOverlay.js +23 -3
- package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
- package/dist/features/products/components/CustomSectionTabContent.js +29 -3
- package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
- package/dist/features/products/components/GroupMemberPicker.js +46 -8
- package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
- package/dist/features/products/components/GroupSettingsPanel.js +92 -3
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
- package/dist/features/products/components/ProductDetailPageView.js +81 -17
- package/dist/features/products/components/ProductForm.d.ts +13 -1
- package/dist/features/products/components/ProductForm.js +16 -2
- package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
- package/dist/features/products/components/ProductsIndexListing.js +3 -3
- package/dist/features/products/components/ShowGroupSection.js +15 -2
- package/dist/features/products/components/SparesListView.d.ts +7 -0
- package/dist/features/products/components/SparesListView.js +39 -0
- package/dist/features/products/components/SublistingCarouselSection.js +2 -1
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/repository/products.repository.d.ts +99 -0
- package/dist/features/products/repository/products.repository.js +240 -18
- package/dist/features/products/schemas/firestore.d.ts +97 -4
- package/dist/features/products/schemas/firestore.js +104 -0
- package/dist/features/products/schemas/index.d.ts +10 -19
- package/dist/features/products/schemas/index.js +23 -6
- package/dist/features/products/types/index.d.ts +45 -1
- package/dist/features/products/utils/group-member-image.d.ts +46 -0
- package/dist/features/products/utils/group-member-image.js +4 -0
- package/dist/features/products/utils/listing-badge-variant.js +4 -0
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/scams/components/ScamProfileView.js +1 -1
- package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
- package/dist/features/search/components/EntityTypeahead.js +92 -0
- package/dist/features/search/components/Search.d.ts +12 -1
- package/dist/features/search/components/Search.js +47 -3
- package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
- package/dist/features/search/components/SearchFacetRail.js +92 -0
- package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
- package/dist/features/search/components/SearchResultsClient.js +103 -0
- package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
- package/dist/features/search/components/SearchResultsPageView.js +2 -2
- package/dist/features/search/components/index.d.ts +0 -6
- package/dist/features/search/components/index.js +0 -3
- package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
- package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
- package/dist/features/search/hooks/useScopedSearch.js +114 -0
- package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
- package/dist/features/search/hooks/useSiteSearch.js +149 -0
- package/dist/features/search/index.d.ts +0 -4
- package/dist/features/search/index.js +0 -4
- package/dist/features/search/manifest.d.ts +12 -0
- package/dist/features/search/manifest.js +17 -2
- package/dist/features/search/server.d.ts +0 -3
- package/dist/features/search/server.js +0 -3
- package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +20 -0
- package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -14
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductShell.js +2 -1
- package/dist/features/seller/components/SellerProductsView.js +3 -2
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
- package/dist/features/seller/components/SellerSparesView.js +6 -0
- package/dist/features/seller/components/index.d.ts +2 -0
- package/dist/features/seller/components/index.js +1 -0
- package/dist/features/shell/CommandPalette.js +1 -1
- package/dist/features/sticker-trace/schemas/firestore.d.ts +19 -0
- package/dist/features/stores/components/StoreAuctionsListing.js +2 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
- package/dist/features/stores/components/StoreHeader.js +1 -2
- package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
- package/dist/features/stores/components/StoreSparesPageView.js +48 -0
- package/dist/features/stores/schemas/firestore.d.ts +19 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +392 -45
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
- package/dist/features/tester/seed-data/authored/index.js +16 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +5 -4
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +384 -18
- package/dist/index.d.ts +17 -57
- package/dist/index.js +35 -96
- package/dist/next/routing/route-map.d.ts +42 -1
- package/dist/next/routing/route-map.js +45 -0
- package/dist/providers/db-firebase/base.repository.d.ts +22 -0
- package/dist/providers/db-firebase/base.repository.js +36 -0
- package/dist/schemas/registry.d.ts +15 -6
- package/dist/security/blind-index-tokens.d.ts +54 -0
- package/dist/security/blind-index-tokens.js +152 -0
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/settings-encryption.d.ts +35 -0
- package/dist/security/settings-encryption.js +91 -0
- package/dist/seed/_helpers/brand-rows.js +38 -14
- package/dist/seed/_helpers/category-forest.js +73 -7
- package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
- package/dist/seed/_helpers/category-images-generated.js +81 -6
- package/dist/seed/_helpers/category-models.d.ts +1 -1
- package/dist/seed/_helpers/category-models.js +7 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
- package/dist/seed/_helpers/category-parts.d.ts +1 -1
- package/dist/seed/_helpers/category-parts.js +50 -2
- package/dist/seed/_helpers/character-features.d.ts +1 -1
- package/dist/seed/_helpers/character-features.js +2 -1
- package/dist/seed/_helpers/franchise-rows.js +10 -2
- package/dist/seed/_helpers/media.d.ts +47 -0
- package/dist/seed/_helpers/media.js +34 -0
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +49 -5
- package/dist/seed/authenticity-knowledge-seed-data.js +10001 -549
- package/dist/seed/categories-seed-data.js +124 -20
- package/dist/seed/grouped-listings-seed-data.js +16 -0
- package/dist/seed/homepage-sections-seed-data.js +94 -5
- package/dist/seed/index.d.ts +2 -3
- package/dist/seed/index.js +2 -2
- package/dist/seed/manifest.js +3 -0
- package/dist/seed/media-assets-seed-data.d.ts +1 -1
- package/dist/seed/media-assets-seed-data.js +746 -196
- package/dist/seed/model-composition-seed-data.js +122 -6
- package/dist/seed/part-glossary-seed-data.d.ts +1 -1
- package/dist/seed/part-glossary-seed-data.js +37219 -463
- package/dist/seed/products-art-seed-data.js +7 -18
- package/dist/seed/products-auctions-seed-data.js +56 -47
- package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
- package/dist/seed/products-beyblade-x-seed-data.js +476 -0
- package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
- package/dist/seed/products-catalogue-seed-data.js +1500 -1240
- package/dist/seed/products-classifieds-seed-data.js +9 -27
- package/dist/seed/products-digital-codes-seed-data.js +9 -18
- package/dist/seed/products-live-items-seed-data.js +5 -13
- package/dist/seed/products-preorders-seed-data.js +67 -33
- package/dist/seed/products-prize-draws-seed-data.js +8 -17
- package/dist/seed/products-spares-seed-data.d.ts +2 -0
- package/dist/seed/products-spares-seed-data.js +368 -0
- package/dist/seed/products-standard-seed-data.js +39 -126
- package/dist/seed/products-stickers-seed-data.js +59 -15
- package/dist/seed/site-settings-seed-data.js +8 -0
- package/dist/seo/json-ld.d.ts +25 -0
- package/dist/seo/json-ld.js +28 -0
- package/dist/server-entry.d.ts +3 -1
- package/dist/server-entry.js +2 -2
- package/dist/server.d.ts +11 -9
- package/dist/server.js +35 -25
- package/dist/styles.css +202 -1
- package/dist/tailwind-input.css +31 -17
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Accordion.js +1 -1
- package/dist/ui/components/Breadcrumb.js +1 -1
- package/dist/ui/components/DetailPageGallery.js +0 -2
- package/dist/ui/components/DetailPageHero.js +0 -1
- package/dist/ui/components/DetailPageTabs.js +1 -1
- package/dist/ui/components/Divider.js +3 -3
- package/dist/ui/components/GatedPrice.js +5 -1
- package/dist/ui/components/HorizontalScroller.js +1 -1
- package/dist/ui/components/ListingLayout.js +3 -3
- package/dist/ui/components/MediaTabs.style.css +81 -0
- package/dist/ui/components/Pagination.js +1 -1
- package/dist/ui/components/PendingValue.d.ts +45 -0
- package/dist/ui/components/PendingValue.js +7 -0
- package/dist/ui/components/Radio.style.css +119 -0
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/SettingsSection.js +0 -2
- package/dist/ui/components/SiteLogo.js +3 -0
- package/dist/ui/components/SiteMark.js +3 -0
- package/dist/ui/components/SortDropdown.js +1 -1
- package/dist/ui/components/SpecTable.d.ts +58 -0
- package/dist/ui/components/SpecTable.js +8 -0
- package/dist/ui/components/StarRating.js +1 -3
- package/dist/ui/components/SummaryCard.js +1 -1
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/icons/icon-registry.d.ts +1 -0
- package/dist/ui/icons/icon-registry.js +9 -1
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.js +2 -0
- package/dist/utils/search-txt-query.d.ts +12 -0
- package/dist/utils/search-txt-query.js +12 -0
- package/package.json +1 -1
- package/scripts/dedupe-peer-deps.mjs +18 -0
- package/scripts/seed-cli.mjs +250 -35
- package/scripts/verify-css-build.mjs +118 -37
- package/dist/_internal/server/features/search/actions.d.ts +0 -7
- package/dist/_internal/server/features/search/actions.js +0 -21
- package/dist/_internal/server/features/search/data.d.ts +0 -15
- package/dist/_internal/server/features/search/data.js +0 -18
- package/dist/_internal/server/features/search/index.d.ts +0 -3
- package/dist/_internal/server/features/search/index.js +0 -2
- package/dist/features/homepage/api/[id]/route.d.ts +0 -23
- package/dist/features/homepage/api/[id]/route.js +0 -103
- package/dist/features/homepage/api/route.d.ts +0 -14
- package/dist/features/homepage/api/route.js +0 -140
- package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
- package/dist/features/homepage/api/sections/[id]/route.js +0 -95
- package/dist/features/homepage/api/sections/route.d.ts +0 -13
- package/dist/features/homepage/api/sections/route.js +0 -82
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
- package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
- package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
- package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
- package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
- package/dist/features/homepage/components/HeroBanner.js +0 -43
- package/dist/features/homepage/components/HeroSection.d.ts +0 -7
- package/dist/features/homepage/components/HeroSection.js +0 -6
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
- package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
- package/dist/features/homepage/components/HomepageView.d.ts +0 -25
- package/dist/features/homepage/components/HomepageView.js +0 -5
- package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
- package/dist/features/homepage/components/NewsletterBanner.js +0 -37
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
- package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
- package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
- package/dist/features/homepage/components/TrustBadges.js +0 -46
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
- package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
- package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
- package/dist/features/homepage/hooks/useHomepage.js +0 -17
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
- package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
- package/dist/features/homepage/repository/homepage.repository.js +0 -25
- package/dist/features/search/actions/index.d.ts +0 -1
- package/dist/features/search/actions/index.js +0 -1
- package/dist/features/search/actions/search-actions.d.ts +0 -18
- package/dist/features/search/actions/search-actions.js +0 -43
- package/dist/features/search/api/route.d.ts +0 -22
- package/dist/features/search/api/route.js +0 -128
- package/dist/features/search/columns/index.d.ts +0 -17
- package/dist/features/search/columns/index.js +0 -49
- package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
- package/dist/features/search/components/SearchFiltersRow.js +0 -21
- package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
- package/dist/features/search/components/SearchResultsSection.js +0 -35
- package/dist/features/search/components/SearchView.d.ts +0 -27
- package/dist/features/search/components/SearchView.js +0 -8
- package/dist/features/search/hooks/useSearch.d.ts +0 -21
- package/dist/features/search/hooks/useSearch.js +0 -33
- package/dist/features/search/repository/search.repository.d.ts +0 -14
- package/dist/features/search/repository/search.repository.js +0 -59
- package/dist/features/search/schemas/index.d.ts +0 -70
- package/dist/features/search/schemas/index.js +0 -36
- package/dist/features/search/types/index.d.ts +0 -48
- package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
- package/dist/features/stores/components/StoreScopedSearch.js +0 -27
- package/dist/seed/defaults/homepage-sections.d.ts +0 -2
- package/dist/seed/defaults/homepage-sections.js +0 -60
- package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
- package/dist/seed/factories/homepage-section.factory.js +0 -13
- /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
|
@@ -78,10 +78,14 @@ import { authored as a_content_discovery__coupons } from "./content-discovery__c
|
|
|
78
78
|
import { authored as a_content_discovery__events } from "./content-discovery__events.js";
|
|
79
79
|
import { authored as a_content_discovery__faq_help } from "./content-discovery__faq-help.js";
|
|
80
80
|
import { authored as a_content_discovery__authenticity_checker } from "./content-discovery__authenticity-checker.js";
|
|
81
|
+
import { authoredNearMiss as a_content_discovery__authenticity_near_miss } from "./content-discovery__authenticity-checker.js";
|
|
82
|
+
import { authoredTypeahead as a_content_discovery__authenticity_typeahead } from "./content-discovery__authenticity-checker.js";
|
|
81
83
|
import { authored as a_content_discovery__parts_database } from "./content-discovery__parts-database.js";
|
|
82
84
|
import { authored as a_content_discovery__category_tabs_franchise_bundles } from "./content-discovery__category-tabs-franchise-bundles.js";
|
|
83
85
|
import { authored as a_content_discovery__notifications } from "./content-discovery__notifications.js";
|
|
84
86
|
import { authored as a_content_discovery__search } from "./content-discovery__search.js";
|
|
87
|
+
import { authored as a_content_discovery__site_wide_index } from "./content-discovery__site-wide-index.js";
|
|
88
|
+
import { authored as a_content_discovery__price_index_and_compare } from "./content-discovery__price-index-and-compare.js";
|
|
85
89
|
import { authored as a_cta_layout__checkout_bottom_bar } from "./cta-layout__checkout-bottom-bar.js";
|
|
86
90
|
import { authored as a_cta_layout__dialog_footers } from "./cta-layout__dialog-footers.js";
|
|
87
91
|
import { authored as a_cta_layout__editor_action_bar } from "./cta-layout__editor-action-bar.js";
|
|
@@ -117,6 +121,9 @@ import { authored as a_selling__listing_type_fields_roundtrip } from "./selling_
|
|
|
117
121
|
import { authored as a_selling__media_limits } from "./selling__media-limits.js";
|
|
118
122
|
import { authored as a_selling__seller_bids_bundles_filters } from "./selling__seller-bids-bundles-filters.js";
|
|
119
123
|
import { authored as a_tools__sticker_tracer } from "./tools__sticker-tracer.js";
|
|
124
|
+
import { authored as a_tools__sticker_promote_to_listings } from "./tools__sticker-promote-to-listings.js";
|
|
125
|
+
import { authored as a_buying__spares_and_groups } from "./buying__spares-and-groups.js";
|
|
126
|
+
import { authored as a_selling__spares_and_group_editing } from "./selling__spares-and-group-editing.js";
|
|
120
127
|
import { authored as a_selling__seller_catalog_org } from "./selling__seller-catalog-org.js";
|
|
121
128
|
import { authored as a_selling__seller_custom_brands } from "./selling__seller-custom-brands.js";
|
|
122
129
|
import { authored as a_selling__seller_guide } from "./selling__seller-guide.js";
|
|
@@ -137,6 +144,7 @@ import { authored as a_seo__page_metadata } from "./seo__page-metadata.js";
|
|
|
137
144
|
import { authored as a_seo__og_images } from "./seo__og-images.js";
|
|
138
145
|
import { authored as a_search_and_nav__employee_permissions } from "./search-and-nav__employee-permissions.js";
|
|
139
146
|
import { authored as a_search_and_nav__header_search } from "./search-and-nav__header-search.js";
|
|
147
|
+
import { authoredIndexEra as a_search_and_nav__header_search_index_era } from "./search-and-nav__header-search.js";
|
|
140
148
|
import { authored as a_search_and_nav__settings_deep_links } from "./search-and-nav__settings-deep-links.js";
|
|
141
149
|
import { authored as a_search_and_nav__sidebar_search } from "./search-and-nav__sidebar-search.js";
|
|
142
150
|
import { authored as a_selling__listing_edit_roundtrip } from "./selling__listing-edit-roundtrip.js";
|
|
@@ -209,10 +217,14 @@ export const AUTHORED_CASES = {
|
|
|
209
217
|
...a_content_discovery__events,
|
|
210
218
|
...a_content_discovery__faq_help,
|
|
211
219
|
...a_content_discovery__authenticity_checker,
|
|
220
|
+
...a_content_discovery__authenticity_near_miss,
|
|
221
|
+
...a_content_discovery__authenticity_typeahead,
|
|
212
222
|
...a_content_discovery__parts_database,
|
|
213
223
|
...a_content_discovery__category_tabs_franchise_bundles,
|
|
214
224
|
...a_content_discovery__notifications,
|
|
215
225
|
...a_content_discovery__search,
|
|
226
|
+
...a_content_discovery__site_wide_index,
|
|
227
|
+
...a_content_discovery__price_index_and_compare,
|
|
216
228
|
...a_cta_layout__checkout_bottom_bar,
|
|
217
229
|
...a_cta_layout__dialog_footers,
|
|
218
230
|
...a_cta_layout__editor_action_bar,
|
|
@@ -248,6 +260,9 @@ export const AUTHORED_CASES = {
|
|
|
248
260
|
...a_selling__media_limits,
|
|
249
261
|
...a_selling__seller_bids_bundles_filters,
|
|
250
262
|
...a_tools__sticker_tracer,
|
|
263
|
+
...a_tools__sticker_promote_to_listings,
|
|
264
|
+
...a_buying__spares_and_groups,
|
|
265
|
+
...a_selling__spares_and_group_editing,
|
|
251
266
|
...a_selling__seller_catalog_org,
|
|
252
267
|
...a_selling__seller_custom_brands,
|
|
253
268
|
...a_selling__seller_guide,
|
|
@@ -268,6 +283,7 @@ export const AUTHORED_CASES = {
|
|
|
268
283
|
...a_seo__og_images,
|
|
269
284
|
...a_search_and_nav__employee_permissions,
|
|
270
285
|
...a_search_and_nav__header_search,
|
|
286
|
+
...a_search_and_nav__header_search_index_era,
|
|
271
287
|
...a_search_and_nav__settings_deep_links,
|
|
272
288
|
...a_search_and_nav__sidebar_search,
|
|
273
289
|
...a_selling__listing_edit_roundtrip,
|
|
@@ -126,3 +126,60 @@ export const authored = {
|
|
|
126
126
|
endResult: "Read-only; nothing persists. The fourth query is the control — a search that returned nothing for everything would pass the first three for the wrong reason.",
|
|
127
127
|
},
|
|
128
128
|
};
|
|
129
|
+
/*
|
|
130
|
+
* ── The header now reaches /search (2026-10-19) ─────────────────────────
|
|
131
|
+
*
|
|
132
|
+
* One `onSearch` handler was the entire reason the cross-resource results
|
|
133
|
+
* page had no users: it mapped the type dropdown to a browse route and
|
|
134
|
+
* redirected there, so a buyer searching "dranzer" never learned there is
|
|
135
|
+
* also a category, a part, a blog post and an FAQ about it.
|
|
136
|
+
*/
|
|
137
|
+
export const authoredIndexEra = {
|
|
138
|
+
"checklist-search-and-nav-header-search-header-search-submit-lands-on-search": {
|
|
139
|
+
roles: ["guest"],
|
|
140
|
+
startPage: "/",
|
|
141
|
+
steps: [
|
|
142
|
+
"Open / in a private window.",
|
|
143
|
+
"Click the header search and type dranzer.",
|
|
144
|
+
"Press Enter.",
|
|
145
|
+
"Read the URL in the address bar.",
|
|
146
|
+
"Count the section headings on the page.",
|
|
147
|
+
"Find the 'See all … →' link on one group and read where it points.",
|
|
148
|
+
],
|
|
149
|
+
inputs: { query: "dranzer" },
|
|
150
|
+
expectedBehaviour: "Submitting goes to the cross-resource page. The nine per-type browse routes are not lost — each is its own group's 'See all' link, which is where a per-type destination belongs once results are grouped.",
|
|
151
|
+
expectedUiState: "The URL is /search?q=dranzer. Results appear under several headings. Any URL of the form /products?q=… or /stores?q=… means the old redirect is still in place.",
|
|
152
|
+
endResult: "Read-only; nothing persists.",
|
|
153
|
+
},
|
|
154
|
+
"checklist-search-and-nav-header-search-header-search-type-is-a-filter": {
|
|
155
|
+
roles: ["guest"],
|
|
156
|
+
startPage: "/",
|
|
157
|
+
steps: [
|
|
158
|
+
"Open / in a private window.",
|
|
159
|
+
"Open the header search and set the type dropdown to Stores.",
|
|
160
|
+
"Type beyblade and press Enter.",
|
|
161
|
+
"Read the URL and the sections shown.",
|
|
162
|
+
"Find the Stores group and click its 'See all stores →' link.",
|
|
163
|
+
"Go back, clear the query completely, and press Enter with an EMPTY box.",
|
|
164
|
+
"Note whether the page navigated anywhere.",
|
|
165
|
+
],
|
|
166
|
+
inputs: { type: "Stores", query: "beyblade" },
|
|
167
|
+
expectedBehaviour: "The dropdown narrows the result set; it no longer decides the destination. An empty query does nothing, because landing on a browse page you did not ask for is worse than staying put.",
|
|
168
|
+
expectedUiState: "You land on /search, not /stores. The Stores group's 'See all' link is what goes to /stores. Submitting an empty box leaves you exactly where you were.",
|
|
169
|
+
endResult: "Read-only; nothing persists.",
|
|
170
|
+
},
|
|
171
|
+
"checklist-search-and-nav-header-search-header-search-no-price-for-guest": {
|
|
172
|
+
roles: ["guest"],
|
|
173
|
+
startPage: "/",
|
|
174
|
+
steps: [
|
|
175
|
+
"Open / in a private window with no session.",
|
|
176
|
+
"Click the header search and type dranzer.",
|
|
177
|
+
"Read every suggestion row, including the small grey second line.",
|
|
178
|
+
"Look specifically for a ₹ figure anywhere in the dropdown.",
|
|
179
|
+
],
|
|
180
|
+
inputs: { query: "dranzer" },
|
|
181
|
+
expectedBehaviour: "The suggestion subtitle used to be the product's price, from an unauthenticated route cached publicly for 60 seconds — so every signed-out visitor saw prices in the header on every page of the site.",
|
|
182
|
+
expectedUiState: "Subtitles read as brand and category, e.g. 'Takara-Tomy · Attack Rings'. Any ₹ in the dropdown while signed out is a FAIL.",
|
|
183
|
+
endResult: "Read-only; nothing persists.",
|
|
184
|
+
},
|
|
185
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the seller side of Part Two —
|
|
3
|
+
* listing a spare, and the shared group-stock/rules editor.
|
|
4
|
+
* WHAT: 4 case(s), keyed by full checklist id.
|
|
5
|
+
*
|
|
6
|
+
* 🛑 "Stock is independent per listing" is the whole premise of the shared
|
|
7
|
+
* editor, so the round trip that proves it (edit one, reload, check the
|
|
8
|
+
* OTHER member) is the case that actually matters here — not whether the
|
|
9
|
+
* form submits.
|
|
10
|
+
*
|
|
11
|
+
* @tag domain:tester
|
|
12
|
+
* @tag layer:seed
|
|
13
|
+
* @tag pattern:none
|
|
14
|
+
* @tag access:server-only
|
|
15
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
16
|
+
* @tag sideEffects:none
|
|
17
|
+
*/
|
|
18
|
+
const SELLER_SIGNIN = "Sign in as a seller account that owns store-beyblade-arena.";
|
|
19
|
+
export const authored = {
|
|
20
|
+
"checklist-selling-spares-seller-and-group-editing-seller-can-list-a-spare": {
|
|
21
|
+
roles: ["seller"],
|
|
22
|
+
startPage: "/store/spares",
|
|
23
|
+
steps: [
|
|
24
|
+
SELLER_SIGNIN,
|
|
25
|
+
"Click \"List a Spare\".",
|
|
26
|
+
"Fill in title, price, colourway, and a stock quantity, then Publish.",
|
|
27
|
+
"Return to /store/spares.",
|
|
28
|
+
],
|
|
29
|
+
expectedBehaviour: "The seller product-shell accepts `listingType: \"spares\"` the same way it accepts the other nine types — this is the one new entry in `ProductListingMode`, so a missing wiring here would show as a form that silently fails to save or a blank listing-type dropdown.",
|
|
30
|
+
expectedUiState: "The new spare appears in the /store/spares list with the colourway shown as its distinguishing column (not a size column, which the other print types use), the price entered, and status Published.",
|
|
31
|
+
endResult: "BEFORE spares existed, there was no seller-facing way to list one at all. AFTER: creating one is the same shape as creating a sticker or an art print, just under a different type.",
|
|
32
|
+
},
|
|
33
|
+
"checklist-selling-spares-seller-and-group-editing-group-stock-edit-is-independent": {
|
|
34
|
+
roles: ["seller"],
|
|
35
|
+
startPage: "/store/products",
|
|
36
|
+
steps: [
|
|
37
|
+
SELLER_SIGNIN,
|
|
38
|
+
"Open the editor for a group PARENT product (one with \"isGroupParent\").",
|
|
39
|
+
"In the Members list, note the current stock figures for two different children, A and B.",
|
|
40
|
+
"In the shared stock editor, change ONLY child A's stock to a new number. Leave B's input untouched.",
|
|
41
|
+
"Click \"Save group stock\".",
|
|
42
|
+
"Reload the editor and re-read both children's stock figures.",
|
|
43
|
+
],
|
|
44
|
+
expectedBehaviour: "`PATCH .../group/stock` writes ONLY the member rows named in the request body — `saveGroupStock()` sends just the touched ids via `stockDraft`/`motDraft`, never a blanket broadcast across every child. Stock is independent per listing by design: a spare is one physical object a seller happens to have, and selling or restocking one must not touch another's figure.",
|
|
45
|
+
expectedUiState: "After reload, child A shows the NEW figure you entered. Child B shows EXACTLY the figure it had before — unchanged to the unit. This is the single most important assertion in this group: a shared pool bug would show up as B silently changing when only A was edited.",
|
|
46
|
+
endResult: "BEFORE this editor existed, each child's stock could only be edited by opening its own separate product page — tedious but safe. AFTER: editing is faster AND must remain exactly as safe. If B's figure moved at all, the editor is pooling stock rather than editing independent listings, which contradicts the feature's entire premise.",
|
|
47
|
+
},
|
|
48
|
+
"checklist-selling-spares-seller-and-group-editing-group-rules-save-and-reload": {
|
|
49
|
+
roles: ["seller"],
|
|
50
|
+
startPage: "/store/products",
|
|
51
|
+
steps: [
|
|
52
|
+
SELLER_SIGNIN,
|
|
53
|
+
"Open a group parent's editor and find the \"Selection rules\" form.",
|
|
54
|
+
"Change the min, max, per-item cap, and discount fields to new values different from what they currently show.",
|
|
55
|
+
"Click \"Save rules\".",
|
|
56
|
+
"Reload the editor page.",
|
|
57
|
+
"As a buyer (different tab/session), open that group's public picker.",
|
|
58
|
+
],
|
|
59
|
+
expectedBehaviour: "`PATCH .../group` writes only the keys present in the body, via the `in` test rather than a spread — so saving rules must not blank the group title, and reloading must show exactly what was saved, not a stale cached value. The public picker reads the SAME stored fields through `readGroupRules`, so it must reflect the new numbers on its very next load, with no separate publish step.",
|
|
60
|
+
expectedUiState: "After reload, the editor's four rule fields show the NEW values you typed, not the old ones and not blank. The buyer-facing picker, opened fresh, states the NEW rules in its rule-summary text — if it still shows the old numbers, something is caching the group document past this write.",
|
|
61
|
+
endResult: "BEFORE: a group had no rules to edit at all. AFTER: a seller's edit is live on the storefront immediately, and a reload of the editor proves the write actually persisted rather than only updating client-side state.",
|
|
62
|
+
},
|
|
63
|
+
"checklist-selling-spares-seller-and-group-editing-group-stock-partial-failure-reported": {
|
|
64
|
+
roles: ["seller"],
|
|
65
|
+
startPage: "/store/products",
|
|
66
|
+
steps: [
|
|
67
|
+
SELLER_SIGNIN,
|
|
68
|
+
"Open a group parent's editor in TWO browser tabs.",
|
|
69
|
+
"In tab 1, unlink one child from the group and confirm it.",
|
|
70
|
+
"Switch to tab 2 (which still shows the now-unlinked child in its member list) and, without reloading, edit that same child's stock PLUS a different, still-valid child's stock.",
|
|
71
|
+
"Click \"Save group stock\" in tab 2.",
|
|
72
|
+
],
|
|
73
|
+
expectedBehaviour: "The route re-fetches the CURRENT member list server-side before writing, so the unlinked child's id is no longer a member and is rejected — but the request must not fail as a whole. The still-valid child's stock edit must still be written. This is the 207-style partial result the route is built for.",
|
|
74
|
+
expectedUiState: "A toast or message reports a partial result (e.g. \"Updated 1; 1 could not be updated.\"). Reloading the editor shows the still-valid child's stock at its NEW value — the save for that row was not discarded just because the other row was stale.",
|
|
75
|
+
endResult: "BEFORE this endpoint existed, there was no shared editor and so no partial-failure case to handle. AFTER: a stale row (the common case when two admins or two tabs edit the same group near-simultaneously) costs nothing to the rows that were still valid.",
|
|
76
|
+
},
|
|
77
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for promoting a traced sticker sheet into
|
|
3
|
+
* real marketplace listings — distinct from the tracer's own "promote"
|
|
4
|
+
* (run -> sheet). This is sheet -> marketplace.
|
|
5
|
+
* WHAT: 3 case(s), keyed by full checklist id.
|
|
6
|
+
*
|
|
7
|
+
* 🛑 These depend on the sticker-tracer's own happy path having already
|
|
8
|
+
* produced an accepted, full-resolution-rendered run on a sheet — they are
|
|
9
|
+
* not reachable standing alone. Run the tracer's own cases (checklist-tools-
|
|
10
|
+
* sticker-tracer-*) up through "Accept & render" first.
|
|
11
|
+
*
|
|
12
|
+
* @tag domain:tester
|
|
13
|
+
* @tag layer:seed
|
|
14
|
+
* @tag pattern:none
|
|
15
|
+
* @tag access:server-only
|
|
16
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
17
|
+
* @tag sideEffects:none
|
|
18
|
+
*/
|
|
19
|
+
const ADMIN_SIGNIN = "Sign in as admin@letitrip.in / TempPass123!.";
|
|
20
|
+
export const authored = {
|
|
21
|
+
"checklist-tools-sticker-promote-to-listings-promote-creates-one-group": {
|
|
22
|
+
roles: ["admin"],
|
|
23
|
+
startPage: "/tools/sticker-tracer",
|
|
24
|
+
steps: [
|
|
25
|
+
ADMIN_SIGNIN,
|
|
26
|
+
"Open a sheet whose active run has already been accepted and rendered to full resolution, with at least one part marked a duplicate of another.",
|
|
27
|
+
"Click \"Promote to listings\". Pick \"Beyblade Arena\" as the store, enter 499 for the sheet price and 99 for the flat part price, then confirm.",
|
|
28
|
+
"Open the newly created parent listing's product page and view its group/\"Pick what you want\" section.",
|
|
29
|
+
],
|
|
30
|
+
expectedBehaviour: "The promoter creates one parent (the whole sheet) plus one child per UNIQUE part only — a part marked `duplicateOf` another must NOT get its own listing. All children are linked into ONE group via `linkChildrenToGroup`, a single batch call rather than N separate `linkChildToGroup` calls in a loop.",
|
|
31
|
+
expectedUiState: "The group picker on the parent's page shows every UNIQUE child — if the sheet had, say, 8 parts with 3 confirmed duplicates, the picker shows 5 members, not 1 and not 8. This is exactly the `linkChildToGroup` stale-append bug this phase fixed first: looping that call used to leave only the LAST child linked, so the picker showed just one member no matter how many parts existed.",
|
|
32
|
+
endResult: "BEFORE the fix, promoting an 8-part sheet silently produced a group whose parent claimed only 1 child, even though all 8 children individually had the correct `groupId` set. AFTER: the group's member list and the children's own `groupId`s agree.",
|
|
33
|
+
},
|
|
34
|
+
"checklist-tools-sticker-promote-to-listings-promoted-part-image-watermarked": {
|
|
35
|
+
roles: ["admin"],
|
|
36
|
+
startPage: "/tools/sticker-tracer",
|
|
37
|
+
steps: [
|
|
38
|
+
ADMIN_SIGNIN,
|
|
39
|
+
"After promoting a sheet, open one of the new CHILD listings' public product page and inspect its main image.",
|
|
40
|
+
"Separately, from the tracer's own sheet-review UI, download that same part's original full-resolution file (via the signed URL, not the public page).",
|
|
41
|
+
],
|
|
42
|
+
expectedBehaviour: "The marketplace copy is served through `/media/{shortId}`, which the proxy watermarks on read because the `mediaAssets` row for it was written with `watermarkedAt` deliberately absent. The admin's own download goes through a signed GCS URL pointing at the SAME `assetPath` — the clean original — with zero bytes duplicated between the two.",
|
|
43
|
+
expectedUiState: "The public listing's image carries a visible watermark. The admin's direct download of the same part is clean — no watermark at all. Both are visibly the same artwork at the same crop.",
|
|
44
|
+
endResult: "BEFORE this phase, there was no public listing for a traced part at all. AFTER: the same pixels serve two audiences two different ways from one stored object — if the public copy is clean, or the admin's download is watermarked, the `watermarkedAt` wiring has inverted.",
|
|
45
|
+
},
|
|
46
|
+
"checklist-tools-sticker-promote-to-listings-promote-refuses-before-full-res-render": {
|
|
47
|
+
roles: ["admin"],
|
|
48
|
+
startPage: "/tools/sticker-tracer",
|
|
49
|
+
steps: [
|
|
50
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
51
|
+
"Open a sheet that has been traced but whose run has NOT had \"Accept & render\" run on it (a fresh trace, or one accepted but not yet rendered to full resolution).",
|
|
52
|
+
"Attempt to promote it to listings.",
|
|
53
|
+
],
|
|
54
|
+
expectedBehaviour: "`promoteStickerSheetToListings` checks every precondition UP FRONT — an active run, at least one unique part, and every unique part actually carrying an `assetPath` — and refuses the WHOLE action if any is missing, rather than creating a handful of listings and silently skipping the rest.",
|
|
55
|
+
expectedUiState: "The action is refused with a message naming the missing step (e.g. \"accept and render the run before promoting it to listings\"). NO parent or child listing is created — checking the store's product list afterward shows nothing new.",
|
|
56
|
+
endResult: "BEFORE this check existed, promoting too early would have been the exact 'wrong data, no error' failure this whole phase exists to avoid: some parts listed, others silently missing, with nothing anywhere saying so. AFTER: the refusal happens before any write, so a half-promoted sheet cannot exist.",
|
|
57
|
+
},
|
|
58
|
+
};
|
|
@@ -248,8 +248,8 @@ export const authored = {
|
|
|
248
248
|
"Open the Tools entry in the main navigation and read its children.",
|
|
249
249
|
"Visit /tools and read the cards.",
|
|
250
250
|
],
|
|
251
|
-
expectedBehaviour: "
|
|
252
|
-
expectedUiState: "
|
|
251
|
+
expectedBehaviour: "A non-admin is refused. MEASURED on production 2026-10-19: the response is a 200 carrying an Unauthorized state, NOT a 307 — but no tracer UI is served, which is the property that matters. The nav child is filtered client-side, which is presentation only.",
|
|
252
|
+
expectedUiState: "An unauthorized / sign-in state, not the tracer. The phrase 'Choose a scan' appears nowhere on the page. The Tools dropdown does not list 'Sticker sheet tracer'. /tools itself renders normally with its other cards.",
|
|
253
253
|
endResult: "BEFORE/AFTER is unchanged for a buyer — this case exists to prove the gate holds. Nothing is created or persisted.",
|
|
254
254
|
},
|
|
255
255
|
"checklist-tools-sticker-tracer-guest-redirected": {
|
|
@@ -260,9 +260,10 @@ export const authored = {
|
|
|
260
260
|
"Navigate directly to /tools/sticker-tracer.",
|
|
261
261
|
"Then visit /tools.",
|
|
262
262
|
"View source on /tools/sticker-tracer's response and search for 'Choose a scan'.",
|
|
263
|
+
"In the same source, confirm a <meta name=\"robots\" content=\"noindex, nofollow\"> tag is present.",
|
|
263
264
|
],
|
|
264
|
-
expectedBehaviour: "A signed-out visitor
|
|
265
|
-
expectedUiState: "
|
|
265
|
+
expectedBehaviour: "A signed-out visitor gets no tracer UI. 🛑 MEASURED on production: a 200 with a sign-in state and `<title>Sticker sheet tracer</title>`, NOT a redirect — so the plan's premise that 'a crawler gets a redirect and there is no indexable content at that URL' is FALSE. What actually keeps it out of the index is the `noindex, nofollow` meta plus the robots.txt Disallow, both verified live. That is exactly why all three protections were specified as non-redundant.",
|
|
266
|
+
expectedUiState: "A sign-in state rather than the tracer. `Choose a scan` appears NOWHERE in the response body — that absence is the real assertion. /tools renders normally and is unaffected.",
|
|
266
267
|
endResult: "BEFORE/AFTER unchanged for a guest — this proves the gate is server-side rather than a hidden control. Nothing is persisted.",
|
|
267
268
|
},
|
|
268
269
|
"checklist-tools-sticker-tracer-storage-meter-honest": {
|