@mohasinac/appkit 4.58.0 → 4.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +3 -3
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
- package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
- package/dist/_internal/server/features/brands/actions.js +78 -4
- package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
- package/dist/_internal/server/features/checkout/actions.js +668 -183
- package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
- package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
- package/dist/_internal/server/features/gateway-events/index.js +10 -0
- package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
- package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
- package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
- package/dist/_internal/server/features/gateway-events/redact.js +151 -0
- package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
- package/dist/_internal/server/features/grievance/actions.js +173 -0
- package/dist/_internal/server/features/grievance/index.d.ts +8 -0
- package/dist/_internal/server/features/grievance/index.js +8 -0
- package/dist/_internal/server/features/grouped/data.js +28 -3
- package/dist/_internal/server/features/lottery/actions.js +99 -4
- package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
- package/dist/_internal/server/features/order-completion/actions.js +336 -0
- package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
- package/dist/_internal/server/features/order-completion/index.js +7 -0
- package/dist/_internal/server/features/orders/actions.d.ts +13 -0
- package/dist/_internal/server/features/orders/actions.js +56 -2
- package/dist/_internal/server/features/orders/adapters.js +26 -0
- package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
- package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
- package/dist/_internal/server/features/orders/index.d.ts +2 -1
- package/dist/_internal/server/features/orders/index.js +1 -1
- package/dist/_internal/server/features/orders/service.d.ts +60 -0
- package/dist/_internal/server/features/orders/service.js +74 -0
- package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
- package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
- package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
- package/dist/_internal/server/features/payment-cases/index.js +9 -0
- package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
- package/dist/_internal/server/features/payouts/actions.js +84 -10
- package/dist/_internal/server/features/points/adjust.d.ts +61 -0
- package/dist/_internal/server/features/points/adjust.js +121 -0
- package/dist/_internal/server/features/points/award.d.ts +65 -0
- package/dist/_internal/server/features/points/award.js +145 -0
- package/dist/_internal/server/features/price-index/market.d.ts +33 -0
- package/dist/_internal/server/features/price-index/market.js +54 -1
- package/dist/_internal/server/features/products/data.js +40 -22
- package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
- package/dist/_internal/server/features/protection-claims/actions.js +228 -0
- package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
- package/dist/_internal/server/features/protection-claims/index.js +8 -0
- package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
- package/dist/_internal/server/features/refunds/actions.js +259 -17
- package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
- package/dist/_internal/server/features/refunds/capacity.js +37 -0
- package/dist/_internal/server/features/reviews/actions.js +3 -2
- package/dist/_internal/server/features/search/index-build/sources.js +20 -1
- package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
- package/dist/_internal/server/features/shipping/reconcile.js +34 -3
- package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
- package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
- package/dist/_internal/server/features/stores/tabs.js +24 -4
- package/dist/_internal/server/functions/https.d.ts +31 -1
- package/dist/_internal/server/functions/https.js +52 -1
- package/dist/_internal/server/functions/scheduled.d.ts +72 -1
- package/dist/_internal/server/functions/scheduled.js +124 -1
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
- package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
- package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
- package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
- package/dist/_internal/server/jobs/core/index.d.ts +2 -0
- package/dist/_internal/server/jobs/core/index.js +2 -0
- package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
- package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
- package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
- package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
- package/dist/_internal/server/jobs/handlers/index.js +5 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
- package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
- package/dist/_internal/server/jobs/handlers/messages.js +1 -1
- package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
- package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +71 -0
- package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
- package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
- package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
- package/dist/_internal/shared/checkout/lanes.js +46 -0
- package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
- package/dist/_internal/shared/checkout/order-math.js +251 -3
- package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
- package/dist/_internal/shared/checkout/refundable-base.js +122 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
- package/dist/_internal/shared/features/auctions/config.js +30 -1
- package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
- package/dist/_internal/shared/features/brands/schema.js +18 -0
- package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
- package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
- package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
- package/dist/_internal/shared/features/print/label-profiles.js +350 -0
- package/dist/_internal/shared/features/products/to-product-item.js +33 -5
- package/dist/_internal/shared/fees/calculator.d.ts +31 -2
- package/dist/_internal/shared/fees/calculator.js +103 -5
- package/dist/_internal/shared/fees/india-states.d.ts +195 -0
- package/dist/_internal/shared/fees/india-states.js +190 -0
- package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
- package/dist/_internal/shared/fees/payout-hold.js +74 -0
- package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
- package/dist/_internal/shared/obligations/deadlines.js +155 -0
- package/dist/_internal/shared/shipping/quote.d.ts +96 -0
- package/dist/_internal/shared/shipping/quote.js +67 -0
- package/dist/_internal/shared/time/business-days.d.ts +91 -0
- package/dist/_internal/shared/time/business-days.js +185 -0
- package/dist/_internal/shared/types/base-document.d.ts +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/client.d.ts +9 -4
- package/dist/client.js +26 -3
- package/dist/configs/tailwind.d.ts +0 -12
- package/dist/configs/tailwind.js +28 -15
- package/dist/constants/api-endpoints.d.ts +51 -9
- package/dist/constants/api-endpoints.js +23 -7
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/seed-meta.d.ts +113 -0
- package/dist/constants/seed-meta.js +91 -0
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/payment.d.ts +131 -0
- package/dist/features/about/components/AboutView.js +1 -1
- package/dist/features/about/components/DeveloperView.js +5 -2
- package/dist/features/about/components/FAQPageView.js +2 -1
- package/dist/features/about/components/FeesView.js +2 -1
- package/dist/features/about/components/HelpPageView.js +2 -1
- package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
- package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
- package/dist/features/about/components/HowEmiWorksView.js +2 -1
- package/dist/features/about/components/HowOffersWorkView.js +2 -1
- package/dist/features/about/components/HowOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
- package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowReviewsWorkView.js +2 -1
- package/dist/features/about/components/PolicyPageView.js +2 -1
- package/dist/features/about/components/ProseHero.d.ts +73 -0
- package/dist/features/about/components/ProseHero.js +18 -0
- package/dist/features/about/components/SecurityPrivacyView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +2 -1
- package/dist/features/about/components/TrackOrderView.js +2 -1
- package/dist/features/about/components/UnauthorizedView.js +1 -1
- package/dist/features/about/index.d.ts +2 -0
- package/dist/features/about/index.js +5 -0
- package/dist/features/account/actions/address-actions.d.ts +26 -2
- package/dist/features/account/actions/address-actions.js +25 -1
- package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
- package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
- package/dist/features/account/components/UserOrdersView.js +17 -0
- package/dist/features/account/components/UserSidebar.js +1 -1
- package/dist/features/account/hooks/useNotifications.js +29 -0
- package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
- package/dist/features/admin/components/AdminBeysView.js +2 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
- package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
- package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
- package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
- package/dist/features/admin/components/AdminCategoriesView.js +1 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
- package/dist/features/admin/components/AdminContactEditorView.js +1 -1
- package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
- package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
- package/dist/features/admin/components/AdminFaqsView.js +2 -2
- package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
- package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
- package/dist/features/admin/components/AdminGuideHubView.js +1 -1
- package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
- package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
- package/dist/features/admin/components/AdminPartsView.js +2 -2
- package/dist/features/admin/components/AdminProductsView.js +75 -4
- package/dist/features/admin/components/AdminSidebar.js +2 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
- package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
- package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
- package/dist/features/admin/components/AdminUsersView.js +72 -1
- package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
- package/dist/features/admin/components/AdminViewCards.js +4 -4
- package/dist/features/admin/components/DataListingView.d.ts +28 -0
- package/dist/features/admin/components/DataListingView.js +175 -14
- package/dist/features/admin/components/DataTable.d.ts +12 -1
- package/dist/features/admin/components/DataTable.js +3 -3
- package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/OwnerQuickActions.js +60 -2
- package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
- package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
- package/dist/features/admin/components/index.d.ts +4 -0
- package/dist/features/admin/components/index.js +6 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
- package/dist/features/admin/constants/filter-tabs.js +106 -0
- package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
- package/dist/features/admin/repository/site-settings.repository.js +82 -1
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
- package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
- package/dist/features/admin/schemas/firestore.js +5 -1
- package/dist/features/admin/schemas/site-settings-form.js +30 -1
- package/dist/features/auctions/actions/bid-actions.js +13 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
- package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
- package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
- package/dist/features/audit-log/schemas/firestore.js +14 -0
- package/dist/features/auth/permissions/constants.d.ts +17 -1
- package/dist/features/auth/permissions/constants.js +18 -0
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
- package/dist/features/categories/api/[id]/description-template/route.js +107 -1
- package/dist/features/categories/components/BrandDetailPageView.js +2 -2
- package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
- package/dist/features/categories/components/BundleDetailView.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
- package/dist/features/categories/components/CategoryForm.js +12 -1
- package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
- package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
- package/dist/features/categories/repository/market-price-index.repository.js +105 -0
- package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
- package/dist/features/categories/repository/price-observation.repository.js +132 -0
- package/dist/features/events/components/EventSaleBanner.js +1 -1
- package/dist/features/events/components/EventStatusBadge.js +1 -1
- package/dist/features/faq/components/FAQAccordion.js +2 -1
- package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
- package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
- package/dist/features/faq/components/RelatedFAQs.js +1 -1
- package/dist/features/filters/FilterFacetSection.js +1 -1
- package/dist/features/filters/SwitchFilter.js +1 -1
- package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
- package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
- package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
- package/dist/features/gateway-events/schemas/firestore.js +125 -0
- package/dist/features/gateway-events/schemas/index.d.ts +81 -0
- package/dist/features/gateway-events/schemas/index.js +79 -0
- package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
- package/dist/features/homepage/components/AnnouncementBar.js +37 -1
- package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
- package/dist/features/homepage/components/BrandsSection.js +1 -1
- package/dist/features/homepage/components/CTABannerSection.js +1 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
- package/dist/features/homepage/components/HeroCarousel.js +2 -2
- package/dist/features/homepage/components/SocialPostCard.js +1 -1
- package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
- package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
- package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
- package/dist/features/inventory/components/ReceiveStationView.js +413 -0
- package/dist/features/inventory/components/operator-message.d.ts +29 -0
- package/dist/features/inventory/components/operator-message.js +41 -0
- package/dist/features/inventory/index.d.ts +13 -0
- package/dist/features/inventory/index.js +28 -0
- package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
- package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
- package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
- package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
- package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
- package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
- package/dist/features/inventory/schemas/firestore.d.ts +197 -0
- package/dist/features/inventory/schemas/firestore.js +159 -0
- package/dist/features/layout/AppLayoutShell.d.ts +12 -1
- package/dist/features/layout/AppLayoutShell.js +25 -12
- package/dist/features/layout/AutoBreadcrumbs.js +162 -3
- package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
- package/dist/features/layout/BottomNavbar.d.ts +1 -1
- package/dist/features/layout/BottomNavbar.js +2 -2
- package/dist/features/media/MediaAvatar.js +1 -1
- package/dist/features/media/MediaImage.d.ts +24 -4
- package/dist/features/media/MediaImage.js +44 -4
- package/dist/features/media/MediaLightbox.js +1 -1
- package/dist/features/media/modals/ImageCropModal.js +1 -1
- package/dist/features/media/modals/ImageEditor.js +1 -1
- package/dist/features/media/upload/MediaUploadField.js +91 -3
- package/dist/features/obligations/constants/policies.d.ts +92 -0
- package/dist/features/obligations/constants/policies.js +378 -0
- package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
- package/dist/features/obligations/repository/obligations.repository.js +158 -0
- package/dist/features/obligations/schemas/firestore.d.ts +160 -0
- package/dist/features/obligations/schemas/firestore.js +87 -0
- package/dist/features/orders/actions/order-actions.d.ts +43 -4
- package/dist/features/orders/actions/order-actions.js +60 -3
- package/dist/features/orders/actions/refund-actions.js +70 -10
- package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
- package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
- package/dist/features/orders/components/OrdersList.js +2 -2
- package/dist/features/orders/components/RefundHistoryTable.js +3 -1
- package/dist/features/orders/components/index.d.ts +2 -0
- package/dist/features/orders/components/index.js +6 -0
- package/dist/features/orders/constants/transitions.d.ts +59 -0
- package/dist/features/orders/constants/transitions.js +104 -0
- package/dist/features/orders/repository/orders.repository.d.ts +109 -6
- package/dist/features/orders/repository/orders.repository.js +464 -21
- package/dist/features/orders/schemas/firestore.d.ts +270 -0
- package/dist/features/orders/schemas/firestore.js +24 -0
- package/dist/features/orders/schemas/index.d.ts +61 -0
- package/dist/features/orders/schemas/index.js +22 -0
- package/dist/features/orders/types/index.d.ts +79 -0
- package/dist/features/parts/components/PartsIndexPageView.js +8 -1
- package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
- package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
- package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
- package/dist/features/payment-cases/schemas/firestore.js +105 -0
- package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
- package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
- package/dist/features/payments/repository/payout.repository.d.ts +0 -1
- package/dist/features/payments/repository/payout.repository.js +0 -1
- package/dist/features/points/repository/points.repository.d.ts +122 -0
- package/dist/features/points/repository/points.repository.js +304 -1
- package/dist/features/points/schemas/adjust-form.d.ts +58 -0
- package/dist/features/points/schemas/adjust-form.js +63 -0
- package/dist/features/points/schemas/firestore.d.ts +108 -1
- package/dist/features/points/schemas/firestore.js +84 -0
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
- package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
- package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
- package/dist/features/price-index/market-stats.d.ts +82 -0
- package/dist/features/price-index/market-stats.js +230 -0
- package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
- package/dist/features/print/components/BoxLabelPrintView.js +66 -0
- package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
- package/dist/features/print/components/LabelProfilePicker.js +38 -0
- package/dist/features/print/components/labels.d.ts +117 -0
- package/dist/features/print/components/labels.js +258 -0
- package/dist/features/print/components/labels.style.css +46 -0
- package/dist/features/print/index.d.ts +6 -0
- package/dist/features/print/index.js +16 -0
- package/dist/features/products/columns/productTableColumns.js +5 -4
- package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
- package/dist/features/products/components/PrizeDrawCollage.js +1 -1
- package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
- package/dist/features/products/components/PrizeRevealModal.js +2 -2
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +34 -23
- package/dist/features/products/components/ProductGrid.js +86 -62
- package/dist/features/products/constants/card-badges.d.ts +97 -0
- package/dist/features/products/constants/card-badges.js +100 -0
- package/dist/features/products/repository/products.repository.js +34 -1
- package/dist/features/products/schemas/firestore.d.ts +46 -3
- package/dist/features/products/schemas/firestore.js +21 -0
- package/dist/features/promotions/components/PromotionsView.js +1 -1
- package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
- package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
- package/dist/features/promotions/schemas/firestore.js +30 -3
- package/dist/features/promotions/schemas/index.d.ts +6 -6
- package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
- package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
- package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
- package/dist/features/protection-claims/schemas/firestore.js +130 -0
- package/dist/features/reviews/actions/review-actions.js +3 -2
- package/dist/features/reviews/components/ReviewModal.js +1 -1
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/schemas/firestore.d.ts +20 -1
- package/dist/features/scams/constants/scam-types.d.ts +2 -0
- package/dist/features/scams/constants/scam-types.js +18 -0
- package/dist/features/scams/schemas/report-form.d.ts +3 -3
- package/dist/features/scams/schemas/report-form.js +26 -1
- package/dist/features/search/components/Search.js +9 -9
- package/dist/features/search/components/SearchResultsClient.js +18 -3
- package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
- package/dist/features/search/components/SearchResultsPageView.js +2 -2
- package/dist/features/seller/actions/offer-actions.js +16 -1
- package/dist/features/seller/actions/seller-actions.js +14 -3
- package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
- package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
- package/dist/features/seller/components/PrintCenterView.js +41 -30
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
- package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
- package/dist/features/seller/components/SellerProductShell.js +123 -13
- package/dist/features/seller/components/SellerReviewsView.js +4 -2
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
- package/dist/features/seller/schemas/coupon-form.js +27 -0
- package/dist/features/seller/schemas/product-form.d.ts +3 -0
- package/dist/features/seller/schemas/product-form.js +5 -0
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +14 -0
- package/dist/features/shell/SectionForm.d.ts +19 -0
- package/dist/features/shell/SectionForm.js +133 -9
- package/dist/features/shell/SectionForm.style.css +54 -0
- package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
- package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
- package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
- package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
- package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
- package/dist/features/stores/components/StoreGuideHubView.js +1 -1
- package/dist/features/stores/components/StoreHeader.js +1 -1
- package/dist/features/support/schemas/firestore.d.ts +73 -2
- package/dist/features/support/schemas/firestore.js +59 -0
- package/dist/index.d.ts +16 -155
- package/dist/index.js +88 -341
- package/dist/next/ErrorBoundary.js +1 -1
- package/dist/next/routing/route-map.d.ts +24 -0
- package/dist/next/routing/route-map.js +40 -0
- package/dist/providers/payment-manual/index.d.ts +15 -1
- package/dist/providers/payment-manual/index.js +37 -0
- package/dist/providers/payment-phonepe/index.d.ts +14 -1
- package/dist/providers/payment-phonepe/index.js +36 -0
- package/dist/providers/payment-razorpay/index.d.ts +44 -1
- package/dist/providers/payment-razorpay/index.js +99 -0
- package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
- package/dist/providers/shipping-shiprocket/index.js +18 -0
- package/dist/schemas/registry.d.ts +44 -11
- package/dist/server-entry.d.ts +2 -0
- package/dist/server-entry.js +27 -0
- package/dist/server.d.ts +42 -69
- package/dist/server.js +93 -69
- package/dist/styles.css +418 -149
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +15 -12
- package/dist/tokens/themes/default-light.js +14 -11
- package/dist/tokens/tokens.css +106 -23
- package/dist/ui/DataTable.style.css +4 -4
- package/dist/ui/columns/cell-renderers.d.ts +20 -0
- package/dist/ui/columns/cell-renderers.js +26 -1
- package/dist/ui/columns/index.d.ts +1 -1
- package/dist/ui/columns/index.js +4 -1
- package/dist/ui/components/Badge.style.css +1 -1
- package/dist/ui/components/Breadcrumb.js +19 -1
- package/dist/ui/components/BulkActionBar.style.css +4 -4
- package/dist/ui/components/Button.style.css +1 -1
- package/dist/ui/components/Checkbox.style.css +1 -1
- package/dist/ui/components/FallbackShell.js +1 -1
- package/dist/ui/components/Form.d.ts +14 -1
- package/dist/ui/components/Form.js +2 -2
- package/dist/ui/components/FormField.js +18 -4
- package/dist/ui/components/FormField.style.css +43 -3
- package/dist/ui/components/GatedPrice.style.css +1 -1
- package/dist/ui/components/IconButton.style.css +1 -1
- package/dist/ui/components/Input.js +22 -1
- package/dist/ui/components/Input.style.css +38 -22
- package/dist/ui/components/ListingFilterDrawer.js +1 -1
- package/dist/ui/components/ListingToolbar.js +1 -1
- package/dist/ui/components/PaginatedSelect.js +0 -0
- package/dist/ui/components/Radio.style.css +1 -1
- package/dist/ui/components/Repeater.d.ts +53 -0
- package/dist/ui/components/Repeater.js +7 -0
- package/dist/ui/components/RichTextEditor.d.ts +20 -1
- package/dist/ui/components/RichTextEditor.js +23 -2
- package/dist/ui/components/Select.style.css +7 -21
- package/dist/ui/components/Semantic.js +27 -3
- package/dist/ui/components/TagInput.style.css +4 -9
- package/dist/ui/components/Textarea.style.css +4 -18
- package/dist/ui/components/Toggle.style.css +1 -1
- package/dist/ui/components/Typography.d.ts +3 -3
- package/dist/ui/components/Typography.js +15 -15
- package/dist/ui/components/ViewToggle.style.css +4 -4
- package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
- package/dist/ui/forms/AddAnotherToggle.js +56 -0
- package/dist/ui/forms/ColorPickerField.js +15 -2
- package/dist/ui/forms/FieldCheckbox.js +15 -2
- package/dist/ui/forms/FieldInput.d.ts +22 -1
- package/dist/ui/forms/FieldInput.js +19 -5
- package/dist/ui/forms/FieldLabel.d.ts +35 -0
- package/dist/ui/forms/FieldLabel.js +70 -0
- package/dist/ui/forms/FieldSelect.d.ts +4 -1
- package/dist/ui/forms/FieldSelect.js +27 -5
- package/dist/ui/forms/FieldTextarea.d.ts +4 -1
- package/dist/ui/forms/FieldTextarea.js +22 -5
- package/dist/ui/forms/FormShell.d.ts +17 -1
- package/dist/ui/forms/FormShell.js +36 -2
- package/dist/ui/forms/FormShell.style.css +41 -33
- package/dist/ui/forms/index.d.ts +5 -1
- package/dist/ui/forms/index.js +2 -0
- package/dist/ui/icons/icon-registry.d.ts +1 -0
- package/dist/ui/icons/icon-registry.js +17 -1
- package/dist/utils/id-generators.d.ts +80 -0
- package/dist/utils/id-generators.js +93 -0
- package/dist/utils/search-txt-builders.d.ts +12 -0
- package/dist/utils/search-txt-builders.js +17 -0
- package/package.json +4 -2
- package/scripts/seed-cli.mjs +175 -6
- package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
- package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
- package/dist/features/loyalty/api/balance/route.d.ts +0 -12
- package/dist/features/loyalty/api/balance/route.js +0 -41
- package/dist/features/loyalty/api/earn/route.d.ts +0 -12
- package/dist/features/loyalty/api/earn/route.js +0 -38
- package/dist/features/loyalty/api/history/route.d.ts +0 -12
- package/dist/features/loyalty/api/history/route.js +0 -58
- package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
- package/dist/features/loyalty/api/redeem/route.js +0 -38
- package/dist/features/loyalty/columns/index.d.ts +0 -17
- package/dist/features/loyalty/columns/index.js +0 -40
- package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
- package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
- package/dist/features/loyalty/components/index.d.ts +0 -1
- package/dist/features/loyalty/components/index.js +0 -1
- package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
- package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
- package/dist/features/loyalty/index.d.ts +0 -6
- package/dist/features/loyalty/index.js +0 -6
- package/dist/features/loyalty/manifest.d.ts +0 -2
- package/dist/features/loyalty/manifest.js +0 -16
- package/dist/features/loyalty/messages/en.json +0 -19
- package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
- package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
- package/dist/features/loyalty/schemas/index.d.ts +0 -85
- package/dist/features/loyalty/schemas/index.js +0 -40
- package/dist/features/loyalty/server.d.ts +0 -6
- package/dist/features/loyalty/server.js +0 -6
- package/dist/features/loyalty/types/index.d.ts +0 -31
- package/dist/features/loyalty/types/index.js +0 -1
- package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
- package/dist/features/loyalty/types/loyalty-config.js +0 -1
- package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
- package/dist/features/loyalty/types/loyalty-math.js +0 -27
- package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
- package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
- package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
- package/dist/features/tester/seed-data/_happy-path.js +0 -710
- package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
- package/dist/features/tester/seed-data/_money-flows.js +0 -610
- package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
- package/dist/features/tester/seed-data/authored/_types.js +0 -35
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
- package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
- package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/index.js +0 -301
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
- package/dist/features/tester/seed-data/index.d.ts +0 -2
- package/dist/features/tester/seed-data/index.js +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
- package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
- package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
- package/dist/features/tester/seed-data/tester-window.js +0 -66
- package/dist/seed/_helpers/brand-rows.d.ts +0 -35
- package/dist/seed/_helpers/brand-rows.js +0 -600
- package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
- package/dist/seed/_helpers/category-content-generated.js +0 -1853
- package/dist/seed/_helpers/category-content.d.ts +0 -68
- package/dist/seed/_helpers/category-content.js +0 -731
- package/dist/seed/_helpers/category-forest.d.ts +0 -4
- package/dist/seed/_helpers/category-forest.js +0 -824
- package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
- package/dist/seed/_helpers/category-images-generated.js +0 -618
- package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
- package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
- package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
- package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
- package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
- package/dist/seed/_helpers/category-models.d.ts +0 -12
- package/dist/seed/_helpers/category-models.js +0 -45
- package/dist/seed/_helpers/category-names.d.ts +0 -54
- package/dist/seed/_helpers/category-names.js +0 -118
- package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
- package/dist/seed/_helpers/category-parts.d.ts +0 -9
- package/dist/seed/_helpers/category-parts.js +0 -15022
- package/dist/seed/_helpers/category-tree.d.ts +0 -27
- package/dist/seed/_helpers/category-tree.js +0 -119
- package/dist/seed/_helpers/character-features.d.ts +0 -10
- package/dist/seed/_helpers/character-features.js +0 -120
- package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
- package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
- package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
- package/dist/seed/_helpers/franchise-rows.js +0 -189
- package/dist/seed/_helpers/media.d.ts +0 -67
- package/dist/seed/_helpers/media.js +0 -172
- package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
- package/dist/seed/_helpers/part-colours-generated.js +0 -273
- package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
- package/dist/seed/_helpers/product-search-txt.js +0 -23
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
- package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
- package/dist/seed/addresses-seed-data.d.ts +0 -2
- package/dist/seed/addresses-seed-data.js +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
- package/dist/seed/bey-products-seed-data.d.ts +0 -18
- package/dist/seed/bey-products-seed-data.js +0 -18011
- package/dist/seed/beys/chunk0.d.ts +0 -17
- package/dist/seed/beys/chunk0.js +0 -36733
- package/dist/seed/beys/chunk1.d.ts +0 -17
- package/dist/seed/beys/chunk1.js +0 -35728
- package/dist/seed/beys/chunk2.d.ts +0 -17
- package/dist/seed/beys/chunk2.js +0 -35857
- package/dist/seed/beys/chunk3.d.ts +0 -17
- package/dist/seed/beys/chunk3.js +0 -34476
- package/dist/seed/beys-seed-data.d.ts +0 -18
- package/dist/seed/beys-seed-data.js +0 -11
- package/dist/seed/bids-seed-data.d.ts +0 -2
- package/dist/seed/bids-seed-data.js +0 -206
- package/dist/seed/blog-posts-seed-data.d.ts +0 -6
- package/dist/seed/blog-posts-seed-data.js +0 -442
- package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
- package/dist/seed/carousel-slides-seed-data.js +0 -411
- package/dist/seed/carousels-seed-data.d.ts +0 -2
- package/dist/seed/carousels-seed-data.js +0 -36
- package/dist/seed/cart-seed-data.d.ts +0 -2
- package/dist/seed/cart-seed-data.js +0 -241
- package/dist/seed/catalogue-seed-data.d.ts +0 -2
- package/dist/seed/catalogue-seed-data.js +0 -112
- package/dist/seed/categories-seed-data.d.ts +0 -3
- package/dist/seed/categories-seed-data.js +0 -816
- package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
- package/dist/seed/claimed-coupons-seed-data.js +0 -85
- package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
- package/dist/seed/coupon-usage-seed-data.js +0 -55
- package/dist/seed/coupons-seed-data.d.ts +0 -2
- package/dist/seed/coupons-seed-data.js +0 -226
- package/dist/seed/defaults/categories.d.ts +0 -2
- package/dist/seed/defaults/categories.js +0 -12
- package/dist/seed/defaults/faqs.d.ts +0 -2
- package/dist/seed/defaults/faqs.js +0 -40
- package/dist/seed/events-seed-data.d.ts +0 -7
- package/dist/seed/events-seed-data.js +0 -482
- package/dist/seed/factories/address.factory.d.ts +0 -21
- package/dist/seed/factories/address.factory.js +0 -44
- package/dist/seed/factories/bid.factory.d.ts +0 -15
- package/dist/seed/factories/bid.factory.js +0 -33
- package/dist/seed/factories/blog-post.factory.d.ts +0 -15
- package/dist/seed/factories/blog-post.factory.js +0 -22
- package/dist/seed/factories/carousel.factory.d.ts +0 -11
- package/dist/seed/factories/carousel.factory.js +0 -17
- package/dist/seed/factories/cart.factory.d.ts +0 -25
- package/dist/seed/factories/cart.factory.js +0 -35
- package/dist/seed/factories/category.factory.d.ts +0 -11
- package/dist/seed/factories/category.factory.js +0 -16
- package/dist/seed/factories/coupon.factory.d.ts +0 -21
- package/dist/seed/factories/coupon.factory.js +0 -43
- package/dist/seed/factories/faq.factory.d.ts +0 -10
- package/dist/seed/factories/faq.factory.js +0 -15
- package/dist/seed/factories/notification.factory.d.ts +0 -18
- package/dist/seed/factories/notification.factory.js +0 -39
- package/dist/seed/factories/order.factory.d.ts +0 -20
- package/dist/seed/factories/order.factory.js +0 -20
- package/dist/seed/factories/payout.factory.d.ts +0 -21
- package/dist/seed/factories/payout.factory.js +0 -38
- package/dist/seed/factories/product.factory.d.ts +0 -27
- package/dist/seed/factories/product.factory.js +0 -80
- package/dist/seed/factories/review.factory.d.ts +0 -14
- package/dist/seed/factories/review.factory.js +0 -52
- package/dist/seed/factories/session.factory.d.ts +0 -15
- package/dist/seed/factories/session.factory.js +0 -31
- package/dist/seed/factories/store.factory.d.ts +0 -23
- package/dist/seed/factories/store.factory.js +0 -47
- package/dist/seed/factories/user.factory.d.ts +0 -19
- package/dist/seed/factories/user.factory.js +0 -56
- package/dist/seed/faq-seed-data.d.ts +0 -18
- package/dist/seed/faq-seed-data.js +0 -1956
- package/dist/seed/firestore-indexes.d.ts +0 -12
- package/dist/seed/firestore-indexes.js +0 -31
- package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
- package/dist/seed/grouped-listings-seed-data.js +0 -283
- package/dist/seed/history-seed-data.d.ts +0 -12
- package/dist/seed/history-seed-data.js +0 -70
- package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
- package/dist/seed/homepage-sections-seed-data.js +0 -1034
- package/dist/seed/index.d.ts +0 -100
- package/dist/seed/index.js +0 -115
- package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
- package/dist/seed/lottery-entries-seed-data.js +0 -108
- package/dist/seed/manifest.d.ts +0 -16
- package/dist/seed/manifest.js +0 -235
- package/dist/seed/media-assets-seed-data.d.ts +0 -22
- package/dist/seed/media-assets-seed-data.js +0 -5593
- package/dist/seed/model-composition-seed-data.d.ts +0 -15
- package/dist/seed/model-composition-seed-data.js +0 -9032
- package/dist/seed/notifications-seed-data.d.ts +0 -2
- package/dist/seed/notifications-seed-data.js +0 -606
- package/dist/seed/offers-seed-data.d.ts +0 -2
- package/dist/seed/offers-seed-data.js +0 -398
- package/dist/seed/orders-seed-data.d.ts +0 -2
- package/dist/seed/orders-seed-data.js +0 -845
- package/dist/seed/part-glossary/chunk0.d.ts +0 -9
- package/dist/seed/part-glossary/chunk0.js +0 -35448
- package/dist/seed/part-glossary/chunk1.d.ts +0 -9
- package/dist/seed/part-glossary/chunk1.js +0 -40494
- package/dist/seed/part-glossary/chunk2.d.ts +0 -9
- package/dist/seed/part-glossary/chunk2.js +0 -51242
- package/dist/seed/part-glossary/chunk3.d.ts +0 -9
- package/dist/seed/part-glossary/chunk3.js +0 -53337
- package/dist/seed/part-glossary/chunk4.d.ts +0 -9
- package/dist/seed/part-glossary/chunk4.js +0 -51454
- package/dist/seed/part-glossary-seed-data.d.ts +0 -15
- package/dist/seed/part-glossary-seed-data.js +0 -25
- package/dist/seed/payouts-seed-data.d.ts +0 -2
- package/dist/seed/payouts-seed-data.js +0 -302
- package/dist/seed/product-features-seed-data.d.ts +0 -3
- package/dist/seed/product-features-seed-data.js +0 -366
- package/dist/seed/products-art-seed-data.d.ts +0 -2
- package/dist/seed/products-art-seed-data.js +0 -289
- package/dist/seed/products-auctions-seed-data.d.ts +0 -2
- package/dist/seed/products-auctions-seed-data.js +0 -475
- package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
- package/dist/seed/products-beyblade-x-seed-data.js +0 -476
- package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk0.js +0 -7262
- package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk1.js +0 -7290
- package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk10.js +0 -7290
- package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk11.js +0 -7005
- package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk12.js +0 -7002
- package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk13.js +0 -7002
- package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk14.js +0 -7002
- package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk15.js +0 -7002
- package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk16.js +0 -7002
- package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk17.js +0 -7002
- package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk18.js +0 -4398
- package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk2.js +0 -7268
- package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk3.js +0 -7264
- package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk4.js +0 -7268
- package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk5.js +0 -7258
- package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk6.js +0 -7268
- package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk7.js +0 -7311
- package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk8.js +0 -7304
- package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk9.js +0 -7309
- package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
- package/dist/seed/products-catalogue-seed-data.js +0 -60
- package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
- package/dist/seed/products-classifieds-seed-data.js +0 -435
- package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
- package/dist/seed/products-digital-codes-seed-data.js +0 -395
- package/dist/seed/products-live-items-seed-data.d.ts +0 -7
- package/dist/seed/products-live-items-seed-data.js +0 -269
- package/dist/seed/products-preorders-seed-data.d.ts +0 -2
- package/dist/seed/products-preorders-seed-data.js +0 -360
- package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
- package/dist/seed/products-prize-draws-seed-data.js +0 -427
- package/dist/seed/products-spares-seed-data.d.ts +0 -2
- package/dist/seed/products-spares-seed-data.js +0 -368
- package/dist/seed/products-standard-seed-data.d.ts +0 -2
- package/dist/seed/products-standard-seed-data.js +0 -632
- package/dist/seed/products-stickers-seed-data.d.ts +0 -2
- package/dist/seed/products-stickers-seed-data.js +0 -319
- package/dist/seed/reviews-seed-data.d.ts +0 -1
- package/dist/seed/reviews-seed-data.js +0 -185
- package/dist/seed/runner.d.ts +0 -2
- package/dist/seed/runner.js +0 -125
- package/dist/seed/scammers-seed-data.d.ts +0 -2
- package/dist/seed/scammers-seed-data.js +0 -235
- package/dist/seed/seed-market-config.d.ts +0 -48
- package/dist/seed/seed-market-config.js +0 -199
- package/dist/seed/seed-purpose.d.ts +0 -299
- package/dist/seed/seed-purpose.js +0 -440
- package/dist/seed/sessions-seed-data.d.ts +0 -3
- package/dist/seed/sessions-seed-data.js +0 -116
- package/dist/seed/shipments-seed-data.d.ts +0 -5
- package/dist/seed/shipments-seed-data.js +0 -185
- package/dist/seed/site-settings-seed-data.d.ts +0 -2
- package/dist/seed/site-settings-seed-data.js +0 -1069
- package/dist/seed/store-addresses-seed-data.d.ts +0 -18
- package/dist/seed/store-addresses-seed-data.js +0 -71
- package/dist/seed/store-extensions-seed-data.d.ts +0 -11
- package/dist/seed/store-extensions-seed-data.js +0 -292
- package/dist/seed/stores-seed-data.d.ts +0 -6
- package/dist/seed/stores-seed-data.js +0 -242
- package/dist/seed/support-tickets-seed-data.d.ts +0 -16
- package/dist/seed/support-tickets-seed-data.js +0 -239
- package/dist/seed/tax-codes-seed-data.d.ts +0 -34
- package/dist/seed/tax-codes-seed-data.js +0 -100
- package/dist/seed/test-data-ttl.d.ts +0 -29
- package/dist/seed/test-data-ttl.js +0 -31
- package/dist/seed/test-utils.d.ts +0 -49
- package/dist/seed/test-utils.js +0 -110
- package/dist/seed/types.d.ts +0 -89
- package/dist/seed/types.js +0 -15
- package/dist/seed/users-seed-data.d.ts +0 -2
- package/dist/seed/users-seed-data.js +0 -597
- package/dist/seed/wishlists-seed-data.d.ts +0 -12
- package/dist/seed/wishlists-seed-data.js +0 -54
|
@@ -1,824 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: The seed shipped 47 nodes across 2 roots, all Beyblade — which made
|
|
3
|
-
* every competitor-measured price band unseedable, left `live` listings
|
|
4
|
-
* with nowhere to file, and meant no page had ever rendered a tier-4
|
|
5
|
-
* rollup. A 15-site crawl (~25,900 listings) supplied the taxonomy spine;
|
|
6
|
-
* the only competitor with a real tree uses OUR axis, generation ->
|
|
7
|
-
* part-family -> line, so this deepens that axis rather than rotating it.
|
|
8
|
-
* WHAT: The authoring literal for a 6-root forest. Structural fields
|
|
9
|
-
* (parentIds/ancestors/tier/path/position/subtreeSize/isLeaf/childrenIds)
|
|
10
|
-
* are derived by `buildCategoryTree`, never written here.
|
|
11
|
-
*
|
|
12
|
-
* EXPORTS:
|
|
13
|
-
* CATEGORY_FOREST — nested CategoryTreeNode[] consumed by categories-seed-data
|
|
14
|
-
*
|
|
15
|
-
* ## Three structural decisions worth knowing before editing this
|
|
16
|
-
*
|
|
17
|
-
* 1. LAUNCHERS, PARTS AND STADIUMS ARE PER GENERATION. A BX-10 Xtreme Stadium
|
|
18
|
-
* is a Beyblade X product; a BB-10 Attack Type is Metal Fight. The old seed
|
|
19
|
-
* had one `battle-gear` bucket holding all of them, which forces a buyer
|
|
20
|
-
* shopping Beyblade X to filter a list that is mostly not for their beys.
|
|
21
|
-
* worldhobbyshop agrees in PROSE while being unable to express it — its
|
|
22
|
-
* single "Stadiums & Arenas" category describes itself as covering "all
|
|
23
|
-
* generations", the split stated in the description because WooCommerce's
|
|
24
|
-
* flat taxonomy could not hold it. What remains cross-generation is the
|
|
25
|
-
* genuinely universal gear, and that is `category-accessories`.
|
|
26
|
-
*
|
|
27
|
-
* 2. A NAMED MODEL IS A PLAIN CATEGORY LEAF, `categoryType` OMITTED. Not
|
|
28
|
-
* `categoryType:"sublisting"`, which opts out of every path that works:
|
|
29
|
-
* `deriveTaxonomy` never reads `sublistingCategoryId`,
|
|
30
|
-
* `countersReconcile` leaves `metrics.productCount` at 0 forever (the page
|
|
31
|
-
* renders "Browse all 0 listings"), and `NON_LISTING_CATEGORY_TYPES`
|
|
32
|
-
* excludes it from the sitemap. The model leaves come from
|
|
33
|
-
* `./category-models` and are GENERATED from B4's canonical corpus — a slug
|
|
34
|
-
* is a document id, a URL and a searchTxt source, so it is the one field
|
|
35
|
-
* that cannot be quietly corrected later.
|
|
36
|
-
*
|
|
37
|
-
* 3. ONE CHAIN PER PRODUCT, SO ONLY ONE AXIS CAN BE THE TREE. `categoriesIn`
|
|
38
|
-
* is `array-contains-any`, capped at 30 values, and a product carries its
|
|
39
|
-
* FULL ancestor chain — so a category page matches on its own id alone and
|
|
40
|
-
* depth costs nothing. Release type, authenticity, language, grade, scale
|
|
41
|
-
* and chase status are therefore `productFeatures`, never nodes. See
|
|
42
|
-
* `product-features-seed-data.ts`.
|
|
43
|
-
*
|
|
44
|
-
* @tag domain:categories
|
|
45
|
-
* @tag layer:seed
|
|
46
|
-
* @tag pattern:derived
|
|
47
|
-
* @tag access:server-only
|
|
48
|
-
* @tag consumers:seed/categories-seed-data.ts
|
|
49
|
-
* @tag sideEffects:none
|
|
50
|
-
*/
|
|
51
|
-
import { MODEL_LEAVES } from "./category-models.js";
|
|
52
|
-
import { PART_LEAVES } from "./category-parts.js";
|
|
53
|
-
import { BEY_TEMPLATES, COLLECTIBLE_TEMPLATES, PART_TEMPLATES, SEALED_TEMPLATES, accessoryDefaults, beyDefaults, diecastDefaults, figureDefaults, launcherDefaults, livingDefaults, marketBand, partDefaults, stadiumDefaults, tcgDefaults, ROOT_TAX_DEFAULTS, ROOT_AUTHENTICITY_DEFAULT, } from "./category-content.js";
|
|
54
|
-
import { seedPhoto } from "./media.js";
|
|
55
|
-
/**
|
|
56
|
-
* A synthetic placeholder tile, for a node with no real cover of its own.
|
|
57
|
-
*
|
|
58
|
-
* 🛑 This is a FALLBACK, not a decision — and that took a fix to become true.
|
|
59
|
-
* `withGeneratedCoverImage` used to skip any row with a non-empty
|
|
60
|
-
* `display.coverImage`, so a `cover(...)` here BLOCKED the generated map
|
|
61
|
-
* outright: a wordmark could be fetched, uploaded and mapped and the card
|
|
62
|
-
* would still show a grey tile, with nothing reporting why.
|
|
63
|
-
*
|
|
64
|
-
* It now ranks the three sources honestly — a real authored path beats a
|
|
65
|
-
* generated image beats a placeholder tile (`isSeedPlaceholderImage`) — so
|
|
66
|
-
* every node can keep a tile in source and simply be overridden when an image
|
|
67
|
-
* exists. Four roots are overridden today (the Beyblade generations); the rest
|
|
68
|
-
* render the tile, which is the right thing to show when there is nothing
|
|
69
|
-
* better and much better than the empty box they would get from no value.
|
|
70
|
-
*
|
|
71
|
-
* So adding artwork to a node is now a manifest entry ALONE — no edit here.
|
|
72
|
-
*/
|
|
73
|
-
const cover = (slug) => seedPhoto(`category-image-${slug}-20260101`, 1200, 600);
|
|
74
|
-
/**
|
|
75
|
-
* A tier-3 line that owns named-model leaves.
|
|
76
|
-
*
|
|
77
|
-
* 🛑 `MODEL_LEAVES[id] ?? []` is a real guard, not defensive noise: the map is
|
|
78
|
-
* generated from the canonical corpus, and a line whose every candidate landed
|
|
79
|
-
* on B4's review list legitimately has none. A missing key must produce an
|
|
80
|
-
* empty line, never a crash — but a line that is MEANT to have models and
|
|
81
|
-
* silently has none is the failure this cannot see, which is why the seed
|
|
82
|
-
* asserts `MODEL_LEAF_COUNT` against what it actually spread.
|
|
83
|
-
*
|
|
84
|
-
* `opts.hasbroName` carries the regional-naming divergence for the waves that
|
|
85
|
-
* have one. Last and optional, so all 21 existing call sites are unchanged.
|
|
86
|
-
*
|
|
87
|
-
* 🛑 There is no `hasbroCoverImage` here on purpose. The name is an editorial
|
|
88
|
-
* FACT and belongs in source; the image is a resolved asset and belongs in the
|
|
89
|
-
* generated map, exactly like `display.coverImage` — see
|
|
90
|
-
* `GENERATED_CATEGORY_HASBRO_IMAGES` and `withGeneratedHasbroCover` in
|
|
91
|
-
* `categories-seed-data.ts`. Hard-coding a `/media/…` string here would put
|
|
92
|
-
* the one field that changes on every re-upload into the one file that should
|
|
93
|
-
* not have to be edited for it.
|
|
94
|
-
*/
|
|
95
|
-
function line(id, name, description, defaults, templates, opts) {
|
|
96
|
-
return {
|
|
97
|
-
id,
|
|
98
|
-
name,
|
|
99
|
-
description,
|
|
100
|
-
extra: {
|
|
101
|
-
productDefaults: defaults,
|
|
102
|
-
descriptionTemplates: templates,
|
|
103
|
-
...(opts?.hasbroName ? { hasbroName: opts.hasbroName } : {}),
|
|
104
|
-
},
|
|
105
|
-
children: MODEL_LEAVES[id] ?? [],
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
/** A node with defaults but no model children. */
|
|
109
|
-
function node(id, name, description, defaults, templates, children) {
|
|
110
|
-
const extra = {};
|
|
111
|
-
if (defaults)
|
|
112
|
-
extra.productDefaults = defaults;
|
|
113
|
-
if (templates)
|
|
114
|
-
extra.descriptionTemplates = templates;
|
|
115
|
-
/*
|
|
116
|
-
* 🛑 D13 — a part-type node's children are its PART LEAVES, threaded here
|
|
117
|
-
* rather than at the 20 call sites.
|
|
118
|
-
*
|
|
119
|
-
* Same shape as `line()` and `MODEL_LEAVES`: the generated map is keyed by
|
|
120
|
-
* parent id, so a node with no entry gets `[]` and is unchanged. Doing it in
|
|
121
|
-
* the helper means adding a part classification is a generator run plus one
|
|
122
|
-
* `node(...)` line, not an edit in two places that must agree.
|
|
123
|
-
*
|
|
124
|
-
* An explicit `children` argument still wins, so a node that hand-authors
|
|
125
|
-
* its children is not silently overwritten — there is none today, and the
|
|
126
|
-
* precedence has to be decided rather than discovered.
|
|
127
|
-
*/
|
|
128
|
-
const generated = PART_LEAVES[id];
|
|
129
|
-
const kids = children ?? generated;
|
|
130
|
-
return {
|
|
131
|
-
id,
|
|
132
|
-
name,
|
|
133
|
-
description,
|
|
134
|
-
...(Object.keys(extra).length ? { extra } : {}),
|
|
135
|
-
...(kids && kids.length ? { children: kids } : {}),
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
/** A branch node — grouping only, no products file directly under it. */
|
|
139
|
-
function branch(id, name, description, children) {
|
|
140
|
-
return { id, name, description, children };
|
|
141
|
-
}
|
|
142
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
143
|
-
// Root 1 — Spinning Tops
|
|
144
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
145
|
-
const BEYBLADE_ORIGINAL = {
|
|
146
|
-
id: "category-beyblade-original",
|
|
147
|
-
name: "Beyblade Original",
|
|
148
|
-
description: "The original Beyblade series (1999–2003) by Takara — Plastic Generation tops, Spin Gear, Magnacore, Engine Gear and HMS, with the ripcord launchers that started the franchise.",
|
|
149
|
-
extra: {
|
|
150
|
-
display: { icon: "🪀", coverImage: cover("beyblade-original"), color: "#b45309", showInMenu: true, showInFooter: false },
|
|
151
|
-
contentBody: `<p>The original Beyblade line ran from 1999 to 2003 and moved through four part systems in four years. Each one changed what a top could do, and each one is a separate shelf here because the parts do not interchange.</p>
|
|
152
|
-
<p><strong>Spin Gear System</strong> was the first — an Attack Ring, a Weight Disk, a Blade Base and a spin gear that set direction. <strong>Magnacore</strong> added magnets to the base, pulling a top toward or away from the stadium centre. <strong>Engine Gear</strong> put a wound spring inside the top that released mid-battle. <strong>Heavy Metal System</strong>, the 2003 finale, replaced the plastic core with metal throughout and is the most expensive original-era line on this site by a wide margin — a reflection of how few survive in playable condition.</p>
|
|
153
|
-
<p>Browse by system above, or go straight to a model. Loose <a href="/categories/category-original-parts">Attack Rings, Weight Disks and Blade Bases</a> are listed separately for rebuilds, and <a href="/categories/category-original-launchers">ripcord launchers and winders</a> are their own shelf because an original-era launcher drives nothing from a later generation.</p>`,
|
|
154
|
-
highlights: [
|
|
155
|
-
"The tops that started it all in 1999, split by the four part systems that actually differ",
|
|
156
|
-
"Loose Attack Rings, Weight Disks and Blade Bases for rebuilding a vintage combo",
|
|
157
|
-
"HMS sealed pieces are the single highest-value Beyblade tier on the site",
|
|
158
|
-
],
|
|
159
|
-
faqs: [
|
|
160
|
-
{ question: "Will an original-series top work with a Burst or X launcher?", answer: "No — every generation changed the launcher prongs and the lock. An original-series top needs an original-series ripcord launcher." },
|
|
161
|
-
{ question: "How do I tell a genuine Takara release from a reproduction?", answer: "Check the base stamp and the sticker finish under good light, and compare the weight: reproductions are almost always lighter. Every listing here states its authenticity, and a reproduction is labelled as one." },
|
|
162
|
-
{ question: "What is the difference between Spin Gear, Magnacore and Engine Gear?", answer: "They are three generations of the same slot. Spin Gear (2000) set spin direction; Magnacore (2002) added a magnet to pull the top toward or away from the stadium centre; Engine Gear (2003) added a wound spring that released mid-battle. Parts are not interchangeable between them." },
|
|
163
|
-
],
|
|
164
|
-
},
|
|
165
|
-
children: [
|
|
166
|
-
branch("category-original-tops", "Original Tops", "Complete original-series Beyblades, from the first Spin Gear releases through HMS.", [
|
|
167
|
-
line("category-original-plastic-gen", "Plastic Generation", "The earliest 1999–2000 plastic-series releases, before the Spin Gear system was formalised.", beyDefaults("category-original-plastic-gen", "Beyblade (Original)", "Plastic Generation"), BEY_TEMPLATES),
|
|
168
|
-
line("category-original-spin-gear", "Spin Gear System", "The 2000–2001 Spin Gear releases — the system that set the Attack Ring / Weight Disk / Blade Base template.", beyDefaults("category-original-spin-gear", "Beyblade (Original)", "Spin Gear System"), BEY_TEMPLATES),
|
|
169
|
-
line("category-original-magnacore", "Magnacore System", "The 2002 V-Force Magnacore line, with magnets in the base that pull a top toward or away from the stadium centre.", beyDefaults("category-original-magnacore", "Beyblade V-Force", "Magnacore System"), BEY_TEMPLATES),
|
|
170
|
-
line("category-original-engine-gear", "Engine Gear System", "The 2003 G-Revolution Engine Gear line — a wound spring inside the top that releases mid-battle.", beyDefaults("category-original-engine-gear", "Beyblade G-Revolution", "Engine Gear System"), BEY_TEMPLATES),
|
|
171
|
-
line("category-original-hms", "Heavy Metal System", "The 2003 HMS line — metal throughout, the last and heaviest of the original generation, and the highest-value tier here.", beyDefaults("category-original-hms", "Beyblade HMS", "Heavy Metal System"), BEY_TEMPLATES),
|
|
172
|
-
]),
|
|
173
|
-
branch("category-original-parts", "Original Parts", "Loose Attack Rings, Weight Disks and Blade Bases for rebuilding an original-era combo.", [
|
|
174
|
-
node("category-original-attack-rings", "Attack Rings", "The upper contact ring — what actually strikes an opponent, and the part that decides a combo's attack profile.", partDefaults("category-original-attack-rings", "Attack Ring"), PART_TEMPLATES),
|
|
175
|
-
node("category-original-weight-disks", "Weight Disks", "The metal disk between ring and base. Heavier disks buy stamina; lighter ones buy speed.", partDefaults("category-original-weight-disks", "Weight Disk"), PART_TEMPLATES),
|
|
176
|
-
node("category-original-blade-bases", "Blade Bases", "The bottom assembly — tip shape, spin gear housing and, on later systems, the magnet or engine.", partDefaults("category-original-blade-bases", "Blade Base"), PART_TEMPLATES),
|
|
177
|
-
/*
|
|
178
|
-
* 🛑 Support Parts had been keyed on THIS BRANCH, which takes explicit
|
|
179
|
-
* children and so never reads `PART_LEAVES` — its 3 leaves were dropped
|
|
180
|
-
* silently. Same cause as the 82 CX leaves under `category-x-custom-cx`;
|
|
181
|
-
* see the note there.
|
|
182
|
-
*/
|
|
183
|
-
node("category-original-support-parts", "Support Parts", "Bolt-on extras that fill no stack position of their own — Cross Survivor, Reverse Attack and the other SP pieces.", partDefaults("category-original-support-parts", "Support Parts"), PART_TEMPLATES),
|
|
184
|
-
/*
|
|
185
|
-
* D13 — five part-type nodes the forest was missing, so every one of the
|
|
186
|
-
* 20 part classifications has a home. Measured before adding: 135 of 753
|
|
187
|
-
* parts (bit chips 66, running cores 25, chrome wheels 25, spin gears 14,
|
|
188
|
-
* engine gears 5) had no node to be filed under, and a part leaf with no
|
|
189
|
-
* parent is a tier-0 orphan.
|
|
190
|
-
*/
|
|
191
|
-
node("category-original-bit-chips", "Bit Chips", "The small chip at the centre of a Plastic-Gen Attack Ring, carrying the beast art. Collected in its own right and routinely swapped.", partDefaults("category-original-bit-chips", "Bit Chip"), PART_TEMPLATES),
|
|
192
|
-
node("category-original-spin-gears", "Spin Gears", "The 2000–2001 Spin Gear module that sets spin direction and locks the Blade Base to the Weight Disk.", partDefaults("category-original-spin-gears", "Spin Gear"), PART_TEMPLATES),
|
|
193
|
-
node("category-original-engine-gears", "Engine Gears", "The G-Revolution wound-spring module that releases mid-battle. Only a handful of releases used one.", partDefaults("category-original-engine-gears", "Engine Gear"), PART_TEMPLATES),
|
|
194
|
-
node("category-original-running-cores", "Running Cores", "HMS combines the Spin Gear and Blade Base into one moulded Running Core, which is why an HMS breakdown has fewer slots than a Plastic-Gen one.", partDefaults("category-original-running-cores", "Running Core"), PART_TEMPLATES),
|
|
195
|
-
]),
|
|
196
|
-
branch("category-original-launchers", "Original Launchers", "Ripcord launchers, grips and winders for original-series tops.", [
|
|
197
|
-
node("category-original-ripcord-launchers", "Ripcord Launchers", "The classic pull-cord launchers used across the original series.", launcherDefaults("category-original-ripcord-launchers", "Beyblade (Original)"), PART_TEMPLATES),
|
|
198
|
-
node("category-original-winders", "Winders & Ripcords", "Replacement ripcords and winders. A wear part — the first thing to fail on a vintage launcher.", launcherDefaults("category-original-winders", "Beyblade (Original)"), PART_TEMPLATES),
|
|
199
|
-
]),
|
|
200
|
-
branch("category-original-stadiums", "Original Stadiums", "Bakuten-era stadiums and arenas, sized for original-series play.", [
|
|
201
|
-
node("category-original-bakuten-arena", "Bakuten Arenas", "The standard round dishes of the original era, including the tournament-sized Bakuten arenas.", stadiumDefaults("category-original-bakuten-arena", "Beyblade (Original)"), SEALED_TEMPLATES),
|
|
202
|
-
node("category-original-attack-stadium", "Attack Stadiums", "Shallower, faster dishes that keep tops in contact rather than circling.", stadiumDefaults("category-original-attack-stadium", "Beyblade (Original)"), SEALED_TEMPLATES),
|
|
203
|
-
]),
|
|
204
|
-
],
|
|
205
|
-
};
|
|
206
|
-
const BEYBLADE_METAL = {
|
|
207
|
-
id: "category-beyblade-metal",
|
|
208
|
-
name: "Beyblade Metal Fight",
|
|
209
|
-
description: "The Metal Fight era (2008–2013) — Metal System, Metal Fusion, Metal Masters, Metal Fury's 4D system and Shogun Steel. Metal-weighted tops with a four-part swappable system.",
|
|
210
|
-
extra: {
|
|
211
|
-
display: { icon: "⚙️", coverImage: cover("beyblade-metal"), color: "#64748b", showInMenu: true, showInFooter: false },
|
|
212
|
-
contentBody: `<p>Metal Fight ran from 2008 to 2013 and is the generation that made Beyblade a tuning game. A top is four parts — a Face Bolt, an Energy Ring, a Fusion Wheel and a Spin Track with a Performance Tip — and every one of them is sold loose here, which is why this branch has more part listings than complete tops.</p>
|
|
213
|
-
<p>The code after a name is the build. <strong>105RF</strong> means a 105-height Spin Track and a Rubber Flat tip: tall enough to clear a dish's slope, with rubber for aggressive floor contact. <strong>145WD</strong> is taller again with a Wide Defense tip, which trades speed for the ability to survive being hit. Reading those codes is most of what separates a casual buyer from a competitive one, and our <a href="/categories/category-metal-parts">parts shelf</a> is organised by them.</p>
|
|
214
|
-
<p>Four sub-generations sit above: <strong>Metal System</strong> (the 2008 debut), <strong>Metal Fusion</strong> and <strong>Metal Masters</strong> on the Hybrid Wheel System, <strong>Metal Fury</strong> on the heavier 4D system, and <strong>Shogun Steel</strong> / Zero-G, which added a rocking stadium and tops built for it.</p>`,
|
|
215
|
-
highlights: [
|
|
216
|
-
"Metal-weighted tops with a genuinely deep four-part tuning system",
|
|
217
|
-
"The only generation where loose parts outnumber complete tops — Energy Rings, Fusion Wheels, Spin Tracks and Tips all listed individually",
|
|
218
|
-
"Covers all five sub-generations: Metal System, Fusion, Masters, Fury (4D) and Shogun Steel",
|
|
219
|
-
],
|
|
220
|
-
faqs: [
|
|
221
|
-
{ question: "What does the code after a top's name mean, like \"105RF\"?", answer: "It is the Spin Track height and the Performance Tip. 105RF is a 105-height track with a Rubber Flat tip — tall enough to clear a dish's slope, with rubber for aggressive floor contact. Swapping track and tip is how you trade stamina against attack." },
|
|
222
|
-
{ question: "Can Metal Fight tops battle Burst tops in the same stadium?", answer: "Physically yes where the stadium fits both, but they do not burst apart on impact the way Burst tops do, so a Burst top can lose by bursting while a Metal Fight top simply keeps spinning. Most local groups keep the generations separate." },
|
|
223
|
-
{ question: "Are Metal Fight parts interchangeable with 4D parts?", answer: "Partly. 4D Fusion Wheels and bottoms were designed to accept Hybrid Wheel System components, but not everything fits in both directions — the listing states which system a part belongs to." },
|
|
224
|
-
],
|
|
225
|
-
},
|
|
226
|
-
children: [
|
|
227
|
-
branch("category-metal-tops", "Metal Fight Tops", "Complete Metal Fight Beyblades across all five sub-generations.", [
|
|
228
|
-
line("category-metal-phws", "Metal System", "The 2008 debut system that preceded the Hybrid Wheel System — the first metal-weighted tops.", beyDefaults("category-metal-phws", "Beyblade: Metal Fusion", "Metal System"), BEY_TEMPLATES),
|
|
229
|
-
line("category-metal-fusion", "Metal Fusion", "The Hybrid Wheel System wave that defined the era — Face Bolt, Energy Ring, Fusion Wheel, Spin Track, Tip.", beyDefaults("category-metal-fusion", "Beyblade: Metal Fusion", "Hybrid Wheel System"), BEY_TEMPLATES),
|
|
230
|
-
line("category-metal-masters", "Metal Masters", "Later Hybrid Wheel releases with heavier wheels and tighter tolerances.", beyDefaults("category-metal-masters", "Beyblade: Metal Masters", "Hybrid Wheel System"), BEY_TEMPLATES),
|
|
231
|
-
line("category-metal-fury-4d", "Metal Fury (4D)", "The 4D System wave — multi-mode wheels and switchable bottoms, and the heaviest tops of the era.", beyDefaults("category-metal-fury-4d", "Beyblade: Metal Fury", "4D System"), BEY_TEMPLATES),
|
|
232
|
-
line("category-metal-shogun-steel", "Shogun Steel / Zero-G", "The 2012–2013 Zero-G line, built for the rocking Zero-G stadium rather than a static dish.", beyDefaults("category-metal-shogun-steel", "Beyblade: Shogun Steel", "Synchrom System"), BEY_TEMPLATES),
|
|
233
|
-
]),
|
|
234
|
-
branch("category-metal-parts", "Metal Fight Parts", "The four-part system sold loose — this is where a custom Metal Fight combo gets built.", [
|
|
235
|
-
node("category-metal-face-bolts", "Face Bolts", "The screw and face sticker at the top. Mostly cosmetic, occasionally a weight tweak.", partDefaults("category-metal-face-bolts", "Face Bolt"), PART_TEMPLATES),
|
|
236
|
-
node("category-metal-energy-rings", "Energy Rings", "The clear upper ring (Clear Wheel) that sets spin balance and adds a small contact profile.", partDefaults("category-metal-energy-rings", "Energy Ring"), PART_TEMPLATES),
|
|
237
|
-
node("category-metal-fusion-wheels", "Fusion Wheels", "The metal mass of the top — the single part that most decides whether a combo attacks or endures.", partDefaults("category-metal-fusion-wheels", "Fusion Wheel"), PART_TEMPLATES),
|
|
238
|
-
node("category-metal-spin-tracks", "Spin Tracks", "The height component. 85, 100, 105, 125, 145, 230 — taller clears a dish's slope, lower sits under an opponent.", partDefaults("category-metal-spin-tracks", "Spin Track"), PART_TEMPLATES),
|
|
239
|
-
node("category-metal-performance-tips", "Performance Tips", "The floor contact: Rubber Flat, Wide Defense, Eternal Sharp, Metal Ball and the rest of the bottom vocabulary.", partDefaults("category-metal-performance-tips", "Performance Tip"), PART_TEMPLATES),
|
|
240
|
-
node("category-metal-chrome-wheels", "Chrome Wheels", "The 4D System's upper metal wheel, sold loose and the heaviest single part in the generation.", partDefaults("category-metal-chrome-wheels", "Chrome Wheel"), PART_TEMPLATES),
|
|
241
|
-
]),
|
|
242
|
-
branch("category-metal-launchers", "Metal Fight Launchers", "String launchers, ripcord launchers and grips for the Metal Fight era.", [
|
|
243
|
-
node("category-metal-string-launchers", "String Launchers", "The pull-string launchers that replaced ripcords, giving far more consistent launch power.", launcherDefaults("category-metal-string-launchers", "Beyblade: Metal Fight"), PART_TEMPLATES),
|
|
244
|
-
node("category-metal-ripcord-launchers", "Ripcord Launchers", "The entry-level ripcord launchers bundled with most starter sets.", launcherDefaults("category-metal-ripcord-launchers", "Beyblade: Metal Fight"), PART_TEMPLATES),
|
|
245
|
-
node("category-metal-lr-launchers", "LR Launchers", "Dual-direction launchers that drive both right- and left-spin tops.", launcherDefaults("category-metal-lr-launchers", "Beyblade: Metal Fight"), PART_TEMPLATES),
|
|
246
|
-
]),
|
|
247
|
-
branch("category-metal-stadiums", "Metal Fight Stadiums", "BeyStadiums of the Metal Fight era, including the rocking Zero-G dishes.", [
|
|
248
|
-
node("category-metal-standard-stadiums", "Standard BeyStadiums", "The round Metal Fight dishes — BB-10 Attack Type and the Super Vortex family.", stadiumDefaults("category-metal-standard-stadiums", "Beyblade: Metal Fight"), SEALED_TEMPLATES),
|
|
249
|
-
node("category-metal-zero-g-stadiums", "Zero-G Stadiums", "The rocking stadiums Shogun Steel tops were designed around — the floor itself moves.", stadiumDefaults("category-metal-zero-g-stadiums", "Beyblade: Shogun Steel"), SEALED_TEMPLATES),
|
|
250
|
-
]),
|
|
251
|
-
],
|
|
252
|
-
};
|
|
253
|
-
const BEYBLADE_BURST = {
|
|
254
|
-
id: "category-beyblade-burst",
|
|
255
|
-
name: "Beyblade Burst",
|
|
256
|
-
description: "Beyblade Burst (2015–2023) by Takara Tomy and Hasbro — tops that burst apart on a hard enough hit, with swappable Layer, Disc and Driver parts across seven waves.",
|
|
257
|
-
extra: {
|
|
258
|
-
isFeatured: true,
|
|
259
|
-
display: { icon: "💥", coverImage: cover("beyblade-burst"), color: "#059669", showInMenu: true, showInFooter: false },
|
|
260
|
-
contentBody: `<p>Burst added the mechanic the franchise is now named for: hit a top hard enough and it comes apart, ending the battle immediately. That single rule changed how everything is priced and tuned, because burst <em>resistance</em> became as valuable as attack power.</p>
|
|
261
|
-
<p>A Burst top is three parts — a <strong>Layer</strong> on top, a <strong>Disc</strong> under it and a <strong>Driver</strong> at the floor — and all three are listed loose on our <a href="/categories/category-burst-parts">parts shelf</a>. Seven waves sit above, and they are not cosmetic revisions: <strong>Burst Classic</strong> (2015) was all plastic; <strong>God</strong> added spring-loaded Layers; <strong>Cho-Z</strong> put metal in the Layer and roughly doubled burst resistance; <strong>GT</strong> added a swappable chip; <strong>Superking</strong> introduced the five-sided Sparking ratchet; <strong>Dynamite Battle</strong> and <strong>Burst Ultimate</strong> closed the line with the heaviest Layers it ever shipped.</p>
|
|
262
|
-
<p>Prices climb almost monotonically with the wave, from around ₹300 for an early single-layer release to ₹1,500 and up for Burst Ultimate — which is a straightforward proxy for how much metal is in the Layer.</p>`,
|
|
263
|
-
highlights: [
|
|
264
|
-
"Tops that burst apart on a hard enough hit — the mechanic the franchise is named for",
|
|
265
|
-
"Layers, Discs and Drivers all sold loose for build customisation",
|
|
266
|
-
"The most actively traded generation on the platform, across all seven waves",
|
|
267
|
-
],
|
|
268
|
-
faqs: [
|
|
269
|
-
{ question: "What is the difference between a Layer, a Disc and a Driver?", answer: "The Layer is the top piece and sets the attack profile and burst resistance; the Disc sits underneath and tunes weight and stamina; the Driver is the tip touching the stadium floor and decides how the top moves. Mixing them is the whole game." },
|
|
270
|
-
{ question: "Is bursting during a battle bad for the top?", answer: "No. Burst tops are designed to separate on hard impacts — it is the scoring mechanic, not a failure — and they click back together for the next round. Repeated bursting does wear the Layer's teeth over time, which is why condition matters on a used Burst Layer." },
|
|
271
|
-
{ question: "Are Takara Tomy and Hasbro Burst tops the same?", answer: "They are the same moulds under different names and often different colours — Lost Longinus is sold in the west as Lost Luinor L2. They are compatible with each other. Hasbro releases are generally cheaper and the plastic is slightly softer." },
|
|
272
|
-
{ question: "Which Burst wave should a beginner start with?", answer: "Cho-Z or later. Early single-layer plastic releases burst very easily against a modern top, which is frustrating rather than competitive — and they are cheap for exactly that reason." },
|
|
273
|
-
],
|
|
274
|
-
},
|
|
275
|
-
children: [
|
|
276
|
-
branch("category-burst-tops", "Burst Tops", "Complete Burst-system Beyblades across every wave.", [
|
|
277
|
-
/*
|
|
278
|
-
* 🛑 `hasbroName` is set on exactly the five waves where a Hasbro season
|
|
279
|
-
* title demonstrably differs, each confirmed by BOTH logos existing in
|
|
280
|
-
* the wiki corpus (a Japanese-market logo and an English-market one for
|
|
281
|
-
* the same wave):
|
|
282
|
-
*
|
|
283
|
-
* God <-> Evolution Beyblade_Burst_{God,Evolution}_Logo
|
|
284
|
-
* Cho-Z <-> Turbo {Chouzetsu,Turbo_English}_Logo
|
|
285
|
-
* GT <-> Rise {GT_Japanese,Rise_English}_Logo
|
|
286
|
-
* Superking <-> Surge {Superking_Japanese,Surge_English}_Logo
|
|
287
|
-
* Dynamite B <-> QuadDrive {Dynamite_Battle_Japanese,QuadDrive_English}_Logo
|
|
288
|
-
*
|
|
289
|
-
* `burst-classic` is unset because season 1 shipped as "Beyblade Burst"
|
|
290
|
-
* in both markets — there is no divergence to show. `burst-bu` is unset
|
|
291
|
-
* because the corpus will not support one: it describes Burst Ultimate
|
|
292
|
-
* as a Takara-Tomy toyline concluding the series, and while Hasbro's
|
|
293
|
-
* QuadStrike is contemporaneous, no source we hold states they are the
|
|
294
|
-
* same line renamed. A guessed pairing on a page a buyer reads as fact
|
|
295
|
-
* is worse than a blank.
|
|
296
|
-
*/
|
|
297
|
-
line("category-burst-classic", "Burst Classic", "The original 2015–2017 single- and dual-layer waves, before any metal entered the Layer.", beyDefaults("category-burst-classic", "Beyblade Burst", "Burst System"), BEY_TEMPLATES),
|
|
298
|
-
line("category-burst-god", "Burst God", "The God Layer wave, which added spring-loaded Layers and the first real burst-resistance tuning.", beyDefaults("category-burst-god", "Beyblade Burst God", "God Layer System"), BEY_TEMPLATES, { hasbroName: "Beyblade Burst Evolution" }),
|
|
299
|
-
line("category-burst-cho-z", "Cho-Z", "The metal-layer wave — heavier Layers and roughly double the burst resistance of what came before.", beyDefaults("category-burst-cho-z", "Beyblade Burst Cho-Z", "Cho-Z Layer System"), BEY_TEMPLATES, { hasbroName: "Beyblade Burst Turbo" }),
|
|
300
|
-
line("category-burst-gt", "GT", "The Gatinko wave, with a swappable chip inside the Layer for a third tuning axis.", beyDefaults("category-burst-gt", "Beyblade Burst GT", "Gatinko Layer System"), BEY_TEMPLATES, { hasbroName: "Beyblade Burst Rise" }),
|
|
301
|
-
line("category-burst-superking", "Superking", "The Sparking / Superking wave and its five-sided ratchet, which changed launch dynamics entirely.", beyDefaults("category-burst-superking", "Beyblade Burst Superking", "Sparking Layer System"), BEY_TEMPLATES, { hasbroName: "Beyblade Burst Surge" }),
|
|
302
|
-
line("category-burst-db", "Dynamite Battle", "The DB wave — Armour Tips and the heaviest Layers Burst had shipped to that point.", beyDefaults("category-burst-db", "Beyblade Burst Dynamite Battle", "Dynamite Battle Layer System"), BEY_TEMPLATES, { hasbroName: "Beyblade Burst QuadDrive" }),
|
|
303
|
-
line("category-burst-bu", "Burst Ultimate", "The final Burst wave, closing the line in 2023 before Beyblade X replaced it.", beyDefaults("category-burst-bu", "Beyblade Burst Ultimate", "Burst Ultimate Layer System"), BEY_TEMPLATES),
|
|
304
|
-
]),
|
|
305
|
-
branch("category-burst-parts", "Burst Parts", "Layers, Discs, Drivers and the chips and armour that bolt onto them.", [
|
|
306
|
-
node("category-burst-layers", "Layers", "The top piece — attack profile and burst resistance. The most expensive part of a Burst build.", partDefaults("category-burst-layers", "Layer"), PART_TEMPLATES),
|
|
307
|
-
node("category-burst-discs", "Discs", "The middle weight component, tuning stamina against manoeuvrability.", partDefaults("category-burst-discs", "Disc"), PART_TEMPLATES),
|
|
308
|
-
node("category-burst-drivers", "Drivers", "The floor-contact tip that decides whether a combo chases, holds centre or simply survives.", partDefaults("category-burst-drivers", "Driver"), PART_TEMPLATES),
|
|
309
|
-
node("category-burst-chips-armour", "Chips & Armour", "Gatinko chips, Armour Tips and the bolt-on components the later waves introduced.", partDefaults("category-burst-chips-armour", "Chip or Armour"), PART_TEMPLATES),
|
|
310
|
-
]),
|
|
311
|
-
branch("category-burst-launchers", "Burst Launchers", "String launchers, LR launchers and grips for Burst play.", [
|
|
312
|
-
node("category-burst-string-launchers", "String Launchers", "The standard Burst launcher — a pull string with a winding spool, rebuildable when the string frays.", launcherDefaults("category-burst-string-launchers", "Beyblade Burst"), PART_TEMPLATES),
|
|
313
|
-
node("category-burst-lr-launchers", "LR Launchers", "Dual-direction launchers for both right- and left-spin Burst tops.", launcherDefaults("category-burst-lr-launchers", "Beyblade Burst"), PART_TEMPLATES),
|
|
314
|
-
node("category-burst-grips", "Launcher Grips", "Grips that bolt onto a launcher for a longer, more repeatable pull.", launcherDefaults("category-burst-grips", "Beyblade Burst"), PART_TEMPLATES),
|
|
315
|
-
]),
|
|
316
|
-
branch("category-burst-stadiums", "Burst Stadiums", "BeyStadiums sized and shaped for Burst play.", [
|
|
317
|
-
node("category-burst-standard-stadiums", "Standard BeyStadiums", "The round Burst dishes, including the tournament-standard Burst BeyStadium.", stadiumDefaults("category-burst-standard-stadiums", "Beyblade Burst"), SEALED_TEMPLATES),
|
|
318
|
-
node("category-burst-stadium-variants", "Stadium Variants", "Themed and modified Burst stadiums — raised walls, pockets and multi-level dishes.", stadiumDefaults("category-burst-stadium-variants", "Beyblade Burst"), SEALED_TEMPLATES),
|
|
319
|
-
]),
|
|
320
|
-
],
|
|
321
|
-
};
|
|
322
|
-
const BEYBLADE_X = {
|
|
323
|
-
id: "category-beyblade-x",
|
|
324
|
-
name: "Beyblade X",
|
|
325
|
-
description: "Beyblade X (2023–present) by Takara Tomy — the current generation, built on the Xtreme Gear system with Blade, Ratchet and Bit parts and the Xtreme Dash rail.",
|
|
326
|
-
extra: {
|
|
327
|
-
isFeatured: true,
|
|
328
|
-
display: { icon: "💫", coverImage: cover("beyblade-x"), color: "#0d9488", showInMenu: true, showInFooter: false },
|
|
329
|
-
contentBody: `<p>Beyblade X is the current generation and the first to put the stadium at the centre of the design. Its Xtreme Line stadiums have a raised rail, and an X top that hits that rail accelerates along it — the Xtreme Dash. Everything about an X build is tuned around whether it can reach and hold that rail.</p>
|
|
330
|
-
<p>The three-part system is renamed: <strong>Blade</strong> on top, <strong>Ratchet</strong> in the middle setting height, <strong>Bit</strong> at the floor. Functionally that mirrors Burst's Layer, Disc and Driver, and physically it is incompatible with all of them. A Ratchet is written as two numbers — <strong>3-60</strong> means three protrusions at a 6.0 mm height — and that notation is the fastest way to read what a build is doing.</p>
|
|
331
|
-
<p>Three retail lines sit above. <strong>Basic Line</strong> is the entry point; <strong>Unique Line (UX)</strong> adds gimmicked Blades; <strong>Custom Line (CX)</strong> splits the Blade itself into a Lock Chip, a Main Blade and an Assist Blade, which is the deepest customisation the franchise has shipped. The <strong>X-Over Project</strong> reissues classic designs on X hardware.</p>`,
|
|
332
|
-
highlights: [
|
|
333
|
-
"The current generation — Xtreme Gear, launched 2023 and still receiving new waves",
|
|
334
|
-
"Custom Line (CX) splits the Blade into three swappable pieces, the deepest tuning the franchise has shipped",
|
|
335
|
-
"An active tournament scene, so parts hold value rather than depreciating",
|
|
336
|
-
],
|
|
337
|
-
faqs: [
|
|
338
|
-
{ question: "Do I need a new stadium for Beyblade X?", answer: "For serious play, yes. X tops are built around the Xtreme Line rail, and in a plain round dish they lose the Xtreme Dash that defines the generation. They will still spin in an older stadium." },
|
|
339
|
-
{ question: "What does the Blade / Ratchet / Bit naming mean?", answer: "Blade is the top piece, Ratchet the middle component that sets height, Bit the floor tip. It maps onto Burst's Layer / Disc / Driver in function but nothing is physically interchangeable between the two." },
|
|
340
|
-
{ question: "What do the numbers on a Ratchet mean, like 3-60?", answer: "The first number is how many protrusions the Ratchet has, the second is its height in tenths of a millimetre — 3-60 is three protrusions at 6.0 mm. Lower sits under an opponent; taller clears the stadium slope and reaches the rail." },
|
|
341
|
-
{ question: "What is the difference between Basic, Unique and Custom Line?", answer: "Basic Line is a standard three-part top. Unique Line (UX) adds a gimmick to the Blade. Custom Line (CX) splits the Blade into a Lock Chip, a Main Blade and an Assist Blade, so one CX purchase yields several distinct builds." },
|
|
342
|
-
],
|
|
343
|
-
},
|
|
344
|
-
children: [
|
|
345
|
-
branch("category-x-tops", "Beyblade X Tops", "Complete Beyblade X tops — starters, boosters and the X-Over reissues.", [
|
|
346
|
-
line("category-x-basic", "Basic Line", "Standard three-part X tops. The entry point into the format and the bulk of its catalogue.", beyDefaults("category-x-basic", "Beyblade X", "Xtreme Gear (Basic Line)"), BEY_TEMPLATES),
|
|
347
|
-
line("category-x-unique-ux", "Unique Line (UX)", "UX releases, each Blade carrying a mechanical gimmick the Basic Line does not have.", beyDefaults("category-x-unique-ux", "Beyblade X", "Xtreme Gear (Unique Line)"), BEY_TEMPLATES),
|
|
348
|
-
line("category-x-custom-cx", "Custom Line (CX)", "CX releases, whose Blade splits into a Lock Chip, a Main Blade and an Assist Blade.", beyDefaults("category-x-custom-cx", "Beyblade X", "Xtreme Gear (Custom Line)"), BEY_TEMPLATES),
|
|
349
|
-
line("category-x-over", "X-Over Project", "Classic designs from earlier generations reissued on Beyblade X hardware.", beyDefaults("category-x-over", "Beyblade X", "Xtreme Gear (X-Over)"), BEY_TEMPLATES),
|
|
350
|
-
]),
|
|
351
|
-
branch("category-x-parts", "Beyblade X Parts", "Blades, Ratchets and Bits sold loose for custom X builds.", [
|
|
352
|
-
node("category-x-blades", "Blades", "The upper piece that defines an X combo's attack shape and its ability to hold the rail.", partDefaults("category-x-blades", "Blade"), PART_TEMPLATES),
|
|
353
|
-
node("category-x-ratchets", "Ratchets", "The middle component. Written as protrusions-height — 3-60, 4-60, 9-60 — and the fastest lever on a build.", partDefaults("category-x-ratchets", "Ratchet"), PART_TEMPLATES),
|
|
354
|
-
node("category-x-bits", "Bits", "The floor-contact tip, the X-format equivalent of a Driver.", partDefaults("category-x-bits", "Bit"), PART_TEMPLATES),
|
|
355
|
-
/*
|
|
356
|
-
* 🛑 CX PARTS NEED THEIR OWN NODES, and their absence cost 82 leaves.
|
|
357
|
-
*
|
|
358
|
-
* `PART_SLOT_CATEGORY` pointed all five Custom Line slots at
|
|
359
|
-
* `category-x-custom-cx` — which is a `line()`, so it attaches
|
|
360
|
-
* `MODEL_LEAVES[id]` and never reads `PART_LEAVES[id]` at all. The
|
|
361
|
-
* generated map held 82 leaves under that key and every one of them was
|
|
362
|
-
* silently dropped: not mis-tiered, absent. Together with the 3 under
|
|
363
|
-
* `branch("category-original-parts")` that is exactly the 85-leaf
|
|
364
|
-
* shortfall the tier-4 guard had been reporting as a bare number.
|
|
365
|
-
*
|
|
366
|
-
* One node per classification, matching every other generation here —
|
|
367
|
-
* an 82-leaf grab-bag under a single "CX Parts" node would also have
|
|
368
|
-
* satisfied the count while being the wrong shelf for a buyer.
|
|
369
|
-
*/
|
|
370
|
-
node("category-x-lock-chips", "Lock Chips", "The CX centrepiece. It locks a Main Blade and an Assist Blade together and carries the beast art.", partDefaults("category-x-lock-chips", "Lock Chip"), PART_TEMPLATES),
|
|
371
|
-
node("category-x-main-blades", "Main Blades", "The primary contact blade of a CX build — the piece that sets its attack shape.", partDefaults("category-x-main-blades", "Main Blade"), PART_TEMPLATES),
|
|
372
|
-
node("category-x-assist-blades", "Assist Blades", "The lower CX blade, tuning weight distribution and how the build sits on the rail.", partDefaults("category-x-assist-blades", "Assist Blade"), PART_TEMPLATES),
|
|
373
|
-
node("category-x-over-blades", "Over Blades", "A CX blade that mounts above the Lock Chip, adding an upper contact surface.", partDefaults("category-x-over-blades", "Over Blade"), PART_TEMPLATES),
|
|
374
|
-
node("category-x-metal-blades", "Metal Blades", "A metal CX blade — the heaviest option in the format and the usual choice for an outspin build.", partDefaults("category-x-metal-blades", "Metal Blade"), PART_TEMPLATES),
|
|
375
|
-
]),
|
|
376
|
-
branch("category-x-launchers", "Beyblade X Launchers", "String launchers, winders and grips for the X format.", [
|
|
377
|
-
node("category-x-string-launchers", "String Launchers", "The standard X launcher, with a shot angle designed around reaching the Xtreme Line rail.", launcherDefaults("category-x-string-launchers", "Beyblade X"), PART_TEMPLATES),
|
|
378
|
-
node("category-x-winders", "Winders", "Ripcord-style winders for the entry-level X launchers.", launcherDefaults("category-x-winders", "Beyblade X"), PART_TEMPLATES),
|
|
379
|
-
node("category-x-grips", "Launcher Grips", "Grips for a longer, more repeatable X launch.", launcherDefaults("category-x-grips", "Beyblade X"), PART_TEMPLATES),
|
|
380
|
-
]),
|
|
381
|
-
branch("category-x-stadiums", "Beyblade X Stadiums", "Xtreme Line stadiums and the plain dishes that predate them.", [
|
|
382
|
-
node("category-x-xtreme-stadiums", "Xtreme Stadiums", "X-format stadiums with the Xtreme Line rail — the feature the whole generation is designed around.", stadiumDefaults("category-x-xtreme-stadiums", "Beyblade X"), SEALED_TEMPLATES),
|
|
383
|
-
node("category-x-standard-stadiums", "Standard X Stadiums", "Plain round X dishes without the rail, for casual play and practice.", stadiumDefaults("category-x-standard-stadiums", "Beyblade X"), SEALED_TEMPLATES),
|
|
384
|
-
]),
|
|
385
|
-
/*
|
|
386
|
-
* Added 2026-10-19 for the real CX-20 "Customize Set C" pre-order fixture.
|
|
387
|
-
* A Customize Set is its own retail concept, distinct from both a complete
|
|
388
|
-
* top (`category-x-tops`) and a single loose part (`category-x-parts`):
|
|
389
|
-
* it bundles one complete top with several loose Blades/Ratchets/Bits, so
|
|
390
|
-
* neither existing leaf is the right home. `partDefaults` is still the
|
|
391
|
-
* closer fit of the two existing helpers — the commercial character is
|
|
392
|
-
* "components for a custom build," which is what its FAQ templates
|
|
393
|
-
* (fit/compatibility, not authenticity) already speak to — and it carries
|
|
394
|
-
* `taxCodeId: TAX_TOY` (HSN 9503 0020, 5%), the same rate every other
|
|
395
|
-
* Beyblade/part/launcher/stadium in this catalogue already uses.
|
|
396
|
-
*/
|
|
397
|
-
node("category-x-customize-sets", "Customize Sets", "CX-line Customize Sets — a complete top plus extra Blades, Ratchets and Bits for building several distinct combinations from one box.", partDefaults("category-x-customize-sets", "Customize Set"), PART_TEMPLATES),
|
|
398
|
-
],
|
|
399
|
-
};
|
|
400
|
-
/**
|
|
401
|
-
* 🛑 Renamed from `category-battle-gear` in B5, and the id change is the point.
|
|
402
|
-
*
|
|
403
|
-
* The old node held every stadium from every generation plus storage, and a
|
|
404
|
-
* stadium is generation-specific — so it has moved out to four per-generation
|
|
405
|
-
* `*-stadiums` nodes above. What is left is the gear that genuinely is
|
|
406
|
-
* cross-generation: a case holds any bey, a tool kit fits any screw. The node's
|
|
407
|
-
* own description already said "accessories" before the rename.
|
|
408
|
-
*
|
|
409
|
-
* These are DOCUMENT IDS and `categorySlugs[]` stores the full chain by id, so
|
|
410
|
-
* this is a reseed, not a find-replace: the five product fixtures that
|
|
411
|
-
* referenced the old chain were updated in the same change, and
|
|
412
|
-
* `deriveTaxonomy` rebuilds `categoryNames[]` on write.
|
|
413
|
-
*/
|
|
414
|
-
const ACCESSORIES = {
|
|
415
|
-
id: "category-accessories",
|
|
416
|
-
name: "Accessories",
|
|
417
|
-
description: "Gear that works across every generation — storage cases, tool kits, counters and blank sticker sheets.",
|
|
418
|
-
extra: {
|
|
419
|
-
display: { icon: "🧰", coverImage: cover("accessories"), color: "#7c3aed", showInMenu: true, showInFooter: false },
|
|
420
|
-
contentBody: `<p>Everything here is generation-agnostic, which is the whole reason it is one shelf rather than four. A hard case holds a Plastic Generation top and a Beyblade X top equally well; a tri-wing driver fits the screws on both.</p>
|
|
421
|
-
<p>Stadiums are deliberately <em>not</em> here. A stadium is generation-specific — a BX-10 Xtreme Stadium is a Beyblade X product and a BB-10 Attack Type is Metal Fight — so each generation has its own stadium shelf under <a href="/categories/category-spinning-tops">Spinning Tops</a>.</p>`,
|
|
422
|
-
highlights: [
|
|
423
|
-
"Storage built for part collections, not just complete tops",
|
|
424
|
-
"Tool kits for the tri-wing and Phillips screws different generations use",
|
|
425
|
-
],
|
|
426
|
-
faqs: [
|
|
427
|
-
{ question: "Why are stadiums not listed under Accessories?", answer: "Because a stadium is generation-specific. A Beyblade X Xtreme Line stadium and a Metal Fight BB-10 are different products for different tops, so each generation has its own stadium shelf and you are never filtering a list that is mostly not for your beys." },
|
|
428
|
-
{ question: "Which screwdriver do I need?", answer: "It depends on the generation. Most original-era and Metal Fight parts use a Phillips screw; several Burst and X components use a tri-wing. A counterfeit frequently uses the wrong one, which is itself a useful tell." },
|
|
429
|
-
],
|
|
430
|
-
},
|
|
431
|
-
children: [
|
|
432
|
-
node("category-accessory-storage-cases", "Storage Cases & Trays", "Hard cases and compartment trays for complete tops and loose parts.", accessoryDefaults("category-accessory-storage-cases", "Storage case"), PART_TEMPLATES),
|
|
433
|
-
node("category-accessory-tool-kits", "Tool Kits", "Tri-wing and Phillips drivers, picks and tweezers for part swaps and repairs.", accessoryDefaults("category-accessory-tool-kits", "Tool kit"), PART_TEMPLATES),
|
|
434
|
-
node("category-accessory-counters", "Counters & BeyPointers", "Battle counters, BeyPointers and the scoring accessories tournaments use.", accessoryDefaults("category-accessory-counters", "Counter"), PART_TEMPLATES),
|
|
435
|
-
node("category-accessory-sticker-sheets", "Sticker Sheets", "Replacement and blank sticker sheets — the first thing to wear out on a played top.", accessoryDefaults("category-accessory-sticker-sheets", "Sticker sheet"), PART_TEMPLATES),
|
|
436
|
-
],
|
|
437
|
-
};
|
|
438
|
-
const SPINNING_TOPS = {
|
|
439
|
-
id: "category-spinning-tops",
|
|
440
|
-
name: "Spinning Tops",
|
|
441
|
-
description: "Collectible spinning tops and battle systems — Beyblade Original, Metal Fight, Burst and X, their loose parts, launchers and stadiums.",
|
|
442
|
-
extra: {
|
|
443
|
-
isFeatured: true,
|
|
444
|
-
featuredPriority: 1,
|
|
445
|
-
showOnHomepage: true,
|
|
446
|
-
display: { icon: "🌀", coverImage: cover("spinning-tops"), color: "#0891b2", showInMenu: true, showInFooter: true },
|
|
447
|
-
contentBody: `<p>Four generations of Beyblade, and they do not interchange. That single fact is why this section is organised by generation first and part family second: an original-era ripcord launcher drives nothing from Burst, a Burst Driver does not fit an X Ratchet, and a stadium built for the Xtreme Line rail is a different product from a plain round dish.</p>
|
|
448
|
-
<p><a href="/categories/category-beyblade-original">Beyblade Original</a> (1999–2003) moved through four part systems in four years and ends with HMS, the highest-value tier here. <a href="/categories/category-beyblade-metal">Metal Fight</a> (2008–2013) made it a tuning game, and is the only generation where loose parts outnumber complete tops. <a href="/categories/category-beyblade-burst">Burst</a> (2015–2023) added the bursting mechanic across seven waves. <a href="/categories/category-beyblade-x">Beyblade X</a> (2023–) puts the stadium rail at the centre of the design.</p>
|
|
449
|
-
<p>Each generation has its own tops, parts, launchers and stadiums. <a href="/categories/category-accessories">Accessories</a> — cases, tools, counters, sticker sheets — is the one shelf that genuinely spans all four.</p>`,
|
|
450
|
-
highlights: [
|
|
451
|
-
"Every era of Beyblade in one place — Original, Metal Fight, Burst and X",
|
|
452
|
-
"Loose parts, launchers and stadiums shelved per generation, because none of them interchange",
|
|
453
|
-
"Verified sellers, condition-graded listings, and authenticity stated on every one",
|
|
454
|
-
"Auctions, pre-orders and prize draws alongside straightforward buy-now listings",
|
|
455
|
-
],
|
|
456
|
-
faqs: [
|
|
457
|
-
{ question: "What is the difference between the four Beyblade generations?", answer: "Original (1999–2003) started the franchise with ripcord launchers and a four-part plastic system. Metal Fight (2008–2013) added metal-weighted wheels and deep part tuning. Burst (2015–2023) introduced tops that burst apart on hard hits. Beyblade X (2023–) uses the Xtreme Gear system and a stadium rail that accelerates a top along it." },
|
|
458
|
-
{ question: "Are used tops sold here safe to battle with?", answer: "Every listing carries a condition grade and sellers are expected to disclose chips, cracks and stripped teeth — check the condition badge and the photographs, which are of the actual item rather than a stock image." },
|
|
459
|
-
{ question: "Do parts interchange between generations?", answer: "No. Every generation changed the locking geometry, and launchers changed with them. Parts interchange freely within a generation and almost never across one, which is why this section is shelved by generation first." },
|
|
460
|
-
{ question: "How do I know a top is not a counterfeit?", answer: "Every listing states its authenticity — original, reproduction or unverified — and a reproduction is labelled as one rather than described as genuine. Price is the loudest signal: a current-generation top at a fifth of the usual price is not a bargain." },
|
|
461
|
-
],
|
|
462
|
-
seo: {
|
|
463
|
-
title: "Beyblade & Spinning Tops — Original, Metal Fight, Burst, X | LetItRip",
|
|
464
|
-
description: "Buy Beyblade tops, parts, launchers and stadiums across all four generations — Original, Metal Fight, Burst and Beyblade X. Verified sellers, condition-graded listings, authenticity stated.",
|
|
465
|
-
keywords: ["beyblade", "spinning tops", "beyblade x", "beyblade burst", "metal fight beyblade", "beyblade india"],
|
|
466
|
-
},
|
|
467
|
-
},
|
|
468
|
-
children: [BEYBLADE_ORIGINAL, BEYBLADE_METAL, BEYBLADE_BURST, BEYBLADE_X, ACCESSORIES],
|
|
469
|
-
};
|
|
470
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
471
|
-
// Root 2 — Trading Cards
|
|
472
|
-
//
|
|
473
|
-
// 🛑 THREE axes, and only one can be the tree. Game -> set is the tree, because
|
|
474
|
-
// a card belongs to exactly one set and the set is what a buyer searches.
|
|
475
|
-
// FORMAT gets a tier-2 split as well, because the price bands differ ~20×
|
|
476
|
-
// (a single is ₹350–500, a booster box ₹7,000–14,500) and shoppers never
|
|
477
|
-
// cross-shop them. LANGUAGE and GRADE are features, not nodes.
|
|
478
|
-
//
|
|
479
|
-
// Expansion sets sit under SEALED only. A sealed product IS the set
|
|
480
|
-
// ("Destined Rivals Booster Box"); a single is a card whose set is a
|
|
481
|
-
// property of it, carried on `itemCode`. Duplicating ~14 set nodes under
|
|
482
|
-
// every format would triple the branch for no new reachability.
|
|
483
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
484
|
-
const POKEMON_SETS = [
|
|
485
|
-
node("category-pokemon-set-destined-rivals", "Destined Rivals", "Sealed Destined Rivals product — booster boxes, ETBs, bundles and blisters.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
486
|
-
node("category-pokemon-set-journey-together", "Journey Together", "Sealed Journey Together product.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
487
|
-
node("category-pokemon-set-prismatic-evolutions", "Prismatic Evolutions", "Sealed Prismatic Evolutions product.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
488
|
-
node("category-pokemon-set-surging-sparks", "Surging Sparks", "Sealed Surging Sparks product.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
489
|
-
node("category-pokemon-set-stellar-crown", "Stellar Crown", "Sealed Stellar Crown product.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
490
|
-
node("category-pokemon-set-twilight-masquerade", "Twilight Masquerade", "Sealed Twilight Masquerade product.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
491
|
-
node("category-pokemon-set-151", "Pokémon 151", "Sealed Pokémon 151 product — the Kanto set, and the most consistently in-demand modern release.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
492
|
-
node("category-pokemon-set-vintage-wotc", "Vintage (WotC era)", "Sealed and opened product from the Wizards of the Coast era — Base Set through Neo and e-Card.", tcgDefaults("category-pokemon-sealed", "Pokémon TCG", "Sealed"), SEALED_TEMPLATES),
|
|
493
|
-
];
|
|
494
|
-
const ONE_PIECE_SETS = [
|
|
495
|
-
node("category-op-set-op09", "OP-09 Emperors in the New World", "Sealed OP-09 product.", tcgDefaults("category-one-piece-sealed", "One Piece Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
496
|
-
node("category-op-set-op10", "OP-10 Royal Blood", "Sealed OP-10 product.", tcgDefaults("category-one-piece-sealed", "One Piece Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
497
|
-
node("category-op-set-op11", "OP-11 A Fist of Divine Speed", "Sealed OP-11 product.", tcgDefaults("category-one-piece-sealed", "One Piece Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
498
|
-
node("category-op-set-prb01", "PRB-01 Premium Booster", "Sealed PRB-01 premium booster product.", tcgDefaults("category-one-piece-sealed", "One Piece Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
499
|
-
node("category-op-set-starter-decks", "Starter Decks", "Sealed One Piece starter decks across every colour.", tcgDefaults("category-one-piece-sealed", "One Piece Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
500
|
-
];
|
|
501
|
-
const TRADING_CARDS = {
|
|
502
|
-
id: "category-trading-cards",
|
|
503
|
-
name: "Trading Cards",
|
|
504
|
-
description: "Trading card games — Pokémon, One Piece, Weiss Schwarz, Yu-Gi-Oh and more. Singles, sealed product, graded slabs and the supplies to protect them.",
|
|
505
|
-
extra: {
|
|
506
|
-
display: { icon: "🃏", coverImage: cover("trading-cards"), color: "#d97706", showInMenu: true, showInFooter: true },
|
|
507
|
-
contentBody: `<p>Trading cards split three ways and it pays to know which one you are shopping. <strong>Singles</strong> are individual cards, typically ₹350–500 and priced on condition and rarity. <strong>Sealed</strong> product is unopened — a booster pack is around ₹950, a booster box ₹7,000–14,500 — and is bought either to open or to hold. <strong>Graded</strong> slabs are cards sent to PSA, BGS or CGC, encapsulated with a numeric grade, and a PSA 10 of a card worth ₹500 raw can be worth twenty times that.</p>
|
|
508
|
-
<p>Within each game, sealed product is shelved by <strong>expansion set</strong>, because a sealed box is the set — "Destined Rivals Booster Box" names it exactly. Singles carry their set on the listing instead, since a single is a card first and a set member second.</p>
|
|
509
|
-
<p><strong>Language matters and is a separate filter.</strong> A Japanese print and an English print of the same card are different products with different print runs, different pull rates and often very different prices. It is recorded as a feature on every listing rather than buried in the title.</p>`,
|
|
510
|
-
highlights: [
|
|
511
|
-
"Singles, sealed and graded shelved separately — the price bands differ by 20×",
|
|
512
|
-
"Sealed product organised by expansion set, because a sealed box is the set",
|
|
513
|
-
"Language and grade recorded on every listing, not left in the title",
|
|
514
|
-
],
|
|
515
|
-
faqs: [
|
|
516
|
-
{ question: "What is the difference between a booster box, an ETB and a bundle?", answer: "A booster box holds the most packs and has the best per-pack price; an Elite Trainer Box holds fewer packs plus accessories (sleeves, dice, a deck box) and is better value if you want those; a bundle is a small pack count at the lowest entry price. Per pack, box beats ETB beats bundle." },
|
|
517
|
-
{ question: "Why does a Japanese card cost differently from the English version?", answer: "Different print runs, different pull rates and a different collector base. Japanese sets often have higher card quality and smaller print runs; English sets have a larger market. Language is a filter here because they are genuinely different products." },
|
|
518
|
-
{ question: "What does a PSA 10 actually mean?", answer: "It is the top grade from Professional Sports Authenticator — centring, corners, edges and surface all judged near-perfect, and the card sealed in a tamper-evident slab. Grading is why an identical-looking card can be worth twenty times another: the slab certifies the condition rather than asking you to trust a photograph." },
|
|
519
|
-
{ question: "Are pulls guaranteed from sealed product?", answer: "No, and no seller here may claim they are. Sealed product is random by design. A listing promising a specific card from a sealed pack or box should be reported." },
|
|
520
|
-
],
|
|
521
|
-
seo: {
|
|
522
|
-
title: "Trading Cards — Pokémon, One Piece, Graded Slabs | LetItRip",
|
|
523
|
-
description: "Buy trading cards in India — Pokémon and One Piece singles, sealed booster boxes and ETBs, PSA and BGS graded slabs, plus sleeves and binders. Language and grade on every listing.",
|
|
524
|
-
keywords: ["pokemon tcg india", "one piece card game", "booster box india", "psa graded cards", "trading cards india"],
|
|
525
|
-
},
|
|
526
|
-
},
|
|
527
|
-
children: [
|
|
528
|
-
{
|
|
529
|
-
id: "category-pokemon-tcg",
|
|
530
|
-
name: "Pokémon TCG",
|
|
531
|
-
description: "The Pokémon Trading Card Game — singles, sealed product by expansion, and graded slabs.",
|
|
532
|
-
extra: {
|
|
533
|
-
display: { icon: "⚡", coverImage: cover("pokemon-tcg"), color: "#eab308", showInMenu: true, showInFooter: false },
|
|
534
|
-
faqs: [
|
|
535
|
-
{ question: "Which Pokémon sets hold value best?", answer: "Historically, sets with a short print run or an iconic chase card. Pokémon 151 and the WotC-era Base Set are the two most consistently in demand; modern sets with long reprints tend to soften after release." },
|
|
536
|
-
],
|
|
537
|
-
},
|
|
538
|
-
children: [
|
|
539
|
-
node("category-pokemon-singles", "Singles", "Individual Pokémon cards, priced on rarity and condition. Set and language stated on every listing.", tcgDefaults("category-pokemon-singles", "Pokémon TCG", "Single"), SEALED_TEMPLATES),
|
|
540
|
-
branch("category-pokemon-sealed", "Sealed Product", "Unopened Pokémon product, shelved by expansion set.", POKEMON_SETS),
|
|
541
|
-
node("category-pokemon-graded", "Graded Slabs", "PSA, BGS and CGC graded Pokémon cards, with the certification number on the listing.", tcgDefaults("category-pokemon-graded", "Pokémon TCG", "Graded"), SEALED_TEMPLATES),
|
|
542
|
-
],
|
|
543
|
-
},
|
|
544
|
-
{
|
|
545
|
-
id: "category-one-piece-tcg",
|
|
546
|
-
name: "One Piece Card Game",
|
|
547
|
-
description: "Bandai's One Piece Card Game — singles, sealed product by set, and graded cards.",
|
|
548
|
-
extra: {
|
|
549
|
-
display: { icon: "🏴☠️", coverImage: cover("one-piece-tcg"), color: "#dc2626", showInMenu: true, showInFooter: false },
|
|
550
|
-
},
|
|
551
|
-
children: [
|
|
552
|
-
node("category-one-piece-singles", "Singles", "Individual One Piece cards — leaders, characters and events, with set codes on the listing.", tcgDefaults("category-one-piece-singles", "One Piece Card Game", "Single"), SEALED_TEMPLATES),
|
|
553
|
-
branch("category-one-piece-sealed", "Sealed Product", "Unopened One Piece product, shelved by set code.", ONE_PIECE_SETS),
|
|
554
|
-
node("category-one-piece-graded", "Graded Slabs", "Graded One Piece cards with their certification numbers.", tcgDefaults("category-one-piece-graded", "One Piece Card Game", "Graded"), SEALED_TEMPLATES),
|
|
555
|
-
],
|
|
556
|
-
},
|
|
557
|
-
branch("category-other-tcg", "Other Card Games", "Weiss Schwarz, Dragon Ball, Yu-Gi-Oh, Digimon, Union Arena, Gundam and Hololive.", [
|
|
558
|
-
node("category-tcg-weiss-schwarz", "Weiss Schwarz", "Bushiroad's crossover card game, spanning dozens of anime licences.", tcgDefaults("category-tcg-weiss-schwarz", "Weiss Schwarz", "Sealed"), SEALED_TEMPLATES),
|
|
559
|
-
node("category-tcg-dragon-ball", "Dragon Ball Super", "Bandai's Dragon Ball Super Card Game — singles and sealed.", tcgDefaults("category-tcg-dragon-ball", "Dragon Ball Super Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
560
|
-
node("category-tcg-yu-gi-oh", "Yu-Gi-Oh!", "Konami's Yu-Gi-Oh! Trading Card Game — structure decks, boosters and singles.", tcgDefaults("category-tcg-yu-gi-oh", "Yu-Gi-Oh!", "Sealed"), SEALED_TEMPLATES),
|
|
561
|
-
node("category-tcg-digimon", "Digimon Card Game", "Bandai's Digimon Card Game.", tcgDefaults("category-tcg-digimon", "Digimon Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
562
|
-
node("category-tcg-union-arena", "Union Arena", "Bushiroad's Union Arena, another multi-licence crossover game.", tcgDefaults("category-tcg-union-arena", "Union Arena", "Sealed"), SEALED_TEMPLATES),
|
|
563
|
-
node("category-tcg-gundam", "Gundam Card Game", "Bandai's Gundam Card Game.", tcgDefaults("category-tcg-gundam", "Gundam Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
564
|
-
node("category-tcg-hololive", "Hololive", "The Hololive Official Card Game.", tcgDefaults("category-tcg-hololive", "Hololive Official Card Game", "Sealed"), SEALED_TEMPLATES),
|
|
565
|
-
]),
|
|
566
|
-
branch("category-card-supplies", "Card Supplies", "Sleeves, toploaders, binders, deck boxes and slab display — the cheapest tier on the site.", [
|
|
567
|
-
node("category-card-sleeves-toploaders", "Sleeves & Toploaders", "Penny sleeves, perfect fits, art sleeves, toploaders and semi-rigids.", tcgDefaults("category-card-sleeves-toploaders", "Trading cards", "Supplies"), PART_TEMPLATES),
|
|
568
|
-
node("category-card-binders-boxes", "Binders & Deck Boxes", "Zip binders, portfolios, deck boxes and storage for bulk.", tcgDefaults("category-card-binders-boxes", "Trading cards", "Supplies"), PART_TEMPLATES),
|
|
569
|
-
node("category-card-slab-display", "Slab Display", "Stands, wall mounts and cases built for graded slabs rather than raw cards.", tcgDefaults("category-card-slab-display", "Trading cards", "Supplies"), PART_TEMPLATES),
|
|
570
|
-
]),
|
|
571
|
-
],
|
|
572
|
-
};
|
|
573
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
574
|
-
// Root 3 — Collectible Figures
|
|
575
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
576
|
-
const COLLECTIBLE_FIGURES = {
|
|
577
|
-
id: "category-collectible-figures",
|
|
578
|
-
name: "Collectible Figures",
|
|
579
|
-
description: "Anime, comic and game figures — scale statues, articulated figures, prize figures and Nendoroids, with box condition stated separately from figure condition.",
|
|
580
|
-
extra: {
|
|
581
|
-
display: { icon: "🧍", coverImage: cover("collectible-figures"), color: "#db2777", showInMenu: true, showInFooter: true },
|
|
582
|
-
contentBody: `<p>Figures are priced on three things: scale, maker and whether the box survived. <strong>Scale</strong> is the main axis — a 1/12 figure is around 15 cm and a 1/6 is around 30 cm, and the price roughly follows the volume. <strong>Prize figures</strong> are a separate tier entirely: made for Japanese arcade prize machines, usually unarticulated, and they start around ₹2,000 where a scale statue starts around ₹3,000 and runs well past ₹30,000.</p>
|
|
583
|
-
<p><strong>Box condition is graded separately from the figure</strong>, because collectors price it separately. A mint figure in a crushed box and the same figure boxed are different listings at different prices, and a "without box" listing says so in its title.</p>
|
|
584
|
-
<p>Bootlegs are common at scale and are identified by paint quality, seam finish and box printing rather than by price alone. Every listing here states its authenticity, and a seller listing a reproduction must label it as one.</p>`,
|
|
585
|
-
highlights: [
|
|
586
|
-
"Shelved by scale, because scale is what drives the price",
|
|
587
|
-
"Box condition graded separately from the figure — collectors price the two differently",
|
|
588
|
-
"Prize figures kept as their own tier rather than mixed into scale statues",
|
|
589
|
-
],
|
|
590
|
-
faqs: [
|
|
591
|
-
{ question: "What does 1/7 scale actually mean?", answer: "It is the figure's size relative to the character at human scale — a 1/7 figure of a 175 cm character is about 25 cm tall. In practice: 1/12 is around 15 cm, 1/8 around 21 cm, 1/7 around 25 cm, 1/6 around 30 cm. Price tracks the volume closely." },
|
|
592
|
-
{ question: "What is a prize figure?", answer: "A figure produced for Japanese arcade prize machines rather than retail. They are usually unarticulated and simpler in finish, and they are genuinely cheaper rather than lower quality for the price — Banpresto's prize line is the best-known." },
|
|
593
|
-
{ question: "How do I spot a bootleg figure?", answer: "Paint bleed at colour boundaries, visible seam lines left unfinished, a box printed slightly out of register, and a missing or mis-sized licence mark. Price alone is not conclusive — a genuine figure can be discounted, and a good bootleg is not always cheap." },
|
|
594
|
-
{ question: "Does a damaged box affect the price much?", answer: "For a sealed collectible, substantially. That is why box condition is graded as its own field here rather than folded into the figure's condition." },
|
|
595
|
-
],
|
|
596
|
-
seo: {
|
|
597
|
-
title: "Collectible Figures — Anime, Marvel, Nendoroid | LetItRip",
|
|
598
|
-
description: "Buy collectible figures in India — 1/12 to 1/6 scale anime statues, Marvel Legends, Nendoroids, Banpresto prize figures and vintage Toy Biz. Box condition stated separately.",
|
|
599
|
-
keywords: ["anime figures india", "marvel legends india", "nendoroid", "banpresto", "collectible figures"],
|
|
600
|
-
},
|
|
601
|
-
},
|
|
602
|
-
children: [
|
|
603
|
-
branch("category-anime-figures", "Anime Figures", "Scale statues, prize figures and chibi lines from anime and manga licences.", [
|
|
604
|
-
node("category-anime-scale-1-12", "1/12 Scale", "Around 15 cm. The articulated-figure standard — Figma, S.H.Figuarts and Mafex.", figureDefaults("category-anime-scale-1-12", "1/12 scale"), COLLECTIBLE_TEMPLATES),
|
|
605
|
-
node("category-anime-scale-1-7-1-8", "1/7 & 1/8 Scale", "Around 21–25 cm. The most common scale-statue size and the broadest selection.", figureDefaults("category-anime-scale-1-7-1-8", "1/7 & 1/8 scale"), COLLECTIBLE_TEMPLATES),
|
|
606
|
-
node("category-anime-scale-1-6", "1/6 Scale", "Around 30 cm. Large display statues, and the premium end of the anime-figure market.", figureDefaults("category-anime-scale-1-6", "1/6 scale"), COLLECTIBLE_TEMPLATES),
|
|
607
|
-
node("category-anime-prize-figures", "Prize Figures", "Figures made for Japanese arcade prize machines — usually unarticulated, genuinely cheaper.", figureDefaults("category-anime-prize-figures", "Prize figure"), COLLECTIBLE_TEMPLATES),
|
|
608
|
-
node("category-anime-nendoroid-chibi", "Nendoroid & Chibi", "Stylised small-scale figures with swappable faces and parts.", figureDefaults("category-anime-nendoroid-chibi", "Nendoroid / chibi"), COLLECTIBLE_TEMPLATES),
|
|
609
|
-
]),
|
|
610
|
-
branch("category-comic-figures", "Comic & Film Figures", "Marvel, DC and the vintage lines that preceded them.", [
|
|
611
|
-
node("category-comic-marvel-legends", "Marvel Legends", "Hasbro's 6-inch articulated Marvel line, including Build-A-Figure waves.", figureDefaults("category-comic-marvel-legends", "Marvel Legends"), COLLECTIBLE_TEMPLATES),
|
|
612
|
-
node("category-comic-dc", "DC Figures", "McFarlane DC Multiverse and the DC lines that came before it.", figureDefaults("category-comic-dc", "DC"), COLLECTIBLE_TEMPLATES),
|
|
613
|
-
node("category-comic-vintage-toybiz", "Vintage Toy Biz", "Pre-Hasbro Toy Biz Marvel figures from the 1990s — a genuine vintage tier.", figureDefaults("category-comic-vintage-toybiz", "Toy Biz (vintage)"), COLLECTIBLE_TEMPLATES),
|
|
614
|
-
]),
|
|
615
|
-
branch("category-game-figures", "Game & Franchise Figures", "Figures from games and franchises outside the anime and comic lines.", [
|
|
616
|
-
node("category-game-pokemon-figures", "Pokémon Figures", "Pokémon figures and statues, from Tomy minis to scale pieces.", figureDefaults("category-game-pokemon-figures", "Pokémon"), COLLECTIBLE_TEMPLATES),
|
|
617
|
-
node("category-game-one-piece-figures", "One Piece Figures", "One Piece figures across Banpresto, MegaHouse and the scale lines.", figureDefaults("category-game-one-piece-figures", "One Piece"), COLLECTIBLE_TEMPLATES),
|
|
618
|
-
node("category-game-vocaloid-figures", "Vocaloid Figures", "Hatsune Miku and the wider Vocaloid figure lines.", figureDefaults("category-game-vocaloid-figures", "Vocaloid"), COLLECTIBLE_TEMPLATES),
|
|
619
|
-
]),
|
|
620
|
-
branch("category-figure-accessories", "Figure Accessories", "Stands, display cases, posters and prints.", [
|
|
621
|
-
node("category-figure-stands-cases", "Stands & Display Cases", "Acrylic stands, dust cases and shelf risers for figure display.", accessoryDefaults("category-figure-stands-cases", "Display case"), PART_TEMPLATES),
|
|
622
|
-
node("category-figure-posters-prints", "Posters & Prints", "Art prints, posters and wall art.", accessoryDefaults("category-figure-posters-prints", "Print"), PART_TEMPLATES),
|
|
623
|
-
]),
|
|
624
|
-
],
|
|
625
|
-
};
|
|
626
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
627
|
-
// Root 4 — Hot Wheels
|
|
628
|
-
//
|
|
629
|
-
// 🛑 HOT WHEELS ONLY, and that is what makes the tree clean. Mainline is
|
|
630
|
-
// essentially all 1:64, so SCALE stops being a tree axis and becomes a
|
|
631
|
-
// feature — which removes the compromise an earlier draft had to make
|
|
632
|
-
// between splitting by maker sub-line and splitting by scale. The tree is
|
|
633
|
-
// Hot Wheels' own line structure, which is how collectors shop it and what
|
|
634
|
-
// toycollectorsindia's 15,014-product catalogue encodes.
|
|
635
|
-
//
|
|
636
|
-
// Twenty other marques the crawl surfaced (Matchbox, Tomica, Mini GT, M2,
|
|
637
|
-
// Greenlight …) are deliberately out of scope; their data stays in
|
|
638
|
-
// docs/research/ so adding one is a seed change, not another crawl.
|
|
639
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
640
|
-
const HOT_WHEELS = {
|
|
641
|
-
id: "category-hot-wheels",
|
|
642
|
-
name: "Hot Wheels",
|
|
643
|
-
description: "Hot Wheels die-cast at 1:64 — Mainline, Premium (Car Culture, Boulevard, Team Transport), Red Line Club, multipacks and track.",
|
|
644
|
-
extra: {
|
|
645
|
-
display: { icon: "🏎️", coverImage: cover("hot-wheels"), color: "#ea580c", showInMenu: true, showInFooter: true },
|
|
646
|
-
contentBody: `<p>Hot Wheels is shelved by line, because line is what sets both the price and what a collector is actually looking for. <strong>Mainline</strong> is the ₹99–299 blister card you find in a supermarket, and it is where the chase variants hide. <strong>Premium</strong> — Car Culture, Boulevard, Team Transport, Fast & Furious, Pop Culture — has metal bases, Real Riders rubber tyres and licensed liveries, typically ₹450–1,500. <strong>Red Line Club</strong> is members-only, produced in small numbers, and prices accordingly.</p>
|
|
647
|
-
<p><strong>Treasure Hunts are variants, not a line.</strong> A Treasure Hunt is a specific casting from a mainline wave carrying the flame-circle logo; a Super Treasure Hunt additionally has Spectraflame paint and Real Riders tyres. Because a THT is a variant <em>of</em> a mainline car, it is recorded as a feature on the listing rather than given its own shelf — and a listing claiming a chase without showing the markings should be reported.</p>
|
|
648
|
-
<p>One signal specific to this market: the <strong>Indian blister card</strong> differs from the US one, and collectors here price the two differently. It is called out on the listing rather than left for a buyer to spot.</p>`,
|
|
649
|
-
highlights: [
|
|
650
|
-
"Shelved by Hot Wheels' own line structure — Mainline, Premium, RLC, multipacks",
|
|
651
|
-
"Treasure Hunt and Super Treasure Hunt identified on the listing, never inferred",
|
|
652
|
-
"Indian-card releases flagged, because they are priced differently here",
|
|
653
|
-
],
|
|
654
|
-
faqs: [
|
|
655
|
-
{ question: "What is a Treasure Hunt?", answer: "A specific casting within a mainline wave, marked with a flame-circle logo. A Super Treasure Hunt goes further: Spectraflame paint, Real Riders rubber tyres and the TH logo, usually one per case. Both are variants of a mainline car rather than a separate line." },
|
|
656
|
-
{ question: "What makes Premium different from Mainline?", answer: "Metal base rather than plastic, Real Riders rubber tyres, licensed liveries and a card designed for display. Typically ₹450–1,500 against Mainline's ₹99–299." },
|
|
657
|
-
{ question: "What is the Red Line Club?", answer: "Mattel's paid membership line — small-run castings sold directly to members. Production numbers are low, so RLC releases are the most expensive regular Hot Wheels product and the most counterfeited." },
|
|
658
|
-
{ question: "Why does the Indian card matter?", answer: "The Indian-market blister card is printed differently from the US release, and collectors here value the two differently. Listings state which card a car is on rather than leaving you to compare photographs." },
|
|
659
|
-
],
|
|
660
|
-
seo: {
|
|
661
|
-
title: "Hot Wheels India — Mainline, Premium, RLC, Treasure Hunts | LetItRip",
|
|
662
|
-
description: "Buy Hot Wheels die-cast in India — Mainline singles, Premium Car Culture and Team Transport, Red Line Club, multipacks and track. Treasure Hunts and Indian-card releases flagged on the listing.",
|
|
663
|
-
keywords: ["hot wheels india", "treasure hunt hot wheels", "car culture", "red line club", "diecast india"],
|
|
664
|
-
},
|
|
665
|
-
},
|
|
666
|
-
children: [
|
|
667
|
-
branch("category-hw-mainline", "Mainline", "The standard blister-card singles, and where the chase variants are found.", [
|
|
668
|
-
node("category-hw-mainline-series", "Mainline Singles", "Standard Mainline cars by series and wave — the ₹99–299 tier.", diecastDefaults("category-hw-mainline-series", "Mainline"), PART_TEMPLATES),
|
|
669
|
-
node("category-hw-treasure-hunt", "Treasure Hunts", "Treasure Hunt and Super Treasure Hunt castings, with the markings photographed.", diecastDefaults("category-hw-treasure-hunt", "Treasure Hunt"), PART_TEMPLATES),
|
|
670
|
-
]),
|
|
671
|
-
branch("category-hw-premium", "Premium", "Metal-base, Real Riders, licensed-livery lines on display-oriented cards.", [
|
|
672
|
-
node("category-hw-car-culture", "Car Culture", "The flagship Premium series, themed by car scene rather than by model.", diecastDefaults("category-hw-car-culture", "Car Culture"), PART_TEMPLATES),
|
|
673
|
-
node("category-hw-boulevard", "Boulevard", "Premium singles on an oversized collector card.", diecastDefaults("category-hw-boulevard", "Boulevard"), PART_TEMPLATES),
|
|
674
|
-
node("category-hw-team-transport", "Team Transport", "A Premium car paired with its transporter — two vehicles per release.", diecastDefaults("category-hw-team-transport", "Team Transport"), PART_TEMPLATES),
|
|
675
|
-
node("category-hw-fast-and-furious", "Fast & Furious", "The licensed Fast & Furious Premium series.", diecastDefaults("category-hw-fast-and-furious", "Fast & Furious"), PART_TEMPLATES),
|
|
676
|
-
node("category-hw-pop-culture", "Pop Culture", "Premium castings in licensed non-automotive liveries.", diecastDefaults("category-hw-pop-culture", "Pop Culture"), PART_TEMPLATES),
|
|
677
|
-
]),
|
|
678
|
-
node("category-hw-rlc", "Red Line Club", "Members-only small-run releases sold directly by Mattel — the most expensive regular Hot Wheels tier.", diecastDefaults("category-hw-rlc", "Red Line Club"), PART_TEMPLATES),
|
|
679
|
-
branch("category-hw-multipacks", "Multipacks", "Gift packs and multi-car sets.", [
|
|
680
|
-
node("category-hw-gift-packs", "Gift Packs", "Themed boxed sets, often carrying an exclusive casting.", diecastDefaults("category-hw-gift-packs", "Gift pack"), SEALED_TEMPLATES),
|
|
681
|
-
node("category-hw-5-packs", "5-Packs", "Five-car themed packs.", diecastDefaults("category-hw-5-packs", "5-pack"), SEALED_TEMPLATES),
|
|
682
|
-
node("category-hw-10-packs", "10-Packs", "Ten-car bulk packs.", diecastDefaults("category-hw-10-packs", "10-pack"), SEALED_TEMPLATES),
|
|
683
|
-
]),
|
|
684
|
-
node("category-hw-track-accessories", "Track & Accessories", "Track sets, connectors, loops, launchers and display cases.", accessoryDefaults("category-hw-track-accessories", "Track set"), SEALED_TEMPLATES),
|
|
685
|
-
],
|
|
686
|
-
};
|
|
687
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
688
|
-
// Root 5 — Model Kits
|
|
689
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
690
|
-
const MODEL_KITS = {
|
|
691
|
-
id: "category-model-kits",
|
|
692
|
-
name: "Model Kits",
|
|
693
|
-
description: "Snap-fit and glue model kits — Gunpla across every grade, Pokémon kits, and the tools and paints to finish them.",
|
|
694
|
-
extra: {
|
|
695
|
-
display: { icon: "🔧", coverImage: cover("model-kits"), color: "#2563eb", showInMenu: true, showInFooter: false },
|
|
696
|
-
contentBody: `<p>Gunpla is graded, and the grade tells you both the size and how much work is involved. <strong>High Grade (HG)</strong> is 1:144 and snap-fit in an afternoon. <strong>Real Grade (RG)</strong> is the same scale with an inner frame and far more parts. <strong>Master Grade (MG)</strong> is 1:100 with a full internal skeleton. Grade, not price, is the right thing to shop on first — an HG and an MG of the same suit are different projects, not different budgets.</p>
|
|
697
|
-
<p>Kits here are sold sealed. A started or part-built kit is listed as pre-owned with its sprue state described, because a kit missing one runner is not a kit.</p>`,
|
|
698
|
-
highlights: [
|
|
699
|
-
"Gunpla shelved by grade, because grade is the real difference between two kits of the same suit",
|
|
700
|
-
"Tools and nippers listed alongside, since a snap-fit kit still needs a decent cutter",
|
|
701
|
-
],
|
|
702
|
-
faqs: [
|
|
703
|
-
{ question: "What is the difference between HG, RG and MG?", answer: "High Grade is 1:144 and the simplest build. Real Grade is 1:144 with an articulated inner frame and many more parts. Master Grade is 1:100 with a full internal skeleton and the most detail. They are different projects at different part counts, not just different prices." },
|
|
704
|
-
{ question: "Do I need glue or paint for a Gunpla kit?", answer: "No. Gunpla is snap-fit and pre-coloured, and builds without glue or paint. A good pair of nippers is worth having — a blunt cutter leaves nub marks that no amount of care removes." },
|
|
705
|
-
{ question: "Can I buy a part-built kit?", answer: "Yes, listed as pre-owned with its sprue state described. Check it carefully: a kit missing a single runner cannot be completed, so the listing must say what is present." },
|
|
706
|
-
],
|
|
707
|
-
},
|
|
708
|
-
children: [
|
|
709
|
-
branch("category-gundam-kits", "Gundam Kits (Gunpla)", "Bandai Gunpla across the grades.", [
|
|
710
|
-
node("category-gunpla-hg", "High Grade (HG)", "1:144 snap-fit kits — the entry point, and the broadest selection.", tcgDefaults("category-gunpla-hg", "Gunpla", "Sealed"), SEALED_TEMPLATES),
|
|
711
|
-
node("category-gunpla-rg", "Real Grade (RG)", "1:144 with an articulated inner frame and a much higher part count.", tcgDefaults("category-gunpla-rg", "Gunpla", "Sealed"), SEALED_TEMPLATES),
|
|
712
|
-
node("category-gunpla-mg", "Master Grade (MG)", "1:100 with a full internal skeleton — the detail tier.", tcgDefaults("category-gunpla-mg", "Gunpla", "Sealed"), SEALED_TEMPLATES),
|
|
713
|
-
]),
|
|
714
|
-
node("category-pokemon-model-kits", "Pokémon Model Kits", "Bandai's Pokémon Model Kit line — snap-fit, no paint required.", tcgDefaults("category-pokemon-model-kits", "Pokémon Model Kit", "Sealed"), SEALED_TEMPLATES),
|
|
715
|
-
node("category-kit-tools", "Tools & Paints", "Nippers, files, panel liners, cement and paint for kit building.", accessoryDefaults("category-kit-tools", "Modelling tool"), PART_TEMPLATES),
|
|
716
|
-
],
|
|
717
|
-
};
|
|
718
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
719
|
-
// Root 6 — Living Collectibles
|
|
720
|
-
//
|
|
721
|
-
// Deliberately off the collectibles theme. The `live` listing type's fields
|
|
722
|
-
// (species, sex, CITES, jurisdiction) only make sense for actual animals and
|
|
723
|
-
// plants, and its fixtures are explicitly off-catalogue demo content. They
|
|
724
|
-
// previously carried `categorySlugs: []`, which made them unreachable from
|
|
725
|
-
// every category and brand page.
|
|
726
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
727
|
-
const LIVING_COLLECTIBLES = {
|
|
728
|
-
id: "category-living-collectibles",
|
|
729
|
-
name: "Living Collectibles",
|
|
730
|
-
description: "Live animals and plants from vetted sellers — every listing carries jurisdiction and welfare information, and ships only where it is legal to do so.",
|
|
731
|
-
extra: {
|
|
732
|
-
display: { icon: "🌱", coverImage: cover("living-collectibles"), color: "#16a34a", showInMenu: true, showInFooter: false },
|
|
733
|
-
highlights: [
|
|
734
|
-
"Sellers must be verified before a live listing goes public",
|
|
735
|
-
"Jurisdiction checks run at checkout — a listing that cannot legally ship to you will not let you buy it",
|
|
736
|
-
"Species, age and provenance disclosed on every listing",
|
|
737
|
-
],
|
|
738
|
-
faqs: [
|
|
739
|
-
{ question: "How are live animals shipped?", answer: "They generally are not. Most live listings are local-collection only and the listing states the collection area; where courier transport is lawful and appropriate, the seller arranges a specialist live-animal service." },
|
|
740
|
-
{ question: "What happens if a species is not allowed in my state?", answer: "Checkout blocks it. Each live listing records where it may lawfully go, and the jurisdiction check runs before payment rather than after." },
|
|
741
|
-
],
|
|
742
|
-
},
|
|
743
|
-
children: [
|
|
744
|
-
branch("category-companion-animals", "Companion Animals", "Dogs, reptiles and other companion animals from verified sellers.", [
|
|
745
|
-
node("category-animals-dogs", "Dogs", "Puppies and adult dogs from health-screened, vetted breeders.", livingDefaults(), undefined, [
|
|
746
|
-
node("category-dogs-retrievers", "Retrievers", "Golden and Labrador retrievers.", livingDefaults()),
|
|
747
|
-
]),
|
|
748
|
-
node("category-animals-reptiles", "Reptiles", "Captive-bred reptiles with documented provenance.", livingDefaults(), undefined, [
|
|
749
|
-
node("category-reptiles-lizards", "Lizards", "Bearded dragons, geckos and other commonly kept lizards.", livingDefaults()),
|
|
750
|
-
]),
|
|
751
|
-
]),
|
|
752
|
-
branch("category-live-plants", "Live Plants", "Cultivated plants, specimen trees and the tools to keep them.", [
|
|
753
|
-
node("category-plants-bonsai", "Bonsai", "Trained bonsai specimens, sold with their age and training history.", livingDefaults(), undefined, [
|
|
754
|
-
node("category-bonsai-juniper", "Juniper Bonsai", "Juniper specimens — the most widely grown bonsai species.", livingDefaults()),
|
|
755
|
-
]),
|
|
756
|
-
]),
|
|
757
|
-
],
|
|
758
|
-
};
|
|
759
|
-
/**
|
|
760
|
-
* B6 — attach each root's tax floor HERE rather than inside six `extra` blocks.
|
|
761
|
-
*
|
|
762
|
-
* 🛑 One place, because the failure mode is an OMISSION. Six hand-edited
|
|
763
|
-
* blocks is six chances to add a seventh root with no tax code, and the symptom
|
|
764
|
-
* would be three products silently resolving `DEFAULT_GST_RATE` — exactly what
|
|
765
|
-
* was measured before this (3 of 70, at `category-spinning-tops`,
|
|
766
|
-
* `category-burst-tops` and `category-x-tops`). Here, a root missing from
|
|
767
|
-
* `ROOT_TAX_DEFAULTS` is a THROW at seed time, which is a visible failure
|
|
768
|
-
* rather than a wrong rate on an invoice.
|
|
769
|
-
*
|
|
770
|
-
* It MERGES rather than overwrites: a root that already declares
|
|
771
|
-
* `productDefaults` (none does today) keeps everything it has, and a
|
|
772
|
-
* `taxCodeId` it declared itself wins. The root value is a floor.
|
|
773
|
-
*/
|
|
774
|
-
function withRootTax(root) {
|
|
775
|
-
const tax = ROOT_TAX_DEFAULTS[root.id];
|
|
776
|
-
if (!tax) {
|
|
777
|
-
throw new Error(`category-forest: root "${root.id}" has no entry in ROOT_TAX_DEFAULTS. ` +
|
|
778
|
-
"Every root needs a tax floor, or products under it resolve DEFAULT_GST_RATE " +
|
|
779
|
-
"— which C0c defines as a triage signal, not a feature.");
|
|
780
|
-
}
|
|
781
|
-
const extra = (root.extra ?? {});
|
|
782
|
-
return {
|
|
783
|
-
...root,
|
|
784
|
-
extra: {
|
|
785
|
-
...extra,
|
|
786
|
-
productDefaults: {
|
|
787
|
-
...tax,
|
|
788
|
-
/*
|
|
789
|
-
* 🛑 `unverified` AS THE ROOT FLOOR, and the value choice is the whole
|
|
790
|
-
* point. 43 of 381 listing nodes resolved NO `defaultAuthenticity` —
|
|
791
|
-
* tier 0, tier 1 and several tier-2 branches — so a product filed
|
|
792
|
-
* there got nothing.
|
|
793
|
-
*
|
|
794
|
-
* `unverified` exists precisely for this: `ProductAuthenticity`'s own
|
|
795
|
-
* docstring records that "without it, an honest seller who does not
|
|
796
|
-
* know would have to pick 'original', and silence would be
|
|
797
|
-
* indistinguishable from a genuine claim." Defaulting to `original`
|
|
798
|
-
* would have the platform make an authenticity claim nobody checked,
|
|
799
|
-
* on a marketplace whose differentiator is that it does not do that.
|
|
800
|
-
*
|
|
801
|
-
* A more specific category still WINS — `resolveCategoryDefaults`
|
|
802
|
-
* walks nearest-first, and the 6 nodes that legitimately declare
|
|
803
|
-
* `original` keep it.
|
|
804
|
-
*/
|
|
805
|
-
defaultAuthenticity: ROOT_AUTHENTICITY_DEFAULT,
|
|
806
|
-
...(extra.productDefaults ?? {}),
|
|
807
|
-
},
|
|
808
|
-
},
|
|
809
|
-
};
|
|
810
|
-
}
|
|
811
|
-
export const CATEGORY_FOREST = [
|
|
812
|
-
SPINNING_TOPS,
|
|
813
|
-
TRADING_CARDS,
|
|
814
|
-
COLLECTIBLE_FIGURES,
|
|
815
|
-
HOT_WHEELS,
|
|
816
|
-
MODEL_KITS,
|
|
817
|
-
LIVING_COLLECTIBLES,
|
|
818
|
-
].map(withRootTax);
|
|
819
|
-
/*
|
|
820
|
-
* Keeps `marketBand` honest: a band keyed on a leaf id that no longer exists is
|
|
821
|
-
* dead weight that reads as coverage. Asserted by the seed, not here, because
|
|
822
|
-
* this module must stay a pure literal.
|
|
823
|
-
*/
|
|
824
|
-
export { marketBand };
|