@mohasinac/appkit 4.52.5 → 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 +11 -0
- package/dist/features/layout/AppLayoutShell.js +64 -12
- 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.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/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/index.js +8 -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 +192 -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,92 @@
|
|
|
1
|
+
import { type PrintPageSize } from "./page-sizes";
|
|
2
|
+
export type MachineProfileId = "print-shop" | "cricut-cut" | "cricut-ptc";
|
|
3
|
+
/**
|
|
4
|
+
* Where a profile's usable cut width comes from. Modelled as a SOURCE rather
|
|
5
|
+
* than a stored millimetre value because the Print-Then-Cut width is a property
|
|
6
|
+
* of the page, not of the machine — a second copy of it on the profile would be
|
|
7
|
+
* a denormalised mirror, and it would drift the first time a page's PTC area
|
|
8
|
+
* was corrected (CLAUDE.md Root Cause #42).
|
|
9
|
+
*/
|
|
10
|
+
export type CutWidthSource =
|
|
11
|
+
/** No machine-imposed limit — the print shop's plotter takes roll media. */
|
|
12
|
+
"unbounded"
|
|
13
|
+
/** The machine's own material width, carried on the profile. */
|
|
14
|
+
| "material"
|
|
15
|
+
/** The target page's sensor-constrained PTC sub-area. */
|
|
16
|
+
| "page-ptc-area";
|
|
17
|
+
export interface MachineProfile {
|
|
18
|
+
readonly id: MachineProfileId;
|
|
19
|
+
readonly label: string;
|
|
20
|
+
/** The units this machine's own documentation and UI speak in. */
|
|
21
|
+
readonly units: "mm" | "in";
|
|
22
|
+
readonly cutWidthSource: CutWidthSource;
|
|
23
|
+
/** Set only when `cutWidthSource` is `"material"`. */
|
|
24
|
+
readonly materialWidthMm: number | null;
|
|
25
|
+
/**
|
|
26
|
+
* Longest single continuous shape. `null` is genuinely unbounded (roll media
|
|
27
|
+
* at a print shop); a number is a documented machine limit.
|
|
28
|
+
*/
|
|
29
|
+
readonly maxCutLengthMm: number | null;
|
|
30
|
+
/** Whether the exporter must emit sensor registration marks. */
|
|
31
|
+
readonly registrationMarks: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Narrowest internal feature the machine cuts reliably. Below this the
|
|
34
|
+
* material tears rather than cuts. `null` where the process has no such
|
|
35
|
+
* limit worth modelling.
|
|
36
|
+
*/
|
|
37
|
+
readonly minFeatureMm: number | null;
|
|
38
|
+
/**
|
|
39
|
+
* Node ceiling for the emitted path data, re-simplified to independently of
|
|
40
|
+
* the TRACE tolerance. Tying the two together would mean a more precise trace
|
|
41
|
+
* producing a file the software cannot open.
|
|
42
|
+
*/
|
|
43
|
+
readonly nodeBudget: number | null;
|
|
44
|
+
readonly emits: "cutcontour-svg" | "cut-only-svg" | "print-then-cut";
|
|
45
|
+
/** One line, shown in the export picker. */
|
|
46
|
+
readonly summary: string;
|
|
47
|
+
}
|
|
48
|
+
export declare const MACHINE_PROFILES: Readonly<Record<MachineProfileId, MachineProfile>>;
|
|
49
|
+
export declare const MACHINE_PROFILE_IDS: readonly MachineProfileId[];
|
|
50
|
+
export declare function machineProfileById(id: MachineProfileId): MachineProfile;
|
|
51
|
+
/**
|
|
52
|
+
* The usable cut width for this profile on this page.
|
|
53
|
+
*
|
|
54
|
+
* Returns `null` only for a genuinely unbounded profile. Every caller must
|
|
55
|
+
* treat `null` as "no limit" and NOT as "unknown" — the two are different, and
|
|
56
|
+
* conflating them is how an unbounded print-shop export would start reporting
|
|
57
|
+
* every part as unmeasurable.
|
|
58
|
+
*/
|
|
59
|
+
export declare function maxCutWidthMmForPage(profile: MachineProfile, page: PrintPageSize): number | null;
|
|
60
|
+
export interface PartFitVerdict {
|
|
61
|
+
readonly fits: boolean;
|
|
62
|
+
/** Wider than the machine can cut. The part must be tiled, or sent elsewhere. */
|
|
63
|
+
readonly tooWide: boolean;
|
|
64
|
+
/** Longer than one continuous cut. */
|
|
65
|
+
readonly tooLong: boolean;
|
|
66
|
+
/** Has an internal neck below the machine's reliable minimum; it will tear. */
|
|
67
|
+
readonly tooFine: boolean;
|
|
68
|
+
/** The limit that was applied, for the message the UI shows. */
|
|
69
|
+
readonly limitWidthMm: number | null;
|
|
70
|
+
readonly limitLengthMm: number | null;
|
|
71
|
+
readonly reasons: readonly string[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Report whether a part can be cut on this profile. **Reports only** — it never
|
|
75
|
+
* scales, never crops and never rotates to make something fit. The plan is
|
|
76
|
+
* explicit that scaling here is the worst available failure, because the output
|
|
77
|
+
* looks right.
|
|
78
|
+
*
|
|
79
|
+
* `minFeatureMm` is the part's measured narrowest internal feature (the trace
|
|
80
|
+
* already computes it from the EDT); pass `null` when it has not been measured,
|
|
81
|
+
* which suppresses the `tooFine` check rather than guessing it passed.
|
|
82
|
+
*
|
|
83
|
+
* Rotation is intentionally not considered. On a 4.5-inch-wide material the
|
|
84
|
+
* long axis must run along the roll, so "it would fit sideways" is false for
|
|
85
|
+
* the one profile where width is actually binding — and letting the caller
|
|
86
|
+
* believe otherwise would hide exactly the parts that need tiling.
|
|
87
|
+
*/
|
|
88
|
+
export declare function partFitsProfile(part: {
|
|
89
|
+
readonly widthMm: number;
|
|
90
|
+
readonly heightMm: number;
|
|
91
|
+
readonly minFeatureMm?: number | null;
|
|
92
|
+
}, profile: MachineProfile, page: PrintPageSize): PartFitVerdict;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Machine capability is DATA, not hardcode. The exporters, the nester and
|
|
3
|
+
* the pre-export report all need the same answer to "can this machine cut
|
|
4
|
+
* a part this wide", and the one failure this file exists to prevent is a
|
|
5
|
+
* part being silently scaled or cropped to fit. That produces a cut file
|
|
6
|
+
* which looks correct and yields stickers the wrong size — discovered only
|
|
7
|
+
* after printing, cutting and measuring.
|
|
8
|
+
* WHAT: The three machine profiles, and the fit check that reports per-part by
|
|
9
|
+
* name instead of adjusting anything.
|
|
10
|
+
*
|
|
11
|
+
* 🛑 PDF mosaic is deliberately NOT a machine profile. It targets paper, has no
|
|
12
|
+
* cut head and no width limit, and giving it a profile would mean inventing
|
|
13
|
+
* capability numbers for a machine that does not exist. It is an exporter that
|
|
14
|
+
* takes a page size; see export/pdf-mosaic.
|
|
15
|
+
*
|
|
16
|
+
* EXPORTS:
|
|
17
|
+
* MachineProfileId, CutWidthSource, MachineProfile, MACHINE_PROFILES,
|
|
18
|
+
* MACHINE_PROFILE_IDS, machineProfileById, maxCutWidthMmForPage,
|
|
19
|
+
* PartFitVerdict, partFitsProfile
|
|
20
|
+
*
|
|
21
|
+
* @tag domain:sticker-trace
|
|
22
|
+
* @tag layer:shared
|
|
23
|
+
* @tag pattern:none
|
|
24
|
+
* @tag access:isomorphic
|
|
25
|
+
* @tag consumers:export/nesting,export/cricut-svg,export/print-then-cut,export/part-tiling,StickerExportPanel
|
|
26
|
+
* @tag sideEffects:none
|
|
27
|
+
*/
|
|
28
|
+
import { CRICUT_MIN_FEATURE_MM, CRICUT_NODE_BUDGET } from "../config.js";
|
|
29
|
+
import { inchesToMm, printableAreaMm } from "./page-sizes.js";
|
|
30
|
+
/** Cricut Joy 2 material width: 4.5 in, from Cricut's published documentation. */
|
|
31
|
+
const JOY_MATERIAL_WIDTH_MM = inchesToMm(4.5);
|
|
32
|
+
/**
|
|
33
|
+
* Joy 2 Smart Materials cut one continuous shape up to 4 ft. Repeated cuts can
|
|
34
|
+
* reach 20 ft, but a single PART is what this bounds, so 4 ft is the honest
|
|
35
|
+
* number — quoting 20 would admit a shape the machine cannot cut in one pass.
|
|
36
|
+
*/
|
|
37
|
+
const JOY_MAX_CONTINUOUS_MM = inchesToMm(48);
|
|
38
|
+
export const MACHINE_PROFILES = {
|
|
39
|
+
"print-shop": {
|
|
40
|
+
id: "print-shop",
|
|
41
|
+
label: "Print shop (Roland / Graphtec)",
|
|
42
|
+
units: "mm",
|
|
43
|
+
cutWidthSource: "unbounded",
|
|
44
|
+
materialWidthMm: null,
|
|
45
|
+
maxCutLengthMm: null,
|
|
46
|
+
registrationMarks: false,
|
|
47
|
+
minFeatureMm: null,
|
|
48
|
+
nodeBudget: null,
|
|
49
|
+
emits: "cutcontour-svg",
|
|
50
|
+
summary: "Artwork PNG plus a magenta CutContour layer — the format contour-cutting brokers accept. No width limit.",
|
|
51
|
+
},
|
|
52
|
+
"cricut-cut": {
|
|
53
|
+
id: "cricut-cut",
|
|
54
|
+
label: "Cricut Joy 2 — cut only",
|
|
55
|
+
units: "in",
|
|
56
|
+
cutWidthSource: "material",
|
|
57
|
+
materialWidthMm: JOY_MATERIAL_WIDTH_MM,
|
|
58
|
+
maxCutLengthMm: JOY_MAX_CONTINUOUS_MM,
|
|
59
|
+
registrationMarks: false,
|
|
60
|
+
minFeatureMm: CRICUT_MIN_FEATURE_MM,
|
|
61
|
+
nodeBudget: CRICUT_NODE_BUDGET,
|
|
62
|
+
emits: "cut-only-svg",
|
|
63
|
+
summary: "Outlines only, true millimetre scale, nested into strips within the 4.5 inch material width.",
|
|
64
|
+
},
|
|
65
|
+
"cricut-ptc": {
|
|
66
|
+
id: "cricut-ptc",
|
|
67
|
+
label: "Cricut Joy 2 — Print Then Cut",
|
|
68
|
+
units: "in",
|
|
69
|
+
cutWidthSource: "page-ptc-area",
|
|
70
|
+
materialWidthMm: null,
|
|
71
|
+
maxCutLengthMm: JOY_MAX_CONTINUOUS_MM,
|
|
72
|
+
registrationMarks: true,
|
|
73
|
+
minFeatureMm: CRICUT_MIN_FEATURE_MM,
|
|
74
|
+
nodeBudget: CRICUT_NODE_BUDGET,
|
|
75
|
+
emits: "print-then-cut",
|
|
76
|
+
summary: "Printable sheet plus cut lines, laid out inside the machine's real sensor-constrained area — on A4 that is a 78 mm column, not the page.",
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
export const MACHINE_PROFILE_IDS = [
|
|
80
|
+
"print-shop",
|
|
81
|
+
"cricut-cut",
|
|
82
|
+
"cricut-ptc",
|
|
83
|
+
];
|
|
84
|
+
export function machineProfileById(id) {
|
|
85
|
+
return MACHINE_PROFILES[id];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The usable cut width for this profile on this page.
|
|
89
|
+
*
|
|
90
|
+
* Returns `null` only for a genuinely unbounded profile. Every caller must
|
|
91
|
+
* treat `null` as "no limit" and NOT as "unknown" — the two are different, and
|
|
92
|
+
* conflating them is how an unbounded print-shop export would start reporting
|
|
93
|
+
* every part as unmeasurable.
|
|
94
|
+
*/
|
|
95
|
+
export function maxCutWidthMmForPage(profile, page) {
|
|
96
|
+
switch (profile.cutWidthSource) {
|
|
97
|
+
case "unbounded":
|
|
98
|
+
return null;
|
|
99
|
+
case "material":
|
|
100
|
+
return profile.materialWidthMm;
|
|
101
|
+
case "page-ptc-area": {
|
|
102
|
+
// printableAreaMm throws on a page with no PTC area, which is correct:
|
|
103
|
+
// choosing a PTC profile against a page the machine cannot register is a
|
|
104
|
+
// configuration error, not a part that happens not to fit.
|
|
105
|
+
const area = printableAreaMm(page, true);
|
|
106
|
+
return Math.min(area.widthMm, JOY_MATERIAL_WIDTH_MM);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Report whether a part can be cut on this profile. **Reports only** — it never
|
|
112
|
+
* scales, never crops and never rotates to make something fit. The plan is
|
|
113
|
+
* explicit that scaling here is the worst available failure, because the output
|
|
114
|
+
* looks right.
|
|
115
|
+
*
|
|
116
|
+
* `minFeatureMm` is the part's measured narrowest internal feature (the trace
|
|
117
|
+
* already computes it from the EDT); pass `null` when it has not been measured,
|
|
118
|
+
* which suppresses the `tooFine` check rather than guessing it passed.
|
|
119
|
+
*
|
|
120
|
+
* Rotation is intentionally not considered. On a 4.5-inch-wide material the
|
|
121
|
+
* long axis must run along the roll, so "it would fit sideways" is false for
|
|
122
|
+
* the one profile where width is actually binding — and letting the caller
|
|
123
|
+
* believe otherwise would hide exactly the parts that need tiling.
|
|
124
|
+
*/
|
|
125
|
+
export function partFitsProfile(part, profile, page) {
|
|
126
|
+
const limitWidthMm = maxCutWidthMmForPage(profile, page);
|
|
127
|
+
const limitLengthMm = profile.maxCutLengthMm;
|
|
128
|
+
const tooWide = limitWidthMm !== null && part.widthMm > limitWidthMm;
|
|
129
|
+
const tooLong = limitLengthMm !== null && part.heightMm > limitLengthMm;
|
|
130
|
+
const measuredFeature = part.minFeatureMm ?? null;
|
|
131
|
+
const tooFine = profile.minFeatureMm !== null &&
|
|
132
|
+
measuredFeature !== null &&
|
|
133
|
+
measuredFeature < profile.minFeatureMm;
|
|
134
|
+
const reasons = [];
|
|
135
|
+
if (tooWide) {
|
|
136
|
+
reasons.push(`${part.widthMm.toFixed(1)} mm wide exceeds the ${limitWidthMm?.toFixed(1)} mm cut width — tile it, or use the print-shop profile where no width limit applies.`);
|
|
137
|
+
}
|
|
138
|
+
if (tooLong) {
|
|
139
|
+
reasons.push(`${part.heightMm.toFixed(1)} mm long exceeds the ${limitLengthMm?.toFixed(1)} mm single continuous cut.`);
|
|
140
|
+
}
|
|
141
|
+
if (tooFine) {
|
|
142
|
+
reasons.push(`narrowest feature ${measuredFeature?.toFixed(2)} mm is below the ${profile.minFeatureMm?.toFixed(2)} mm reliable minimum — it will tear rather than cut.`);
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
fits: !tooWide && !tooLong && !tooFine,
|
|
146
|
+
tooWide,
|
|
147
|
+
tooLong,
|
|
148
|
+
tooFine,
|
|
149
|
+
limitWidthMm,
|
|
150
|
+
limitLengthMm,
|
|
151
|
+
reasons,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { PrintPageSize } from "./page-sizes";
|
|
2
|
+
export interface NestablePart {
|
|
3
|
+
ordinal: number;
|
|
4
|
+
name: string;
|
|
5
|
+
widthMm: number;
|
|
6
|
+
heightMm: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PlacedPart extends NestablePart {
|
|
9
|
+
/** Page index, 0-based. */
|
|
10
|
+
page: number;
|
|
11
|
+
/** Top-left corner, in page coordinates including the margin. */
|
|
12
|
+
xMm: number;
|
|
13
|
+
yMm: number;
|
|
14
|
+
/** True when the part was turned 90° to fit. */
|
|
15
|
+
rotated: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface NestResult {
|
|
18
|
+
placed: PlacedPart[];
|
|
19
|
+
pageCount: number;
|
|
20
|
+
/**
|
|
21
|
+
* Parts that fit on NO page at any rotation.
|
|
22
|
+
*
|
|
23
|
+
* 🛑 Returned rather than thrown, and rather than silently dropped. A part
|
|
24
|
+
* that cannot be placed is a real operator decision — tile it, or send it to
|
|
25
|
+
* a profile with no width limit — and both a crash and a silent omission
|
|
26
|
+
* take that decision away. A silently dropped part is the worse of the two:
|
|
27
|
+
* the export looks complete and is missing a sticker.
|
|
28
|
+
*/
|
|
29
|
+
unplaceable: NestablePart[];
|
|
30
|
+
}
|
|
31
|
+
export interface NestOptions {
|
|
32
|
+
/** Gap between neighbouring parts. Default 2mm — enough for a blade to turn. */
|
|
33
|
+
gapMm?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Nest into the Print-Then-Cut sub-area rather than the printable page.
|
|
36
|
+
*
|
|
37
|
+
* 🛑 Must be passed through from the caller's machine profile, never guessed.
|
|
38
|
+
* `printableAreaMm` defaults it false on purpose so a forgotten flag yields a
|
|
39
|
+
* layout the machine REJECTS rather than one that silently wastes two thirds
|
|
40
|
+
* of the page — a rejected file is noticed, a wasteful one is not.
|
|
41
|
+
*/
|
|
42
|
+
forPrintThenCut?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Lay parts out across as many pages as they need.
|
|
46
|
+
*
|
|
47
|
+
* Tall-first because a shelf's height is set by its tallest member: feeding
|
|
48
|
+
* short parts first leaves tall ones to open a new shelf each, which is the
|
|
49
|
+
* pathological case for this algorithm and costs real paper.
|
|
50
|
+
*/
|
|
51
|
+
export declare function nestParts(parts: readonly NestablePart[], page: PrintPageSize, opts?: NestOptions): NestResult;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Parts have to be placed on a page before anything can be printed, and
|
|
3
|
+
* the placement decides how much paper a sheet costs. A naive grid on the
|
|
4
|
+
* widest part wastes most of an A4 when one sticker is large and twenty
|
|
5
|
+
* are small.
|
|
6
|
+
* WHAT: Shelf packing — parts sorted tall-first, laid in rows, each row only as
|
|
7
|
+
* tall as its own tallest member.
|
|
8
|
+
*
|
|
9
|
+
* 🛑 SHELF PACKING, NOT A BIN-PACKING OPTIMUM, and that is a deliberate
|
|
10
|
+
* ceiling. Optimal 2D packing is NP-hard; a shelf pack is O(n log n), gives a
|
|
11
|
+
* layout a human can predict by eye, and the residual waste is paper rather
|
|
12
|
+
* than correctness. An operator who can see why a part landed where it did can
|
|
13
|
+
* drag it; one looking at a solver's output cannot.
|
|
14
|
+
*
|
|
15
|
+
* 🛑 Everything here is MILLIMETRES. The one unit that survives from the trace
|
|
16
|
+
* to the paper — see page-sizes.ts.
|
|
17
|
+
*
|
|
18
|
+
* EXPORTS: NestablePart, PlacedPart, NestResult, nestParts
|
|
19
|
+
*
|
|
20
|
+
* @tag domain:sticker-trace
|
|
21
|
+
* @tag layer:shared
|
|
22
|
+
* @tag pattern:none
|
|
23
|
+
* @tag access:isomorphic
|
|
24
|
+
* @tag consumers:sticker-trace/export
|
|
25
|
+
* @tag sideEffects:none
|
|
26
|
+
*/
|
|
27
|
+
import { printableAreaMm } from "./page-sizes.js";
|
|
28
|
+
const DEFAULT_GAP_MM = 2;
|
|
29
|
+
/**
|
|
30
|
+
* Lay parts out across as many pages as they need.
|
|
31
|
+
*
|
|
32
|
+
* Tall-first because a shelf's height is set by its tallest member: feeding
|
|
33
|
+
* short parts first leaves tall ones to open a new shelf each, which is the
|
|
34
|
+
* pathological case for this algorithm and costs real paper.
|
|
35
|
+
*/
|
|
36
|
+
export function nestParts(parts, page, opts = {}) {
|
|
37
|
+
const gap = opts.gapMm ?? DEFAULT_GAP_MM;
|
|
38
|
+
const area = printableAreaMm(page, opts.forPrintThenCut ?? false);
|
|
39
|
+
const originX = page.marginMm;
|
|
40
|
+
const originY = page.marginMm;
|
|
41
|
+
const placed = [];
|
|
42
|
+
const unplaceable = [];
|
|
43
|
+
/*
|
|
44
|
+
* Decide orientation ONCE, up front: the orientation that makes the part
|
|
45
|
+
* shortest is the one that packs best into shelves, and re-deciding per shelf
|
|
46
|
+
* would make placement depend on arrival order in a way nobody can predict.
|
|
47
|
+
*/
|
|
48
|
+
const oriented = parts
|
|
49
|
+
.map((p) => {
|
|
50
|
+
const fitsUnrotated = p.widthMm <= area.widthMm && p.heightMm <= area.heightMm;
|
|
51
|
+
const fitsRotated = p.heightMm <= area.widthMm && p.widthMm <= area.heightMm;
|
|
52
|
+
if (!fitsUnrotated && !fitsRotated)
|
|
53
|
+
return { part: p, placeable: false };
|
|
54
|
+
/*
|
|
55
|
+
* Prefer NOT rotating when both fit. A rotated sticker is harder to
|
|
56
|
+
* check against the original sheet by eye, and the packing gain from
|
|
57
|
+
* turning a part that already fits is marginal.
|
|
58
|
+
*/
|
|
59
|
+
const rotated = fitsUnrotated ? false : true;
|
|
60
|
+
return {
|
|
61
|
+
part: p,
|
|
62
|
+
placeable: true,
|
|
63
|
+
rotated,
|
|
64
|
+
w: rotated ? p.heightMm : p.widthMm,
|
|
65
|
+
h: rotated ? p.widthMm : p.heightMm,
|
|
66
|
+
};
|
|
67
|
+
})
|
|
68
|
+
.filter((o) => {
|
|
69
|
+
if (!o.placeable) {
|
|
70
|
+
unplaceable.push(o.part);
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
});
|
|
75
|
+
oriented.sort((a, b) => b.h - a.h || b.w - a.w);
|
|
76
|
+
let pageIndex = 0;
|
|
77
|
+
let shelfY = 0;
|
|
78
|
+
let shelfHeight = 0;
|
|
79
|
+
let cursorX = 0;
|
|
80
|
+
for (const item of oriented) {
|
|
81
|
+
// New shelf when this one is full across.
|
|
82
|
+
if (cursorX > 0 && cursorX + item.w > area.widthMm) {
|
|
83
|
+
shelfY += shelfHeight + gap;
|
|
84
|
+
shelfHeight = 0;
|
|
85
|
+
cursorX = 0;
|
|
86
|
+
}
|
|
87
|
+
// New page when the shelf would run off the bottom.
|
|
88
|
+
if (shelfY + item.h > area.heightMm) {
|
|
89
|
+
pageIndex += 1;
|
|
90
|
+
shelfY = 0;
|
|
91
|
+
shelfHeight = 0;
|
|
92
|
+
cursorX = 0;
|
|
93
|
+
}
|
|
94
|
+
placed.push({
|
|
95
|
+
...item.part,
|
|
96
|
+
page: pageIndex,
|
|
97
|
+
xMm: Math.round((originX + cursorX) * 100) / 100,
|
|
98
|
+
yMm: Math.round((originY + shelfY) * 100) / 100,
|
|
99
|
+
rotated: item.rotated,
|
|
100
|
+
});
|
|
101
|
+
cursorX += item.w + gap;
|
|
102
|
+
shelfHeight = Math.max(shelfHeight, item.h);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
placed,
|
|
106
|
+
// 0 placed parts is 0 pages, not 1 — an empty page in a PDF is a wasted sheet.
|
|
107
|
+
pageCount: placed.length === 0 ? 0 : pageIndex + 1,
|
|
108
|
+
unplaceable,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** The definition of the inch, exact by international agreement since 1959. */
|
|
2
|
+
export declare const MM_PER_INCH = 25.4;
|
|
3
|
+
/**
|
|
4
|
+
* Cricut publishes every dimension in inches, so the constants below are
|
|
5
|
+
* written in inches and converted here rather than being pre-multiplied. A
|
|
6
|
+
* pre-multiplied `114.3` loses the fact that it is 4.5", which is what you need
|
|
7
|
+
* when checking a number against Cricut's own documentation.
|
|
8
|
+
*/
|
|
9
|
+
export declare function inchesToMm(inches: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* The Print-Then-Cut cuttable sub-region of a page.
|
|
12
|
+
*
|
|
13
|
+
* 🛑 This is NOT the page minus a uniform margin. Cricut reserves area for the
|
|
14
|
+
* sensor registration marks, and the Joy's 4.5" material width caps the result
|
|
15
|
+
* further — on A4 the cuttable region is a ~78 mm column, roughly a THIRD of
|
|
16
|
+
* the page width. Treating it as "page minus margin" produces a layout the
|
|
17
|
+
* machine silently refuses to register.
|
|
18
|
+
*/
|
|
19
|
+
export interface PtcArea {
|
|
20
|
+
readonly widthMm: number;
|
|
21
|
+
readonly heightMm: number;
|
|
22
|
+
}
|
|
23
|
+
export type PrintPageSizeId = "a3" | "a4" | "a5" | "letter" | "legal" | "tabloid" | "joy-mat-standard" | "joy-mat-long" | "joy-mat-card" | "joy-smart-material" | "custom";
|
|
24
|
+
export interface PrintPageSize {
|
|
25
|
+
readonly id: PrintPageSizeId;
|
|
26
|
+
readonly label: string;
|
|
27
|
+
readonly widthMm: number;
|
|
28
|
+
readonly heightMm: number;
|
|
29
|
+
/**
|
|
30
|
+
* Unprintable border. For paper this is the printer's mechanical margin; for
|
|
31
|
+
* a Cricut mat it is 0, because the mat's stated size IS its usable area —
|
|
32
|
+
* the gridded border sits outside it.
|
|
33
|
+
*/
|
|
34
|
+
readonly marginMm: number;
|
|
35
|
+
/** Present only where the page is a Print-Then-Cut target. */
|
|
36
|
+
readonly ptcArea?: PtcArea;
|
|
37
|
+
/**
|
|
38
|
+
* True for a Cricut mat / Smart Material roll rather than a sheet of paper.
|
|
39
|
+
* The nester uses this to decide whether a page may be rotated: paper may,
|
|
40
|
+
* a 4.5"-wide mat may not — rotating it would claim a width the machine
|
|
41
|
+
* does not have.
|
|
42
|
+
*/
|
|
43
|
+
readonly isMat: boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare const PRINT_PAGE_SIZES: Readonly<Record<PrintPageSizeId, PrintPageSize>>;
|
|
46
|
+
/** Stable display order for pickers: papers first, then mats, then custom. */
|
|
47
|
+
export declare const PRINT_PAGE_SIZE_IDS: readonly PrintPageSizeId[];
|
|
48
|
+
export declare function pageSizeById(id: PrintPageSizeId): PrintPageSize;
|
|
49
|
+
/**
|
|
50
|
+
* Build a custom page. Dimensions are caller-supplied and validated here rather
|
|
51
|
+
* than at each call site: a zero or negative page silently produces an empty
|
|
52
|
+
* nest, which reads as "nothing fitted" instead of "the page was never set".
|
|
53
|
+
*/
|
|
54
|
+
export declare function customPageSize(widthMm: number, heightMm: number, marginMm?: number): PrintPageSize;
|
|
55
|
+
/**
|
|
56
|
+
* The area parts may actually be nested into.
|
|
57
|
+
*
|
|
58
|
+
* `forPrintThenCut` is not a styling choice — on a PTC target the usable region
|
|
59
|
+
* is the sensor-constrained sub-area, which is dramatically smaller than the
|
|
60
|
+
* page minus its margin. Defaulting it to `false` means a caller who forgets it
|
|
61
|
+
* gets the LARGER area, so the failure is a layout the machine rejects rather
|
|
62
|
+
* than one that silently wastes two thirds of the page. That direction is
|
|
63
|
+
* chosen deliberately: a rejected file is noticed, a wasteful one is not.
|
|
64
|
+
*/
|
|
65
|
+
export declare function printableAreaMm(page: PrintPageSize, forPrintThenCut?: boolean): {
|
|
66
|
+
widthMm: number;
|
|
67
|
+
heightMm: number;
|
|
68
|
+
};
|