@mohasinac/appkit 4.52.5 → 4.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +4 -4
- package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
- package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
- package/dist/_internal/client/scaffolds/AppShell.js +1 -1
- package/dist/_internal/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/auctions/og.d.ts +3 -1
- package/dist/_internal/server/features/auctions/og.js +3 -1
- package/dist/_internal/server/features/bundles/actions.js +1 -1
- package/dist/_internal/server/features/business-documents/download.d.ts +41 -0
- package/dist/_internal/server/features/business-documents/download.js +91 -0
- package/dist/_internal/server/features/categories/adapters.d.ts +1 -1
- package/dist/_internal/server/features/categories/adapters.js +10 -0
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.d.ts +14 -0
- package/dist/_internal/server/features/checkout/actions.js +116 -15
- package/dist/_internal/server/features/checkout/bundle-expansion.js +17 -0
- package/dist/_internal/server/features/checkout/data.d.ts +37 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- package/dist/_internal/server/features/checkout/group-rule-revalidation.d.ts +34 -0
- package/dist/_internal/server/features/checkout/group-rule-revalidation.js +124 -0
- package/dist/_internal/server/features/checkout/supplier-identity.d.ts +55 -0
- package/dist/_internal/server/features/checkout/supplier-identity.js +81 -0
- package/dist/_internal/server/features/classified/metadata.js +1 -1
- package/dist/_internal/server/features/classified/og.d.ts +3 -1
- package/dist/_internal/server/features/classified/og.js +3 -1
- package/dist/_internal/server/features/digital-code/metadata.js +1 -1
- package/dist/_internal/server/features/digital-code/og.d.ts +3 -1
- package/dist/_internal/server/features/digital-code/og.js +3 -1
- package/dist/_internal/server/features/digital-code/pool.d.ts +19 -4
- package/dist/_internal/server/features/digital-code/pool.js +19 -4
- package/dist/_internal/server/features/live/metadata.js +1 -1
- package/dist/_internal/server/features/live/og.d.ts +3 -1
- package/dist/_internal/server/features/live/og.js +3 -1
- package/dist/_internal/server/features/lottery/actions.js +9 -1
- package/dist/_internal/server/features/lottery/og.d.ts +40 -0
- package/dist/_internal/server/features/lottery/og.js +79 -0
- package/dist/_internal/server/features/messages/actions.js +5 -1
- package/dist/_internal/server/features/offers/adapters.js +17 -3
- package/dist/_internal/server/features/orders/actions.js +7 -2
- package/dist/_internal/server/features/parts/og.js +1 -1
- package/dist/_internal/server/features/pre-orders/og.d.ts +3 -1
- package/dist/_internal/server/features/pre-orders/og.js +3 -1
- package/dist/_internal/server/features/price-index/search.d.ts +18 -0
- package/dist/_internal/server/features/price-index/search.js +47 -7
- package/dist/_internal/server/features/prize-draws/og.d.ts +3 -1
- package/dist/_internal/server/features/prize-draws/og.js +3 -1
- package/dist/_internal/server/features/products/group-members.d.ts +26 -0
- package/dist/_internal/server/features/products/group-members.js +7 -1
- package/dist/_internal/server/features/products/og.d.ts +3 -1
- package/dist/_internal/server/features/products/og.js +3 -1
- package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
- package/dist/_internal/server/features/raffle/actions.js +25 -0
- package/dist/_internal/server/features/reviews/actions.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
- package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
- package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
- package/dist/_internal/server/features/search/index-build/build.js +285 -0
- package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
- package/dist/_internal/server/features/search/index-build/sources.js +385 -0
- package/dist/_internal/server/features/search/scoped-sources.d.ts +26 -0
- package/dist/_internal/server/features/search/scoped-sources.js +252 -0
- package/dist/_internal/server/features/search/search-everything.d.ts +57 -0
- package/dist/_internal/server/features/search/search-everything.js +70 -20
- package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
- package/dist/_internal/server/features/search/search-sources.js +142 -7
- package/dist/_internal/server/features/seo/robots.js +21 -1
- package/dist/_internal/server/features/seo/sitemap.js +7 -1
- package/dist/_internal/server/features/shared/listing-adapters.js +4 -2
- package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +26 -0
- package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
- package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +91 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +175 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
- package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
- package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
- package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
- package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/promote-to-listings.js +264 -0
- package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
- package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
- package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
- package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +143 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +311 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +154 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +301 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +1 -1
- package/dist/_internal/server/features/stores/adapters.js +16 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +25 -0
- package/dist/_internal/server/features/stores/tabs.js +122 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +25 -1
- package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
- package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
- package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
- package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
- package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
- package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
- package/dist/_internal/server/jobs/core/promotions.js +7 -4
- package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
- package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
- package/dist/_internal/shared/actions/action-registry.js +29 -0
- package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
- package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
- package/dist/_internal/shared/checkout/rules/_defaults.js +0 -2
- package/dist/_internal/shared/checkout/rules/_limits.d.ts +14 -1
- package/dist/_internal/shared/checkout/rules/_limits.js +14 -1
- package/dist/_internal/shared/checkout/rules/_registry.js +2 -0
- package/dist/_internal/shared/checkout/rules/auction.rule.js +9 -1
- package/dist/_internal/shared/checkout/rules/bundle.rule.js +13 -0
- package/dist/_internal/shared/checkout/rules/index.d.ts +2 -0
- package/dist/_internal/shared/checkout/rules/index.js +9 -0
- package/dist/_internal/shared/checkout/rules/offer.rule.js +0 -1
- package/dist/_internal/shared/checkout/rules/payment-gate.d.ts +26 -0
- package/dist/_internal/shared/checkout/rules/payment-gate.js +133 -0
- package/dist/_internal/shared/checkout/rules/prize-draw.rule.js +29 -8
- package/dist/_internal/shared/checkout/rules/spares.rule.d.ts +16 -0
- package/dist/_internal/shared/checkout/rules/spares.rule.js +5 -0
- package/dist/_internal/shared/checkout/rules/types.d.ts +26 -2
- package/dist/_internal/shared/config/schema.d.ts +122 -0
- package/dist/_internal/shared/features/cart/schema.js +3 -2
- package/dist/_internal/shared/features/events/config.d.ts +14 -0
- package/dist/_internal/shared/features/events/config.js +14 -0
- package/dist/_internal/shared/features/notifications/action-url.js +8 -0
- package/dist/_internal/shared/features/products/group-rules.d.ts +75 -0
- package/dist/_internal/shared/features/products/group-rules.js +142 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
- package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
- package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
- package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
- package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
- package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
- package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
- package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +35 -0
- package/dist/_internal/shared/listing-types/_registry.js +39 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/art/config.js +3 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/auction/config.js +3 -0
- package/dist/_internal/shared/listing-types/availability.js +48 -0
- package/dist/_internal/shared/listing-types/capabilities.js +19 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/classified/config.js +3 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +3 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +10 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/live/config.js +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +3 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +3 -0
- package/dist/_internal/shared/listing-types/spares/config.d.ts +74 -0
- package/dist/_internal/shared/listing-types/spares/config.js +60 -0
- package/dist/_internal/shared/listing-types/spares/ctas.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/ctas.js +4 -0
- package/dist/_internal/shared/listing-types/spares/og.js +1 -0
- package/dist/_internal/shared/listing-types/spares/schema.d.ts +2 -0
- package/dist/_internal/shared/listing-types/spares/schema.js +3 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.d.ts +1 -0
- package/dist/_internal/shared/listing-types/spares/seed-factory.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/standard/config.js +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +2 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +3 -0
- package/dist/_internal/shared/media/limits.d.ts +12 -2
- package/dist/_internal/shared/media/limits.js +12 -2
- package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
- package/dist/_internal/shared/search/artifact-url.js +119 -0
- package/dist/_internal/shared/search/index-record.d.ts +68 -0
- package/dist/_internal/shared/search/index-record.js +96 -0
- package/dist/_internal/shared/search/match.d.ts +76 -0
- package/dist/_internal/shared/search/match.js +264 -0
- package/dist/_internal/shared/search/to-groups.d.ts +52 -0
- package/dist/_internal/shared/search/to-groups.js +141 -0
- package/dist/client.d.ts +16 -9
- package/dist/client.js +16 -6
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +107 -15
- package/dist/constants/api-endpoints.js +60 -5
- package/dist/constants/cache-invalidation.js +3 -1
- package/dist/constants/field-names.d.ts +13 -1
- package/dist/constants/field-names.js +42 -1
- package/dist/contracts/repository.d.ts +8 -7
- package/dist/contracts/search.d.ts +2 -2
- package/dist/contracts/table.d.ts +3 -3
- package/dist/contracts/table.js +3 -3
- package/dist/core/contact-submissions.repository.js +2 -2
- package/dist/core/integration-keys.js +7 -1
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/site-config.js +1 -1
- package/dist/errors/error-codes.d.ts +30 -0
- package/dist/errors/error-codes.js +30 -0
- package/dist/errors/error-display-map.js +40 -1
- package/dist/features/about/components/PolicyPageView.d.ts +22 -2
- package/dist/features/about/components/PolicyPageView.js +14 -2
- package/dist/features/about/components/PublicProfileView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +42 -2
- package/dist/features/account/api/[userId]/addresses/route.js +1 -1
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/components/UserBidsView.js +1 -1
- package/dist/features/account/components/index.d.ts +0 -8
- package/dist/features/account/components/index.js +0 -4
- package/dist/features/account/hooks/useProfileStats.js +5 -1
- package/dist/features/addresses/repository/addresses.repository.d.ts +33 -6
- package/dist/features/addresses/repository/addresses.repository.js +86 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/actions/notification-actions.js +15 -6
- package/dist/features/admin/api/bids/route.js +1 -1
- package/dist/features/admin/api/coupons/route.js +1 -1
- package/dist/features/admin/api/products/route.js +1 -1
- package/dist/features/admin/api/reviews/route.js +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +19 -5
- package/dist/features/admin/components/AdminAuditLogView.js +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
- package/dist/features/admin/components/AdminBlogView.js +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +17 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +19 -3
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNavigationView.js +1 -1
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- package/dist/features/admin/components/AdminPageHeader.js +1 -1
- package/dist/features/admin/components/AdminPayoutsView.js +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
- package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminProductEditorView.js +41 -39
- package/dist/features/admin/components/AdminProductsView.js +10 -3
- package/dist/features/admin/components/AdminScammersView.js +1 -1
- package/dist/features/admin/components/AdminSectionsView.js +21 -5
- package/dist/features/admin/components/AdminSessionsView.js +1 -1
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +39 -8
- package/dist/features/admin/components/AdminSparesView.d.ts +12 -0
- package/dist/features/admin/components/AdminSparesView.js +30 -0
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
- package/dist/features/admin/components/AdminTeamView.js +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
- package/dist/features/admin/components/AdminUsersView.js +10 -8
- package/dist/features/admin/components/DataListingView.d.ts +2 -1
- package/dist/features/admin/components/DataListingView.js +9 -4
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +7 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
- package/dist/features/admin/constants/filter-tabs.js +1 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/repository/site-settings.repository.js +8 -3
- package/dist/features/admin/schemas/firestore.d.ts +88 -3
- package/dist/features/admin/schemas/firestore.js +32 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
- package/dist/features/auctions/actions/bid-actions.js +16 -4
- package/dist/features/auctions/api/route.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +4 -11
- package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
- package/dist/features/auctions/repository/bid.repository.js +114 -13
- package/dist/features/auctions/schemas/firestore.d.ts +24 -4
- package/dist/features/auctions/schemas/firestore.js +1 -0
- package/dist/features/auth/actions/profile-actions.js +30 -4
- package/dist/features/auth/components/index.d.ts +0 -1
- package/dist/features/auth/components/index.js +0 -1
- package/dist/features/auth/repository/session.repository.d.ts +17 -3
- package/dist/features/auth/repository/session.repository.js +46 -5
- package/dist/features/auth/repository/token.repository.d.ts +27 -4
- package/dist/features/auth/repository/token.repository.js +65 -11
- package/dist/features/auth/repository/user.repository.d.ts +46 -7
- package/dist/features/auth/repository/user.repository.js +128 -15
- package/dist/features/auth/schemas/firestore.d.ts +65 -12
- package/dist/features/auth/schemas/firestore.js +13 -0
- package/dist/features/before-after/api/route.js +1 -1
- package/dist/features/blog/components/BlogListView.js +16 -3
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +2 -2
- package/dist/features/business-documents/repository/business-documents.repository.d.ts +58 -0
- package/dist/features/business-documents/repository/business-documents.repository.js +54 -0
- package/dist/features/business-documents/schemas/firestore.d.ts +105 -0
- package/dist/features/business-documents/schemas/firestore.js +75 -0
- package/dist/features/cart/actions/cart-actions.js +83 -6
- package/dist/features/cart/api/route.js +1 -1
- package/dist/features/cart/repository/cart.repository.js +32 -4
- package/dist/features/cart/schemas/firestore.d.ts +20 -0
- package/dist/features/cart/schemas/index.d.ts +2 -2
- package/dist/features/catalogue/components/PublicCatalogueItemDetailView.js +1 -1
- package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
- package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
- package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
- package/dist/features/categories/api/[id]/price-guidance/route.d.ts +42 -0
- package/dist/features/categories/api/[id]/price-guidance/route.js +113 -0
- package/dist/features/categories/api/route.js +10 -10
- package/dist/features/categories/components/BrandDetailPageView.js +19 -3
- package/dist/features/categories/components/BrandDetailTabs.js +10 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +23 -8
- package/dist/features/categories/components/CategoryDetailPageView.js +170 -13
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -0
- package/dist/features/categories/components/CategoryGrid.js +10 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/PriceGuidanceHint.d.ts +29 -0
- package/dist/features/categories/components/PriceGuidanceHint.js +61 -0
- package/dist/features/categories/components/SubcategoryCardRow.d.ts +27 -0
- package/dist/features/categories/components/SubcategoryCardRow.js +98 -0
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/constants/category-tabs.d.ts +20 -25
- package/dist/features/categories/constants/category-tabs.js +22 -39
- package/dist/features/categories/repository/categories.repository.d.ts +13 -0
- package/dist/features/categories/repository/categories.repository.js +51 -1
- package/dist/features/categories/schemas/firestore.d.ts +22 -1
- package/dist/features/categories/schemas/firestore.js +10 -0
- package/dist/features/categories/schemas/index.d.ts +8 -2
- package/dist/features/categories/schemas/index.js +2 -0
- package/dist/features/categories/types/index.d.ts +8 -0
- package/dist/features/categories/utils/taxonomy-visual.d.ts +34 -0
- package/dist/features/categories/utils/taxonomy-visual.js +74 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +4 -9
- package/dist/features/collections/api/[slug]/route.js +3 -3
- package/dist/features/collections/api/route.js +1 -1
- package/dist/features/consultation/api/route.js +1 -1
- package/dist/features/consultation/repository/consultations.repository.js +1 -1
- package/dist/features/consultation/types/index.d.ts +1 -1
- package/dist/features/contact/components/ContactForm.js +1 -3
- package/dist/features/contact/components/ContactPageView.d.ts +33 -1
- package/dist/features/contact/components/ContactPageView.js +58 -28
- package/dist/features/corporate/api/route.js +1 -1
- package/dist/features/corporate/repository/corporate.repository.js +1 -1
- package/dist/features/corporate/types/index.d.ts +1 -1
- package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -9
- package/dist/features/events/actions/event-actions.d.ts +14 -0
- package/dist/features/events/actions/event-actions.js +82 -3
- package/dist/features/events/api/[id]/route.js +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +32 -8
- package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
- package/dist/features/events/components/EventRafflesSection.js +52 -3
- package/dist/features/events/components/SpinWheelView.d.ts +2 -2
- package/dist/features/events/components/SpinWheelView.js +41 -4
- package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
- package/dist/features/events/repository/event-entry.repository.js +41 -7
- package/dist/features/events/schemas/firestore.d.ts +17 -4
- package/dist/features/events/types/index.d.ts +37 -0
- package/dist/features/faq/repository/faqs.repository.js +1 -1
- package/dist/features/faq/schemas/index.d.ts +5 -2
- package/dist/features/faq/schemas/index.js +6 -0
- package/dist/features/faq/types/index.d.ts +0 -1
- package/dist/features/grouped/components/GroupedListingDetailView.js +9 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
- package/dist/features/grouped/schemas/firestore.d.ts +5 -0
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +3 -3
- package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/CollectionCardsSection.d.ts +28 -6
- package/dist/features/homepage/components/CollectionCardsSection.js +43 -8
- package/dist/features/homepage/components/HowItWorksSection.d.ts +23 -6
- package/dist/features/homepage/components/HowItWorksSection.js +4 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/PromoGrid.d.ts +31 -2
- package/dist/features/homepage/components/PromoGrid.js +12 -3
- package/dist/features/homepage/components/TestimonialsCarousel.d.ts +34 -2
- package/dist/features/homepage/components/TestimonialsCarousel.js +1 -1
- package/dist/features/homepage/components/index.d.ts +0 -22
- package/dist/features/homepage/components/index.js +0 -12
- package/dist/features/homepage/index.d.ts +0 -2
- package/dist/features/homepage/index.js +0 -2
- package/dist/features/homepage/lib/section-renderer.d.ts +9 -0
- package/dist/features/homepage/lib/section-renderer.js +202 -58
- package/dist/features/homepage/repository/homepage-sections.repository.d.ts +35 -3
- package/dist/features/homepage/repository/homepage-sections.repository.js +58 -8
- package/dist/features/homepage/schemas/firestore.d.ts +112 -3
- package/dist/features/homepage/schemas/firestore.js +32 -2
- package/dist/features/homepage/schemas/index.d.ts +46 -17
- package/dist/features/homepage/schemas/index.js +39 -27
- package/dist/features/homepage/server.d.ts +0 -3
- package/dist/features/homepage/server.js +0 -3
- package/dist/features/homepage/types/index.d.ts +0 -47
- package/dist/features/homepage/types/index.js +49 -0
- package/dist/features/layout/AppLayoutShell.d.ts +11 -0
- package/dist/features/layout/AppLayoutShell.js +65 -13
- package/dist/features/layout/BottomActionsContext.d.ts +16 -0
- package/dist/features/layout/BottomActionsContext.js +5 -0
- package/dist/features/layout/BottomChrome.js +48 -9
- package/dist/features/layout/BottomNavItem.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- package/dist/features/layout/BottomSheet.js +1 -1
- package/dist/features/layout/MainNavbar.d.ts +11 -0
- package/dist/features/layout/NavbarLayout.d.ts +3 -0
- package/dist/features/layout/NavbarLayout.js +88 -11
- package/dist/features/layout/SideActionDock.d.ts +1 -0
- package/dist/features/layout/SideActionDock.js +219 -0
- package/dist/features/layout/TitleBarLayout.js +1 -1
- package/dist/features/layout/cta-anchor.d.ts +31 -0
- package/dist/features/layout/cta-anchor.js +31 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +6 -1
- package/dist/features/layout/index.d.ts +9 -1
- package/dist/features/layout/index.js +9 -1
- package/dist/features/layout/useCtaReveal.d.ts +24 -0
- package/dist/features/layout/useCtaReveal.js +82 -0
- package/dist/features/layout/useHoldToOpen.d.ts +41 -0
- package/dist/features/layout/useHoldToOpen.js +84 -0
- package/dist/features/live/components/LiveItemDetailPageView.js +4 -9
- package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
- package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
- package/dist/features/lottery/schemas/firestore.d.ts +33 -5
- package/dist/features/loyalty/api/balance/route.js +1 -1
- package/dist/features/loyalty/api/history/route.js +1 -1
- package/dist/features/media/MediaImage.js +0 -1
- package/dist/features/media/MediaPickerModal.js +7 -1
- package/dist/features/media/hooks/useMedia.js +17 -0
- package/dist/features/media/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +65 -0
- package/dist/features/media/repository/media-assets.repository.js +31 -0
- package/dist/features/media/trust-signals.d.ts +85 -0
- package/dist/features/media/trust-signals.js +126 -0
- package/dist/features/media/upload/CameraCapture.js +16 -1
- package/dist/features/media/upload/ImageUpload.js +42 -4
- package/dist/features/media/upload/MediaUploadField.js +69 -13
- package/dist/features/media/upload/downscale-image.d.ts +56 -0
- package/dist/features/media/upload/downscale-image.js +150 -0
- package/dist/features/messages/components/ConversationThreadView.js +45 -2
- package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
- package/dist/features/messages/components/MessageSellerButton.js +10 -2
- package/dist/features/messages/schemas/firestore.d.ts +15 -0
- package/dist/features/orders/hooks/useOrders.js +4 -2
- package/dist/features/orders/repository/orders.repository.d.ts +15 -4
- package/dist/features/orders/repository/orders.repository.js +52 -20
- package/dist/features/orders/schemas/firestore.d.ts +15 -4
- package/dist/features/orders/schemas/index.d.ts +8 -8
- package/dist/features/orders/types/index.d.ts +2 -2
- package/dist/features/parts/components/PartDetailPageView.d.ts +14 -1
- package/dist/features/parts/components/PartDetailPageView.js +2 -2
- package/dist/features/parts/components/PartsIndexPageView.d.ts +11 -2
- package/dist/features/parts/components/PartsIndexPageView.js +2 -2
- package/dist/features/parts/components/PartsSearchBox.d.ts +9 -0
- package/dist/features/parts/components/PartsSearchBox.js +57 -0
- package/dist/features/parts/schemas/firestore.d.ts +149 -3
- package/dist/features/parts/schemas/firestore.js +184 -0
- package/dist/features/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +38 -6
- package/dist/features/payments/repository/payout.repository.js +84 -23
- package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
- package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
- package/dist/features/payments/schemas/firestore.d.ts +14 -3
- package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
- package/dist/features/pre-orders/api/[slug]/route.js +1 -1
- package/dist/features/pre-orders/api/admin/route.js +1 -1
- package/dist/features/pre-orders/api/route.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -11
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +1 -1
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +3 -1
- package/dist/features/price-index/components/PriceIndexToolView.js +92 -13
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/CompareOverlay.d.ts +18 -1
- package/dist/features/products/components/CompareOverlay.js +21 -2
- package/dist/features/products/components/CustomSectionTabContent.d.ts +31 -0
- package/dist/features/products/components/CustomSectionTabContent.js +29 -3
- package/dist/features/products/components/GroupMemberPicker.d.ts +19 -1
- package/dist/features/products/components/GroupMemberPicker.js +46 -8
- package/dist/features/products/components/GroupSettingsPanel.d.ts +11 -1
- package/dist/features/products/components/GroupSettingsPanel.js +91 -3
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +15 -1
- package/dist/features/products/components/PrizeDrawEntryActions.js +70 -8
- package/dist/features/products/components/ProductDetailPageView.js +75 -15
- package/dist/features/products/components/ProductForm.d.ts +13 -1
- package/dist/features/products/components/ProductForm.js +16 -2
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- package/dist/features/products/components/ProductsIndexListing.d.ts +16 -1
- package/dist/features/products/components/ProductsIndexListing.js +3 -3
- package/dist/features/products/components/ShowGroupSection.js +15 -2
- package/dist/features/products/components/SparesListView.d.ts +7 -0
- package/dist/features/products/components/SparesListView.js +39 -0
- package/dist/features/products/components/index.d.ts +0 -2
- package/dist/features/products/components/index.js +0 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
- package/dist/features/products/config/listing-type-listing-config.js +27 -2
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/constants/listing-tabs.d.ts +9 -0
- package/dist/features/products/constants/listing-tabs.js +3 -2
- package/dist/features/products/hooks/useProducts.js +2 -2
- package/dist/features/products/repository/products.repository.d.ts +98 -0
- package/dist/features/products/repository/products.repository.js +248 -18
- package/dist/features/products/schemas/firestore.d.ts +97 -4
- package/dist/features/products/schemas/firestore.js +104 -0
- package/dist/features/products/schemas/index.d.ts +12 -21
- package/dist/features/products/schemas/index.js +23 -6
- package/dist/features/products/types/index.d.ts +46 -2
- package/dist/features/products/utils/group-member-image.d.ts +39 -0
- package/dist/features/products/utils/group-member-image.js +3 -0
- package/dist/features/products/utils/listing-badge-variant.js +4 -0
- package/dist/features/promotions/api/route.js +1 -1
- package/dist/features/reviews/actions/review-actions.d.ts +6 -6
- package/dist/features/reviews/actions/review-actions.js +22 -8
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
- package/dist/features/reviews/repository/reviews.repository.js +63 -12
- package/dist/features/reviews/schemas/firestore.d.ts +13 -2
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +16 -4
- package/dist/features/scams/components/ScamProfileView.js +1 -1
- package/dist/features/search/components/EntityTypeahead.d.ts +44 -0
- package/dist/features/search/components/EntityTypeahead.js +92 -0
- package/dist/features/search/components/Search.d.ts +12 -1
- package/dist/features/search/components/Search.js +47 -3
- package/dist/features/search/components/SearchFacetRail.d.ts +11 -0
- package/dist/features/search/components/SearchFacetRail.js +92 -0
- package/dist/features/search/components/SearchResultsClient.d.ts +33 -0
- package/dist/features/search/components/SearchResultsClient.js +103 -0
- package/dist/features/search/components/SearchResultsPageView.d.ts +15 -1
- package/dist/features/search/components/SearchResultsPageView.js +3 -2
- package/dist/features/search/components/index.d.ts +0 -6
- package/dist/features/search/components/index.js +0 -3
- package/dist/features/search/hooks/useNavSuggestions.d.ts +13 -0
- package/dist/features/search/hooks/useScopedSearch.d.ts +34 -0
- package/dist/features/search/hooks/useScopedSearch.js +114 -0
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/hooks/useSiteSearch.d.ts +26 -0
- package/dist/features/search/hooks/useSiteSearch.js +149 -0
- package/dist/features/search/index.d.ts +0 -4
- package/dist/features/search/index.js +0 -4
- package/dist/features/search/manifest.d.ts +12 -0
- package/dist/features/search/manifest.js +17 -2
- package/dist/features/search/server.d.ts +0 -3
- package/dist/features/search/server.js +0 -3
- package/dist/features/seller/actions/offer-actions.d.ts +5 -5
- package/dist/features/seller/actions/offer-actions.js +38 -8
- package/dist/features/seller/actions/seller-actions.js +34 -7
- package/dist/features/seller/api/coupons/route.js +1 -1
- package/dist/features/seller/api/products/route.js +1 -1
- package/dist/features/seller/api/store/route.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.d.ts +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +29 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +35 -15
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductShell.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/SellerSparesView.d.ts +17 -0
- package/dist/features/seller/components/SellerSparesView.js +6 -0
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +2 -4
- package/dist/features/seller/components/index.js +1 -2
- package/dist/features/seller/repository/offer.repository.d.ts +15 -3
- package/dist/features/seller/repository/offer.repository.js +43 -7
- package/dist/features/seller/schemas/firestore.d.ts +14 -3
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +39 -0
- package/dist/features/seller/schemas/order-forms.js +37 -0
- package/dist/features/shell/CommandPalette.js +1 -1
- package/dist/features/shell/FormShell.js +6 -2
- package/dist/features/shell/QuickFormDrawer.js +15 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
- package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
- package/dist/features/sticker-trace/constants/help-content.js +172 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
- package/dist/features/sticker-trace/schemas/firestore.d.ts +267 -0
- package/dist/features/sticker-trace/schemas/firestore.js +79 -0
- package/dist/features/sticker-trace/server.d.ts +8 -0
- package/dist/features/sticker-trace/server.js +51 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
- package/dist/features/stores/actions/store-query-actions.js +7 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/route.js +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -82
- package/dist/features/stores/components/StoreHeader.js +1 -2
- package/dist/features/stores/components/StoreNavTabs.js +17 -2
- package/dist/features/stores/components/StoreSparesPageView.d.ts +27 -0
- package/dist/features/stores/components/StoreSparesPageView.js +48 -0
- package/dist/features/stores/manifest.js +8 -4
- package/dist/features/stores/schemas/firestore.d.ts +19 -0
- package/dist/features/support/repository/support.repository.d.ts +14 -3
- package/dist/features/support/repository/support.repository.js +93 -13
- package/dist/features/support/schemas/firestore.d.ts +16 -5
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +96 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +4 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +478 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +54 -32
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +3 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +73 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +340 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
- package/dist/features/tester/seed-data/authored/index.js +24 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +1 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +57 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +77 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +58 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +284 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +558 -34
- package/dist/index.d.ts +27 -80
- package/dist/index.js +62 -115
- package/dist/next/api/routeHandler.js +9 -0
- package/dist/next/routing/require-record.d.ts +13 -0
- package/dist/next/routing/require-record.js +62 -0
- package/dist/next/routing/route-map.d.ts +46 -5
- package/dist/next/routing/route-map.js +70 -3
- package/dist/providers/db-firebase/base.d.ts +4 -2
- package/dist/providers/db-firebase/base.js +21 -5
- package/dist/providers/db-firebase/base.repository.d.ts +33 -9
- package/dist/providers/db-firebase/base.repository.js +55 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/react/ErrorBoundary.js +6 -1
- package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
- package/dist/react/hooks/realtime-event-constants.js +8 -0
- package/dist/react/hooks/useEntityDelete.js +5 -1
- package/dist/react/hooks/useMessage.js +5 -1
- package/dist/repositories/index.d.ts +2 -2
- package/dist/repositories/index.js +6 -1
- package/dist/schemas/registry.d.ts +28 -26
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/blind-index-tokens.d.ts +54 -0
- package/dist/security/blind-index-tokens.js +152 -0
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +6 -3
- package/dist/security/index.js +17 -3
- package/dist/security/pii-accessors.d.ts +71 -0
- package/dist/security/pii-accessors.js +150 -0
- package/dist/security/pii-encrypt.d.ts +0 -8
- package/dist/security/pii-encrypt.js +22 -15
- package/dist/security/pii-mask.d.ts +18 -0
- package/dist/security/pii-mask.js +27 -0
- package/dist/security/settings-encryption.d.ts +35 -0
- package/dist/security/settings-encryption.js +91 -0
- package/dist/seed/_helpers/brand-rows.js +38 -14
- package/dist/seed/_helpers/category-forest.js +73 -7
- package/dist/seed/_helpers/category-images-generated.d.ts +25 -6
- package/dist/seed/_helpers/category-images-generated.js +81 -6
- package/dist/seed/_helpers/category-models.d.ts +1 -1
- package/dist/seed/_helpers/category-models.js +7 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +8 -0
- package/dist/seed/_helpers/category-parts.d.ts +1 -1
- package/dist/seed/_helpers/category-parts.js +50 -2
- package/dist/seed/_helpers/character-features.d.ts +1 -1
- package/dist/seed/_helpers/character-features.js +2 -1
- package/dist/seed/_helpers/franchise-rows.js +10 -2
- package/dist/seed/_helpers/media.d.ts +47 -0
- package/dist/seed/_helpers/media.js +34 -0
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
- package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
- package/dist/seed/addresses-seed-data.d.ts +2 -2
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +78 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +10729 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- package/dist/seed/categories-seed-data.js +124 -20
- package/dist/seed/events-seed-data.d.ts +2 -2
- package/dist/seed/events-seed-data.js +5 -0
- package/dist/seed/faq-seed-data.js +175 -5
- package/dist/seed/grouped-listings-seed-data.js +16 -0
- package/dist/seed/homepage-sections-seed-data.js +131 -26
- package/dist/seed/index.d.ts +3 -3
- package/dist/seed/index.js +3 -2
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- package/dist/seed/manifest.js +3 -0
- package/dist/seed/media-assets-seed-data.d.ts +1 -1
- package/dist/seed/media-assets-seed-data.js +746 -196
- package/dist/seed/model-composition-seed-data.js +122 -6
- package/dist/seed/offers-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.d.ts +2 -2
- package/dist/seed/part-glossary-seed-data.d.ts +1 -1
- package/dist/seed/part-glossary-seed-data.js +37219 -463
- package/dist/seed/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/products-art-seed-data.js +7 -18
- package/dist/seed/products-auctions-seed-data.js +56 -47
- package/dist/seed/products-beyblade-x-seed-data.d.ts +2 -0
- package/dist/seed/products-beyblade-x-seed-data.js +441 -0
- package/dist/seed/products-catalogue-seed-data.d.ts +5 -5
- package/dist/seed/products-catalogue-seed-data.js +1500 -1240
- package/dist/seed/products-classifieds-seed-data.js +9 -27
- package/dist/seed/products-digital-codes-seed-data.js +9 -18
- package/dist/seed/products-live-items-seed-data.js +5 -13
- package/dist/seed/products-preorders-seed-data.js +67 -33
- package/dist/seed/products-prize-draws-seed-data.js +8 -17
- package/dist/seed/products-spares-seed-data.d.ts +2 -0
- package/dist/seed/products-spares-seed-data.js +368 -0
- package/dist/seed/products-standard-seed-data.js +39 -126
- package/dist/seed/products-stickers-seed-data.js +59 -15
- package/dist/seed/reviews-seed-data.d.ts +1 -2
- package/dist/seed/seed-purpose.js +7 -0
- package/dist/seed/sessions-seed-data.d.ts +2 -2
- package/dist/seed/sessions-seed-data.js +5 -0
- package/dist/seed/site-settings-seed-data.js +9 -1
- package/dist/seed/support-tickets-seed-data.d.ts +2 -2
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/users-seed-data.d.ts +2 -2
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seo/json-ld.d.ts +25 -0
- package/dist/seo/json-ld.js +33 -1
- package/dist/server-entry.d.ts +3 -1
- package/dist/server-entry.js +2 -2
- package/dist/server.d.ts +27 -12
- package/dist/server.js +86 -28
- package/dist/styles.css +438 -1
- package/dist/tailwind-input.css +31 -17
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Accordion.js +1 -1
- package/dist/ui/components/Breadcrumb.js +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/DetailPageGallery.js +0 -2
- package/dist/ui/components/DetailPageHero.js +0 -1
- package/dist/ui/components/DetailPageTabs.js +1 -1
- package/dist/ui/components/Divider.js +3 -3
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/GatedPrice.js +5 -1
- package/dist/ui/components/HorizontalScroller.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +17 -11
- package/dist/ui/components/MediaTabs.style.css +81 -0
- package/dist/ui/components/OverflowRow.d.ts +92 -0
- package/dist/ui/components/OverflowRow.js +203 -0
- package/dist/ui/components/OverflowRow.style.css +235 -0
- package/dist/ui/components/Pagination.js +1 -1
- package/dist/ui/components/PendingValue.d.ts +45 -0
- package/dist/ui/components/PendingValue.js +7 -0
- package/dist/ui/components/Radio.style.css +119 -0
- package/dist/ui/components/RatingDisplay.js +2 -2
- package/dist/ui/components/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SettingsSection.js +0 -2
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -1
- package/dist/ui/components/SiteLogo.js +3 -0
- package/dist/ui/components/SiteMark.js +3 -0
- package/dist/ui/components/SortDropdown.js +1 -1
- package/dist/ui/components/SpecTable.d.ts +58 -0
- package/dist/ui/components/SpecTable.js +8 -0
- package/dist/ui/components/StarRating.js +1 -3
- package/dist/ui/components/SummaryCard.js +1 -1
- package/dist/ui/components/TabBarShell.d.ts +12 -1
- package/dist/ui/components/TabBarShell.js +3 -2
- package/dist/ui/components/Tabs.js +36 -24
- package/dist/ui/components/Toast.d.ts +3 -24
- package/dist/ui/components/Toast.js +2 -19
- package/dist/ui/components/TopBannerPortal.d.ts +15 -0
- package/dist/ui/components/TopBannerPortal.js +19 -0
- package/dist/ui/components/UnsavedChangesModal.js +5 -1
- package/dist/ui/components/index.style.css +2 -0
- package/dist/ui/components/row-collapse.d.ts +15 -0
- package/dist/ui/components/row-collapse.js +127 -0
- package/dist/ui/components/toast-context.d.ts +63 -0
- package/dist/ui/components/toast-context.js +48 -0
- package/dist/ui/components/top-banner-slot.d.ts +37 -0
- package/dist/ui/components/top-banner-slot.js +45 -0
- package/dist/ui/icons/icon-registry.d.ts +7 -0
- package/dist/ui/icons/icon-registry.js +25 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +3 -0
- package/dist/utils/array.helper.d.ts +2 -2
- package/dist/utils/array.helper.js +5 -5
- package/dist/utils/id-generators.d.ts +6 -0
- package/dist/utils/id-generators.js +10 -0
- package/dist/utils/media-url.js +0 -2
- package/dist/utils/search-txt-builders.d.ts +28 -4
- package/dist/utils/search-txt-builders.js +41 -1
- package/dist/utils/search-txt-query.d.ts +12 -0
- package/dist/utils/search-txt-query.js +12 -0
- package/dist/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/dedupe-peer-deps.mjs +18 -0
- package/scripts/seed-cli.mjs +138 -26
- package/scripts/verify-css-build.mjs +118 -37
- package/dist/_internal/server/features/search/actions.d.ts +0 -7
- package/dist/_internal/server/features/search/actions.js +0 -21
- package/dist/_internal/server/features/search/data.d.ts +0 -15
- package/dist/_internal/server/features/search/data.js +0 -18
- package/dist/_internal/server/features/search/index.d.ts +0 -3
- package/dist/_internal/server/features/search/index.js +0 -2
- package/dist/features/account/components/UserAddressesView.d.ts +0 -13
- package/dist/features/account/components/UserAddressesView.js +0 -5
- package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
- package/dist/features/account/components/UserNotificationsView.js +0 -12
- package/dist/features/account/components/UserSettingsView.d.ts +0 -16
- package/dist/features/account/components/UserSettingsView.js +0 -13
- package/dist/features/account/components/UserSupportView.d.ts +0 -3
- package/dist/features/account/components/UserSupportView.js +0 -166
- package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
- package/dist/features/admin/components/DemoSeedView.js +0 -5
- package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
- package/dist/features/auth/components/AuthStatusPanel.js +0 -22
- package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
- package/dist/features/categories/components/CategoryProductsView.js +0 -21
- package/dist/features/homepage/api/[id]/route.d.ts +0 -23
- package/dist/features/homepage/api/[id]/route.js +0 -103
- package/dist/features/homepage/api/route.d.ts +0 -14
- package/dist/features/homepage/api/route.js +0 -140
- package/dist/features/homepage/api/sections/[id]/route.d.ts +0 -26
- package/dist/features/homepage/api/sections/[id]/route.js +0 -95
- package/dist/features/homepage/api/sections/route.d.ts +0 -13
- package/dist/features/homepage/api/sections/route.js +0 -82
- package/dist/features/homepage/components/AdvertisementBanner.d.ts +0 -14
- package/dist/features/homepage/components/AdvertisementBanner.js +0 -35
- package/dist/features/homepage/components/BeforeAfterCard.d.ts +0 -9
- package/dist/features/homepage/components/BeforeAfterCard.js +0 -73
- package/dist/features/homepage/components/FeaturedResultsSection.d.ts +0 -17
- package/dist/features/homepage/components/FeaturedResultsSection.js +0 -17
- package/dist/features/homepage/components/HeroBanner.d.ts +0 -7
- package/dist/features/homepage/components/HeroBanner.js +0 -43
- package/dist/features/homepage/components/HeroSection.d.ts +0 -7
- package/dist/features/homepage/components/HeroSection.js +0 -6
- package/dist/features/homepage/components/HomepageSkeleton.d.ts +0 -2
- package/dist/features/homepage/components/HomepageSkeleton.js +0 -21
- package/dist/features/homepage/components/HomepageView.d.ts +0 -25
- package/dist/features/homepage/components/HomepageView.js +0 -5
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- package/dist/features/homepage/components/NewsletterBanner.d.ts +0 -23
- package/dist/features/homepage/components/NewsletterBanner.js +0 -37
- package/dist/features/homepage/components/SiteFeaturesSection.d.ts +0 -14
- package/dist/features/homepage/components/SiteFeaturesSection.js +0 -11
- package/dist/features/homepage/components/TrustBadges.d.ts +0 -6
- package/dist/features/homepage/components/TrustBadges.js +0 -46
- package/dist/features/homepage/components/TrustIndicatorsSection.d.ts +0 -12
- package/dist/features/homepage/components/TrustIndicatorsSection.js +0 -11
- package/dist/features/homepage/hooks/useHomepage.d.ts +0 -11
- package/dist/features/homepage/hooks/useHomepage.js +0 -17
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +0 -2
- package/dist/features/homepage/hooks/useHomepageSections.js +0 -10
- package/dist/features/homepage/repository/homepage.repository.d.ts +0 -11
- package/dist/features/homepage/repository/homepage.repository.js +0 -25
- package/dist/features/layout/BottomActions.d.ts +0 -1
- package/dist/features/layout/BottomActions.js +0 -311
- package/dist/features/products/components/ProductsView.d.ts +0 -6
- package/dist/features/products/components/ProductsView.js +0 -5
- package/dist/features/search/actions/index.d.ts +0 -1
- package/dist/features/search/actions/index.js +0 -1
- package/dist/features/search/actions/search-actions.d.ts +0 -18
- package/dist/features/search/actions/search-actions.js +0 -43
- package/dist/features/search/api/route.d.ts +0 -22
- package/dist/features/search/api/route.js +0 -128
- package/dist/features/search/columns/index.d.ts +0 -17
- package/dist/features/search/columns/index.js +0 -49
- package/dist/features/search/components/SearchFiltersRow.d.ts +0 -22
- package/dist/features/search/components/SearchFiltersRow.js +0 -21
- package/dist/features/search/components/SearchResultsSection.d.ts +0 -53
- package/dist/features/search/components/SearchResultsSection.js +0 -35
- package/dist/features/search/components/SearchView.d.ts +0 -27
- package/dist/features/search/components/SearchView.js +0 -8
- package/dist/features/search/hooks/useSearch.d.ts +0 -21
- package/dist/features/search/hooks/useSearch.js +0 -33
- package/dist/features/search/repository/search.repository.d.ts +0 -14
- package/dist/features/search/repository/search.repository.js +0 -59
- package/dist/features/search/schemas/index.d.ts +0 -70
- package/dist/features/search/schemas/index.js +0 -36
- package/dist/features/search/types/index.d.ts +0 -48
- package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
- package/dist/features/stores/components/StoreScopedSearch.d.ts +0 -17
- package/dist/features/stores/components/StoreScopedSearch.js +0 -27
- package/dist/seed/defaults/homepage-sections.d.ts +0 -2
- package/dist/seed/defaults/homepage-sections.js +0 -60
- package/dist/seed/factories/homepage-section.factory.d.ts +0 -10
- package/dist/seed/factories/homepage-section.factory.js +0 -13
- /package/dist/{features/search/types/index.js → _internal/shared/listing-types/spares/og.d.ts} +0 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the site-wide search index cases
|
|
3
|
+
* added 2026-10-19 to the content-discovery/search page.
|
|
4
|
+
* WHAT: 17 case(s), keyed by full checklist id.
|
|
5
|
+
*
|
|
6
|
+
* 🛑 EVERY CASE CARRIES A CONTROL. A search box that has stopped filtering
|
|
7
|
+
* returns plausible rows for any real term and looks identical to one that
|
|
8
|
+
* works — "zzzznope" returning zero is the only kind of assertion here that
|
|
9
|
+
* cannot pass by accident. That is this directory's standing rule and it is
|
|
10
|
+
* why the control is a STEP, not a footnote.
|
|
11
|
+
*
|
|
12
|
+
* 🛑 Several of these check the NETWORK PANEL rather than the page, and that
|
|
13
|
+
* is deliberate. "Zero Firestore reads per keystroke" and "a guest issues no
|
|
14
|
+
* authenticated request" are the two claims the whole design rests on, and
|
|
15
|
+
* neither is visible on screen — a page that fetches per keystroke looks
|
|
16
|
+
* exactly like one that does not.
|
|
17
|
+
*
|
|
18
|
+
* @tag domain:tester
|
|
19
|
+
* @tag layer:seed
|
|
20
|
+
* @tag pattern:none
|
|
21
|
+
* @tag access:server-only
|
|
22
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
23
|
+
* @tag sideEffects:none
|
|
24
|
+
*/
|
|
25
|
+
export const authored = {
|
|
26
|
+
"checklist-content-discovery-search-search-finds-every-type": {
|
|
27
|
+
roles: ["guest"],
|
|
28
|
+
startPage: "/",
|
|
29
|
+
steps: [
|
|
30
|
+
"Open / in a private window with no session.",
|
|
31
|
+
"Click the header search and type dranzer.",
|
|
32
|
+
"Press Enter.",
|
|
33
|
+
"Read the URL in the address bar.",
|
|
34
|
+
"Count how many distinct section headings the results page shows.",
|
|
35
|
+
"Go back, type zzzznope, and press Enter.",
|
|
36
|
+
"Read what the page says.",
|
|
37
|
+
],
|
|
38
|
+
inputs: { query: "dranzer", control: "zzzznope" },
|
|
39
|
+
expectedBehaviour: "Submitting navigates to the cross-resource results page and searches every indexed type at once, rather than redirecting to one browse route chosen by the type dropdown.",
|
|
40
|
+
expectedUiState: "The URL is /search?q=dranzer, not /products?q=dranzer. Results appear under several headings (for example Products, Categories, Parts, Articles), each with its own 'See all … →' link. For zzzznope the page says nothing matched and shows ZERO result rows — that control is the only assertion here that cannot pass by accident.",
|
|
41
|
+
endResult: "Read-only; nothing persists.",
|
|
42
|
+
},
|
|
43
|
+
"checklist-content-discovery-search-search-finds-a-part": {
|
|
44
|
+
roles: ["guest"],
|
|
45
|
+
startPage: "/search",
|
|
46
|
+
steps: [
|
|
47
|
+
"Open /search?q=Rubber Flat in a private window.",
|
|
48
|
+
"Read every result row and note which section each sits under.",
|
|
49
|
+
"Change the query to RF and search again.",
|
|
50
|
+
"Compare the two result sets.",
|
|
51
|
+
"Click the part row and read the page it lands on.",
|
|
52
|
+
],
|
|
53
|
+
inputs: { byName: "Rubber Flat", byCode: "RF" },
|
|
54
|
+
expectedBehaviour: "Parts are searchable by full name and by code. Before this they had no search tokens at all — all 752 were reachable only by drilling /parts into a classification and then a code.",
|
|
55
|
+
expectedUiState: "Both queries return the part under a Parts heading, and the row shows its classification on a second line underneath the name. Clicking it lands on a real /parts/<classification>/<code> page, not a 404.",
|
|
56
|
+
endResult: "Read-only; nothing persists.",
|
|
57
|
+
},
|
|
58
|
+
"checklist-content-discovery-search-search-ambiguous-part-code": {
|
|
59
|
+
roles: ["guest"],
|
|
60
|
+
startPage: "/search",
|
|
61
|
+
steps: [
|
|
62
|
+
"Open /search?q=105 in a private window.",
|
|
63
|
+
"Count the rows under the Parts heading.",
|
|
64
|
+
"Read the second line of each row and write down the classification it names.",
|
|
65
|
+
"Click two different rows in turn and write down the URL each lands on.",
|
|
66
|
+
],
|
|
67
|
+
inputs: { query: "105" },
|
|
68
|
+
expectedBehaviour: "A bare code is ambiguous across generations — 105 is a Metal Fight spin-track height while a bare number in Burst is a disc — so the engine must return all of them rather than picking one.",
|
|
69
|
+
expectedUiState: "SEVERAL rows, each naming a DIFFERENT classification, each linking to a different /parts/<classification>/105 URL. Exactly one row is the FAILURE: it means something chose a winner for the user.",
|
|
70
|
+
endResult: "Read-only; nothing persists.",
|
|
71
|
+
},
|
|
72
|
+
"checklist-content-discovery-search-search-midword": {
|
|
73
|
+
roles: ["guest"],
|
|
74
|
+
startPage: "/search",
|
|
75
|
+
steps: [
|
|
76
|
+
"Open /search?q=ariza in a private window.",
|
|
77
|
+
"Read the result rows.",
|
|
78
|
+
"Change the query to zzzz and search again.",
|
|
79
|
+
"Read what the page says.",
|
|
80
|
+
],
|
|
81
|
+
inputs: { midword: "ariza", control: "zzzz" },
|
|
82
|
+
expectedBehaviour: "The browser scans the whole index, so a fragment from the MIDDLE of a word matches. The Firestore path structurally cannot do this — its tokens are word-prefix only.",
|
|
83
|
+
expectedUiState: "'ariza' returns Charizard rows. 'zzzz' returns nothing — without that control a matcher returning everything for any fragment would also pass the first half.",
|
|
84
|
+
endResult: "Read-only; nothing persists.",
|
|
85
|
+
},
|
|
86
|
+
"checklist-content-discovery-search-search-typo": {
|
|
87
|
+
roles: ["guest"],
|
|
88
|
+
startPage: "/search",
|
|
89
|
+
steps: [
|
|
90
|
+
"Open /search?q=dragon g in a private window.",
|
|
91
|
+
"Read the result rows.",
|
|
92
|
+
"Search again for Pegasis (note the spelling: 'sis', not 'sus').",
|
|
93
|
+
"Read the result rows.",
|
|
94
|
+
],
|
|
95
|
+
inputs: { typo1: "dragon g", typo2: "Pegasis" },
|
|
96
|
+
expectedBehaviour: "Misspellings are expanded at INDEX time from a crawl of a counterfeit seller's real titles, on the measured insight that an evasion spelling is the same string a genuine buyer mistypes.",
|
|
97
|
+
expectedUiState: "'dragon g' returns Dragoon G. 'Pegasis' returns Storm Pegasus. Neither returns an empty state.",
|
|
98
|
+
endResult: "Read-only; nothing persists.",
|
|
99
|
+
},
|
|
100
|
+
"checklist-content-discovery-search-search-normalised-away": {
|
|
101
|
+
roles: ["guest"],
|
|
102
|
+
startPage: "/search",
|
|
103
|
+
steps: [
|
|
104
|
+
"Open /search?q=!!! in a private window.",
|
|
105
|
+
"Read the message on the page word for word.",
|
|
106
|
+
"Count the result rows.",
|
|
107
|
+
"Now search zzzznope and read that message too.",
|
|
108
|
+
"Compare the two messages.",
|
|
109
|
+
],
|
|
110
|
+
inputs: { punctuation: "!!!", nonsense: "zzzznope" },
|
|
111
|
+
expectedBehaviour: "A query that normalises to no searchable words must return NOTHING, never everything. The inverse of this bug shipped on /api/products once: a punctuation-only query produced no filter clause and returned the entire published catalogue as search results.",
|
|
112
|
+
expectedUiState: "'!!!' says the search had no searchable words in it. 'zzzznope' says nothing matched. The two messages are DIFFERENT — one means we could not form a query, the other means we ran one and found none. Any rows at all for '!!!' is the failure.",
|
|
113
|
+
endResult: "Read-only; nothing persists.",
|
|
114
|
+
},
|
|
115
|
+
"checklist-content-discovery-search-search-zero-reads": {
|
|
116
|
+
roles: ["guest"],
|
|
117
|
+
startPage: "/",
|
|
118
|
+
steps: [
|
|
119
|
+
"Open / in a private window and open DevTools → Network.",
|
|
120
|
+
"Clear the network log.",
|
|
121
|
+
"Click into the header search and type d.",
|
|
122
|
+
"Wait for suggestions to appear, then type r, a, n, z, e, r one character at a time.",
|
|
123
|
+
"Read the network log and count the requests made after the first one.",
|
|
124
|
+
],
|
|
125
|
+
inputs: { query: "dranzer" },
|
|
126
|
+
expectedBehaviour: "The index is fetched ONCE per page session and searched locally thereafter. Before this, every keystroke was a request to /api/search/suggestions, which was four parallel Firestore reads.",
|
|
127
|
+
expectedUiState: "The log shows ONE large .json fetch from firebasestorage (a few hundred KB) on the first focus or keystroke, and NOTHING further as you keep typing. A request per character is the failure even though the suggestions look identical either way.",
|
|
128
|
+
endResult: "Read-only; nothing persists.",
|
|
129
|
+
},
|
|
130
|
+
"checklist-content-discovery-search-search-no-prices": {
|
|
131
|
+
roles: ["guest"],
|
|
132
|
+
startPage: "/",
|
|
133
|
+
steps: [
|
|
134
|
+
"Open / in a private window with no session.",
|
|
135
|
+
"Click the header search and type dranzer.",
|
|
136
|
+
"Read every suggestion row, including the small second line.",
|
|
137
|
+
"Press Enter and read every row on the results page.",
|
|
138
|
+
"Search the rendered page for the ₹ character.",
|
|
139
|
+
],
|
|
140
|
+
inputs: { query: "dranzer" },
|
|
141
|
+
expectedBehaviour: "Prices are hidden from signed-out visitors so the catalogue cannot be read at scale without an account. The suggestion subtitle used to be the product's price, served from a route cached PUBLIC for 60 seconds — a live leak on every page of the site.",
|
|
142
|
+
expectedUiState: "Suggestion subtitles show the brand and category, e.g. 'Takara-Tomy · Attack Rings'. No ₹ appears anywhere in the dropdown or in the results, signed out.",
|
|
143
|
+
endResult: "Read-only; nothing persists.",
|
|
144
|
+
},
|
|
145
|
+
"checklist-content-discovery-search-search-no-sandbox": {
|
|
146
|
+
roles: ["guest"],
|
|
147
|
+
startPage: "/search",
|
|
148
|
+
steps: [
|
|
149
|
+
"Open /search?q=sandbox in a private window with no session.",
|
|
150
|
+
"Read every result row.",
|
|
151
|
+
"Search again for tester and read every row.",
|
|
152
|
+
"Note any row whose title or detail names a tester or sandbox fixture.",
|
|
153
|
+
],
|
|
154
|
+
inputs: { query1: "sandbox", query2: "tester" },
|
|
155
|
+
expectedBehaviour: "The index is ONE shared file every browser downloads, with no per-viewer filter anywhere after it is built — so a test-data row in it is published to the world for that version's whole lifetime, and an immutable object cannot be recalled.",
|
|
156
|
+
expectedUiState: "No row seeded as test data appears. Finding even one is a disclosure, not a cosmetic issue.",
|
|
157
|
+
endResult: "Read-only; nothing persists.",
|
|
158
|
+
},
|
|
159
|
+
"checklist-content-discovery-search-search-freshness": {
|
|
160
|
+
roles: ["seller"],
|
|
161
|
+
startPage: "/store/products/new",
|
|
162
|
+
steps: [
|
|
163
|
+
"Create and PUBLISH a listing with a distinctive title, e.g. Freshness Probe Dranzer.",
|
|
164
|
+
"Write down the time.",
|
|
165
|
+
"Open /search in a private window and search that exact title.",
|
|
166
|
+
"If it is absent, wait and retry every few minutes for up to 20 minutes.",
|
|
167
|
+
"Once it appears, go back and UNPUBLISH the listing.",
|
|
168
|
+
"Search the same title again, retrying for up to 20 minutes.",
|
|
169
|
+
],
|
|
170
|
+
inputs: { title: "Freshness Probe Dranzer" },
|
|
171
|
+
expectedBehaviour: "A content write marks the index stale and the scheduled job rebuilds within about 15 minutes. An unpublished listing still has a fresh updatedAt, so the incremental pass re-reads it, sees it fail the published filter, and removes it.",
|
|
172
|
+
expectedUiState: "The listing becomes findable within ~15 minutes of publishing and disappears within ~15 minutes of unpublishing. A row that NEVER appears and a row that never LEAVES are both failures, and both mean the rebuild has stopped — note which one you saw.",
|
|
173
|
+
endResult: "Delete the probe listing afterwards. Its absence from search within ~15 minutes is itself the final check.",
|
|
174
|
+
},
|
|
175
|
+
"checklist-content-discovery-search-search-facet-counts": {
|
|
176
|
+
roles: ["guest"],
|
|
177
|
+
startPage: "/search",
|
|
178
|
+
steps: [
|
|
179
|
+
"Open /search?q=beyblade in a private window.",
|
|
180
|
+
"Find the facet chips above the results and write down each chip's label and number.",
|
|
181
|
+
"Count the result rows actually shown for one type and compare it with that chip's number.",
|
|
182
|
+
"Click one chip.",
|
|
183
|
+
"Read the result rows again, and read the other chips' numbers again.",
|
|
184
|
+
"Click the same chip a second time to clear it.",
|
|
185
|
+
],
|
|
186
|
+
inputs: { query: "beyblade" },
|
|
187
|
+
expectedBehaviour: "Facet counts are computed over the hits the current query produced, in memory. The Firestore path cannot afford this — it is one aggregation query per facet value, each needing its own composite index, and it returns no count at all when an index is missing.",
|
|
188
|
+
expectedUiState: "Chips show a number each. Clicking one narrows the results AND lowers the other chips' numbers to match. Clicking again restores both. A chip that does not change the results, or a number that disagrees with the rows you can count, is the failure.",
|
|
189
|
+
endResult: "Read-only; the selection is not persisted and is gone on reload.",
|
|
190
|
+
},
|
|
191
|
+
"checklist-content-discovery-search-search-guest-no-private": {
|
|
192
|
+
roles: ["guest"],
|
|
193
|
+
startPage: "/search",
|
|
194
|
+
steps: [
|
|
195
|
+
"Open a private window with no session and open DevTools → Network.",
|
|
196
|
+
"Clear the network log.",
|
|
197
|
+
"Go to /search?q=order.",
|
|
198
|
+
"Read every request in the log.",
|
|
199
|
+
"Look specifically for any request whose path contains /api/search/scoped.",
|
|
200
|
+
"Read the page for any section headed 'Your …' or 'Admin'.",
|
|
201
|
+
],
|
|
202
|
+
inputs: { query: "order" },
|
|
203
|
+
expectedBehaviour: "A signed-out visitor must make NO authenticated request at all — not a 401, not an empty 200. The client gate, the route's auth requirement and the empty source list are three independent gates, because the expensive failure is not a guest seeing an error, it is a guest silently receiving someone's data.",
|
|
204
|
+
expectedUiState: "No /api/search/scoped request appears in the log in any form. No account or admin section renders on the page. A 401 in the log is still a FAIL — it means the request was issued.",
|
|
205
|
+
endResult: "Read-only; nothing persists.",
|
|
206
|
+
},
|
|
207
|
+
"checklist-content-discovery-search-search-buyer-isolation": {
|
|
208
|
+
roles: ["buyer"],
|
|
209
|
+
startPage: "/search",
|
|
210
|
+
steps: [
|
|
211
|
+
"Sign in as one buyer.",
|
|
212
|
+
"From an admin session in another browser, find a DIFFERENT buyer's order and note a distinctive word from its product title.",
|
|
213
|
+
"Back in the first buyer's session, search that word on /search.",
|
|
214
|
+
"Read every row, including any under 'Your orders'.",
|
|
215
|
+
"Now open /api/search/scoped?q=<that word> directly in the same signed-in session.",
|
|
216
|
+
"Read the raw JSON response end to end.",
|
|
217
|
+
],
|
|
218
|
+
expectedBehaviour: "Every scoped source carries an owner clause built from the verified session, so the QUERY itself cannot return another viewer's rows. The API half of this check is the half that matters.",
|
|
219
|
+
expectedUiState: "Neither the page nor the JSON contains the other buyer's order. A page that hides the row while the endpoint returns it is precisely the failure this case exists for, and only the second half can see it.",
|
|
220
|
+
endResult: "Read-only; nothing persists.",
|
|
221
|
+
},
|
|
222
|
+
"checklist-content-discovery-search-search-seller-own-store": {
|
|
223
|
+
roles: ["seller"],
|
|
224
|
+
startPage: "/store/products/new",
|
|
225
|
+
steps: [
|
|
226
|
+
"Signed in as a seller, create a listing with a distinctive title and leave it as a DRAFT.",
|
|
227
|
+
"Go to /search and search that title.",
|
|
228
|
+
"Read which section the row appears under.",
|
|
229
|
+
"Note a draft title belonging to a DIFFERENT store (ask an admin for one).",
|
|
230
|
+
"Search that second title and read every row.",
|
|
231
|
+
],
|
|
232
|
+
inputs: { ownDraft: "Isolation Probe Draft" },
|
|
233
|
+
expectedBehaviour: "A seller's own drafts are returned by the scoped tier. Published listings are deduped away because the public index already has them, so what survives in that section is exactly the drafts — which is why it is labelled as such.",
|
|
234
|
+
expectedUiState: "Your own draft appears under 'Your listings (incl. drafts)'. The other store's draft returns nothing at all.",
|
|
235
|
+
endResult: "Delete the probe draft afterwards.",
|
|
236
|
+
},
|
|
237
|
+
"checklist-content-discovery-search-search-listing-boxes-still-filter": {
|
|
238
|
+
roles: ["guest", "seller", "admin"],
|
|
239
|
+
startPage: "/stores",
|
|
240
|
+
steps: [
|
|
241
|
+
"Open /stores and type a real store name into the page's own search box.",
|
|
242
|
+
"Confirm the list narrows, then type zzzznope and confirm it empties.",
|
|
243
|
+
"Sign in as a seller, open /store/orders, and repeat both searches there.",
|
|
244
|
+
"Check the pager still works and the filter-drawer badge still shows the right count.",
|
|
245
|
+
"Sign in as an admin, open /admin/users, and repeat both searches there.",
|
|
246
|
+
],
|
|
247
|
+
inputs: { control: "zzzznope" },
|
|
248
|
+
expectedBehaviour: "The per-collection boxes are a DIFFERENT system from site-wide search — they filter one table, carry URL state and feed real pagination — and nothing in the index work touches them. This case exists because that is a promise, and a promise with no check is a hope.",
|
|
249
|
+
expectedUiState: "All three boxes narrow on a real term and return zero on the control. Pagination still pages, and the filter-drawer badge still counts only drawer filters.",
|
|
250
|
+
endResult: "Read-only; the URL carries the query but nothing persists server-side.",
|
|
251
|
+
},
|
|
252
|
+
"checklist-content-discovery-search-search-support-ticket-two-words": {
|
|
253
|
+
roles: ["admin"],
|
|
254
|
+
startPage: "/admin/support-tickets",
|
|
255
|
+
steps: [
|
|
256
|
+
"Open /admin/support-tickets and read several ticket subjects.",
|
|
257
|
+
"Pick TWO words that appear together in exactly one subject, where the longer word also appears in others.",
|
|
258
|
+
"Type just the longer word into the search box and count the rows.",
|
|
259
|
+
"Now type both words and count the rows again.",
|
|
260
|
+
"Compare the two counts.",
|
|
261
|
+
],
|
|
262
|
+
expectedBehaviour: "Both words must narrow the result. Before this the second word was discarded entirely — only the longest term reached the query — so a two-word search returned everything matching the longer word while looking like it was working.",
|
|
263
|
+
expectedUiState: "The two-word search returns FEWER rows than the one-word search, and every row it returns contains both words. Identical counts mean the second word is still being thrown away.",
|
|
264
|
+
endResult: "Read-only; nothing persists.",
|
|
265
|
+
},
|
|
266
|
+
"checklist-content-discovery-search-search-parts-page-has-a-box": {
|
|
267
|
+
roles: ["guest"],
|
|
268
|
+
startPage: "/parts",
|
|
269
|
+
steps: [
|
|
270
|
+
"Open /parts in a private window.",
|
|
271
|
+
"Look above the grid of classifications for a search input.",
|
|
272
|
+
"Type RF and read the rows that appear.",
|
|
273
|
+
"Read the second line of each row.",
|
|
274
|
+
"Clear it and type zzzznope.",
|
|
275
|
+
"Scroll down and confirm the classification grid is still present.",
|
|
276
|
+
],
|
|
277
|
+
inputs: { query: "RF", control: "zzzznope" },
|
|
278
|
+
expectedBehaviour: "Before this the page was browse-only: 752 parts reachable only by clicking a classification and then a code, with no search input anywhere on the surface.",
|
|
279
|
+
expectedUiState: "A search box sits above the grid. 'RF' returns the part with its classification on a second line; 'zzzznope' says no part matches. The classification grid is still there underneath — the box adds a way in, it does not replace browsing.",
|
|
280
|
+
endResult: "Read-only; nothing persists.",
|
|
281
|
+
},
|
|
282
|
+
"checklist-content-discovery-search-search-facet-carries-through": {
|
|
283
|
+
roles: ["guest"],
|
|
284
|
+
startPage: "/search",
|
|
285
|
+
steps: [
|
|
286
|
+
"Open /search?q=beyblade in a private window.",
|
|
287
|
+
"Tick one facet chip, e.g. a brand.",
|
|
288
|
+
"Find that group's own 'See all →' link and read its href before clicking.",
|
|
289
|
+
"Click it.",
|
|
290
|
+
"Read the URL you land on and whether the listing page shows the same filter applied.",
|
|
291
|
+
],
|
|
292
|
+
inputs: { query: "beyblade" },
|
|
293
|
+
expectedBehaviour: "The refinement a visitor builds on /search must survive the jump to the real browse page — losing it means re-doing work they already did.",
|
|
294
|
+
expectedUiState: "The destination URL carries the same filter (e.g. a brand query parameter), and the browse page opens already narrowed to it, not showing the unfiltered full list.",
|
|
295
|
+
endResult: "Read-only; nothing persists.",
|
|
296
|
+
},
|
|
297
|
+
"checklist-content-discovery-search-search-admin-person-exact": {
|
|
298
|
+
roles: ["admin"],
|
|
299
|
+
startPage: "/admin/users",
|
|
300
|
+
steps: [
|
|
301
|
+
"Sign in as admin and open /admin/users.",
|
|
302
|
+
"Pick a real user and note their first name only.",
|
|
303
|
+
"Type just that first name into the search box.",
|
|
304
|
+
"Read the results.",
|
|
305
|
+
"Clear the box and type only the first 3-4 letters of that same first name — a prefix, not the whole word.",
|
|
306
|
+
"Read the results again.",
|
|
307
|
+
],
|
|
308
|
+
expectedBehaviour: "The admin search resolves through a whole-WORD index, not a whole-STRING exact match. Typing a first name alone must find a user whose displayName is 'First Last' — before this it required the exact full string. A PREFIX of the word must find nobody: the index is whole-word only on purpose, so it cannot be unpicked by counting partial-match frequencies.",
|
|
309
|
+
expectedUiState: "The full first name returns the user. The 3-4 letter prefix returns an empty list — not the same user, not anybody else.",
|
|
310
|
+
endResult: "Read-only; nothing persists.",
|
|
311
|
+
},
|
|
312
|
+
"checklist-content-discovery-search-search-no-plaintext-pii": {
|
|
313
|
+
roles: ["admin"],
|
|
314
|
+
startPage: "/admin/users",
|
|
315
|
+
steps: [
|
|
316
|
+
"With Firestore console access, open any `users` document.",
|
|
317
|
+
"Find the `nameTokensIndex` field and read its values.",
|
|
318
|
+
"Confirm every entry is an opaque hex string with an `hmac:` prefix, never a readable name fragment.",
|
|
319
|
+
"Separately, fetch the public search artifact's .json file (the one the header search downloads) and search its raw text for the word 'TokensIndex'.",
|
|
320
|
+
],
|
|
321
|
+
needsReview: true,
|
|
322
|
+
reviewNote: "Needs Firestore console access, which an automated browser session does not have — flagged for a human or an admin-tooling pass rather than answered null.",
|
|
323
|
+
expectedBehaviour: "A blind index lets admin search without ever decrypting anyone's name. If the stored values are readable, or if the field reaches the public artifact (a deterministic per-person identifier published to every browser, cross-referenceable even unbroken), the whole design has failed regardless of what the UI shows.",
|
|
324
|
+
expectedUiState: "Every `nameTokensIndex` entry is an `hmac:`-prefixed digest. The public artifact's raw text contains no occurrence of 'TokensIndex' at all.",
|
|
325
|
+
endResult: "Read-only; nothing persists.",
|
|
326
|
+
},
|
|
327
|
+
"checklist-content-discovery-search-faq-punctuation-search": {
|
|
328
|
+
roles: ["guest"],
|
|
329
|
+
startPage: "/faqs",
|
|
330
|
+
steps: [
|
|
331
|
+
"Open /faqs in a private window.",
|
|
332
|
+
"Type !!! into the FAQ search box.",
|
|
333
|
+
"Read the message shown and count the FAQs displayed.",
|
|
334
|
+
],
|
|
335
|
+
inputs: { punctuation: "!!!" },
|
|
336
|
+
expectedBehaviour: "GUARD CASE — pins behaviour that is already correct. A punctuation-only query has no searchable words, and must say so rather than silently falling through to 'no filter', which would return the entire FAQ catalogue disguised as search results.",
|
|
337
|
+
expectedUiState: "The page says the search had no searchable words. Zero FAQs are shown — not the full list.",
|
|
338
|
+
endResult: "Read-only; nothing persists.",
|
|
339
|
+
},
|
|
340
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the design-ux/header-brand-mark-centring page.
|
|
3
|
+
* WHAT: 6 case(s), keyed by full checklist id.
|
|
4
|
+
*
|
|
5
|
+
* @tag domain:tester
|
|
6
|
+
* @tag layer:seed
|
|
7
|
+
* @tag pattern:none
|
|
8
|
+
* @tag access:server-only
|
|
9
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
10
|
+
* @tag sideEffects:none
|
|
11
|
+
*/
|
|
12
|
+
export const authored = {
|
|
13
|
+
"checklist-design-ux-header-brand-mark-centring-mark-clear-of-icons-across-the-lg-band": {
|
|
14
|
+
roles: ["guest"],
|
|
15
|
+
startPage: "/products",
|
|
16
|
+
steps: [
|
|
17
|
+
"Open /products signed out.",
|
|
18
|
+
"Set the window to exactly 1024px wide.",
|
|
19
|
+
"Widen in roughly 32px steps to 1280px, pausing at each step.",
|
|
20
|
+
"At each step look at the space between the 'LetItRip' wordmark and the first icon of the right-hand cluster.",
|
|
21
|
+
],
|
|
22
|
+
expectedBehaviour: "The mark is one of three in-flow tracks in the title row, so the row's layout reserves its width and the action cluster cannot be laid out across it at any width. Previously it was absolutely positioned and the cluster simply grew over it between 1024px and ~1150px.",
|
|
23
|
+
expectedUiState: "At every step the leaf mark sits in clear space with visible gap on both sides. No part of it overlaps the notification bell, the messages icon, the wishlist heart or the cart. Each icon's full 44px square is unobstructed. If an overlap appears, record the exact window width it starts and stops at — the band is the finding, not the single screenshot.",
|
|
24
|
+
endResult: "Pure layout; nothing persists. Reloading at any width in the band reproduces the same clean header, and the band must not reappear after a reload.",
|
|
25
|
+
},
|
|
26
|
+
"checklist-design-ux-header-brand-mark-centring-mark-clear-signed-out-worst-case": {
|
|
27
|
+
roles: ["guest", "buyer"],
|
|
28
|
+
startPage: "/products",
|
|
29
|
+
steps: [
|
|
30
|
+
"Sign out completely and load /products.",
|
|
31
|
+
"Set the window to approximately 1100px wide.",
|
|
32
|
+
"Screenshot the header.",
|
|
33
|
+
"Sign in as any buyer and, without changing the window width, screenshot the header again.",
|
|
34
|
+
],
|
|
35
|
+
expectedBehaviour: "Signed out the cluster is at its widest, because 'Sign in' and 'Register' (~160px together) replace a single 44px avatar. ~1100px signed out is the exact combination the original bug report was captured at, so it is the case most likely to regress.",
|
|
36
|
+
expectedUiState: "Both screenshots show the leaf mark clear of every control. Signed out the cluster reads search, Today's Deals, theme and hamburger plus 'Sign in' and 'Register'; signed in it reads bell, messages, heart, cart, avatar and the same four. In neither does the leaf touch an icon. If exactly one of the two fails, say which — signed-out-only failure means the auth buttons' extra width is still unaccounted for.",
|
|
37
|
+
endResult: "Navigation and session change only. Signing back out at the same width must return to the clean signed-out header, not to an overlapping one.",
|
|
38
|
+
},
|
|
39
|
+
"checklist-design-ux-header-brand-mark-centring-mark-shifts-rather-than-overlapping": {
|
|
40
|
+
roles: ["guest"],
|
|
41
|
+
startPage: "/products",
|
|
42
|
+
steps: [
|
|
43
|
+
"Signed out at /products, start from 1280px.",
|
|
44
|
+
"Narrow the window slowly toward 1024px.",
|
|
45
|
+
"Watch the leaf mark's horizontal position as the gap closes.",
|
|
46
|
+
"Stop at the narrowest point where the cluster still shows all of its icons.",
|
|
47
|
+
],
|
|
48
|
+
expectedBehaviour: "When the cluster needs more than its half of the row, the side track holding the wordmark yields and the mark is pushed off-centre. Shifting is the intended degradation — the alternative designs either hide the mark under the icons (the old bug) or let the cluster shrink below its own content and be clipped, and the app shell is overflow-clipped, so clipped is gone rather than scrollable.",
|
|
49
|
+
expectedUiState: "As the window narrows the leaf drifts toward the wordmark and stays fully visible the whole way — it never slides beneath an icon and never gets cropped. Every icon keeps its full box, the hamburger stays entirely inside the right edge, and nothing is cut off. Report separately whether the failure was an overlap, a clipped control, or a disappearing leaf; they have different causes.",
|
|
50
|
+
endResult: "Nothing persists. Widening back to 1280px returns the leaf to the centre, which also confirms the shift is layout-driven and not a one-way state.",
|
|
51
|
+
},
|
|
52
|
+
"checklist-design-ux-header-brand-mark-centring-mark-centred-at-wide-widths": {
|
|
53
|
+
roles: ["guest"],
|
|
54
|
+
startPage: "/products",
|
|
55
|
+
steps: [
|
|
56
|
+
"Load /products and maximise the window (1440px or wider).",
|
|
57
|
+
"Compare the leaf mark's position against the horizontal centre of the page content.",
|
|
58
|
+
"Repeat at 1920px if the display allows it.",
|
|
59
|
+
],
|
|
60
|
+
expectedBehaviour: "With room to spare the two side tracks each take an equal share of the free space, which places the middle track on the row's midpoint — the mark is centred by the layout rather than by a `left: 50%` offset.",
|
|
61
|
+
expectedUiState: "The leaf is centred in the header to the eye, lining up with the centre of the page beneath it. A mark that is visibly nudged to one side at a wide width is a DIFFERENT fault from the collision — the side tracks are no longer balanced — and should be filed as such, with the window width noted.",
|
|
62
|
+
endResult: "No state. The centring must hold across a reload and across a soft navigation to another page.",
|
|
63
|
+
},
|
|
64
|
+
"checklist-design-ux-header-brand-mark-centring-mark-absent-below-md": {
|
|
65
|
+
roles: ["guest"],
|
|
66
|
+
startPage: "/products",
|
|
67
|
+
steps: [
|
|
68
|
+
"Load /products signed out.",
|
|
69
|
+
"Set the window to 767px, then 640px, then 320px.",
|
|
70
|
+
"At each width inspect the whole header row end to end.",
|
|
71
|
+
"At 320px tap the hamburger.",
|
|
72
|
+
],
|
|
73
|
+
expectedBehaviour: "The centred mark is hidden below md, which removes it as a layout item entirely rather than merely making it invisible — so the mobile header should be identical to how it has always rendered, with the two side tracks splitting the full width.",
|
|
74
|
+
expectedUiState: "No centred leaf at any of the three widths. A small leaf sits immediately left of the 'LetItRip' wordmark. The action cluster is still flush against the right edge with no unexplained empty gap between it and the edge. At 320px the hamburger is fully visible, not sliced by the edge, and tapping it opens the menu.",
|
|
75
|
+
endResult: "Nothing is written. Widening back past 768px brings the centred leaf back, confirming the hide is width-driven.",
|
|
76
|
+
},
|
|
77
|
+
"checklist-design-ux-header-brand-mark-centring-mark-centred-in-left-hand-mode": {
|
|
78
|
+
roles: ["guest"],
|
|
79
|
+
startPage: "/products",
|
|
80
|
+
steps: [
|
|
81
|
+
"Load /products and switch the interface to left-hand mode.",
|
|
82
|
+
"Set the window to 1024px.",
|
|
83
|
+
"Widen in ~32px steps to 1280px, checking the header at each step.",
|
|
84
|
+
"Narrow to 320px and check the header once more.",
|
|
85
|
+
],
|
|
86
|
+
expectedBehaviour: "Hand mode reverses the row's main axis, so the two side tracks swap ends. Each side carries its own mirrored alignment, and the middle track is deliberately hand-neutral — a centred brand mark must not move when the hands swap.",
|
|
87
|
+
expectedUiState: "The wordmark sits flush against the RIGHT edge with no gap between it and the edge; the icon cluster sits flush against the LEFT edge with the hamburger outermost; the leaf stays centred and overlaps nothing at any step. A wordmark floating away from the right edge means a side track lost its mirrored alignment — that is a fix that only works in right-hand mode, and it is the most likely way this regresses.",
|
|
88
|
+
endResult: "The hand-mode preference persists across a reload; the header must render the same way after it. Switching back to right-hand mode mirrors everything again with the leaf still centred.",
|
|
89
|
+
},
|
|
90
|
+
};
|
|
@@ -77,10 +77,15 @@ import { authored as a_content_discovery__blog } from "./content-discovery__blog
|
|
|
77
77
|
import { authored as a_content_discovery__coupons } from "./content-discovery__coupons.js";
|
|
78
78
|
import { authored as a_content_discovery__events } from "./content-discovery__events.js";
|
|
79
79
|
import { authored as a_content_discovery__faq_help } from "./content-discovery__faq-help.js";
|
|
80
|
+
import { authored as a_content_discovery__authenticity_checker } from "./content-discovery__authenticity-checker.js";
|
|
81
|
+
import { authoredNearMiss as a_content_discovery__authenticity_near_miss } from "./content-discovery__authenticity-checker.js";
|
|
82
|
+
import { authoredTypeahead as a_content_discovery__authenticity_typeahead } from "./content-discovery__authenticity-checker.js";
|
|
80
83
|
import { authored as a_content_discovery__parts_database } from "./content-discovery__parts-database.js";
|
|
81
84
|
import { authored as a_content_discovery__category_tabs_franchise_bundles } from "./content-discovery__category-tabs-franchise-bundles.js";
|
|
82
85
|
import { authored as a_content_discovery__notifications } from "./content-discovery__notifications.js";
|
|
83
86
|
import { authored as a_content_discovery__search } from "./content-discovery__search.js";
|
|
87
|
+
import { authored as a_content_discovery__site_wide_index } from "./content-discovery__site-wide-index.js";
|
|
88
|
+
import { authored as a_content_discovery__price_index_and_compare } from "./content-discovery__price-index-and-compare.js";
|
|
84
89
|
import { authored as a_cta_layout__checkout_bottom_bar } from "./cta-layout__checkout-bottom-bar.js";
|
|
85
90
|
import { authored as a_cta_layout__dialog_footers } from "./cta-layout__dialog-footers.js";
|
|
86
91
|
import { authored as a_cta_layout__editor_action_bar } from "./cta-layout__editor-action-bar.js";
|
|
@@ -89,6 +94,7 @@ import { authored as a_design_ux__back_to_top_button } from "./design-ux__back-t
|
|
|
89
94
|
import { authored as a_design_ux__rich_text_readability } from "./design-ux__rich-text-readability.js";
|
|
90
95
|
import { authored as a_design_ux__action_bar_placement } from "./design-ux__action-bar-placement.js";
|
|
91
96
|
import { authored as a_design_ux__nav_reachability } from "./design-ux__nav-reachability.js";
|
|
97
|
+
import { authored as a_design_ux__header_brand_mark_centring } from "./design-ux__header-brand-mark-centring.js";
|
|
92
98
|
import { authored as a_design_ux__header_controls_and_messages } from "./design-ux__header-controls-and-messages.js";
|
|
93
99
|
import { authored as a_design_ux__feature_badge_picker } from "./design-ux__feature-badge-picker.js";
|
|
94
100
|
import { authored as a_design_ux__dashboard_layout } from "./design-ux__dashboard-layout.js";
|
|
@@ -114,6 +120,10 @@ import { authored as a_selling__final_sale_authoring } from "./selling__final-sa
|
|
|
114
120
|
import { authored as a_selling__listing_type_fields_roundtrip } from "./selling__listing-type-fields-roundtrip.js";
|
|
115
121
|
import { authored as a_selling__media_limits } from "./selling__media-limits.js";
|
|
116
122
|
import { authored as a_selling__seller_bids_bundles_filters } from "./selling__seller-bids-bundles-filters.js";
|
|
123
|
+
import { authored as a_tools__sticker_tracer } from "./tools__sticker-tracer.js";
|
|
124
|
+
import { authored as a_tools__sticker_promote_to_listings } from "./tools__sticker-promote-to-listings.js";
|
|
125
|
+
import { authored as a_buying__spares_and_groups } from "./buying__spares-and-groups.js";
|
|
126
|
+
import { authored as a_selling__spares_and_group_editing } from "./selling__spares-and-group-editing.js";
|
|
117
127
|
import { authored as a_selling__seller_catalog_org } from "./selling__seller-catalog-org.js";
|
|
118
128
|
import { authored as a_selling__seller_custom_brands } from "./selling__seller-custom-brands.js";
|
|
119
129
|
import { authored as a_selling__seller_guide } from "./selling__seller-guide.js";
|
|
@@ -134,12 +144,14 @@ import { authored as a_seo__page_metadata } from "./seo__page-metadata.js";
|
|
|
134
144
|
import { authored as a_seo__og_images } from "./seo__og-images.js";
|
|
135
145
|
import { authored as a_search_and_nav__employee_permissions } from "./search-and-nav__employee-permissions.js";
|
|
136
146
|
import { authored as a_search_and_nav__header_search } from "./search-and-nav__header-search.js";
|
|
147
|
+
import { authoredIndexEra as a_search_and_nav__header_search_index_era } from "./search-and-nav__header-search.js";
|
|
137
148
|
import { authored as a_search_and_nav__settings_deep_links } from "./search-and-nav__settings-deep-links.js";
|
|
138
149
|
import { authored as a_search_and_nav__sidebar_search } from "./search-and-nav__sidebar-search.js";
|
|
139
150
|
import { authored as a_selling__listing_edit_roundtrip } from "./selling__listing-edit-roundtrip.js";
|
|
140
151
|
import { authored as a_selling__digital_content_delivery } from "./selling__digital-content-delivery.js";
|
|
141
152
|
import { authored as a_selling__seller_orders_at_scale } from "./selling__seller-orders-at-scale.js";
|
|
142
153
|
import { authored as a_content_discovery__category_counts_and_rollup } from "./content-discovery__category-counts-and-rollup.js";
|
|
154
|
+
import { authored as a_content_discovery__overflowing_pill_rows } from "./content-discovery__overflowing-pill-rows.js";
|
|
143
155
|
import { authored as a_content_discovery__store_reviews_aggregate } from "./content-discovery__store-reviews-aggregate.js";
|
|
144
156
|
import { authored as a_buying__order_detail_actions } from "./buying__order-detail-actions.js";
|
|
145
157
|
import { authored as a_admin__admin_detail_round_trips } from "./admin__admin-detail-round-trips.js";
|
|
@@ -204,10 +216,15 @@ export const AUTHORED_CASES = {
|
|
|
204
216
|
...a_content_discovery__coupons,
|
|
205
217
|
...a_content_discovery__events,
|
|
206
218
|
...a_content_discovery__faq_help,
|
|
219
|
+
...a_content_discovery__authenticity_checker,
|
|
220
|
+
...a_content_discovery__authenticity_near_miss,
|
|
221
|
+
...a_content_discovery__authenticity_typeahead,
|
|
207
222
|
...a_content_discovery__parts_database,
|
|
208
223
|
...a_content_discovery__category_tabs_franchise_bundles,
|
|
209
224
|
...a_content_discovery__notifications,
|
|
210
225
|
...a_content_discovery__search,
|
|
226
|
+
...a_content_discovery__site_wide_index,
|
|
227
|
+
...a_content_discovery__price_index_and_compare,
|
|
211
228
|
...a_cta_layout__checkout_bottom_bar,
|
|
212
229
|
...a_cta_layout__dialog_footers,
|
|
213
230
|
...a_cta_layout__editor_action_bar,
|
|
@@ -216,6 +233,7 @@ export const AUTHORED_CASES = {
|
|
|
216
233
|
...a_design_ux__rich_text_readability,
|
|
217
234
|
...a_design_ux__action_bar_placement,
|
|
218
235
|
...a_design_ux__nav_reachability,
|
|
236
|
+
...a_design_ux__header_brand_mark_centring,
|
|
219
237
|
...a_design_ux__header_controls_and_messages,
|
|
220
238
|
...a_design_ux__feature_badge_picker,
|
|
221
239
|
...a_design_ux__dashboard_layout,
|
|
@@ -241,6 +259,10 @@ export const AUTHORED_CASES = {
|
|
|
241
259
|
...a_selling__listing_type_fields_roundtrip,
|
|
242
260
|
...a_selling__media_limits,
|
|
243
261
|
...a_selling__seller_bids_bundles_filters,
|
|
262
|
+
...a_tools__sticker_tracer,
|
|
263
|
+
...a_tools__sticker_promote_to_listings,
|
|
264
|
+
...a_buying__spares_and_groups,
|
|
265
|
+
...a_selling__spares_and_group_editing,
|
|
244
266
|
...a_selling__seller_catalog_org,
|
|
245
267
|
...a_selling__seller_custom_brands,
|
|
246
268
|
...a_selling__seller_guide,
|
|
@@ -261,12 +283,14 @@ export const AUTHORED_CASES = {
|
|
|
261
283
|
...a_seo__og_images,
|
|
262
284
|
...a_search_and_nav__employee_permissions,
|
|
263
285
|
...a_search_and_nav__header_search,
|
|
286
|
+
...a_search_and_nav__header_search_index_era,
|
|
264
287
|
...a_search_and_nav__settings_deep_links,
|
|
265
288
|
...a_search_and_nav__sidebar_search,
|
|
266
289
|
...a_selling__listing_edit_roundtrip,
|
|
267
290
|
...a_selling__digital_content_delivery,
|
|
268
291
|
...a_selling__seller_orders_at_scale,
|
|
269
292
|
...a_content_discovery__category_counts_and_rollup,
|
|
293
|
+
...a_content_discovery__overflowing_pill_rows,
|
|
270
294
|
...a_content_discovery__store_reviews_aggregate,
|
|
271
295
|
...a_buying__order_detail_actions,
|
|
272
296
|
...a_admin__admin_detail_round_trips,
|
|
@@ -126,3 +126,60 @@ export const authored = {
|
|
|
126
126
|
endResult: "Read-only; nothing persists. The fourth query is the control — a search that returned nothing for everything would pass the first three for the wrong reason.",
|
|
127
127
|
},
|
|
128
128
|
};
|
|
129
|
+
/*
|
|
130
|
+
* ── The header now reaches /search (2026-10-19) ─────────────────────────
|
|
131
|
+
*
|
|
132
|
+
* One `onSearch` handler was the entire reason the cross-resource results
|
|
133
|
+
* page had no users: it mapped the type dropdown to a browse route and
|
|
134
|
+
* redirected there, so a buyer searching "dranzer" never learned there is
|
|
135
|
+
* also a category, a part, a blog post and an FAQ about it.
|
|
136
|
+
*/
|
|
137
|
+
export const authoredIndexEra = {
|
|
138
|
+
"checklist-search-and-nav-header-search-header-search-submit-lands-on-search": {
|
|
139
|
+
roles: ["guest"],
|
|
140
|
+
startPage: "/",
|
|
141
|
+
steps: [
|
|
142
|
+
"Open / in a private window.",
|
|
143
|
+
"Click the header search and type dranzer.",
|
|
144
|
+
"Press Enter.",
|
|
145
|
+
"Read the URL in the address bar.",
|
|
146
|
+
"Count the section headings on the page.",
|
|
147
|
+
"Find the 'See all … →' link on one group and read where it points.",
|
|
148
|
+
],
|
|
149
|
+
inputs: { query: "dranzer" },
|
|
150
|
+
expectedBehaviour: "Submitting goes to the cross-resource page. The nine per-type browse routes are not lost — each is its own group's 'See all' link, which is where a per-type destination belongs once results are grouped.",
|
|
151
|
+
expectedUiState: "The URL is /search?q=dranzer. Results appear under several headings. Any URL of the form /products?q=… or /stores?q=… means the old redirect is still in place.",
|
|
152
|
+
endResult: "Read-only; nothing persists.",
|
|
153
|
+
},
|
|
154
|
+
"checklist-search-and-nav-header-search-header-search-type-is-a-filter": {
|
|
155
|
+
roles: ["guest"],
|
|
156
|
+
startPage: "/",
|
|
157
|
+
steps: [
|
|
158
|
+
"Open / in a private window.",
|
|
159
|
+
"Open the header search and set the type dropdown to Stores.",
|
|
160
|
+
"Type beyblade and press Enter.",
|
|
161
|
+
"Read the URL and the sections shown.",
|
|
162
|
+
"Find the Stores group and click its 'See all stores →' link.",
|
|
163
|
+
"Go back, clear the query completely, and press Enter with an EMPTY box.",
|
|
164
|
+
"Note whether the page navigated anywhere.",
|
|
165
|
+
],
|
|
166
|
+
inputs: { type: "Stores", query: "beyblade" },
|
|
167
|
+
expectedBehaviour: "The dropdown narrows the result set; it no longer decides the destination. An empty query does nothing, because landing on a browse page you did not ask for is worse than staying put.",
|
|
168
|
+
expectedUiState: "You land on /search, not /stores. The Stores group's 'See all' link is what goes to /stores. Submitting an empty box leaves you exactly where you were.",
|
|
169
|
+
endResult: "Read-only; nothing persists.",
|
|
170
|
+
},
|
|
171
|
+
"checklist-search-and-nav-header-search-header-search-no-price-for-guest": {
|
|
172
|
+
roles: ["guest"],
|
|
173
|
+
startPage: "/",
|
|
174
|
+
steps: [
|
|
175
|
+
"Open / in a private window with no session.",
|
|
176
|
+
"Click the header search and type dranzer.",
|
|
177
|
+
"Read every suggestion row, including the small grey second line.",
|
|
178
|
+
"Look specifically for a ₹ figure anywhere in the dropdown.",
|
|
179
|
+
],
|
|
180
|
+
inputs: { query: "dranzer" },
|
|
181
|
+
expectedBehaviour: "The suggestion subtitle used to be the product's price, from an unauthenticated route cached publicly for 60 seconds — so every signed-out visitor saw prices in the header on every page of the site.",
|
|
182
|
+
expectedUiState: "Subtitles read as brand and category, e.g. 'Takara-Tomy · Attack Rings'. Any ₹ in the dropdown while signed out is a FAIL.",
|
|
183
|
+
endResult: "Read-only; nothing persists.",
|
|
184
|
+
},
|
|
185
|
+
};
|