@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,197 @@
|
|
|
1
|
+
/** Decoded pixels. Always RGBA8, row-major, tightly packed. */
|
|
2
|
+
export interface DecodedRaster {
|
|
3
|
+
readonly width: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
/** length === width * height * 4 */
|
|
6
|
+
readonly data: Uint8Array;
|
|
7
|
+
/**
|
|
8
|
+
* Scan resolution, when the source declared one AND an operator confirmed it.
|
|
9
|
+
*
|
|
10
|
+
* Absent is a real answer and must stay representable: five of the nine
|
|
11
|
+
* reference scans declare 72 or 96 dpi, which is a default the encoder wrote
|
|
12
|
+
* rather than a measurement. Millimetre output is WITHHELD when this is
|
|
13
|
+
* undefined — a fabricated mm figure on a cut file is a physical production
|
|
14
|
+
* error, which is a different class of wrong from a missing number.
|
|
15
|
+
*/
|
|
16
|
+
readonly dpi?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface EncodedImage {
|
|
19
|
+
readonly bytes: Uint8Array;
|
|
20
|
+
readonly contentType: string;
|
|
21
|
+
}
|
|
22
|
+
export interface Rect {
|
|
23
|
+
readonly x: number;
|
|
24
|
+
readonly y: number;
|
|
25
|
+
readonly width: number;
|
|
26
|
+
readonly height: number;
|
|
27
|
+
}
|
|
28
|
+
export interface Point {
|
|
29
|
+
readonly x: number;
|
|
30
|
+
readonly y: number;
|
|
31
|
+
}
|
|
32
|
+
/** One cubic Bézier segment; the start point is the previous segment's end. */
|
|
33
|
+
export interface CubicSegment {
|
|
34
|
+
readonly c1: Point;
|
|
35
|
+
readonly c2: Point;
|
|
36
|
+
readonly to: Point;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* One closed outline. Kiss-cut sheets cut the outer boundary only — interior
|
|
40
|
+
* holes are never cut, or the sticker falls apart on the backing — so a part
|
|
41
|
+
* carries exactly one path and `segments` always closes back to `start`.
|
|
42
|
+
*/
|
|
43
|
+
export interface CutPath {
|
|
44
|
+
readonly start: Point;
|
|
45
|
+
readonly segments: readonly CubicSegment[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The pipeline, in order. A failure reports the stage it died in, which is the
|
|
49
|
+
* difference between "it broke" and "the ridge detector found nothing on a
|
|
50
|
+
* halftone scan" — so the union is shared by the runner, the progress channel
|
|
51
|
+
* and the retry panel rather than restated in each.
|
|
52
|
+
*/
|
|
53
|
+
export declare const TRACE_STAGES: readonly ["decode", "prefilter", "ridge", "quantise", "fuse", "flood", "segment", "cluster", "geometry", "parts", "exports"];
|
|
54
|
+
export type TraceStage = (typeof TRACE_STAGES)[number];
|
|
55
|
+
/**
|
|
56
|
+
* `paper` — stickers sit on bare backing; the sheet border is background.
|
|
57
|
+
* `art` — the whole sheet is printed and the only signal is the cut line.
|
|
58
|
+
* `auto` — decide from the border band's colour spread (see trace/paper).
|
|
59
|
+
*
|
|
60
|
+
* Several real sheets are BOTH (black-dranzer is paper on the left, solid red
|
|
61
|
+
* and blue panels on the right), which is why this selects an emphasis rather
|
|
62
|
+
* than switching algorithms: the ridge pass runs regardless, and this only
|
|
63
|
+
* weights how much the paper-flood is trusted.
|
|
64
|
+
*/
|
|
65
|
+
export type ScanType = "auto" | "paper" | "art";
|
|
66
|
+
export type PrecisionTier = "draft" | "standard" | "precise" | "max";
|
|
67
|
+
export type PrefilterKind = "none" | "median" | "bilateral";
|
|
68
|
+
/**
|
|
69
|
+
* Grouped BY STAGE, and that grouping is load-bearing rather than cosmetic: a
|
|
70
|
+
* resumed run may only skip stages whose parameters did not change. Without the
|
|
71
|
+
* grouping, "resume from `parts` with a different ridge threshold" yields a run
|
|
72
|
+
* whose stored artifacts were produced under different parameters than the run
|
|
73
|
+
* records, and nothing anywhere contradicts it.
|
|
74
|
+
*/
|
|
75
|
+
export interface TraceParams {
|
|
76
|
+
readonly tier: PrecisionTier;
|
|
77
|
+
readonly scanType: ScanType;
|
|
78
|
+
/** decode */
|
|
79
|
+
readonly workingLongEdge: number;
|
|
80
|
+
readonly dpi?: number;
|
|
81
|
+
/** prefilter */
|
|
82
|
+
readonly prefilter: PrefilterKind;
|
|
83
|
+
readonly prefilterRadius: number;
|
|
84
|
+
/** ridge */
|
|
85
|
+
readonly ridgeHysteresisLow: number;
|
|
86
|
+
readonly ridgeHysteresisHigh: number;
|
|
87
|
+
readonly ridgeKernelScale: number;
|
|
88
|
+
/** quantise — the second detector channel; see trace/quantise */
|
|
89
|
+
readonly quantiseEnabled: boolean;
|
|
90
|
+
readonly quantiseColours: number;
|
|
91
|
+
readonly quantiseWeight: number;
|
|
92
|
+
/** flood */
|
|
93
|
+
readonly paperTolerance: number;
|
|
94
|
+
readonly seedBandPx: number;
|
|
95
|
+
/** segment */
|
|
96
|
+
readonly minPartAreaMm2: number;
|
|
97
|
+
readonly maxParts: number;
|
|
98
|
+
readonly bridgeMm: number;
|
|
99
|
+
/**
|
|
100
|
+
* Art sheets only. A region boundary below this multiple of the sheet's
|
|
101
|
+
* MEDIAN boundary strength is treated as printing rather than a cut, and the
|
|
102
|
+
* two regions merge. See trace/merge for why this exists at all.
|
|
103
|
+
*/
|
|
104
|
+
readonly mergeStrengthFactor: number;
|
|
105
|
+
/** geometry */
|
|
106
|
+
readonly smoothMm: number;
|
|
107
|
+
readonly borderMm: number;
|
|
108
|
+
readonly bleedMm: number;
|
|
109
|
+
readonly simplifyMm: number;
|
|
110
|
+
readonly cleanMm: number;
|
|
111
|
+
/** cluster */
|
|
112
|
+
readonly clusterGapMm: number;
|
|
113
|
+
}
|
|
114
|
+
export interface PartGeometry {
|
|
115
|
+
/** 1-based, stable within a run; what the admin renames and references. */
|
|
116
|
+
readonly ordinal: number;
|
|
117
|
+
/** Which physical sheet this part belongs to, when one scan holds several. */
|
|
118
|
+
readonly groupIndex: number;
|
|
119
|
+
readonly bboxPx: Rect;
|
|
120
|
+
readonly areaPx: number;
|
|
121
|
+
/** Null whenever DPI is unknown — never a guess. */
|
|
122
|
+
readonly bboxMm: Rect | null;
|
|
123
|
+
readonly areaMm2: number | null;
|
|
124
|
+
/**
|
|
125
|
+
* Narrowest internal width, in mm when DPI is known. Cricut's minimum
|
|
126
|
+
* reliable detail is 0.25in (6mm); a part with a neck below that tears rather
|
|
127
|
+
* than cuts, so the exporter needs this to warn before a sheet is wasted.
|
|
128
|
+
*/
|
|
129
|
+
readonly minFeatureMm: number | null;
|
|
130
|
+
readonly path: CutPath;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* One physical sheet within a scan. A 4948x6955 scan can hold several, and
|
|
134
|
+
* grouping them by large border gaps is what makes the part list navigable
|
|
135
|
+
* rather than one run of sixty.
|
|
136
|
+
*/
|
|
137
|
+
export interface SheetCluster {
|
|
138
|
+
readonly index: number;
|
|
139
|
+
readonly bboxPx: Rect;
|
|
140
|
+
readonly partOrdinals: readonly number[];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reported whether or not the trace succeeded, because the numbers that explain
|
|
144
|
+
* a BAD result are the same ones that explain a good one. `ridgeCoverage` near
|
|
145
|
+
* zero on an `art` scan means the detector found nothing — which is a different
|
|
146
|
+
* remedy from `droppedBelowMinArea` in the hundreds, which means it found noise.
|
|
147
|
+
*/
|
|
148
|
+
export interface TraceDiagnostics {
|
|
149
|
+
readonly workingSize: Rect;
|
|
150
|
+
readonly paperColour: readonly [number, number, number] | null;
|
|
151
|
+
readonly ridgeCoverage: number;
|
|
152
|
+
readonly quantiseCoverage: number;
|
|
153
|
+
readonly fusedCoverage: number;
|
|
154
|
+
readonly componentsFound: number;
|
|
155
|
+
readonly droppedBelowMinArea: number;
|
|
156
|
+
/**
|
|
157
|
+
* Components covering more than MAX_PART_FRACTION of the raster.
|
|
158
|
+
*
|
|
159
|
+
* 🛑 Named for what it counts. It was `droppedTouchingBorder`, which told a
|
|
160
|
+
* reader diagnosing a zero-part scan that a sticker had run off the edge —
|
|
161
|
+
* a different and wrong story. A sheet-sized component means the flood never
|
|
162
|
+
* got IN, and that is the one thing worth knowing at that moment.
|
|
163
|
+
*/
|
|
164
|
+
readonly droppedSheetSized: number;
|
|
165
|
+
/**
|
|
166
|
+
* Fraction of the raster the paper path could flood through.
|
|
167
|
+
*
|
|
168
|
+
* The paper model needs real background; `isAvailable`-style negation has
|
|
169
|
+
* nothing to work with when there is none. Measured across this corpus at
|
|
170
|
+
* `standard`, the three paper scans that segment correctly sit at 27.7%,
|
|
171
|
+
* 51.3% and 74.2%, and the one that returns zero parts sits at **7.8%** — so
|
|
172
|
+
* this is the statistic that separates "this sheet has no stickers" from
|
|
173
|
+
* "this model cannot read this scan", which otherwise look identical.
|
|
174
|
+
*
|
|
175
|
+
* 1 on an art scan, where the question does not arise.
|
|
176
|
+
*/
|
|
177
|
+
readonly backgroundCoverage: number;
|
|
178
|
+
readonly bridgedComponents: number;
|
|
179
|
+
/**
|
|
180
|
+
* Reserved. Art-background sheets WERE unsupported — see the git history for
|
|
181
|
+
* the four approaches that failed and why — and are now handled by the
|
|
182
|
+
* Hessian line filter plus the region merge. Kept as a field rather than
|
|
183
|
+
* deleted because the art path is the one whose accuracy depends on a tuned
|
|
184
|
+
* constant (mergeStrengthFactor), so a future sheet that defeats it needs a
|
|
185
|
+
* way to say so without a schema change.
|
|
186
|
+
*/
|
|
187
|
+
readonly artBackgroundUnsupported: boolean;
|
|
188
|
+
}
|
|
189
|
+
export interface TraceResult {
|
|
190
|
+
readonly parts: readonly PartGeometry[];
|
|
191
|
+
readonly clusters: readonly SheetCluster[];
|
|
192
|
+
readonly diagnostics: TraceDiagnostics;
|
|
193
|
+
/** Pixels per millimetre, or null when DPI is unknown. */
|
|
194
|
+
readonly pxPerMm: number | null;
|
|
195
|
+
/** Scale from working-raster pixels back to the source image. */
|
|
196
|
+
readonly sourceScale: number;
|
|
197
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: A scanned sticker sheet has to become cut-ready geometry, and the same
|
|
3
|
+
* algorithm has to run in two places — a browser tuning it live, and a
|
|
4
|
+
* Firebase Function rendering it at full resolution. Two implementations
|
|
5
|
+
* would drift (CLAUDE.md Root Cause #59/#73), so there is exactly one, and
|
|
6
|
+
* these are the shapes it speaks in.
|
|
7
|
+
* WHAT: Every type the tracing core exchanges with its callers. Deliberately
|
|
8
|
+
* free of any image-codec, Firestore or DOM type: the core takes decoded
|
|
9
|
+
* pixels and returns geometry, and knows nothing about where either came
|
|
10
|
+
* from.
|
|
11
|
+
*
|
|
12
|
+
* Coordinates are a constant source of error here, so the rule is stated once:
|
|
13
|
+
* every geometric value in this module is in WORKING-RASTER PIXELS unless its
|
|
14
|
+
* name ends in `Mm`. The working raster is a downscale of the source (see
|
|
15
|
+
* config.WORKING_LONG_EDGE), so a caller rendering at full resolution scales by
|
|
16
|
+
* `source.width / raster.width`. Carrying vectors rather than masks is what
|
|
17
|
+
* makes that rescale exact.
|
|
18
|
+
*
|
|
19
|
+
* EXPORTS:
|
|
20
|
+
* DecodedRaster, EncodedImage, Rect, Point, CubicSegment, CutPath,
|
|
21
|
+
* TraceStage, TRACE_STAGES, ScanType, PrecisionTier, PrefilterKind,
|
|
22
|
+
* TraceParams, PartGeometry, SheetCluster, TraceResult, TraceDiagnostics
|
|
23
|
+
*
|
|
24
|
+
* @tag domain:sticker-trace
|
|
25
|
+
* @tag layer:shared
|
|
26
|
+
* @tag pattern:none
|
|
27
|
+
* @tag access:isomorphic
|
|
28
|
+
* @tag consumers:trace/*,math/*,export/*,canvas-codec,sharp-codec,run
|
|
29
|
+
* @tag sideEffects:none
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* The pipeline, in order. A failure reports the stage it died in, which is the
|
|
33
|
+
* difference between "it broke" and "the ridge detector found nothing on a
|
|
34
|
+
* halftone scan" — so the union is shared by the runner, the progress channel
|
|
35
|
+
* and the retry panel rather than restated in each.
|
|
36
|
+
*/
|
|
37
|
+
export const TRACE_STAGES = [
|
|
38
|
+
"decode",
|
|
39
|
+
"prefilter",
|
|
40
|
+
"ridge",
|
|
41
|
+
"quantise",
|
|
42
|
+
"fuse",
|
|
43
|
+
"flood",
|
|
44
|
+
"segment",
|
|
45
|
+
"cluster",
|
|
46
|
+
"geometry",
|
|
47
|
+
"parts",
|
|
48
|
+
"exports",
|
|
49
|
+
];
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { LISTING_TYPE_CAPABILITIES } from "./capabilities";
|
|
25
25
|
import { type AvailabilityRow, type UnavailableClause } from "./availability";
|
|
26
|
+
import type { IconKey } from "../../../ui/icons/icon-registry";
|
|
26
27
|
import type { ListingType } from "../../../features/products/types/index";
|
|
27
28
|
import type { SortOption } from "../../../features/products/constants/sieve";
|
|
28
29
|
import { type AvailabilityFilter } from "../../../constants/field-names";
|
|
@@ -107,6 +108,40 @@ export interface ListingTypePlugin {
|
|
|
107
108
|
* reachable only by typing the URL.
|
|
108
109
|
*/
|
|
109
110
|
inGeneralCatalogue: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* May a listing of this type be a MEMBER of a product group?
|
|
113
|
+
*
|
|
114
|
+
* A product group is "a whole plus its parts, buy any mix" — a sticker sheet
|
|
115
|
+
* with its cut-out stickers, a complete Beyblade with its spares. The buyer
|
|
116
|
+
* picks quantities per member through `GroupMemberPicker`.
|
|
117
|
+
*
|
|
118
|
+
* 🛑 `findByGroupId` used to hard-code `["standard", "pre-order"]`, which
|
|
119
|
+
* made this field's answer invisible and wrong: a `stickers` or `art` member
|
|
120
|
+
* was silently dropped from the query, so `ShowGroupSection` saw one member
|
|
121
|
+
* and returned null — the picker was unreachable with nothing erroring. That
|
|
122
|
+
* is Root Cause #58's shape, a union member missing from the one allowlist
|
|
123
|
+
* that gates it.
|
|
124
|
+
*
|
|
125
|
+
* Required, not optional, for the same reason as `inGeneralCatalogue`: a
|
|
126
|
+
* tenth type must not compile until someone decides.
|
|
127
|
+
*
|
|
128
|
+
* False where the type's own pricing or lifecycle makes "pick N of these"
|
|
129
|
+
* meaningless — an auction is one unique lot, a pre-order is a deposit
|
|
130
|
+
* against a future release, a prize-draw sells entries, a classified has no
|
|
131
|
+
* cart, a digital-code is a fungible pool, and a live item is
|
|
132
|
+
* jurisdiction-gated per buyer.
|
|
133
|
+
*/
|
|
134
|
+
canJoinProductGroup: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Leading glyph for this type's chip, tab and dropdown row.
|
|
137
|
+
*
|
|
138
|
+
* 🛑 REQUIRED, like `inGeneralCatalogue` and for the same reason: a tenth
|
|
139
|
+
* listing type must not compile until someone has answered what it looks
|
|
140
|
+
* like. An optional field would be silently omitted and that type would be
|
|
141
|
+
* the one unlabelled row in every picker — the gap being invisible is
|
|
142
|
+
* exactly the failure the required fields on this interface exist to stop.
|
|
143
|
+
*/
|
|
144
|
+
iconKey: IconKey;
|
|
110
145
|
/**
|
|
111
146
|
* Which "Show X" default this type's browse surfaces apply. Since 2026-08-24
|
|
112
147
|
* this drives the LABEL of the availability tab bar's middle tab
|
|
@@ -32,6 +32,8 @@ import * as live from "./live/config.js";
|
|
|
32
32
|
// EMI/art-stickers session — printed-only physical-goods types.
|
|
33
33
|
import * as art from "./art/config.js";
|
|
34
34
|
import * as stickers from "./stickers/config.js";
|
|
35
|
+
// Part Two 2026-10-19 — one component off a disassembled item, sold alone.
|
|
36
|
+
import * as spares from "./spares/config.js";
|
|
35
37
|
import { LISTING_TYPE_CAPABILITIES } from "./capabilities.js";
|
|
36
38
|
import { baseAvailable, } from "./availability.js";
|
|
37
39
|
import { AVAILABILITY_VALUES, } from "../../../constants/field-names.js";
|
|
@@ -48,9 +50,45 @@ export const LISTING_TYPE_REGISTRY = {
|
|
|
48
50
|
live: live.config,
|
|
49
51
|
art: art.config,
|
|
50
52
|
stickers: stickers.config,
|
|
53
|
+
spares: spares.config,
|
|
51
54
|
};
|
|
55
|
+
/*
|
|
56
|
+
* 🛑 TOTAL BY CONSTRUCTION — this was a bare index lookup and it crashed pages.
|
|
57
|
+
*
|
|
58
|
+
* The signature says `(type: ListingType) => ListingTypePlugin`, and for a
|
|
59
|
+
* value the compiler has actually checked that is true. But most callers get
|
|
60
|
+
* their `listingType` from a Firestore document, which crosses into the app
|
|
61
|
+
* as untyped data: a row written before a type existed, a row whose field was
|
|
62
|
+
* stripped by a `z.object()` schema, or a mapper that forgot to copy the
|
|
63
|
+
* field (Root Cause #48) all arrive as `undefined`. The lookup then returned
|
|
64
|
+
* `undefined` while TypeScript still believed it held a plugin, so the very
|
|
65
|
+
* next property access threw.
|
|
66
|
+
*
|
|
67
|
+
* Measured in production over 24h: 18 server-side crashes reading
|
|
68
|
+
* `.detailRoute` of undefined, across FIVE route families
|
|
69
|
+
* (`products/[slug]`, `classified/[slug]`, `pre-orders/[id]`,
|
|
70
|
+
* `digital-codes/[slug]`, `prize-draws/[slug]`), plus client-side copies of
|
|
71
|
+
* the same throw and one on `.badge` from `franchise/[slug]`. Each one is a
|
|
72
|
+
* whole detail page replaced by an error boundary.
|
|
73
|
+
*
|
|
74
|
+
* Falling back to `standard` is right because it is what the rest of the
|
|
75
|
+
* codebase ALREADY assumes: `normalizeListingType` is defined as
|
|
76
|
+
* `p.listingType ?? "standard"`, so a missing field is a standard listing
|
|
77
|
+
* everywhere else. Callers that pass through it were always safe; this makes
|
|
78
|
+
* the ones that do not safe as well.
|
|
79
|
+
*
|
|
80
|
+
* 🛑 It WARNS rather than falling back silently. A silent default is how a
|
|
81
|
+
* tenth listing type goes missing from the catalogue for weeks (Root Cause
|
|
82
|
+
* #58, where an unmapped alias returned "" and the filter simply vanished).
|
|
83
|
+
* The page renders; the gap is still reported.
|
|
84
|
+
*/
|
|
52
85
|
export function pluginFor(type) {
|
|
53
|
-
|
|
86
|
+
const plugin = LISTING_TYPE_REGISTRY[type];
|
|
87
|
+
if (plugin)
|
|
88
|
+
return plugin;
|
|
89
|
+
console.warn(`[listing-types] no plugin for listingType ${JSON.stringify(type)} — ` +
|
|
90
|
+
`falling back to "standard". Expected one of: ${Object.keys(LISTING_TYPE_REGISTRY).join(", ")}.`);
|
|
91
|
+
return LISTING_TYPE_REGISTRY.standard;
|
|
54
92
|
}
|
|
55
93
|
/**
|
|
56
94
|
* Infer a listing type from a product slug/id by matching its registered
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "art";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: typeof alwaysAvailable;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -22,6 +22,9 @@ export const config = {
|
|
|
22
22
|
browseRoute: String(ROUTES.PUBLIC.ART),
|
|
23
23
|
// /art ("Art & Stickers") is in MAIN_NAV_ITEMS and spans art + stickers.
|
|
24
24
|
inGeneralCatalogue: false,
|
|
25
|
+
// a print can be one of a set, and a sheet of art can be split
|
|
26
|
+
canJoinProductGroup: true,
|
|
27
|
+
iconKey: "art",
|
|
25
28
|
hideDefault: "sold",
|
|
26
29
|
// Runs out rather than ending — no time dimension, so the shared
|
|
27
30
|
// stock-only rules are the whole story for this type.
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "bid";
|
|
21
23
|
hideDefault: "ended";
|
|
22
24
|
isAvailable: (row: AvailabilityRow, now: Date) => boolean;
|
|
23
25
|
unavailableClauses: ({
|
|
@@ -22,6 +22,9 @@ export const config = {
|
|
|
22
22
|
// /auctions is in MAIN_NAV_ITEMS. An auction card in the general grid renders
|
|
23
23
|
// Buy-Now chrome rather than bid affordances, so it belongs on its own page.
|
|
24
24
|
inGeneralCatalogue: false,
|
|
25
|
+
// one unique lot, won by one bidder — there is no "pick 3 of these"
|
|
26
|
+
canJoinProductGroup: false,
|
|
27
|
+
iconKey: "bid",
|
|
25
28
|
// An auction is never "sold out" — it ends. Hiding by stock would hide
|
|
26
29
|
// every live auction, since auctions don't carry meaningful stock.
|
|
27
30
|
hideDefault: "ended",
|
|
@@ -67,8 +67,32 @@ export function num(value) {
|
|
|
67
67
|
* and must not vanish from the default scope.
|
|
68
68
|
*/
|
|
69
69
|
export function baseAvailable(row) {
|
|
70
|
+
/*
|
|
71
|
+
* `isSold` stays the kill switch and is tested FIRST, ahead of the
|
|
72
|
+
* made-to-order bypass. A seller who marks a listing sold has made a
|
|
73
|
+
* statement about the listing, not about its stock level, and it must hold
|
|
74
|
+
* whatever the production model is — otherwise a made-to-order row could
|
|
75
|
+
* never be retired at all.
|
|
76
|
+
*/
|
|
70
77
|
if (row[PRODUCT_FIELDS.IS_SOLD] === true)
|
|
71
78
|
return false;
|
|
79
|
+
/*
|
|
80
|
+
* 🛑 Made to order: stock does not gate availability, so return before the
|
|
81
|
+
* two quantity checks.
|
|
82
|
+
*
|
|
83
|
+
* This ONE branch fixes `isListingRowAvailable`, the dense `available`
|
|
84
|
+
* scope, all three homepage `getFeatured*` helpers and related-items at
|
|
85
|
+
* once, because every one of them resolves to this function — which is the
|
|
86
|
+
* entire reason the four disagreeing copies were collapsed into it (Root
|
|
87
|
+
* Cause #73). It also correctly keeps a made-to-order row OUT of "Sold &
|
|
88
|
+
* Ended": that scope is the complement of this predicate.
|
|
89
|
+
*
|
|
90
|
+
* The counter-case is the point of the flag being per-listing: a finite
|
|
91
|
+
* spare at quantity 0 is genuinely gone and still falls through to the
|
|
92
|
+
* checks below.
|
|
93
|
+
*/
|
|
94
|
+
if (row[PRODUCT_FIELDS.MADE_TO_ORDER] === true)
|
|
95
|
+
return true;
|
|
72
96
|
const available = num(row[PRODUCT_FIELDS.AVAILABLE_QUANTITY]);
|
|
73
97
|
if (available !== null && available <= 0)
|
|
74
98
|
return false;
|
|
@@ -94,6 +118,30 @@ export const STOCK_ONLY_UNAVAILABLE_CLAUSES = [
|
|
|
94
118
|
{ field: PRODUCT_FIELDS.AVAILABLE_QUANTITY, op: "eq", value: 0 },
|
|
95
119
|
{ field: PRODUCT_FIELDS.IS_SOLD, op: "eq", value: true },
|
|
96
120
|
];
|
|
121
|
+
/*
|
|
122
|
+
* 🛑 WHY `madeToOrder` IS NOT A CLAUSE HERE, written down so nobody
|
|
123
|
+
* "optimises" it into a FAILED_PRECONDITION.
|
|
124
|
+
*
|
|
125
|
+
* A made-to-order row at quantity 0 still matches the first clause above, so it
|
|
126
|
+
* is fetched by the "Sold & Ended" query and then dropped in memory by
|
|
127
|
+
* `baseAvailable`. That is wasteful and it is CORRECT.
|
|
128
|
+
*
|
|
129
|
+
* The apparent fix — adding `madeToOrder != true` to narrow the query — cannot
|
|
130
|
+
* be expressed: `!=` is an INEQUALITY, so `UnavailableClause` would require it
|
|
131
|
+
* to name its own `sortField`, and Firestore implicitly appends an
|
|
132
|
+
* inequality's field to the `orderBy`. Pairing it with the scope's real sort
|
|
133
|
+
* demands a composite index in an order nobody declares (Root Cause #59), and
|
|
134
|
+
* every caller wraps the query in a guard that turns the failure into an empty
|
|
135
|
+
* page rather than an error.
|
|
136
|
+
*
|
|
137
|
+
* Worse, a Firestore inequality EXCLUDES every document that lacks the field —
|
|
138
|
+
* which is every product written before this flag existed, i.e. all of them.
|
|
139
|
+
* `madeToOrder != true` would return almost nothing. Same trap as the
|
|
140
|
+
* `isTestData` one CLAUDE.md documents.
|
|
141
|
+
*
|
|
142
|
+
* The in-memory drop is bounded by the page size, so the cost is a few rows
|
|
143
|
+
* read and discarded. Leave it.
|
|
144
|
+
*/
|
|
97
145
|
/**
|
|
98
146
|
* `isAvailable` for a type with no rule beyond `baseAvailable`. Named rather
|
|
99
147
|
* than an inline `() => true` so the five configs that use it read as
|
|
@@ -11,6 +11,25 @@
|
|
|
11
11
|
* inside the per-type folder (X2 plugin layout).
|
|
12
12
|
*/
|
|
13
13
|
export const LISTING_TYPE_CAPABILITIES = {
|
|
14
|
+
/*
|
|
15
|
+
* Standard physical-goods behaviour, with ONE deliberate difference:
|
|
16
|
+
* `canMakeOffer` is true.
|
|
17
|
+
*
|
|
18
|
+
* A loose part has no catalogue price — what a spare attack ring is worth
|
|
19
|
+
* depends on the colour, the wear and how badly the buyer needs that exact
|
|
20
|
+
* one. It is the archetypal haggled item here, which is the whole reason the
|
|
21
|
+
* seller is listing it instead of leaving it in a drawer, so the type that
|
|
22
|
+
* most needs Make-an-Offer is this one.
|
|
23
|
+
*/
|
|
24
|
+
spares: {
|
|
25
|
+
canAddToCart: true,
|
|
26
|
+
canBid: false,
|
|
27
|
+
supportsShipping: true,
|
|
28
|
+
requiresVendorVerified: false,
|
|
29
|
+
requiresJurisdictionCheck: false,
|
|
30
|
+
hasInstantFulfillment: false,
|
|
31
|
+
canMakeOffer: true,
|
|
32
|
+
},
|
|
14
33
|
standard: {
|
|
15
34
|
canAddToCart: true,
|
|
16
35
|
canBid: false,
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "deals";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: typeof alwaysAvailable;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -21,6 +21,9 @@ export const config = {
|
|
|
21
21
|
// Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
|
|
22
22
|
// discovery path. Dropping it here would orphan the type (Root Cause #61).
|
|
23
23
|
inGeneralCatalogue: true,
|
|
24
|
+
// no cart at all (cartLine "blocked") — the purchase path is contact-seller
|
|
25
|
+
canJoinProductGroup: false,
|
|
26
|
+
iconKey: "deals",
|
|
24
27
|
hideDefault: "sold",
|
|
25
28
|
// Runs out rather than ending — no time dimension, so the shared
|
|
26
29
|
// stock-only rules are the whole story for this type.
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "digitalCode";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: (row: AvailabilityRow) => boolean;
|
|
23
25
|
unavailableClauses: ({
|
|
@@ -34,6 +34,9 @@ export const config = {
|
|
|
34
34
|
// Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
|
|
35
35
|
// discovery path. Dropping it here would orphan the type (Root Cause #61).
|
|
36
36
|
inGeneralCatalogue: true,
|
|
37
|
+
// a fungible pool item; "which 3 of these codes" is not a question a buyer has
|
|
38
|
+
canJoinProductGroup: false,
|
|
39
|
+
iconKey: "digitalCode",
|
|
37
40
|
// "Sold out" for a code pool means codesAvailable hit 0. That was ASSUMED to
|
|
38
41
|
// be mirrored by stockQuantity, and it isn't — seed and production rows exist
|
|
39
42
|
// with a drained pool and non-zero stock. The pool count is authoritative.
|
|
@@ -34,6 +34,13 @@ interface FeatureFlagSnapshot {
|
|
|
34
34
|
export declare function isListingTypeEnabled(type: ListingType, settings: FeatureFlagSnapshot | null | undefined): boolean;
|
|
35
35
|
export declare function isCategoryTypeEnabled(type: CategoryType, settings: FeatureFlagSnapshot | null | undefined): boolean;
|
|
36
36
|
export declare const ALL_LISTING_TYPES: ListingType[];
|
|
37
|
+
/**
|
|
38
|
+
* Narrow an untrusted string — a `?listingType=` param, a form value — to a
|
|
39
|
+
* real member of the union. Backed by the same `Record<ListingType, true>` as
|
|
40
|
+
* `ALL_LISTING_TYPES`, so it cannot fall behind the union the way a
|
|
41
|
+
* hand-written list would (Root Cause #61).
|
|
42
|
+
*/
|
|
43
|
+
export declare function isListingType(value: unknown): value is ListingType;
|
|
37
44
|
/** Pull the full list of enabled listing types in canonical iteration order. */
|
|
38
45
|
export declare function enabledListingTypes(settings: FeatureFlagSnapshot | null | undefined): ListingType[];
|
|
39
46
|
export declare function enabledCategoryTypes(settings: FeatureFlagSnapshot | null | undefined): CategoryType[];
|
|
@@ -44,6 +44,7 @@ export function isCategoryTypeEnabled(type, settings) {
|
|
|
44
44
|
*/
|
|
45
45
|
const ALL_LISTING_TYPES_MAP = {
|
|
46
46
|
standard: true,
|
|
47
|
+
spares: true,
|
|
47
48
|
auction: true,
|
|
48
49
|
"pre-order": true,
|
|
49
50
|
"prize-draw": true,
|
|
@@ -54,6 +55,15 @@ const ALL_LISTING_TYPES_MAP = {
|
|
|
54
55
|
stickers: true,
|
|
55
56
|
};
|
|
56
57
|
export const ALL_LISTING_TYPES = Object.keys(ALL_LISTING_TYPES_MAP);
|
|
58
|
+
/**
|
|
59
|
+
* Narrow an untrusted string — a `?listingType=` param, a form value — to a
|
|
60
|
+
* real member of the union. Backed by the same `Record<ListingType, true>` as
|
|
61
|
+
* `ALL_LISTING_TYPES`, so it cannot fall behind the union the way a
|
|
62
|
+
* hand-written list would (Root Cause #61).
|
|
63
|
+
*/
|
|
64
|
+
export function isListingType(value) {
|
|
65
|
+
return typeof value === "string" && value in ALL_LISTING_TYPES_MAP;
|
|
66
|
+
}
|
|
57
67
|
/** Pull the full list of enabled listing types in canonical iteration order. */
|
|
58
68
|
export function enabledListingTypes(settings) {
|
|
59
69
|
return ALL_LISTING_TYPES.filter((t) => isListingTypeEnabled(t, settings));
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "live";
|
|
21
23
|
hideDefault: "sold";
|
|
22
24
|
isAvailable: typeof alwaysAvailable;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -21,6 +21,9 @@ export const config = {
|
|
|
21
21
|
// Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
|
|
22
22
|
// discovery path. Dropping it here would orphan the type (Root Cause #61).
|
|
23
23
|
inGeneralCatalogue: true,
|
|
24
|
+
// jurisdiction-gated per buyer and vendor-verified — not mixable into a group line
|
|
25
|
+
canJoinProductGroup: false,
|
|
26
|
+
iconKey: "live",
|
|
24
27
|
hideDefault: "sold",
|
|
25
28
|
// Runs out rather than ending — no time dimension, so the shared
|
|
26
29
|
// stock-only rules are the whole story for this type.
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "preOrder";
|
|
21
23
|
hideDefault: "closed";
|
|
22
24
|
isAvailable: (row: AvailabilityRow) => boolean;
|
|
23
25
|
unavailableClauses: readonly import("../availability").UnavailableClause[];
|
|
@@ -21,6 +21,9 @@ export const config = {
|
|
|
21
21
|
browseRoute: String(ROUTES.PUBLIC.PRE_ORDERS),
|
|
22
22
|
// /pre-orders is in MAIN_NAV_ITEMS.
|
|
23
23
|
inGeneralCatalogue: false,
|
|
24
|
+
// a deposit against a future release; members would ship at different times
|
|
25
|
+
canJoinProductGroup: false,
|
|
26
|
+
iconKey: "preOrder",
|
|
24
27
|
hideDefault: "closed",
|
|
25
28
|
// A pre-order closes when its allocation fills, NOT when its delivery date
|
|
26
29
|
// passes — a shipped-soon pre-order is still orderable. `preOrderClosed`
|
|
@@ -18,6 +18,8 @@ export declare const config: {
|
|
|
18
18
|
chipLabel: string;
|
|
19
19
|
browseRoute: string;
|
|
20
20
|
inGeneralCatalogue: boolean;
|
|
21
|
+
canJoinProductGroup: boolean;
|
|
22
|
+
iconKey: "prizeDraw";
|
|
21
23
|
hideDefault: "closed";
|
|
22
24
|
isAvailable: (row: AvailabilityRow) => boolean;
|
|
23
25
|
unavailableClauses: ({
|
|
@@ -21,6 +21,9 @@ export const config = {
|
|
|
21
21
|
// /prize-draws is in MAIN_NAV_ITEMS. Entry-based pricing reads wrong beside
|
|
22
22
|
// ordinary unit prices in the general grid.
|
|
23
23
|
inGeneralCatalogue: false,
|
|
24
|
+
// sells ENTRIES at a fixed price; a group line would blur what was entered
|
|
25
|
+
canJoinProductGroup: false,
|
|
26
|
+
iconKey: "prizeDraw",
|
|
24
27
|
hideDefault: "closed",
|
|
25
28
|
// `prizeRevealStatus`, NOT remaining entries: a draw can close with slots
|
|
26
29
|
// unsold (the seller ends it early, or the reveal window lapses), and it can
|