@mohasinac/appkit 4.53.0 → 4.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +3 -3
- package/dist/_internal/client/scaffolds/AppShell.js +1 -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/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/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/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 +25 -0
- package/dist/_internal/server/features/stores/tabs.js +122 -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 +2 -1
- 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 +39 -15
- package/dist/constants/api-endpoints.js +28 -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 +4 -11
- 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 +113 -0
- package/dist/features/categories/components/BrandDetailPageView.js +19 -3
- package/dist/features/categories/components/BrandDetailTabs.js +10 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +141 -14
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
- 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 +4 -9
- 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 +4 -9
- 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 +4 -9
- 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 +4 -11
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
- package/dist/features/products/components/CompareOverlay.d.ts +18 -1
- package/dist/features/products/components/CompareOverlay.js +21 -2
- 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 +91 -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 +74 -15
- 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/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 +98 -0
- package/dist/features/products/repository/products.repository.js +235 -17
- 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 +39 -0
- package/dist/features/products/utils/group-member-image.js +3 -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/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/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 +280 -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 +372 -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 +441 -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 +9 -9
- package/dist/server.js +27 -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 +135 -26
- 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
|
@@ -59,6 +59,45 @@ export declare const PART_SLOT_VALUES: {
|
|
|
59
59
|
readonly BLADE: "blade";
|
|
60
60
|
readonly RATCHET: "ratchet";
|
|
61
61
|
readonly BIT: "bit";
|
|
62
|
+
readonly GT_CHIP: "gt-chip";
|
|
63
|
+
readonly GATINKO_CHIP: "gatinko-chip";
|
|
64
|
+
readonly BASE: "base";
|
|
65
|
+
readonly SUPERKING_CHIP: "superking-chip";
|
|
66
|
+
readonly DB_CORE: "db-core";
|
|
67
|
+
readonly RING: "ring";
|
|
68
|
+
readonly ARMOR_TIP: "armor-tip";
|
|
69
|
+
readonly FRAME: "frame";
|
|
70
|
+
readonly CHASSIS: "chassis";
|
|
71
|
+
readonly BU_BLADE: "bu-blade";
|
|
72
|
+
readonly QS_BLADE: "qs-blade";
|
|
73
|
+
readonly DRIVE_CHIP: "drive-chip";
|
|
74
|
+
readonly STORM_CHIP: "storm-chip";
|
|
75
|
+
readonly STRIKE_CHIP: "strike-chip";
|
|
76
|
+
readonly GRAVITY_RING: "gravity-ring";
|
|
77
|
+
readonly SPIRIT_SHIELD: "spirit-shield";
|
|
78
|
+
readonly SPIRIT_AXLE: "spirit-axle";
|
|
79
|
+
readonly DISC_INTEGRATED_DRIVER: "disc-integrated-driver";
|
|
80
|
+
readonly LOCK_CHIP: "lock-chip";
|
|
81
|
+
readonly MAIN_BLADE: "main-blade";
|
|
82
|
+
readonly ASSIST_BLADE: "assist-blade";
|
|
83
|
+
readonly OVER_BLADE: "over-blade";
|
|
84
|
+
readonly METAL_BLADE: "metal-blade";
|
|
85
|
+
readonly RATCHET_INTEGRATED_BLADE: "ratchet-integrated-blade";
|
|
86
|
+
readonly RATCHET_INTEGRATED_BIT: "ratchet-integrated-bit";
|
|
87
|
+
readonly WARRIOR_WHEEL: "warrior-wheel";
|
|
88
|
+
readonly ELEMENT_WHEEL: "element-wheel";
|
|
89
|
+
readonly LIGHT_WHEEL: "light-wheel";
|
|
90
|
+
readonly WHEEL: "wheel";
|
|
91
|
+
readonly SHOGUN_FACE_BOLT: "shogun-face-bolt";
|
|
92
|
+
readonly DOME_SPIN_TRACK: "dome-spin-track";
|
|
93
|
+
readonly EVOLUTION_GEAR: "evolution-gear";
|
|
94
|
+
readonly BIT_PROTECTOR: "bit-protector";
|
|
95
|
+
readonly WEIGHT: "weight";
|
|
96
|
+
readonly CORE: "core";
|
|
97
|
+
readonly SUPPORT_PARTS: "support-parts";
|
|
98
|
+
readonly SUB_ATTACK_RING: "sub-attack-ring";
|
|
99
|
+
readonly CEW: "cew";
|
|
100
|
+
readonly GEAR_CHIP: "gear-chip";
|
|
62
101
|
};
|
|
63
102
|
export type PartSlot = (typeof PART_SLOT_VALUES)[keyof typeof PART_SLOT_VALUES];
|
|
64
103
|
/**
|
|
@@ -122,6 +161,55 @@ export declare const ALL_PART_SLOTS: readonly PartSlot[];
|
|
|
122
161
|
*/
|
|
123
162
|
export declare function partSlotFromSegment(segment: string): PartSlot | null;
|
|
124
163
|
/** One part. */
|
|
164
|
+
/**
|
|
165
|
+
* How much a given spec value is to be trusted, in the corpus's own
|
|
166
|
+
* vocabulary so nothing is lost in translation.
|
|
167
|
+
*
|
|
168
|
+
* `confirmed` — `FACT(PDB)`, verified against PlasticsDB's own part page, or
|
|
169
|
+
* a `[CONFIRMED CSn Case m]` citation in the case study.
|
|
170
|
+
* `fact` — a bare `FACT` tag, or a wiki infobox value.
|
|
171
|
+
* `inferred` — the source flags it as an inference.
|
|
172
|
+
* `estimated` — the source marks it approximate. 🛑 A `~` in a COLUMN HEADER
|
|
173
|
+
* marks the whole column, which is how gen3/gen4 write it; a
|
|
174
|
+
* per-cell check alone would publish 300+ estimates as facts.
|
|
175
|
+
*/
|
|
176
|
+
export type PartSpecConfidence = "confirmed" | "fact" | "inferred" | "estimated";
|
|
177
|
+
/** One labelled specification row. */
|
|
178
|
+
export interface PartSpec {
|
|
179
|
+
/** "Weight", "Material", "Full width", "Stats", "WBO legality". */
|
|
180
|
+
label: string;
|
|
181
|
+
/** Verbatim from the source. Multi-valued cells are never resolved. */
|
|
182
|
+
value: string;
|
|
183
|
+
/** "g", "mm". Absent for a non-dimensional value. */
|
|
184
|
+
unit?: string;
|
|
185
|
+
/** Which extractor produced it, for the provenance footnote. */
|
|
186
|
+
source?: string;
|
|
187
|
+
confidence?: PartSpecConfidence;
|
|
188
|
+
}
|
|
189
|
+
/** One release of a part: which box, which bey, which vendor, which colour. */
|
|
190
|
+
export interface PartRelease {
|
|
191
|
+
/** "Takara Tomy", "Hasbro", "Sonokong", "Youngtoys". */
|
|
192
|
+
vendor: string;
|
|
193
|
+
/** The box code. `BX-00` is the wiki's marker for "no retail number". */
|
|
194
|
+
code?: string;
|
|
195
|
+
/** The Beyblade it came in. */
|
|
196
|
+
bey: string;
|
|
197
|
+
/** The set or multipack, when the bey shipped inside one. */
|
|
198
|
+
set?: string;
|
|
199
|
+
colourway?: string;
|
|
200
|
+
/** "G1 Prize", "CoroCoro Exclusive" — the channel, not the colour. */
|
|
201
|
+
distribution?: string[];
|
|
202
|
+
}
|
|
203
|
+
/** A distinct colourway, deduped on (colour, channel). */
|
|
204
|
+
export interface PartColourway {
|
|
205
|
+
/** "Red Ver.", "Bronze Ver.", "Supreme Dragon Ver.". */
|
|
206
|
+
colourway: string;
|
|
207
|
+
vendor: string;
|
|
208
|
+
code?: string;
|
|
209
|
+
distribution?: string;
|
|
210
|
+
/** The bey this colourway was released in. */
|
|
211
|
+
inBey: string;
|
|
212
|
+
}
|
|
125
213
|
export interface PartGlossaryDocument extends BaseDocument {
|
|
126
214
|
/** `${slot}--${codeOrSlug}` — both halves, because a code is not unique. */
|
|
127
215
|
id: string;
|
|
@@ -148,11 +236,70 @@ export interface PartGlossaryDocument extends BaseDocument {
|
|
|
148
236
|
* than a lookup table.
|
|
149
237
|
*/
|
|
150
238
|
usedBy?: string[];
|
|
151
|
-
/** Code, name and the spoken form of the code
|
|
239
|
+
/** Code, name and the spoken form of the code. */
|
|
152
240
|
aliases?: string[];
|
|
153
241
|
/** Which extractor source contributed the row. */
|
|
154
242
|
source?: string;
|
|
155
|
-
|
|
243
|
+
/**
|
|
244
|
+
* Labelled specification rows, ready to render.
|
|
245
|
+
*
|
|
246
|
+
* 🛑 ONE array rather than a dozen typed fields. Material, dimensions, spin
|
|
247
|
+
* direction, JP name, romaji, product code, release date, WBO legality and
|
|
248
|
+
* the 0–6 stat grid all render as "a labelled row" and none has a query, a
|
|
249
|
+
* sort, a filter or a format of its own. Twelve typed fields would be twelve
|
|
250
|
+
* projection-triage entries for zero behaviour; promote one the day a reader
|
|
251
|
+
* is named for it.
|
|
252
|
+
*
|
|
253
|
+
* 🛑 NEVER carries a `Weight` row when `weightG` is set. The page renders
|
|
254
|
+
* the weight as a badge, so a row too would show it twice and the two could
|
|
255
|
+
* disagree the moment either is edited. The generator enforces this and
|
|
256
|
+
* `verify-part-specs` asserts it.
|
|
257
|
+
*/
|
|
258
|
+
specs?: PartSpec[];
|
|
259
|
+
/**
|
|
260
|
+
* One sentence per part, generated from the facts above.
|
|
261
|
+
*
|
|
262
|
+
* 🛑 GENERATED, NEVER COPIED. Every source page has an `== Description ==`
|
|
263
|
+
* section and lifting it is both a CC-BY-SA problem and the precise
|
|
264
|
+
* anti-pattern the competitor crawl recorded of a rival store — wiki bodies
|
|
265
|
+
* lifted verbatim, one shipping with the literal UI string "Add to
|
|
266
|
+
* Wishlist". What this replaces is worse than nothing SEO-wise: a template
|
|
267
|
+
* reading "{name} is a Beyblade {label}. See which models use it", identical
|
|
268
|
+
* across 752 pages, which made them compete with each other.
|
|
269
|
+
*/
|
|
270
|
+
seoDescription?: string;
|
|
271
|
+
/**
|
|
272
|
+
* Which Beyblades and sets this part shipped in, first-seen order.
|
|
273
|
+
*
|
|
274
|
+
* Distinct from `usedBy`, and both are worth having: `usedBy` holds
|
|
275
|
+
* `modelComposition` IDS that resolve to our own category leaves, while this
|
|
276
|
+
* holds the wiki's PRODUCT names including sets and multipacks we have no
|
|
277
|
+
* leaf for. 10,723 references extracted across 2,008 pages.
|
|
278
|
+
*/
|
|
279
|
+
shippedIn?: string[];
|
|
280
|
+
/** The per-release rows `shippedIn` and `colourways` are derived from. */
|
|
281
|
+
releases?: PartRelease[];
|
|
282
|
+
/**
|
|
283
|
+
* Colourways, with the channel each was released through.
|
|
284
|
+
*
|
|
285
|
+
* 🛑 Absent and empty mean different things. Absent = "we have not looked";
|
|
286
|
+
* `[]` with `colourwaysDocumented: true` = "a source asserts there are
|
|
287
|
+
* none". Without that distinction a part with one release and a part we
|
|
288
|
+
* never checked render identically, which is Root Cause #57's exact symptom.
|
|
289
|
+
*/
|
|
290
|
+
colourways?: PartColourway[];
|
|
291
|
+
colourwaysDocumented?: boolean;
|
|
292
|
+
/**
|
|
293
|
+
* A mould revision changes the physical part — weight, burst resistance — so
|
|
294
|
+
* it is a DIFFERENT axis from colour and must not be folded into it.
|
|
295
|
+
*/
|
|
296
|
+
hasMoldVariations?: boolean;
|
|
297
|
+
/** `/media/<slug>`. 🛑 Never a raw Storage host URL. */
|
|
298
|
+
image?: string;
|
|
299
|
+
/** The wiki page the photo came from — the CC-BY-SA attribution target. */
|
|
300
|
+
imageSourceUrl?: string;
|
|
301
|
+
/** "Read more on the Beyblade Wiki". Facts taken, prose theirs, link out. */
|
|
302
|
+
sourceUrl?: string;
|
|
156
303
|
}
|
|
157
304
|
/** One slot of one model's composition. */
|
|
158
305
|
export interface ModelSlot {
|
|
@@ -229,7 +376,6 @@ export interface ModelCompositionDocument extends BaseDocument {
|
|
|
229
376
|
source?: string;
|
|
230
377
|
/** The named-model category this composition describes, when one exists. */
|
|
231
378
|
categoryId?: string;
|
|
232
|
-
searchTxt?: string[];
|
|
233
379
|
}
|
|
234
380
|
/** `(slot, code|name)` → document id. The ONE place this is composed. */
|
|
235
381
|
export declare function partGlossaryId(slot: PartSlot, codeOrName: string): string;
|
|
@@ -27,6 +27,71 @@ export const PART_SLOT_VALUES = {
|
|
|
27
27
|
BLADE: "blade",
|
|
28
28
|
RATCHET: "ratchet",
|
|
29
29
|
BIT: "bit",
|
|
30
|
+
/*
|
|
31
|
+
* ── 🛑 THE OTHER 39, ADDED 2026-10-20 FROM THE WIKI RE-CRAWL ─────────────
|
|
32
|
+
*
|
|
33
|
+
* The original 20 predate Gatinko, Sparking, Dynamite Battle, QuadDrive,
|
|
34
|
+
* QuadStrike, Burst Ultimate and the whole Beyblade X Custom line. These are
|
|
35
|
+
* not wiki noise — `case study/BEYBLADE MASTER REFERENCE.md` documents the
|
|
36
|
+
* STACK of each system, and every key below is a slot in one of them:
|
|
37
|
+
*
|
|
38
|
+
* GT / Gatinko GT Chip -> Layer Base -> Forge Disc -> Driver
|
|
39
|
+
* SK / Sparking Sparking Chip -> Layer Base -> Forge Disc -> Driver
|
|
40
|
+
* DB DB Core -> Armor -> Layer Ring -> Forge Disc -> Driver
|
|
41
|
+
* CX Lock Chip + Main Blade + Assist Blade -> Ratchet -> Bit
|
|
42
|
+
* CX Expand Lock Chip + Over Blade + Metal Blade + Assist Blade -> …
|
|
43
|
+
*
|
|
44
|
+
* Measured: the live `Category:Parts` holds 2,261 English pages against our
|
|
45
|
+
* 752 rows, and 569 of them carried a classification this union could not
|
|
46
|
+
* express — so they were unrepresentable rather than merely absent.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 MAPPED, NOT DUPLICATED. `Forge Disc` is `disc`, `Armor` is `armour`,
|
|
49
|
+
* `Energy Layer` is `layer`, `Layer Base` is `base`, `Sparking Chip` is
|
|
50
|
+
* `superking-chip`. A second key for any of them would split one part
|
|
51
|
+
* family in half: the existing 752 rows in one, every new row in the other.
|
|
52
|
+
* The alias map lives in `scripts/lib/part-slot-vocab.mjs`, which is the
|
|
53
|
+
* SOURCE this union mirrors — the same contract the 20 above already have
|
|
54
|
+
* with `extract-part-composition.mjs`.
|
|
55
|
+
*/
|
|
56
|
+
GT_CHIP: "gt-chip",
|
|
57
|
+
GATINKO_CHIP: "gatinko-chip",
|
|
58
|
+
BASE: "base",
|
|
59
|
+
SUPERKING_CHIP: "superking-chip",
|
|
60
|
+
DB_CORE: "db-core",
|
|
61
|
+
RING: "ring",
|
|
62
|
+
ARMOR_TIP: "armor-tip",
|
|
63
|
+
FRAME: "frame",
|
|
64
|
+
CHASSIS: "chassis",
|
|
65
|
+
BU_BLADE: "bu-blade",
|
|
66
|
+
QS_BLADE: "qs-blade",
|
|
67
|
+
DRIVE_CHIP: "drive-chip",
|
|
68
|
+
STORM_CHIP: "storm-chip",
|
|
69
|
+
STRIKE_CHIP: "strike-chip",
|
|
70
|
+
GRAVITY_RING: "gravity-ring",
|
|
71
|
+
SPIRIT_SHIELD: "spirit-shield",
|
|
72
|
+
SPIRIT_AXLE: "spirit-axle",
|
|
73
|
+
DISC_INTEGRATED_DRIVER: "disc-integrated-driver",
|
|
74
|
+
LOCK_CHIP: "lock-chip",
|
|
75
|
+
MAIN_BLADE: "main-blade",
|
|
76
|
+
ASSIST_BLADE: "assist-blade",
|
|
77
|
+
OVER_BLADE: "over-blade",
|
|
78
|
+
METAL_BLADE: "metal-blade",
|
|
79
|
+
RATCHET_INTEGRATED_BLADE: "ratchet-integrated-blade",
|
|
80
|
+
RATCHET_INTEGRATED_BIT: "ratchet-integrated-bit",
|
|
81
|
+
WARRIOR_WHEEL: "warrior-wheel",
|
|
82
|
+
ELEMENT_WHEEL: "element-wheel",
|
|
83
|
+
LIGHT_WHEEL: "light-wheel",
|
|
84
|
+
WHEEL: "wheel",
|
|
85
|
+
SHOGUN_FACE_BOLT: "shogun-face-bolt",
|
|
86
|
+
DOME_SPIN_TRACK: "dome-spin-track",
|
|
87
|
+
EVOLUTION_GEAR: "evolution-gear",
|
|
88
|
+
BIT_PROTECTOR: "bit-protector",
|
|
89
|
+
WEIGHT: "weight",
|
|
90
|
+
CORE: "core",
|
|
91
|
+
SUPPORT_PARTS: "support-parts",
|
|
92
|
+
SUB_ATTACK_RING: "sub-attack-ring",
|
|
93
|
+
CEW: "cew",
|
|
94
|
+
GEAR_CHIP: "gear-chip",
|
|
30
95
|
};
|
|
31
96
|
/**
|
|
32
97
|
* Buyer-facing label per slot.
|
|
@@ -62,6 +127,47 @@ export const PART_SLOT_LABEL = {
|
|
|
62
127
|
blade: "Blade",
|
|
63
128
|
ratchet: "Ratchet",
|
|
64
129
|
bit: "Bit",
|
|
130
|
+
// The 39 added 2026-10-20. Labels are the wiki's own `Classification=`
|
|
131
|
+
// spelling, which is also what a buyer sees printed in product listings.
|
|
132
|
+
"gt-chip": "GT Chip",
|
|
133
|
+
"gatinko-chip": "Gatinko Chip",
|
|
134
|
+
base: "Layer Base",
|
|
135
|
+
"superking-chip": "Superking Chip",
|
|
136
|
+
"db-core": "DB Core",
|
|
137
|
+
ring: "Layer Ring",
|
|
138
|
+
"armor-tip": "Armor Tip",
|
|
139
|
+
frame: "Frame",
|
|
140
|
+
chassis: "Chassis",
|
|
141
|
+
"bu-blade": "BU Blade",
|
|
142
|
+
"qs-blade": "QS Blade",
|
|
143
|
+
"drive-chip": "Drive Chip",
|
|
144
|
+
"storm-chip": "Storm Chip",
|
|
145
|
+
"strike-chip": "Strike Chip",
|
|
146
|
+
"gravity-ring": "Gravity Ring",
|
|
147
|
+
"spirit-shield": "Spirit Shield",
|
|
148
|
+
"spirit-axle": "Spirit Axle",
|
|
149
|
+
"disc-integrated-driver": "Disc-Integrated Driver",
|
|
150
|
+
"lock-chip": "Lock Chip",
|
|
151
|
+
"main-blade": "Main Blade",
|
|
152
|
+
"assist-blade": "Assist Blade",
|
|
153
|
+
"over-blade": "Over Blade",
|
|
154
|
+
"metal-blade": "Metal Blade",
|
|
155
|
+
"ratchet-integrated-blade": "Ratchet-Integrated Blade",
|
|
156
|
+
"ratchet-integrated-bit": "Ratchet-Integrated Bit",
|
|
157
|
+
"warrior-wheel": "Warrior Wheel",
|
|
158
|
+
"element-wheel": "Element Wheel",
|
|
159
|
+
"light-wheel": "Light Wheel",
|
|
160
|
+
wheel: "Wheel",
|
|
161
|
+
"shogun-face-bolt": "Shogun Face Bolt",
|
|
162
|
+
"dome-spin-track": "Dome Spin Track",
|
|
163
|
+
"evolution-gear": "Evolution Gear",
|
|
164
|
+
"bit-protector": "Bit Protector",
|
|
165
|
+
weight: "Weight",
|
|
166
|
+
core: "Core",
|
|
167
|
+
"support-parts": "Support Parts",
|
|
168
|
+
"sub-attack-ring": "Sub Attack Ring",
|
|
169
|
+
cew: "Customize Engine Weight",
|
|
170
|
+
"gear-chip": "Gear Chip",
|
|
65
171
|
};
|
|
66
172
|
/**
|
|
67
173
|
* Which CATEGORY node a part of this classification is filed under.
|
|
@@ -123,6 +229,68 @@ export const PART_SLOT_CATEGORY = {
|
|
|
123
229
|
blade: "category-x-blades",
|
|
124
230
|
ratchet: "category-x-ratchets",
|
|
125
231
|
bit: "category-x-bits",
|
|
232
|
+
/*
|
|
233
|
+
* ── The 39 added 2026-10-20 ──────────────────────────────────────────────
|
|
234
|
+
*
|
|
235
|
+
* 🛑 EVERY TARGET ALREADY EXISTS IN `category-forest.ts`. Verified against
|
|
236
|
+
* it rather than assumed: no new parent node is created here, so the forest
|
|
237
|
+
* is untouched, `buildCategoryTree` derives the same shape it already does,
|
|
238
|
+
* and the only change is which parent a part leaf nests under. Minting 39
|
|
239
|
+
* new nodes would be a taxonomy restructure — and the parts layer is moving
|
|
240
|
+
* out of categories in a follow-up plan anyway, so adding nodes to it now
|
|
241
|
+
* would be churn with a known expiry.
|
|
242
|
+
*
|
|
243
|
+
* Grouped by what the part IS, not by when we learned about it: the Burst
|
|
244
|
+
* chip/armour node already collects "small Burst component that is not a
|
|
245
|
+
* layer, disc or driver", which is exactly what GT/Gatinko/Superking/DB/
|
|
246
|
+
* QuadDrive chips are.
|
|
247
|
+
*/
|
|
248
|
+
// Burst — layer stack components.
|
|
249
|
+
base: "category-burst-layers",
|
|
250
|
+
ring: "category-burst-layers",
|
|
251
|
+
frame: "category-burst-layers",
|
|
252
|
+
chassis: "category-burst-layers",
|
|
253
|
+
"bu-blade": "category-burst-layers",
|
|
254
|
+
"qs-blade": "category-burst-layers",
|
|
255
|
+
"gravity-ring": "category-burst-layers",
|
|
256
|
+
// Burst — chips, armour and the small bits that bolt onto a layer.
|
|
257
|
+
"gt-chip": "category-burst-chips-armour",
|
|
258
|
+
"gatinko-chip": "category-burst-chips-armour",
|
|
259
|
+
"superking-chip": "category-burst-chips-armour",
|
|
260
|
+
"db-core": "category-burst-chips-armour",
|
|
261
|
+
"armor-tip": "category-burst-chips-armour",
|
|
262
|
+
"drive-chip": "category-burst-chips-armour",
|
|
263
|
+
"storm-chip": "category-burst-chips-armour",
|
|
264
|
+
"strike-chip": "category-burst-chips-armour",
|
|
265
|
+
"spirit-shield": "category-burst-chips-armour",
|
|
266
|
+
"spirit-axle": "category-burst-chips-armour",
|
|
267
|
+
weight: "category-burst-chips-armour",
|
|
268
|
+
core: "category-burst-chips-armour",
|
|
269
|
+
// Burst — a driver with the disc moulded in is still a driver.
|
|
270
|
+
"disc-integrated-driver": "category-burst-drivers",
|
|
271
|
+
// Beyblade X — the CX Custom line, which has its own node.
|
|
272
|
+
"lock-chip": "category-x-custom-cx",
|
|
273
|
+
"main-blade": "category-x-custom-cx",
|
|
274
|
+
"assist-blade": "category-x-custom-cx",
|
|
275
|
+
"over-blade": "category-x-custom-cx",
|
|
276
|
+
"metal-blade": "category-x-custom-cx",
|
|
277
|
+
"gear-chip": "category-x-custom-cx",
|
|
278
|
+
// Beyblade X — integrated parts file under the half a buyer shops for.
|
|
279
|
+
"ratchet-integrated-blade": "category-x-blades",
|
|
280
|
+
"ratchet-integrated-bit": "category-x-bits",
|
|
281
|
+
// Metal Fight / Shogun Steel.
|
|
282
|
+
"warrior-wheel": "category-metal-fusion-wheels",
|
|
283
|
+
"element-wheel": "category-metal-fusion-wheels",
|
|
284
|
+
"light-wheel": "category-metal-fusion-wheels",
|
|
285
|
+
wheel: "category-metal-fusion-wheels",
|
|
286
|
+
"shogun-face-bolt": "category-metal-face-bolts",
|
|
287
|
+
"dome-spin-track": "category-metal-spin-tracks",
|
|
288
|
+
// Plastic Generation / HMS.
|
|
289
|
+
"sub-attack-ring": "category-original-attack-rings",
|
|
290
|
+
"evolution-gear": "category-original-engine-gears",
|
|
291
|
+
"bit-protector": "category-original-bit-chips",
|
|
292
|
+
cew: "category-original-weight-disks",
|
|
293
|
+
"support-parts": "category-original-parts",
|
|
126
294
|
};
|
|
127
295
|
/** Every slot key, for an index page that must not hand-write the list. */
|
|
128
296
|
export const ALL_PART_SLOTS = Object.values(PART_SLOT_VALUES);
|
|
@@ -169,6 +337,22 @@ export function partGlossaryId(slot, codeOrName) {
|
|
|
169
337
|
export const LISTING_TYPE_HAS_COMPOSITION = {
|
|
170
338
|
standard: true,
|
|
171
339
|
auction: true,
|
|
340
|
+
/*
|
|
341
|
+
* 🛑 FALSE, and this is the one entry worth arguing for.
|
|
342
|
+
*
|
|
343
|
+
* `spares` is tempting to set true — it is the most part-shaped type in the
|
|
344
|
+
* union — and it would be a worse version of the exact defect this map's
|
|
345
|
+
* docblock records. A spare attack ring IS a part; it is not the assembly
|
|
346
|
+
* the composition describes. True would give an attack ring a "Parts" tab
|
|
347
|
+
* whose contents are an attack ring, a weight disk and a blade base: one
|
|
348
|
+
* level deeper into wrong than the poster was.
|
|
349
|
+
*
|
|
350
|
+
* The reverse direction is the useful one and it is phase F: a spare links
|
|
351
|
+
* UP to its glossary entry via `sparePartGlossaryId`, and that entry lists
|
|
352
|
+
* the models the part fits. "What is this a part of" is a real question; "what
|
|
353
|
+
* parts is this part made of" is not.
|
|
354
|
+
*/
|
|
355
|
+
spares: false,
|
|
172
356
|
"pre-order": true,
|
|
173
357
|
"prize-draw": true,
|
|
174
358
|
classified: true,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Data access layer for payout documents in Firestore.
|
|
5
5
|
* Handles seller payout requests and admin payout processing.
|
|
6
6
|
*/
|
|
7
|
+
import type { JsonValue } from "../../../schemas/types";
|
|
7
8
|
import { BaseRepository, parseSieveDateValue, type SieveModel, type FirebaseSieveResult } from "../../../providers/db-firebase";
|
|
8
9
|
import type { DocumentReference } from "firebase-admin/firestore";
|
|
9
10
|
import type { PayoutDocument, PayoutPlain, PayoutCreateInput, PayoutRefundDeduction, PayoutStatus, PayoutUpdateInput } from "../schemas";
|
|
@@ -51,6 +52,20 @@ export declare class PayoutRepository extends BaseRepository<PayoutDocument> {
|
|
|
51
52
|
*/
|
|
52
53
|
protected piiFields: readonly ["sellerEmail", "upiId"];
|
|
53
54
|
protected piiIndexMap: Record<string, string>;
|
|
55
|
+
/**
|
|
56
|
+
* Admin search by seller name/email, without decryption.
|
|
57
|
+
*
|
|
58
|
+
* 🛑 THIS IS THE ONE THAT MATTERS FOR THE TESTER HARNESS. `payouts` is
|
|
59
|
+
* SEED_TRANSACTIONAL: it cascades on `storeId` whenever its store is
|
|
60
|
+
* wiped, then gets RE-SEEDED from `appkit/src/seed/payouts-seed-data.ts`.
|
|
61
|
+
* The seed file has no `sellerTokensIndex` field — only this hook produces
|
|
62
|
+
* one — so a one-shot backfill script would have been silently undone by
|
|
63
|
+
* the very next tester run. Routing through `applyWriteHooks` means the
|
|
64
|
+
* reseed writes through `createWithId`, which calls this hook, which
|
|
65
|
+
* regenerates the index — so the field is never actually "missing after a
|
|
66
|
+
* wipe", because the wipe is always followed by the write that restores it.
|
|
67
|
+
*/
|
|
68
|
+
protected buildTokensIndexFor(data: Record<string, JsonValue>): Record<string, string[]> | null;
|
|
54
69
|
/**
|
|
55
70
|
* The base hook, plus the nested objects it cannot see.
|
|
56
71
|
*
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Data access layer for payout documents in Firestore.
|
|
5
5
|
* Handles seller payout requests and admin payout processing.
|
|
6
6
|
*/
|
|
7
|
+
import { buildTokensIndex } from "../../../security/blind-index-tokens.js";
|
|
7
8
|
import { BaseRepository, prepareForFirestore, parseSieveDateValue, } from "../../../providers/db-firebase/index.js";
|
|
8
9
|
import { PAYOUT_COLLECTION, PAYOUT_FIELDS, PAYOUT_TRACKED_FIELDS, createPayoutId } from "../schemas/index.js";
|
|
9
10
|
import { withHistory } from "../../../_internal/shared/history/index.js";
|
|
@@ -69,6 +70,26 @@ export class PayoutRepository extends BaseRepository {
|
|
|
69
70
|
maskedPayouts(docs) {
|
|
70
71
|
return docs.map((d) => this.maskedPayout(d));
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Admin search by seller name/email, without decryption.
|
|
75
|
+
*
|
|
76
|
+
* 🛑 THIS IS THE ONE THAT MATTERS FOR THE TESTER HARNESS. `payouts` is
|
|
77
|
+
* SEED_TRANSACTIONAL: it cascades on `storeId` whenever its store is
|
|
78
|
+
* wiped, then gets RE-SEEDED from `appkit/src/seed/payouts-seed-data.ts`.
|
|
79
|
+
* The seed file has no `sellerTokensIndex` field — only this hook produces
|
|
80
|
+
* one — so a one-shot backfill script would have been silently undone by
|
|
81
|
+
* the very next tester run. Routing through `applyWriteHooks` means the
|
|
82
|
+
* reseed writes through `createWithId`, which calls this hook, which
|
|
83
|
+
* regenerates the index — so the field is never actually "missing after a
|
|
84
|
+
* wipe", because the wipe is always followed by the write that restores it.
|
|
85
|
+
*/
|
|
86
|
+
buildTokensIndexFor(data) {
|
|
87
|
+
const sellerName = typeof data.sellerName === "string" ? data.sellerName : undefined;
|
|
88
|
+
const sellerEmail = typeof data.sellerEmail === "string" ? data.sellerEmail : undefined;
|
|
89
|
+
if (!sellerName && !sellerEmail)
|
|
90
|
+
return null;
|
|
91
|
+
return { sellerTokensIndex: buildTokensIndex(sellerName, sellerEmail) };
|
|
92
|
+
}
|
|
72
93
|
/**
|
|
73
94
|
* The base hook, plus the nested objects it cannot see.
|
|
74
95
|
*
|
|
@@ -8,7 +8,7 @@ const __P = {
|
|
|
8
8
|
const __O = {
|
|
9
9
|
hidden: "overflow-hidden",
|
|
10
10
|
};
|
|
11
|
-
const CLS_BREADCRUMB_LINK = "hover:text-primary-600 transition-colors";
|
|
11
|
+
const CLS_BREADCRUMB_LINK = "hover:text-primary-600 dark:hover:text-primary-400 transition-colors";
|
|
12
12
|
const CLS_PREORDER_BADGE = "inline-block rounded-full bg-indigo-100 dark:bg-indigo-900/30 px-[var(--appkit-space-2-5)] py-[var(--appkit-space-0-5)] text-indigo-700 dark:text-indigo-300";
|
|
13
13
|
const CLS_STATUS_BADGE = "inline-block rounded-full bg-warning-surface dark:bg-warning-surface px-[var(--appkit-space-2-5)] py-[var(--appkit-space-0-5)] text-warning dark:text-warning";
|
|
14
14
|
import { ROUTES } from "../../../next/routing/route-map.js";
|
|
@@ -17,11 +17,11 @@ import { formatCurrency, roundRupees } from "../../../utils/number.formatter.js"
|
|
|
17
17
|
import { normalizeRichTextHtml } from "../../../utils/string.formatter.js";
|
|
18
18
|
import { safeDisplayName } from "../../../security/index.js";
|
|
19
19
|
import { ProgressBarFill } from "../../../ui/components/ProgressBarFill.js";
|
|
20
|
-
import { Button, Container, Div, GatedPrice, PricesOnly, Heading, Main, Nav, RichText, Row, Section, Span, Stack, Text, Ul, Li,
|
|
20
|
+
import { Button, Container, Div, GatedPrice, PricesOnly, Heading, Main, Nav, RichText, Row, Section, Span, Stack, Text, Ul, Li, SpecTable, } from "../../../ui/index.js";
|
|
21
21
|
import { PreOrderDetailView } from "../../products/components/PreOrderDetailView.js";
|
|
22
22
|
import { PreOrderBottomActions } from "./PreOrderBottomActions.js";
|
|
23
23
|
import { ProductTabsShell } from "../../products/components/ProductTabsShell.js";
|
|
24
|
-
import {
|
|
24
|
+
import { toCustomSectionTabs } from "../../products/components/CustomSectionTabContent.js";
|
|
25
25
|
import { PreOrderActionsClient } from "./PreOrderActionsClient.js";
|
|
26
26
|
import { ProductGalleryClient } from "../../products/components/ProductGalleryClient.js";
|
|
27
27
|
import { ProductFeatureBadges } from "../../products/components/ProductFeatureBadges.js";
|
|
@@ -142,9 +142,6 @@ export async function PreOrderDetailPageView({ id, initialPreOrder, onReserveNow
|
|
|
142
142
|
const specs = Array.isArray(p.specifications)
|
|
143
143
|
? p.specifications
|
|
144
144
|
: [];
|
|
145
|
-
const customSections = Array.isArray(p.customSections)
|
|
146
|
-
? p.customSections
|
|
147
|
-
: [];
|
|
148
145
|
const descriptionHtml = toDescriptionHtml(p.description);
|
|
149
146
|
const sublistingCategoryId = typeof p.sublistingCategoryId === "string" ? p.sublistingCategoryId : null;
|
|
150
147
|
const groupId = typeof p.groupId === "string" ? p.groupId : null;
|
|
@@ -168,9 +165,5 @@ export async function PreOrderDetailPageView({ id, initialPreOrder, onReserveNow
|
|
|
168
165
|
? () => (_jsx(SublistingCarouselSection, { sublistingCategoryId: sublistingCategoryId, currentListingId: String(product.id) }))
|
|
169
166
|
: undefined, renderGroupSection: groupId
|
|
170
167
|
? () => (_jsx(ShowGroupSection, { groupId: groupId, currentSlug: String(p.slug ?? product.id), isParent: isGroupParent, groupTitle: groupTitle }))
|
|
171
|
-
: undefined, renderTabs: () => (_jsx(ProductTabsShell, { descriptionContent: descriptionHtml ? (_jsx(RichText, { html: descriptionHtml, proseClass: "prose prose-sm sm:prose max-w-none dark:prose-invert", className: "text-[var(--appkit-color-text-muted)]" })) : undefined, specsContent: specs.length > 0 ? (_jsx(
|
|
172
|
-
id: s.id,
|
|
173
|
-
label: s.title,
|
|
174
|
-
content: _jsx(CustomSectionTabContent, { section: s }),
|
|
175
|
-
})) })), renderBuyBar: () => (_jsx(PreOrderBuyBarPanel, { reserveTarget: reserveTarget, reservedCount: reservedCount, progressPct: progressPct, productId: String(product.id), price: price, currency: currency, depositAmount: depositAmount, depositPercent: depositPercent, isCancellable: isCancellable, tags: tags, onReserveNow: onReserveNow })), renderRelated: () => (_jsxs(Stack, { gap: "xl", children: [_jsx(GroupedListingsCarousel, { groups: groups }), _jsx(RelatedItemsSection, { relatedItems: relatedItems, relatedByBrand: relatedByBrand, relatedByTags: relatedByTags, relatedByStore: relatedByStore, categoryLabel: categoryName || category || undefined, brandLabel: brand || undefined, storeLabel: storeName || undefined })] })) }), _jsx(PreOrderBottomActions, { price: price, currency: currency })] })] }));
|
|
168
|
+
: undefined, renderTabs: () => (_jsx(ProductTabsShell, { descriptionContent: descriptionHtml ? (_jsx(RichText, { html: descriptionHtml, proseClass: "prose prose-sm sm:prose max-w-none dark:prose-invert", className: "text-[var(--appkit-color-text-muted)]" })) : undefined, specsContent: specs.length > 0 ? (_jsx(SpecTable, { rows: specs })) : undefined, customTabs: toCustomSectionTabs(p.customSections) })), renderBuyBar: () => (_jsx(PreOrderBuyBarPanel, { reserveTarget: reserveTarget, reservedCount: reservedCount, progressPct: progressPct, productId: String(product.id), price: price, currency: currency, depositAmount: depositAmount, depositPercent: depositPercent, isCancellable: isCancellable, tags: tags, onReserveNow: onReserveNow })), renderRelated: () => (_jsxs(Stack, { gap: "xl", children: [_jsx(GroupedListingsCarousel, { groups: groups }), _jsx(RelatedItemsSection, { relatedItems: relatedItems, relatedByBrand: relatedByBrand, relatedByTags: relatedByTags, relatedByStore: relatedByStore, categoryLabel: categoryName || category || undefined, brandLabel: brand || undefined, storeLabel: storeName || undefined })] })) }), _jsx(PreOrderBottomActions, { price: price, currency: currency })] })] }));
|
|
176
169
|
}
|
|
@@ -232,5 +232,5 @@ export function PreOrdersIndexListing({ initialData, categorySlug, brandName })
|
|
|
232
232
|
] }), totalPages > 1 && (_jsx(StickyToolbar, { offset: "header+pagination", tone: "translucent", border: true, padding: "toolbar", children: _jsx(Row, { justify: "center", children: _jsx(Pagination, { currentPage: page, totalPages: totalPages, onPageChange: (p) => table.setPage(p) }) }) })), _jsx(Div, { padding: "y-lg", children: isLoading ? (_jsx(Grid, { cols: "cards", gap: "md", children: Array.from({ length: 10 }).map((_, i) => (_jsxs(Div, { className: `${__O.hidden} animate-pulse`, border: "subtle", rounded: "xl", children: [_jsx(Div, { className: "aspect-square", surface: "subtle" }), _jsxs(Stack, { className: `${__P.p3}`, gap: "sm", children: [_jsx(Div, { className: "h-3 w-3/4", surface: "subtle", rounded: "default" }), _jsx(Div, { className: "h-3 w-1/2", surface: "subtle", rounded: "default" }), _jsx(Div, { className: "h-4 w-1/3", surface: "subtle", rounded: "default" }), _jsx(Div, { className: "h-8", surface: "subtle", rounded: "default" })] })] }, i))) })) : preOrders.length === 0 ? (_jsx(Text, { paddingY: "3xl", color: "muted", size: "sm", align: "start", children: "No pre-orders found." })) : view === "list" ? (_jsx(Stack, { className: "divide-y divide-zinc-100 divide-[var(--appkit-color-border-subtle)]", border: "subtle", rounded: "xl", children: preOrders.map((product) => (_jsx(MarketplacePreorderCard, { product: product, variant: "list", hrefBuilder: (p) => String(ROUTES.PUBLIC.PRE_ORDER_DETAIL(p.id)), onAddToCart: handleAddToCart, wishlistActions: wishlistActions, selectable: selection.isSelecting, isSelected: selection.isSelected(product.id), onSelect: (id) => selection.toggle(id) }, product.id))) })) : (_jsx(Grid, { cols: "cards", gap: "md", children: preOrders.map((product) => (_jsx(MarketplacePreorderCard, { product: product, variant: "grid", hrefBuilder: (p) => String(ROUTES.PUBLIC.PRE_ORDER_DETAIL(p.id)), onAddToCart: handleAddToCart, wishlistActions: wishlistActions, selectable: selection.isSelecting, isSelected: selection.isSelected(product.id), onSelect: (id) => selection.toggle(id) }, product.id))) })) }), _jsx(CompareOverlay, { isOpen: compareIds.length > 0, productIds: compareIds, productType: "preorder", onClose: () => {
|
|
233
233
|
setCompareIds([]);
|
|
234
234
|
selection.clearSelection();
|
|
235
|
-
}, onRemove: (id) => setCompareIds((ids) => ids.filter((i) => i !== id)) }), _jsx(FilterDrawer, { open: filterOpen, onOpen: openFilters, onClose: () => setFilterOpen(false), onApply: applyFilters, onReset: onFilterClear, activeCount: filterActiveCount, hideTrigger: true, children: _jsx(PreOrderFilters, { table: pendingTable, currencyPrefix: "\u20B9", categoryOptions: categoryOptions, brandOptions: brandOptions }) }), _jsx(LoginRequiredModal, { isOpen: modalOpen, onClose: closeModal, message: modalMessage })] }));
|
|
235
|
+
}, onRemove: (id) => setCompareIds((ids) => ids.filter((i) => i !== id)), onAdd: (id) => setCompareIds((ids) => (ids.includes(id) ? ids : [...ids, id])) }), _jsx(FilterDrawer, { open: filterOpen, onOpen: openFilters, onClose: () => setFilterOpen(false), onApply: applyFilters, onReset: onFilterClear, activeCount: filterActiveCount, hideTrigger: true, children: _jsx(PreOrderFilters, { table: pendingTable, currencyPrefix: "\u20B9", categoryOptions: categoryOptions, brandOptions: brandOptions }) }), _jsx(LoginRequiredModal, { isOpen: modalOpen, onClose: closeModal, message: modalMessage })] }));
|
|
236
236
|
}
|
|
@@ -83,5 +83,7 @@ export interface PriceIndexToolViewProps {
|
|
|
83
83
|
/** Seeded from `?q=` so a shared link reproduces the lookup. */
|
|
84
84
|
initialQuery?: string;
|
|
85
85
|
initialData?: PriceIndexToolResponse | null;
|
|
86
|
+
/** `siteSettings.search?.indexEnabled`. Read as `!== false`. */
|
|
87
|
+
searchIndexEnabled?: boolean;
|
|
86
88
|
}
|
|
87
|
-
export declare function PriceIndexToolView({ initialQuery, initialData }: PriceIndexToolViewProps): React.JSX.Element;
|
|
89
|
+
export declare function PriceIndexToolView({ initialQuery, initialData, searchIndexEnabled, }: PriceIndexToolViewProps): React.JSX.Element;
|