@mohasinac/appkit 4.52.4 → 4.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +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/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.js +10 -3
- package/dist/_internal/server/features/checkout/data.d.ts +15 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- 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 +4 -0
- 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/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/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 +1 -1
- 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 +80 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +174 -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.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 +141 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +279 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +135 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +282 -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/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/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 +11 -0
- package/dist/_internal/shared/listing-types/art/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/art/config.js +1 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/auction/config.js +1 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/config.js +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +1 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +9 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/config.js +1 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +1 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/standard/config.js +1 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +1 -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 +65 -0
- package/dist/_internal/shared/search/match.js +263 -0
- package/dist/client.d.ts +8 -7
- package/dist/client.js +12 -5
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +68 -0
- package/dist/constants/api-endpoints.js +32 -0
- package/dist/constants/field-names.d.ts +7 -1
- package/dist/constants/field-names.js +36 -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/account/api/[userId]/addresses/route.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/addresses/repository/addresses.repository.d.ts +17 -6
- package/dist/features/addresses/repository/addresses.repository.js +65 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- 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 +0 -1
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- 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 +24 -37
- 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/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 +1 -1
- 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/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 +62 -1
- 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/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 +33 -7
- package/dist/features/auth/repository/user.repository.js +100 -15
- package/dist/features/auth/schemas/firestore.d.ts +63 -12
- package/dist/features/auth/schemas/firestore.js +11 -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/cart/api/route.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/route.js +10 -10
- package/dist/features/categories/components/CategoryDetailPageView.js +35 -5
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/repository/categories.repository.d.ts +1 -0
- package/dist/features/categories/repository/categories.repository.js +31 -1
- package/dist/features/categories/schemas/index.d.ts +2 -2
- package/dist/features/categories/utils/taxonomy-visual.d.ts +21 -0
- package/dist/features/categories/utils/taxonomy-visual.js +58 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- 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/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/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/GroupedListingEditorView.js +17 -2
- 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/api/route.js +2 -2
- package/dist/features/homepage/api/sections/route.js +1 -1
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/index.d.ts +0 -2
- package/dist/features/homepage/components/index.js +0 -1
- package/dist/features/homepage/repository/homepage.repository.js +1 -1
- package/dist/features/homepage/schemas/firestore.d.ts +6 -0
- package/dist/features/homepage/schemas/index.d.ts +10 -10
- package/dist/features/layout/AppLayoutShell.d.ts +12 -3
- 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/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- 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.d.ts +1 -3
- package/dist/features/layout/TitleBarLayout.js +3 -4
- 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/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/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +19 -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/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +23 -6
- package/dist/features/payments/repository/payout.repository.js +63 -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/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/ProductDetailPageView.js +2 -1
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- 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/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.js +13 -1
- package/dist/features/products/schemas/index.d.ts +2 -2
- package/dist/features/products/types/index.d.ts +1 -1
- 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/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/search/components/SearchResultsPageView.js +2 -1
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/repository/search.repository.js +2 -2
- 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.js +9 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +0 -1
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.js +0 -1
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +0 -4
- package/dist/features/seller/components/index.js +0 -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/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 +248 -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/StoreNavTabs.js +17 -2
- package/dist/features/stores/manifest.js +8 -4
- 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/content-discovery__authenticity-checker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +243 -0
- 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/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/design-ux__header-controls-and-messages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +85 -0
- package/dist/features/tester/seed-data/authored/index.js +10 -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/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +283 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +235 -22
- package/dist/index.d.ts +10 -23
- package/dist/index.js +27 -19
- 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 +4 -4
- package/dist/next/routing/route-map.js +25 -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 +11 -9
- package/dist/providers/db-firebase/base.repository.js +19 -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 +13 -20
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +5 -2
- package/dist/security/index.js +16 -2
- 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/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 +34 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +1277 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- 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/homepage-sections-seed-data.js +39 -23
- package/dist/seed/index.d.ts +1 -0
- package/dist/seed/index.js +1 -0
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- 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/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- 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 +1 -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.js +5 -1
- package/dist/server.d.ts +18 -3
- package/dist/server.js +59 -3
- package/dist/styles.css +237 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +14 -8
- 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/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -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 +1 -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 +6 -0
- package/dist/ui/icons/icon-registry.js +17 -1
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -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/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/seed-cli.mjs +3 -0
- 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/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- 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/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: One of the nine reference scans is halftone-screened, and its cut-line
|
|
3
|
+
* signal measured only ~3x the scan noise against 10-20x on the others.
|
|
4
|
+
* The noise there is not random — it is a printing rosette, a regular
|
|
5
|
+
* high-frequency pattern — and a ridge detector run on it finds the
|
|
6
|
+
* rosette far more enthusiastically than the cut line.
|
|
7
|
+
* WHAT: Two prefilters that suppress that pattern without blurring the cut line
|
|
8
|
+
* away with it.
|
|
9
|
+
*
|
|
10
|
+
* 🛑 Ordering is load-bearing: the prefilter must run BEFORE quantisation. A
|
|
11
|
+
* halftone rosette posterises into hundreds of speckle regions, and the colour
|
|
12
|
+
* channel then contributes noise rather than signal — making the fused map
|
|
13
|
+
* worse than not having the second channel at all.
|
|
14
|
+
*
|
|
15
|
+
* EXPORTS: toLuminance, medianFilter, bilateralFilter, applyPrefilter
|
|
16
|
+
*
|
|
17
|
+
* @tag domain:sticker-trace
|
|
18
|
+
* @tag layer:shared
|
|
19
|
+
* @tag pattern:none
|
|
20
|
+
* @tag access:isomorphic
|
|
21
|
+
* @tag consumers:ridge,quantise,segment
|
|
22
|
+
* @tag sideEffects:none
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Rec. 601 luma. The ridge detector works on a single channel because the
|
|
26
|
+
* emboss signature is a brightness doublet — it appears in all three channels
|
|
27
|
+
* at once, so running the detector three times would triple the cost to find
|
|
28
|
+
* the same edge.
|
|
29
|
+
*/
|
|
30
|
+
export function toLuminance(raster) {
|
|
31
|
+
const { width, height, data } = raster;
|
|
32
|
+
const out = new Float32Array(width * height);
|
|
33
|
+
for (let i = 0, p = 0; i < out.length; i++, p += 4) {
|
|
34
|
+
out[i] = 0.299 * data[p] + 0.587 * data[p + 1] + 0.114 * data[p + 2];
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Median over a (2r+1)^2 window.
|
|
40
|
+
*
|
|
41
|
+
* Median rather than mean because a rosette is an impulse pattern: the mean of
|
|
42
|
+
* a dot and its surround is a grey that still carries the dot's energy, while
|
|
43
|
+
* the median discards it outright. The cut line survives because it is a
|
|
44
|
+
* CONTINUOUS feature — more than half the window sits on it when the window is
|
|
45
|
+
* centred there — which is precisely the property a median preserves and a
|
|
46
|
+
* blur does not.
|
|
47
|
+
*/
|
|
48
|
+
export function medianFilter(src, width, height, radius) {
|
|
49
|
+
if (radius < 1)
|
|
50
|
+
return src.slice();
|
|
51
|
+
const out = new Float32Array(src.length);
|
|
52
|
+
const size = (radius * 2 + 1) ** 2;
|
|
53
|
+
const buf = new Float32Array(size);
|
|
54
|
+
for (let y = 0; y < height; y++) {
|
|
55
|
+
for (let x = 0; x < width; x++) {
|
|
56
|
+
let n = 0;
|
|
57
|
+
for (let dy = -radius; dy <= radius; dy++) {
|
|
58
|
+
const sy = Math.min(height - 1, Math.max(0, y + dy));
|
|
59
|
+
for (let dx = -radius; dx <= radius; dx++) {
|
|
60
|
+
const sx = Math.min(width - 1, Math.max(0, x + dx));
|
|
61
|
+
buf[n++] = src[sy * width + sx];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const slice = buf.subarray(0, n);
|
|
65
|
+
slice.sort();
|
|
66
|
+
out[y * width + x] = slice[n >> 1];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Edge-preserving smoothing: weight neighbours by both distance and intensity
|
|
73
|
+
* similarity.
|
|
74
|
+
*
|
|
75
|
+
* This is the `precise`/`max` choice because it suppresses the rosette like a
|
|
76
|
+
* blur while refusing to average across a step — and the cut line IS a step.
|
|
77
|
+
* A plain Gaussian at the radius needed to kill a rosette also halves the
|
|
78
|
+
* doublet amplitude, which on the ~3x scan is the whole signal.
|
|
79
|
+
*/
|
|
80
|
+
export function bilateralFilter(src, width, height, radius, sigmaSpace = radius, sigmaRange = 12) {
|
|
81
|
+
if (radius < 1)
|
|
82
|
+
return src.slice();
|
|
83
|
+
const out = new Float32Array(src.length);
|
|
84
|
+
const spatial = new Float32Array((radius * 2 + 1) ** 2);
|
|
85
|
+
const ds = 2 * sigmaSpace * sigmaSpace;
|
|
86
|
+
let k = 0;
|
|
87
|
+
for (let dy = -radius; dy <= radius; dy++) {
|
|
88
|
+
for (let dx = -radius; dx <= radius; dx++) {
|
|
89
|
+
spatial[k++] = Math.exp(-(dx * dx + dy * dy) / ds);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const dr = 2 * sigmaRange * sigmaRange;
|
|
93
|
+
for (let y = 0; y < height; y++) {
|
|
94
|
+
for (let x = 0; x < width; x++) {
|
|
95
|
+
const centre = src[y * width + x];
|
|
96
|
+
let acc = 0;
|
|
97
|
+
let weight = 0;
|
|
98
|
+
let w = 0;
|
|
99
|
+
for (let dy = -radius; dy <= radius; dy++) {
|
|
100
|
+
const sy = Math.min(height - 1, Math.max(0, y + dy));
|
|
101
|
+
for (let dx = -radius; dx <= radius; dx++) {
|
|
102
|
+
const sx = Math.min(width - 1, Math.max(0, x + dx));
|
|
103
|
+
const v = src[sy * width + sx];
|
|
104
|
+
const diff = v - centre;
|
|
105
|
+
const g = spatial[w++] * Math.exp(-(diff * diff) / dr);
|
|
106
|
+
acc += v * g;
|
|
107
|
+
weight += g;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
out[y * width + x] = weight > 0 ? acc / weight : centre;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
export function applyPrefilter(luma, width, height, kind, radius) {
|
|
116
|
+
switch (kind) {
|
|
117
|
+
case "median":
|
|
118
|
+
return medianFilter(luma, width, height, radius);
|
|
119
|
+
case "bilateral":
|
|
120
|
+
return bilateralFilter(luma, width, height, radius);
|
|
121
|
+
case "none":
|
|
122
|
+
default:
|
|
123
|
+
return luma;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DecodedRaster } from "../types";
|
|
2
|
+
export interface QuantiseResult {
|
|
3
|
+
/** Palette index per pixel. */
|
|
4
|
+
readonly labels: Int32Array;
|
|
5
|
+
/** 1 where the label differs from a 4-neighbour — i.e. a region boundary. */
|
|
6
|
+
readonly boundary: Uint8Array;
|
|
7
|
+
readonly paletteSize: number;
|
|
8
|
+
readonly coverage: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function quantiseBoundaries(raster: DecodedRaster, colours: number): QuantiseResult;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The ridge detector reads ONE signal — the emboss doublet a kiss cut
|
|
3
|
+
* leaves in the sheet. On the halftone-screened scan that signal measured
|
|
4
|
+
* only ~3x the noise, against 10-20x everywhere else. A second, INDEPENDENT
|
|
5
|
+
* signal is what rescues that case, and colour is independent: it fails
|
|
6
|
+
* exactly where the ridge succeeds and succeeds exactly where it fails.
|
|
7
|
+
*
|
|
8
|
+
* torch pegases (red on red) ridge +22 strong colour: nothing
|
|
9
|
+
* posiedon (yellow/yellow) ridge -40/+27 colour: nothing
|
|
10
|
+
* Spark_dragoon (halftone) ridge ~3x MARGINAL colour: strong
|
|
11
|
+
* (green panel, yellow rect, purple grad)
|
|
12
|
+
*
|
|
13
|
+
* WHAT: Posterise to N colours, then mark pixels where the posterised label
|
|
14
|
+
* changes — the boundaries between flat colour regions.
|
|
15
|
+
*
|
|
16
|
+
* 🛑 It must run AFTER the prefilter. A halftone rosette posterises into
|
|
17
|
+
* hundreds of speckle regions, and every speckle edge becomes a boundary — so
|
|
18
|
+
* un-prefiltered, this channel contributes noise rather than signal and makes
|
|
19
|
+
* the fused map WORSE than the ridge alone. That ordering is a named check in
|
|
20
|
+
* the corpus harness rather than a comment anyone can drift from.
|
|
21
|
+
*
|
|
22
|
+
* EXPORTS: QuantiseResult, quantiseBoundaries
|
|
23
|
+
*
|
|
24
|
+
* @tag domain:sticker-trace
|
|
25
|
+
* @tag layer:shared
|
|
26
|
+
* @tag pattern:none
|
|
27
|
+
* @tag access:isomorphic
|
|
28
|
+
* @tag consumers:fuse,segment
|
|
29
|
+
* @tag sideEffects:none
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Median-cut palette selection.
|
|
33
|
+
*
|
|
34
|
+
* k-means would fit the colours better and is the obvious reach, but it is
|
|
35
|
+
* iterative and its result depends on initialisation — so the same sheet traced
|
|
36
|
+
* twice could posterise differently and move a cut line. Median cut is
|
|
37
|
+
* deterministic and single-pass, which matters more here than palette fidelity:
|
|
38
|
+
* the palette is never rendered, only differenced.
|
|
39
|
+
*/
|
|
40
|
+
function medianCutPalette(data, sampleStride, targetColours) {
|
|
41
|
+
const pixels = [];
|
|
42
|
+
for (let p = 0; p < data.length; p += 4 * sampleStride) {
|
|
43
|
+
pixels.push([data[p], data[p + 1], data[p + 2]]);
|
|
44
|
+
}
|
|
45
|
+
if (pixels.length === 0)
|
|
46
|
+
return [[0, 0, 0]];
|
|
47
|
+
let buckets = [pixels];
|
|
48
|
+
while (buckets.length < targetColours) {
|
|
49
|
+
// Split the bucket with the widest channel range — the one carrying the
|
|
50
|
+
// most distinguishable colour, rather than simply the most pixels.
|
|
51
|
+
let widest = -1;
|
|
52
|
+
let widestRange = -1;
|
|
53
|
+
let widestChannel = 0;
|
|
54
|
+
for (let i = 0; i < buckets.length; i++) {
|
|
55
|
+
const bucket = buckets[i];
|
|
56
|
+
if (bucket.length < 2)
|
|
57
|
+
continue;
|
|
58
|
+
for (let c = 0; c < 3; c++) {
|
|
59
|
+
let min = 255;
|
|
60
|
+
let max = 0;
|
|
61
|
+
for (const px of bucket) {
|
|
62
|
+
const v = px[c];
|
|
63
|
+
if (v < min)
|
|
64
|
+
min = v;
|
|
65
|
+
if (v > max)
|
|
66
|
+
max = v;
|
|
67
|
+
}
|
|
68
|
+
if (max - min > widestRange) {
|
|
69
|
+
widestRange = max - min;
|
|
70
|
+
widest = i;
|
|
71
|
+
widestChannel = c;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (widest < 0 || widestRange <= 0)
|
|
76
|
+
break;
|
|
77
|
+
const bucket = buckets[widest];
|
|
78
|
+
bucket.sort((a, b) => a[widestChannel] - b[widestChannel]);
|
|
79
|
+
const mid = bucket.length >> 1;
|
|
80
|
+
buckets = [
|
|
81
|
+
...buckets.slice(0, widest),
|
|
82
|
+
bucket.slice(0, mid),
|
|
83
|
+
bucket.slice(mid),
|
|
84
|
+
...buckets.slice(widest + 1),
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
return buckets
|
|
88
|
+
.filter((b) => b.length > 0)
|
|
89
|
+
.map((b) => {
|
|
90
|
+
let r = 0;
|
|
91
|
+
let g = 0;
|
|
92
|
+
let bl = 0;
|
|
93
|
+
for (const px of b) {
|
|
94
|
+
r += px[0];
|
|
95
|
+
g += px[1];
|
|
96
|
+
bl += px[2];
|
|
97
|
+
}
|
|
98
|
+
return [r / b.length, g / b.length, bl / b.length];
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export function quantiseBoundaries(raster, colours) {
|
|
102
|
+
const { width, height, data } = raster;
|
|
103
|
+
// Sample at most ~40k pixels to build the palette. Median cut sorts within
|
|
104
|
+
// buckets, so feeding it 9 million pixels costs far more than the palette's
|
|
105
|
+
// extra precision is worth when the output is a boolean boundary map.
|
|
106
|
+
const stride = Math.max(1, Math.floor((width * height) / 40000));
|
|
107
|
+
const palette = medianCutPalette(data, stride, colours);
|
|
108
|
+
const labels = new Int32Array(width * height);
|
|
109
|
+
for (let i = 0, p = 0; i < labels.length; i++, p += 4) {
|
|
110
|
+
const r = data[p];
|
|
111
|
+
const g = data[p + 1];
|
|
112
|
+
const b = data[p + 2];
|
|
113
|
+
let best = 0;
|
|
114
|
+
let bestDist = Infinity;
|
|
115
|
+
for (let k = 0; k < palette.length; k++) {
|
|
116
|
+
const c = palette[k];
|
|
117
|
+
const dr = r - c[0];
|
|
118
|
+
const dg = g - c[1];
|
|
119
|
+
const db = b - c[2];
|
|
120
|
+
const d = 2 * dr * dr + 4 * dg * dg + 3 * db * db;
|
|
121
|
+
if (d < bestDist) {
|
|
122
|
+
bestDist = d;
|
|
123
|
+
best = k;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
labels[i] = best;
|
|
127
|
+
}
|
|
128
|
+
const boundary = new Uint8Array(width * height);
|
|
129
|
+
let set = 0;
|
|
130
|
+
for (let y = 0; y < height; y++) {
|
|
131
|
+
for (let x = 0; x < width; x++) {
|
|
132
|
+
const i = y * width + x;
|
|
133
|
+
const l = labels[i];
|
|
134
|
+
// 4-neighbour only. An 8-neighbour test marks both sides of every
|
|
135
|
+
// diagonal step, doubling the width of a boundary that is supposed to be
|
|
136
|
+
// a hairline and smearing the fused barrier.
|
|
137
|
+
const differs = (x > 0 && labels[i - 1] !== l) ||
|
|
138
|
+
(x < width - 1 && labels[i + 1] !== l) ||
|
|
139
|
+
(y > 0 && labels[i - width] !== l) ||
|
|
140
|
+
(y < height - 1 && labels[i + width] !== l);
|
|
141
|
+
if (differs) {
|
|
142
|
+
boundary[i] = 1;
|
|
143
|
+
set++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
labels,
|
|
149
|
+
boundary,
|
|
150
|
+
paletteSize: palette.length,
|
|
151
|
+
coverage: set / boundary.length,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export interface RidgeResult {
|
|
2
|
+
/** Continuous response, roughly in luminance units. */
|
|
3
|
+
readonly response: Float32Array;
|
|
4
|
+
/** 1 where a ridge survived hysteresis linking. */
|
|
5
|
+
readonly barrier: Uint8Array;
|
|
6
|
+
/** Fraction of pixels in `barrier`; a diagnostic, see TraceDiagnostics. */
|
|
7
|
+
readonly coverage: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Hysteresis against a LOCAL threshold rather than a global one.
|
|
11
|
+
*
|
|
12
|
+
* 🛑 This replaced both a fixed-value and a fixed-percentile threshold, and the
|
|
13
|
+
* measurements that killed each are worth keeping:
|
|
14
|
+
*
|
|
15
|
+
* absolute (low=9, high=18) — barrier coverage 34-61% across the corpus. The
|
|
16
|
+
* median response spans 0.1 (Driger: clean paper) to 14.1 (Poseidon: JPEG
|
|
17
|
+
* cream field), so one pair of numbers is simultaneously far too low for
|
|
18
|
+
* one scan and far too high for another.
|
|
19
|
+
* percentile (p60/p80) — coverage pinned at ~38% on EVERY scan, which is
|
|
20
|
+
* what a quantile does by construction rather than what a detector does.
|
|
21
|
+
* Worse, Poseidon's cream-field cut line (response 12-16) fell below that
|
|
22
|
+
* scan's own p60 and vanished completely.
|
|
23
|
+
*
|
|
24
|
+
* The second failure is the informative one: a response of 12-16 is plainly a
|
|
25
|
+
* line on a flat cream field and plainly noise inside dense artwork, so NO
|
|
26
|
+
* single global number can separate them. Significance is local, so the
|
|
27
|
+
* threshold is local — Niblack/Sauvola-style, `localMean + k * localStdDev`
|
|
28
|
+
* over a window much larger than a cut line but much smaller than a sticker.
|
|
29
|
+
*
|
|
30
|
+
* Both statistics come from box blurs (mean, and mean-of-squares for the
|
|
31
|
+
* variance), so the whole thing stays O(n) and independent of window size.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Threshold ANY response field against its own robust local background.
|
|
35
|
+
*
|
|
36
|
+
* Exported because the art path feeds it a Hessian line response rather than
|
|
37
|
+
* this module's edge response — the thresholding policy (local, robust,
|
|
38
|
+
* hysteresis-linked) is right for both and must not be written twice.
|
|
39
|
+
*/
|
|
40
|
+
export declare function thresholdAdaptive(response: Float32Array, width: number, height: number, kLow: number, kHigh: number): Uint8Array;
|
|
41
|
+
/**
|
|
42
|
+
* Detect cut lines.
|
|
43
|
+
*
|
|
44
|
+
* 🛑 Thresholds are PERCENTILES of this scan's own response, not absolute
|
|
45
|
+
* luminance values, and that is a measured correction rather than a
|
|
46
|
+
* preference. Across the reference corpus the median response spans two orders
|
|
47
|
+
* of magnitude — 0.1 on the Driger G sheet (clean white paper, almost no
|
|
48
|
+
* texture) against 14.1 on the Poseidon scan (JPEG, printed cream field) — so
|
|
49
|
+
* any fixed pair of numbers is simultaneously far too high for one scan and far
|
|
50
|
+
* too low for another. Measured with absolute low=9/high=18, barrier coverage
|
|
51
|
+
* came out between 34% and 61%, which floods nothing.
|
|
52
|
+
*
|
|
53
|
+
* The cut line is only ~2.8-3.2x the median on the two hardest sheets, so the
|
|
54
|
+
* separation that matters is NOT cut-line-versus-artwork — a logo edge is a
|
|
55
|
+
* genuine edge and will exceed a cut line. It is cut-line-versus-BACKGROUND.
|
|
56
|
+
* Interior artwork edges joining the barrier is harmless: the flood arrives
|
|
57
|
+
* from outside and is already stopped by the outer cut line before it can ever
|
|
58
|
+
* reach them.
|
|
59
|
+
*
|
|
60
|
+
* Three steps, each answering one objection to the previous:
|
|
61
|
+
*
|
|
62
|
+
* 1. DETREND. Subtract a large-window mean. Without this the detector sees
|
|
63
|
+
* the airbrushed gradient under a sticker as a huge slow ramp and the cut
|
|
64
|
+
* line as a rounding error on top of it. This is the step that exposed the
|
|
65
|
+
* signal in the measurements above.
|
|
66
|
+
* 2. LOCAL RANGE. The doublet's signature is a trough and a ridge within a
|
|
67
|
+
* pixel or two of each other, so the local max-minus-min of the detrended
|
|
68
|
+
* field is large on a cut line and ~0 on flat ink. A plain gradient
|
|
69
|
+
* magnitude fires equally on one-sided edges; the range specifically
|
|
70
|
+
* rewards the paired shape an impression makes.
|
|
71
|
+
* 3. HYSTERESIS. Continuity beats amplitude — see above.
|
|
72
|
+
*/
|
|
73
|
+
export declare function detectRidges(luma: Float32Array, width: number, height: number, opts: {
|
|
74
|
+
/** Percentile in 0..1 for the grow threshold. */
|
|
75
|
+
low: number;
|
|
76
|
+
/** Percentile in 0..1 for the seed threshold. */
|
|
77
|
+
high: number;
|
|
78
|
+
kernelScale: number;
|
|
79
|
+
/** Escape hatch: absolute response values, bypassing the percentiles. */
|
|
80
|
+
absolute?: {
|
|
81
|
+
low: number;
|
|
82
|
+
high: number;
|
|
83
|
+
};
|
|
84
|
+
/** Independent second channel — see trace/quantise and trace/fuse. */
|
|
85
|
+
assist?: Uint8Array;
|
|
86
|
+
/** 0..1. How far the assist may lower the ridge's own bar. */
|
|
87
|
+
assistWeight?: number;
|
|
88
|
+
}): RidgeResult;
|