efficient-storefront-blocks 0.83.0 → 0.85.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/CHANGELOG.md +23 -0
- package/dist/chunks/{EditorPreviewCheckout-RI5SBSCE.js → EditorPreviewCheckout-4XHYYAT2.js} +1 -1
- package/dist/chunks/{SiteEditorProvider-OQXY7YGK.js → SiteEditorProvider-X4YKBAJ4.js} +1 -1
- package/dist/chunks/{chunk-DX6JADLE.js → chunk-KKKMX6LH.js} +1 -1
- package/dist/chunks/{chunk-AUYTGAOU.js → chunk-NFXV7HDB.js} +1 -1
- package/dist/chunks/chunk-NNBMZAW4.js +340 -0
- package/dist/chunks/chunk-VG4SUIRK.js +1 -0
- package/dist/chunks/chunk-Y5LB56KB.js +1 -0
- package/dist/chunks/{fitment-data-64LXUHOU.js → fitment-data-2I2FDPXW.js} +1 -1
- package/dist/contract.js +2 -2
- package/dist/editor/lib/document/blocks/commerce/DetailRows/fields.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/ProductHero/fields.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
- package/dist/editor/lib/document/config.d.ts +1 -0
- package/dist/editor/lib/document/config.js +1 -1
- package/dist/editor/lib/document/popup-look-fields.d.ts +4 -0
- package/dist/editor/lib/document/popup-look-fields.js +1 -0
- package/dist/editor/lib/document/section-text-regions.js +1 -1
- package/dist/editor/lib/efficient-backend.js +1 -1
- package/dist/editor/lib/storefront-editor-words.d.ts +8 -1
- package/dist/editor/lib/storefront-editor-words.js +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.js +136 -93
- package/dist/render/app/globals.css +156 -0
- package/dist/render/built-with.json +1 -1
- package/dist/render/components/CartContext.d.ts +1 -0
- package/dist/render/components/CartContext.js +1 -1
- package/dist/render/components/CartDrawer.d.ts +4 -3
- package/dist/render/components/CartDrawer.js +1 -4
- package/dist/render/components/DetailRows.d.ts +6 -1
- package/dist/render/components/DetailRows.js +1 -1
- package/dist/render/components/FinishSwatches.js +2 -1
- package/dist/render/components/LinkedProductHero.d.ts +2 -2
- package/dist/render/components/PopupFrame.d.ts +10 -1
- package/dist/render/components/PopupFrame.js +5 -1
- package/dist/render/components/ProductCard.js +1 -1
- package/dist/render/components/ProductHeroPanel.d.ts +5 -5
- package/dist/render/components/ProductHeroPanel.js +1 -1
- package/dist/render/components/ProductRef.js +1 -1
- package/dist/render/components/Reviews.d.ts +1 -0
- package/dist/render/components/Reviews.js +1 -1
- package/dist/render/components/SpecTable.js +1 -1
- package/dist/render/components/card-pieces/CardPrice.d.ts +9 -1
- package/dist/render/components/card-pieces/CardPrice.js +1 -1
- package/dist/render/components/card-pieces/ClippedPictures.d.ts +10 -0
- package/dist/render/components/card-pieces/ClippedPictures.js +1 -0
- package/dist/render/components/card-pieces/HostPart.d.ts +2 -1
- package/dist/render/components/card-pieces/HostPart.js +1 -1
- package/dist/render/components/card-pieces/ProductCardState.d.ts +12 -0
- package/dist/render/components/card-pieces/ProductCardState.js +1 -1
- package/dist/render/components/card-pieces/useHeldCardPicture.d.ts +16 -0
- package/dist/render/components/card-pieces/useHeldCardPicture.js +1 -0
- package/dist/render/components/pdp-dynamic/DynamicDetailRows.d.ts +2 -0
- package/dist/render/components/pdp-dynamic/DynamicDetailRows.js +1 -1
- package/dist/render/components/pdp-dynamic/DynamicProductHero.d.ts +2 -2
- package/dist/render/components/product-hero/stage-photo.d.ts +6 -0
- package/dist/render/components/product-hero/stage-photo.js +3 -3
- package/dist/render/components/useFinishSelection.d.ts +3 -0
- package/dist/render/components/useFinishSelection.js +3 -1
- package/dist/render/components/useProductCatalog.d.ts +2 -0
- package/dist/render/components/wheels-plp/PlpCard.js +1 -1
- package/dist/render/lib/api/types.d.ts +15 -2
- package/dist/render/lib/content/hero-price-seed.d.ts +4 -0
- package/dist/render/lib/content/hero-price-seed.js +1 -0
- package/dist/render/lib/document/blocks/commerce/DetailRows/meta.d.ts +6 -0
- package/dist/render/lib/document/blocks/commerce/DetailRows/meta.js +1 -1
- package/dist/render/lib/document/blocks/commerce/DetailRows/render.js +1 -1
- package/dist/render/lib/document/blocks/commerce/ProductHero/meta.d.ts +4 -0
- package/dist/render/lib/document/blocks/commerce/ProductHero/meta.js +1 -1
- package/dist/render/lib/document/blocks/commerce/ProductHero/render.js +1 -1
- package/dist/render/lib/document/blocks/commerce/ProductPrice/render.js +1 -1
- package/dist/render/lib/document/card-templates.js +1 -1
- package/dist/render/lib/document/current-record.d.ts +4 -15
- package/dist/render/lib/document/current-record.js +1 -1
- package/dist/render/lib/document/render-config.d.ts +1 -0
- package/dist/render/lib/document/render-config.js +1 -1
- package/dist/render/lib/document/section-to-box-rows-detail.d.ts +2 -0
- package/dist/render/lib/document/section-to-box-rows-detail.js +1 -0
- package/dist/render/lib/document/section-to-box-rows-reviews.js +1 -1
- package/dist/render/lib/document/section-to-box-rows-spec.js +1 -1
- package/dist/render/lib/document/storefront-root.js +1 -1
- package/dist/render/lib/sections/product-price-text-regions.d.ts +4 -0
- package/dist/render/lib/sections/product-price-text-regions.js +1 -0
- package/dist/render/lib/sections/section-band.d.ts +6 -0
- package/dist/render/lib/sections/section-band.js +1 -1
- package/dist/render/lib/sections/spec-table-band.d.ts +4 -0
- package/dist/render/lib/sections/spec-table-band.js +1 -0
- package/dist/render/lib/wheels/signed-url.d.ts +3 -0
- package/dist/render/lib/wheels/signed-url.js +1 -0
- package/dist/words.d.ts +34 -15
- package/dist/words.js +5 -5
- package/package.json +4 -3
- package/dist/chunks/chunk-CRXKVHUQ.js +0 -1
- package/dist/chunks/chunk-LMOEQBT7.js +0 -340
- package/dist/chunks/chunk-QOM2OL54.js +0 -1
- package/dist/render/lib/sections/product-hero-text-regions.d.ts +0 -3
- package/dist/render/lib/sections/product-hero-text-regions.js +0 -1
- /package/dist/chunks/{chunk-LMOEQBT7.js.LEGAL.txt → chunk-NNBMZAW4.js.LEGAL.txt} +0 -0
|
@@ -859,6 +859,32 @@
|
|
|
859
859
|
[data-sf-card-shadow="soft"], [data-sf-box-shadow="soft"] { --sf-shadow-step: 0 1px 2px color-mix(in srgb, var(--sf-shadow-color, #141416) 7%, transparent), 0 4px 12px -4px color-mix(in srgb, var(--sf-shadow-color, #141416) 10%, transparent); }
|
|
860
860
|
[data-sf-card-shadow="lifted"], [data-sf-box-shadow="lifted"] { --sf-shadow-step: 0 2px 4px color-mix(in srgb, var(--sf-shadow-color, #141416) 6%, transparent), 0 14px 30px -10px color-mix(in srgb, var(--sf-shadow-color, #141416) 22%, transparent); }
|
|
861
861
|
[data-sf-box-shadow] { box-shadow: var(--sf-shadow-step); }
|
|
862
|
+
/* A Box's own Shadow per view (three-views plan 5e, part B2): the builder writes
|
|
863
|
+
`data-sf-box-shadow-tablet` / `-phone` = `on` | `off` only where a view's
|
|
864
|
+
answer differs from the desktop's. Same widths as the Block spacing views. */
|
|
865
|
+
@media (min-width: 720px) and (max-width: 1099.98px) {
|
|
866
|
+
[data-sf-box-shadow-tablet="on"] { box-shadow: var(--sf-shadow-step); }
|
|
867
|
+
[data-sf-box-shadow-tablet="off"] { box-shadow: none; }
|
|
868
|
+
}
|
|
869
|
+
@media not all and (min-width: 720px) {
|
|
870
|
+
[data-sf-box-shadow-phone="on"] { box-shadow: var(--sf-shadow-step); }
|
|
871
|
+
[data-sf-box-shadow-phone="off"] { box-shadow: none; }
|
|
872
|
+
}
|
|
873
|
+
/* A Box's Fill colour and Darken per view (three-views plan 5e, part B3). The
|
|
874
|
+
desktop answer stays INLINE (`background-color` on the Box or its card layer,
|
|
875
|
+
`background` on its Darken wash layer); the builder adds
|
|
876
|
+
`sf-fill-tablet` / `-phone` + `--sf-fill-tablet` / `-phone`, and
|
|
877
|
+
`sf-wash-tablet` / `-phone` + `--sf-wash-tablet` / `-phone`, only where a
|
|
878
|
+
view's answer differs (a phone that follows the tablet carries the phone
|
|
879
|
+
pair too). `!important` so the view beats the inline desktop style. */
|
|
880
|
+
@media (min-width: 720px) and (max-width: 1099.98px) {
|
|
881
|
+
.sf-fill-tablet { background-color: var(--sf-fill-tablet) !important; }
|
|
882
|
+
.sf-wash-tablet { background: var(--sf-wash-tablet) !important; }
|
|
883
|
+
}
|
|
884
|
+
@media not all and (min-width: 720px) {
|
|
885
|
+
.sf-fill-phone { background-color: var(--sf-fill-phone) !important; }
|
|
886
|
+
.sf-wash-phone { background: var(--sf-wash-phone) !important; }
|
|
887
|
+
}
|
|
862
888
|
|
|
863
889
|
/* ─── Heading compression ──────────────────────────────────────────────
|
|
864
890
|
The Appearance panel's "Headings" compression rung, applied to real headings
|
|
@@ -3363,6 +3389,136 @@ em.text-accent {
|
|
|
3363
3389
|
padding-block: 0;
|
|
3364
3390
|
}
|
|
3365
3391
|
|
|
3392
|
+
/* A Box's own Block spacing per view (three-views plan 5e, part B2). The
|
|
3393
|
+
builder (efficient-web-builder Flex) writes the desktop answer as above and,
|
|
3394
|
+
only where a view's answer differs from the desktop's, `sf-box-each-tablet` /
|
|
3395
|
+
`sf-box-gap-only-tablet` (and `-phone`; a phone that follows the tablet
|
|
3396
|
+
carries its class too). Each: `revert-layer`, because the rule above is
|
|
3397
|
+
unlayered, so this hands every block shape its own layered `py-*` back.
|
|
3398
|
+
Gap only: `0`, as above. The block shapes are the ones above, each one.
|
|
3399
|
+
Widths: the Tablet view's (720 up to, not including, 1100; the builder's
|
|
3400
|
+
`TABLET_MEDIA`) and the phone's below 720, as the section border's. After the
|
|
3401
|
+
desktop rule, so it wins at equal specificity.
|
|
3402
|
+
scripts/test-box-views-sheet.ts, scripts/browser-box-views.tsx. */
|
|
3403
|
+
@media (min-width: 720px) and (max-width: 1099.98px) {
|
|
3404
|
+
.sf-box-each-tablet > *,
|
|
3405
|
+
.sf-box-each-tablet > .sf-entrance > *,
|
|
3406
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > *,
|
|
3407
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > *,
|
|
3408
|
+
.sf-box-each-tablet > .sf-section-pad > *,
|
|
3409
|
+
.sf-box-each-tablet > .sf-entrance > .sf-section-pad > *,
|
|
3410
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > *,
|
|
3411
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > *,
|
|
3412
|
+
.sf-box-each-tablet > .sf-block-size > *,
|
|
3413
|
+
.sf-box-each-tablet > .sf-block-size > .sf-entrance > *,
|
|
3414
|
+
.sf-box-each-tablet > .sf-block-size > .sf-section-pad > *,
|
|
3415
|
+
.sf-box-each-tablet > .sf-block-size > .sf-entrance > .sf-section-pad > *,
|
|
3416
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > *,
|
|
3417
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > *,
|
|
3418
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > *,
|
|
3419
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
|
|
3420
|
+
padding-block: revert-layer;
|
|
3421
|
+
}
|
|
3422
|
+
/* …but `revert-layer` also drops a nested Box's own Overlap padding (its
|
|
3423
|
+
unlayered `.sf-gap-overlap-*` rule, above), which an Each Box draws: so a
|
|
3424
|
+
block shape that IS an Overlap Box takes its overlap padding back here. */
|
|
3425
|
+
.sf-box-each-tablet > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3426
|
+
.sf-box-each-tablet > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3427
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3428
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3429
|
+
.sf-box-each-tablet > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3430
|
+
.sf-box-each-tablet > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3431
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3432
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3433
|
+
.sf-box-each-tablet > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3434
|
+
.sf-box-each-tablet > .sf-block-size > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3435
|
+
.sf-box-each-tablet > .sf-block-size > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3436
|
+
.sf-box-each-tablet > .sf-block-size > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3437
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3438
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3439
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3440
|
+
.sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both) {
|
|
3441
|
+
padding-block: var(--sf-gap-overlap-eff);
|
|
3442
|
+
}
|
|
3443
|
+
.sf-box-gap-only-tablet > *,
|
|
3444
|
+
.sf-box-gap-only-tablet > .sf-entrance > *,
|
|
3445
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > *,
|
|
3446
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > *,
|
|
3447
|
+
.sf-box-gap-only-tablet > .sf-section-pad > *,
|
|
3448
|
+
.sf-box-gap-only-tablet > .sf-entrance > .sf-section-pad > *,
|
|
3449
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > *,
|
|
3450
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > *,
|
|
3451
|
+
.sf-box-gap-only-tablet > .sf-block-size > *,
|
|
3452
|
+
.sf-box-gap-only-tablet > .sf-block-size > .sf-entrance > *,
|
|
3453
|
+
.sf-box-gap-only-tablet > .sf-block-size > .sf-section-pad > *,
|
|
3454
|
+
.sf-box-gap-only-tablet > .sf-block-size > .sf-entrance > .sf-section-pad > *,
|
|
3455
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > *,
|
|
3456
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > *,
|
|
3457
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > *,
|
|
3458
|
+
.sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
|
|
3459
|
+
padding-block: 0;
|
|
3460
|
+
}
|
|
3461
|
+
}
|
|
3462
|
+
@media not all and (min-width: 720px) {
|
|
3463
|
+
.sf-box-each-phone > *,
|
|
3464
|
+
.sf-box-each-phone > .sf-entrance > *,
|
|
3465
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > *,
|
|
3466
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > *,
|
|
3467
|
+
.sf-box-each-phone > .sf-section-pad > *,
|
|
3468
|
+
.sf-box-each-phone > .sf-entrance > .sf-section-pad > *,
|
|
3469
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > *,
|
|
3470
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > *,
|
|
3471
|
+
.sf-box-each-phone > .sf-block-size > *,
|
|
3472
|
+
.sf-box-each-phone > .sf-block-size > .sf-entrance > *,
|
|
3473
|
+
.sf-box-each-phone > .sf-block-size > .sf-section-pad > *,
|
|
3474
|
+
.sf-box-each-phone > .sf-block-size > .sf-entrance > .sf-section-pad > *,
|
|
3475
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > *,
|
|
3476
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > *,
|
|
3477
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > *,
|
|
3478
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
|
|
3479
|
+
padding-block: revert-layer;
|
|
3480
|
+
}
|
|
3481
|
+
/* …but `revert-layer` also drops a nested Box's own Overlap padding (its
|
|
3482
|
+
unlayered `.sf-gap-overlap-*` rule, above), which an Each Box draws: so a
|
|
3483
|
+
block shape that IS an Overlap Box takes its overlap padding back here. */
|
|
3484
|
+
.sf-box-each-phone > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3485
|
+
.sf-box-each-phone > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3486
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3487
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3488
|
+
.sf-box-each-phone > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3489
|
+
.sf-box-each-phone > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3490
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3491
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3492
|
+
.sf-box-each-phone > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3493
|
+
.sf-box-each-phone > .sf-block-size > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3494
|
+
.sf-box-each-phone > .sf-block-size > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3495
|
+
.sf-box-each-phone > .sf-block-size > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3496
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3497
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3498
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
|
|
3499
|
+
.sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both) {
|
|
3500
|
+
padding-block: var(--sf-gap-overlap-eff);
|
|
3501
|
+
}
|
|
3502
|
+
.sf-box-gap-only-phone > *,
|
|
3503
|
+
.sf-box-gap-only-phone > .sf-entrance > *,
|
|
3504
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > *,
|
|
3505
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > *,
|
|
3506
|
+
.sf-box-gap-only-phone > .sf-section-pad > *,
|
|
3507
|
+
.sf-box-gap-only-phone > .sf-entrance > .sf-section-pad > *,
|
|
3508
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-section-pad > *,
|
|
3509
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-entrance > .sf-section-pad > *,
|
|
3510
|
+
.sf-box-gap-only-phone > .sf-block-size > *,
|
|
3511
|
+
.sf-box-gap-only-phone > .sf-block-size > .sf-entrance > *,
|
|
3512
|
+
.sf-box-gap-only-phone > .sf-block-size > .sf-section-pad > *,
|
|
3513
|
+
.sf-box-gap-only-phone > .sf-block-size > .sf-entrance > .sf-section-pad > *,
|
|
3514
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > *,
|
|
3515
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > *,
|
|
3516
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-section-pad > *,
|
|
3517
|
+
.sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
|
|
3518
|
+
padding-block: 0;
|
|
3519
|
+
}
|
|
3520
|
+
}
|
|
3521
|
+
|
|
3366
3522
|
/* ── THE VISITOR'S OWN "REDUCE MOTION" SETTING ──────────────────────────────
|
|
3367
3523
|
[ADD] The Site Respects Reduce Motion.
|
|
3368
3524
|
|
|
@@ -54,6 +54,7 @@ interface CartCtx {
|
|
|
54
54
|
warmCatalog: (kind?: ProductKind) => void;
|
|
55
55
|
add: (line: CartLine) => void;
|
|
56
56
|
addAndOpen: (line: CartLine) => void;
|
|
57
|
+
setAutoOpen: (on: boolean) => void;
|
|
57
58
|
remove: (id: string) => void;
|
|
58
59
|
setQty: (id: string, qty: number) => void;
|
|
59
60
|
replaceItems: (lines: CartLine[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as zt}from"react/jsx-runtime";import{createContext as Jt,useCallback as u,useContext as Xt,useEffect as y,useMemo as Nt,useRef as q,useState as i}from"react";import{usePathname as Yt}from"next/navigation";import{products as E}from"../lib/api/index.js";import{couponDeferredToCheckout as Gt}from"../lib/cart/coupon-preview.js";import{snapshotCartLines as Kt}from"../lib/cart/snapshot-lines.js";import{MAX_QTY_PER_LINE as Tt,orderLinesForSets as Zt,setPrice as $t}from"../lib/commerce.js";import{UNPRICED_LABEL as te}from"../lib/wheels/price-display.js";import{isValidEmail as ee}from"../lib/email-shape.js";import{trackAddToCart as ne}from"../lib/google-tag.js";import{shippingStatus as oe}from"../lib/cart/shipping-status.js";import{useCurrency as se}from"./CurrencyContext.js";const re=400,ue=400,ce=1500;function bt(a){return(a.components?.length??0)>0}function qt(a,s){return{code:a,valid:s.valid,deferred:Gt(s,s.askedAsShopper),message:s.message||void 0,effects:s.effects??void 0}}function Bt(a,s){return $t(a.components,s)}function W(a,s){const r=Bt(a,s);return r===null?null:r*a.qty}function Mt(a){return a!=="tyre"}const Ot=Jt(null);function Ne({children:a,preview:s=!1}){const{currency:r,country:Q,formatMoney:It}=se(),[H,R]=i(s),[l,O]=i([]),[V,xt]=i([]),[j,At]=i([]),[F,St]=i(!1),[v,_t]=i(!1),[Pt,Dt]=i(!1),[Rt,Ut]=i(!1),[m,z]=i(null),[kt,wt]=i(0),J=u(()=>wt(t=>t+1),[]),[X,Y]=i(void 0),[N,Lt]=i(null),[c,C]=i(null),[G,I]=i(!1),[p,K]=i(null),x=q(void 0),T=u(()=>R(!0),[]),A=u(()=>R(!1),[]),Z=u(()=>R(t=>!t),[]);y(()=>{s||typeof window>"u"||new URLSearchParams(window.location.search).get("cart")==="open"&&T()},[T,s]);const S=Yt(),$=q(S);y(()=>{$.current!==S&&($.current=S,s||A())},[S,s,A]);const tt=u(t=>{Lt(e=>e?.country===t?.country&&e?.subdivision===t?.subdivision&&e?.postcode===t?.postcode?e:t)},[]),et=u(t=>{Ut(!0),Mt(t)&&Dt(!0)},[]),nt=Pt||l.some(t=>Mt(t.kind)),ot=Rt||l.length>0;y(()=>{if(s||!nt||F)return;let t=!0;return E.listWheels().then(e=>{t&&(xt(e),St(!0))}),()=>{t=!1}},[s,nt,F]),y(()=>{if(s||!ot||v)return;let t=!0;return E.listBundles().then(e=>{t&&(At(e),_t(!0))}),()=>{t=!1}},[s,ot,v]);const g=m?.deliveryOptions??[],st=m?.courier??null;y(()=>{m&&K(t=>t&&g.some(e=>e.id===t)?t:g[0]?.id??null)},[m]);const _=u(()=>l.filter(bt).flatMap(t=>Zt(t.components,t.qty)),[l]),rt=u(async(t,e)=>{const o=t.trim().toUpperCase();if(!o)return;const n=_();if(n.length===0){C({code:o,valid:!1,message:"Add a wheel to the cart first."});return}I(!0),x.current=e;try{const d=await E.validateCoupon({code:o,items:n,currency:r,shippingMethodId:p??void 0,customerEmail:e});C(qt(o,d))}catch{C({code:o,valid:!1,unchecked:!0,message:"Could not check that code. Please try again."})}finally{I(!1)}},[_,r,p]),ut=u(()=>{C(null),x.current=void 0},[]),ct=u(t=>{if(!c)return;const{code:e}=c;C(o=>o&&o.code===e?{code:e,valid:!1,refused:!0,message:t}:o)},[c]);y(()=>{if(!c||c.refused)return;const t=c.code,e=n=>n!==null&&n.code===t&&!n.refused,o=setTimeout(async()=>{const n=_();if(n.length===0){C(d=>e(d)?{code:t,valid:!1,message:"Add a wheel to the cart first."}:d);return}I(!0);try{const d=await E.validateCoupon({code:t,items:n,currency:r,shippingMethodId:p??void 0,customerEmail:x.current});C(M=>e(M)?qt(t,d):M)}catch{}finally{I(!1)}},re);return()=>clearTimeout(o)},[l,r,p]);const U=c&&!c.refused?c.code:void 0;y(()=>{if(s)return;let t=!0;const e=setTimeout(async()=>{const o=_();if(o.length===0){z(null),Y(void 0);return}try{const n=await E.quoteCart({items:o,currency:r,shippingMethodId:p??void 0,couponCode:U,customerEmail:x.current||void 0,country:N?.country||Q||void 0,subdivision:N?.country&&N.subdivision||void 0,postcode:N?.country&&N.postcode||void 0});if(!t)return;z(n)}catch{if(!t)return}Y(U)},ue);return()=>{t=!1,clearTimeout(e)}},[l,r,p,U,Q,N,kt]);const P=u(t=>{O(e=>{const o=e.findIndex(n=>n.id===t.id);return o===-1?[...e,t]:e.map((n,d)=>d===o?{...n,qty:Math.min(Tt,n.qty+t.qty)}:n)}),ne(t,r)},[r]),it=u(t=>{O(e=>e.filter(o=>o.id!==t))},[]),at=u((t,e)=>{const o=Math.max(1,Math.min(Tt,e));O(n=>n.map(d=>d.id===t?{...d,qty:o}:d))},[]),lt=u(t=>{O(t)},[]),[B,Wt]=i(null),dt=q(null);dt.current=B;const h=q(null),k=q(""),ft=u((t,e)=>{const o=t.trim().toLowerCase();ee(o)&&Wt(n=>n&&n.email===o&&n.firstName===(e??"")?n:{email:o,firstName:e??""})},[]);y(()=>{if(s||!B)return;const t=Kt(l.filter(bt),n=>W(n,r)===null?te:It(W(n,r),r)),e={email:B.email,firstName:B.firstName,currency:r,items:t},o=JSON.stringify(e);if(o!==k.current)return h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{h.current=null,k.current=o,E.captureCart(e).catch(n=>{process.env.NODE_ENV!=="production"&&console.warn("abandoned-cart capture failed",n)})},ce),()=>{h.current&&(clearTimeout(h.current),h.current=null)}},[l,B,r,s]);const mt=u(()=>{h.current&&(clearTimeout(h.current),h.current=null);const t=dt.current;t&&(k.current="",E.captureCart({email:t.email,firstName:t.firstName,currency:r,items:[]}).catch(e=>{process.env.NODE_ENV!=="production"&&console.warn("abandoned-cart clear failed",e)}))},[r]),pt=Nt(()=>{const t=l.reduce((f,b)=>{const D=W(b,r);return D===null?f:f+D},0),e=l.some(f=>Bt(f,r)===null),o=l.reduce((f,b)=>f+b.qty,0),n=c?.valid?c.effects:void 0,d=n?Math.min(t,Number(n.discountAmount)):0,M=m?.bundleDiscount??0,Ht=m?.appliedBundles??[],w=!!n?.freeShipping,gt=g.find(f=>f.id===p),Et=w?0:m?.shipping??gt?.amount??0,Vt=oe({quoted:m!==null,optionCount:g.length,chosenAmount:gt?.amount,couponWaivesFreight:w}),L={};for(const f of n?.freeUnits??[])L[f.partNumber]=(L[f.partNumber]??0)+f.quantity;const jt=m?.tax??null,Ft=m?m.grandTotal:t-d-M+Et;return{sets:o,units:l.reduce((f,b)=>f+(b.components??[]).reduce((D,vt)=>D+vt.wheels*b.qty,0),0),subtotal:t,hasUnpricedLine:e,discount:d,bundleDiscount:M,appliedBundles:Ht,shipping:Et,freeShipping:w,shippingStatus:Vt,freeUnitsByPartNumber:L,tax:jt,grand:Ft,repricing:!!c?.refused&&m!==null&&X===c?.code,currency:r}},[l,r,c,g,p,m,X]),ht=q(!0),yt=u(t=>{ht.current=t},[]),Ct=u(t=>{P(t),ht.current&&T()},[P,T]),Qt=Nt(()=>({isOpen:H,preview:s,open:T,close:A,toggle:Z,items:l,catalog:V,bundles:j,warmCatalog:et,add:P,addAndOpen:Ct,setAutoOpen:yt,remove:it,setQty:at,replaceItems:lt,identify:ft,clearCapturedCart:mt,coupon:c,applyCoupon:rt,removeCoupon:ut,refuseCoupon:ct,couponBusy:G,deliveryOptions:g,setQuoteDestination:tt,courier:st,requote:J,shippingMethodId:p,setShippingMethodId:K,totals:pt}),[H,s,T,A,Z,l,V,j,et,P,Ct,yt,it,at,lt,ft,mt,c,rt,ut,ct,G,g,tt,st,J,p,pt]);return zt(Ot.Provider,{value:Qt,children:a})}function Te(){const a=Xt(Ot);if(!a)throw new Error("useCart() must be called inside <CartProvider>. Mount the provider in app/layout.tsx.");return a}export{Ne as CartProvider,bt as isOrderable,W as lineTotal,Te as useCart};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type CartDrawerContent } from "efficient-web-builder/format/lib/content/cart-drawer";
|
|
2
|
-
export default function CartDrawer({ content, }: {
|
|
1
|
+
import { type CartDrawerContent, type CartDrawerLook } from "efficient-web-builder/format/lib/content/cart-drawer";
|
|
2
|
+
export default function CartDrawer({ content, look, }: {
|
|
3
3
|
content?: CartDrawerContent;
|
|
4
|
-
|
|
4
|
+
look?: CartDrawerLook;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
"use client";import{jsx as r,jsxs as a
|
|
2
|
-
@keyframes storefront-cart-fade { from { opacity: 0 } to { opacity: 1 } }
|
|
3
|
-
@keyframes storefront-cart-slide { from { transform: translateX(40px); opacity: 0 } to { transform: translateX(0); opacity: 1 } }
|
|
4
|
-
`}),r(h,{content:e,closeRef:s}),r(R,{content:e}),a("div",{className:"flex-1 overflow-y-auto [scrollbar-color:var(--site-line)_transparent] [scrollbar-width:thin]",children:[r(w,{content:e,tyres:f}),r(D,{}),r(g,{}),r(v,{content:e})]}),r(k,{}),r(C,{})]})]}):null}export{_ as default};
|
|
1
|
+
"use client";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useEffect as p,useRef as f}from"react";import{useCart as u}from"./CartContext.js";import{isTyreLine as C}from"../lib/tyres/tyre-purchase.js";import{useTyreCatalog as d}from"./useTyreCatalog.js";import R from"./PopupFrame.js";import{CartActions as w,CartCouponRow as T,CartDrawerHeader as x,CartLines as O,CartStatusRail as _,CartTotals as v,CartTrustMarkers as y,CartUpsell as A}from"./cart/drawer-parts.js";import{CART_DRAWER_DEFAULTS as D,resolveCartDrawerLook as L}from"efficient-web-builder/format/lib/content/cart-drawer";const h=L(void 0);function j({content:e=D,look:o=h}){const{isOpen:l,preview:n,close:i,items:c,setAutoOpen:t}=u(),s=f(null),m=d(c.some(C));return p(()=>{t(o.autoOpen)},[o.autoOpen,t]),a(R,{look:o,drawer:{closeRef:s,lockScroll:!n},open:l,onClose:i,label:"Your cart",children:[r(x,{content:e,closeRef:s}),r(_,{content:e}),a("div",{className:"flex-1 overflow-y-auto [scrollbar-color:var(--site-line)_transparent] [scrollbar-width:thin]",children:[r(O,{content:e,tyres:m}),r(A,{}),r(T,{}),r(y,{content:e})]}),r(v,{}),r(w,{})]})}export{j as default};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
+
import type { SourceRow } from "efficient-web-builder/format/lib/content/block-sources";
|
|
2
3
|
export interface DetailSpec {
|
|
3
4
|
label?: string;
|
|
4
5
|
value?: string;
|
|
@@ -20,5 +21,9 @@ export interface DetailRowsProps {
|
|
|
20
21
|
padTop?: number;
|
|
21
22
|
padBottom?: number;
|
|
22
23
|
editing?: boolean;
|
|
24
|
+
template?: unknown;
|
|
25
|
+
nodeId?: string;
|
|
23
26
|
}
|
|
24
|
-
export
|
|
27
|
+
export declare function detailCardRow(row: DetailRow): SourceRow;
|
|
28
|
+
export declare function templateCanDraw(rows: readonly DetailRow[]): boolean;
|
|
29
|
+
export default function DetailRows({ rows, startLeft, layout, padTop, padBottom, editing, template, nodeId, }: DetailRowsProps): import("react").JSX.Element | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as i,jsxs as o}from"react/jsx-runtime";import z from"./SectionBand.js";import T from"efficient-web-builder/render/components/Placeholder";import{withRMark as c}from"efficient-web-builder/render/components/RMark";import{renderGold as u}from"efficient-web-builder/render/components/goldPhrases";import{say as g}from"efficient-web-builder/format/lib/editor-words";import{stripMarkup as _}from"efficient-web-builder/format/lib/markup";import{finiteNumber as v}from"efficient-web-builder/format/lib/finite-number";import{CardTemplateRows as $}from"efficient-web-builder/render/components/CardRowContext";const p={body:"text-[length:var(--size-body,15px)]",labelSmall:"text-[length:var(--size-label,11px)]",label:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"};function C(t){return{eyebrow:t.eyebrow?.trim()?t.eyebrow:"",title:t.title?.trim()?t.title:"",copy:t.copy?.trim()?t.copy:"",image:t.image?.trim()?t.image:"",tag:t.tag?.trim()?t.tag:""}}function S(t){return t.every(r=>!r.media&&!(r.specs??[]).some(n=>(n?.label??"").trim()||(n?.value??"").trim()))}const B="[&:not(:first-child)]:border-t [&:not(:first-child)]:border-line";function D({rows:t,startLeft:r=!1,layout:n="even",padTop:y,padBottom:w,editing:N=!1,template:k,nodeId:j}){const a=n==="narrow",f=v(y),x=v(w),h=(t??[]).filter(e=>(e?.eyebrow??"").trim()||(e?.title??"").trim()||(e?.copy??"").trim()||(e?.tag??"").trim()||(e?.image??"").trim()),m=h.length>0?h:N?[{tag:g("Row {n}",{n:1})},{tag:g("Row {n}",{n:2})},{tag:g("Row {n}",{n:3})}]:[];return m.length===0?null:i(z,{className:"relative z-[2] border-b border-line bg-bg",style:{...f===void 0?{}:{paddingTop:f},...x===void 0?{}:{paddingBottom:x}},defaults:{paddingTop:100,paddingBottom:100},children:i($,{ownerId:j??"",ownerType:"DetailRows",Template:S(m)?k:void 0,rows:m.map(C),fallback:m.map((e,s)=>{const d=s%2===1!==r;return o("div",{className:["grid items-center py-[60px]",a?"grid-cols-[1fr_460px] gap-[72px]":"grid-cols-2 gap-12","max-view-desktop:grid-cols-1",d?"[direction:rtl] max-view-desktop:[direction:ltr]":"",s>0?"border-t border-line":""].join(" "),children:[o("div",{className:["[direction:ltr] flex flex-col gap-4",a?"max-w-[560px]":"",a&&!d?"ml-auto max-view-desktop:ml-0":""].join(" "),children:[e.eyebrow?.trim()&&i("div",{className:`font-mono ${p.labelLarge} uppercase tracking-[0.2em] text-accent`,children:c(e.eyebrow)}),e.title?.trim()&&i("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(28px,3vw,42px)),var(--sf-heading-max,9999px))] [font-weight:var(--sf-heading-weight,500)] [&_em]:[font-weight:var(--sf-heading-weight-strong,inherit)] leading-[1.1] tracking-[-0.02em]",children:u(e.title,!0)}),e.copy?.trim()&&i("p",{className:`${p.body} leading-[1.6] text-fg-dim`,children:u(e.copy,!1)}),(()=>{const b=(e.specs??[]).filter(l=>(l?.label??"").trim()||(l?.value??"").trim());return b.length===0?null:i("dl",{className:`mt-2 border-t border-line pt-3 font-mono ${p.label} uppercase tracking-[0.1em] leading-[2.1]`,children:b.map((l,R)=>o("div",{className:"flex items-baseline justify-between gap-6",children:[i("dt",{className:"text-fg-dim",children:c(l.label??"")}),i("dd",{className:"text-fg",children:c(l.value??"")})]},R))})})()]}),o("div",{className:["[direction:ltr] flex flex-col gap-3",a?d?"items-end":"items-start":"",a?"max-view-desktop:items-start":""].join(" "),children:[e.media?i("div",{className:"w-full",children:e.media}):i("div",{className:["relative overflow-hidden max-w-full",a?e.imageShape==="wide"?"w-[460px] aspect-[16/9]":"w-[360px] aspect-square":"aspect-square"].join(" "),children:i(T,{label:e.tag?.trim()||e.title?.trim()||`row-${s+1}`,src:e.image||void 0,alt:_(e.title?.trim()||e.tag?.trim()||""),showBackground:!e.image,objectFit:"contain",sizes:a?"(max-width: 1100px) 100vw, 460px":"(max-width: 1100px) 100vw, 50vw"})}),e.tag?.trim()&&i("span",{className:`font-mono ${p.labelSmall} uppercase tracking-[0.2em] text-fg-dim ${d?"text-left":"text-right"}`,children:c(e.tag)})]})]},s)}),wrapCopy:e=>i("div",{className:B,children:e}),children:e=>e})})}export{D as default,C as detailCardRow,S as templateCanDraw};
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as t,jsxs as d}from"react/jsx-runtime";function x({finishes:c,availability:
|
|
1
|
+
"use client";import{jsx as t,jsxs as d}from"react/jsx-runtime";function x({finishes:c,availability:u,selectedIdx:a,hoverIdx:s,activeFinish:i,onSelect:f,onHover:r,showLabel:g=!0,className:m}){return d("div",{className:["mt-4",m].filter(Boolean).join(" "),children:[t("div",{className:"flex flex-wrap items-center gap-2",onMouseLeave:()=>r(null),onClick:e=>e.preventDefault(),children:c.map((e,n)=>{if(!u[n])return null;const l=n===a,p=s===n&&s!==a;return t("button",{type:"button",title:e.name,"aria-label":e.name,"aria-pressed":l,onMouseEnter:()=>r(n),onFocus:()=>r(n),onBlur:()=>r(null),onClick:o=>{o.preventDefault(),o.stopPropagation(),f(n)},className:["h-4 w-4 shrink-0 rounded-full transition-all",l?"ring-2 ring-accent ring-offset-2 ring-offset-surface":p?"ring-1 ring-fg ring-offset-2 ring-offset-surface":"ring-1 ring-fg/30 ring-offset-1 ring-offset-surface"].join(" "),style:{background:e.color,border:"1px solid var(--swatch-border)"}},`${e.name}
|
|
2
|
+
${e.src}`)})}),g&&i&&t("div",{className:"mt-2 truncate font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim",children:i.name})]})}export{x as default};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import { type
|
|
2
|
+
import { type HeroPriceTemplateProps } from "./ProductHeroPanel.js";
|
|
3
3
|
import type { HeroPricePlacement } from "../lib/sections/hero-price-placement.js";
|
|
4
4
|
import type { HeroLayout, HeroTextAlign } from "../lib/sections/hero-arrangement.js";
|
|
5
5
|
import type { HeroGalleryMode, HeroImageFit } from "../lib/sections/hero-gallery.js";
|
|
@@ -11,7 +11,7 @@ export type LinkedHeroRecord = {
|
|
|
11
11
|
kind: "tyre";
|
|
12
12
|
tyre: Tyre;
|
|
13
13
|
};
|
|
14
|
-
interface HeroArrangement extends
|
|
14
|
+
interface HeroArrangement extends HeroPriceTemplateProps {
|
|
15
15
|
heroLayout?: HeroLayout;
|
|
16
16
|
imageRatio?: number;
|
|
17
17
|
textAlign?: HeroTextAlign;
|
|
@@ -11,10 +11,19 @@ export interface SiteScrim {
|
|
|
11
11
|
animation?: string;
|
|
12
12
|
}
|
|
13
13
|
export declare const SITE_BLUR: Record<SiteScrim["blur"], string>;
|
|
14
|
+
export interface DrawerFrame {
|
|
15
|
+
closeRef: RefObject<HTMLElement | null>;
|
|
16
|
+
lockScroll?: boolean;
|
|
17
|
+
}
|
|
14
18
|
export declare function tintOf(hex: string, opacity: number): string;
|
|
15
|
-
export
|
|
19
|
+
export declare function closeButtonPlace(look: Pick<PopupLook, "closeButton" | "fullWidth" | "height" | "width">): {
|
|
20
|
+
place: PopupLook["closeButton"];
|
|
21
|
+
until?: number;
|
|
22
|
+
};
|
|
23
|
+
export default function PopupFrame({ look, site, drawer, open, inline, modal, onClose, label, labelledBy, children, }: {
|
|
16
24
|
look?: PopupLook;
|
|
17
25
|
site?: SiteScrim;
|
|
26
|
+
drawer?: DrawerFrame;
|
|
18
27
|
open?: boolean;
|
|
19
28
|
inline?: boolean;
|
|
20
29
|
modal?: boolean;
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as l,jsxs as b,Fragment as T}from"react/jsx-runtime";import{useCallback as N,useEffect as E,useRef as _}from"react";import{resolveCartDrawerLook as S}from"efficient-web-builder/format/lib/content/cart-drawer";import{useModalDismiss as W}from"./useModalDismiss.js";const D="color-mix(in oklab, var(--bg) 78%, transparent)",O={6:"backdrop-blur-[6px]",8:"backdrop-blur-[8px]"},z={popup:"z-[90]",consent:"z-[95]"},B=S(void 0).width,A="rgba(0,0,0,.5)",L={"top-left":{justifyContent:"flex-start",alignItems:"flex-start"},"top-center":{justifyContent:"center",alignItems:"flex-start"},"top-right":{justifyContent:"flex-end",alignItems:"flex-start"},left:{justifyContent:"flex-start",alignItems:"center"},center:{justifyContent:"center",alignItems:"center"},right:{justifyContent:"flex-end",alignItems:"center"},"bottom-left":{justifyContent:"flex-start",alignItems:"flex-end"},"bottom-center":{justifyContent:"center",alignItems:"flex-end"},"bottom-right":{justifyContent:"flex-end",alignItems:"flex-end"}};function v(t,e){const n=Number.parseInt(t.slice(1),16),s=n>>16&255,a=n>>8&255,o=n&255;return`rgba(${s}, ${a}, ${o}, ${Math.round(e)/100})`}function w(t,e){const n=e||t.closeButton!=="none";return t.outsideClick||!n}const g=48,P=46;function F(t){const e=t.height==="full";return t.closeButton==="inside"||!e&&!t.fullWidth?{place:t.closeButton}:t.closeButton==="outside"?{place:"inside"}:e&&t.fullWidth?{place:"inside"}:e?{place:"inside",until:t.width+g}:{place:"none"}}function H({look:t,site:e,drawer:n,open:s=!0,inline:a=!1,modal:o=!0,onClose:y,label:d,labelledBy:I,children:m}){const p=_(null),f=N(()=>y?.(),[y]),c=o&&!a;W({active:c&&s,onDismiss:f,focusRef:e?e.focusRef:n?void 0:p,trapRef:e?e.trapRef:n?p:void 0,lockScroll:n?.lockScroll});const x=n?.closeRef;if(E(()=>{!x||!c||!s||x.current?.focus({preventScroll:!0})},[x,c,s]),!a&&!s)return null;if(e){const r=["fixed inset-0",z[e.layer??"popup"],"flex items-center justify-center",e.scroll?"overflow-y-auto":"","p-6",O[e.blur],e.sheetOnPhone?"max-[880px]:items-end max-[880px]:p-0":""].filter(Boolean).join(" ");return l("div",{role:"dialog","aria-modal":"true","aria-label":d,"aria-labelledby":I,"data-popup-frame":"site",onClick:u=>{u.target===u.currentTarget&&f()},className:r,style:{background:D,animation:e.animation},children:m})}if(!t)return null;if(n){const r=t.placement==="left",u=t.width!==B;return b(T,{children:[l("div",{onClick:c&&w(t,!0)?f:void 0,className:"fixed inset-0 z-[60] backdrop-blur-[4px]",style:{background:v(t.tintColor,t.tintOpacity).replaceAll(" ",""),animation:"storefront-cart-fade 350ms ease both"},"aria-hidden":"true"}),b("aside",{ref:p,role:"dialog","aria-label":d,"aria-modal":"true",className:`fixed inset-y-0 ${r?"left-0":"right-0"} z-[61] flex ${u?"w-[var(--sf-cart-drawer-width)]":"w-[520px]"} max-w-[100vw] flex-col ${r?"border-r":"border-l"} border-line bg-bg max-[640px]:w-screen ${r?"max-[640px]:border-r-0":"max-[640px]:border-l-0"}`,style:{...u?{"--sf-cart-drawer-width":`${t.width}px`}:null,animation:`${r?"storefront-cart-slide-left":"storefront-cart-slide"} 450ms cubic-bezier(.2,.7,.2,1) both`,boxShadow:`${r?"":"-"}30px 0 80px ${A}`},onClick:R=>R.stopPropagation(),children:[l("style",{children:`
|
|
2
|
+
@keyframes storefront-cart-fade { from { opacity: 0 } to { opacity: 1 } }
|
|
3
|
+
@keyframes storefront-cart-slide { from { transform: translateX(40px); opacity: 0 } to { transform: translateX(0); opacity: 1 } }
|
|
4
|
+
${r?` @keyframes storefront-cart-slide-left { from { transform: translateX(-40px); opacity: 0 } to { transform: translateX(0); opacity: 1 } }
|
|
5
|
+
`:""}`}),m]})]})}const $=r=>{!c||!w(t,!1)||r.target===r.currentTarget&&f()},h=t.height==="full",C=t.fullWidth||h,i=F(t),j=b("div",{ref:p,tabIndex:-1,"data-popup-panel":"",className:"relative flex flex-col bg-bg text-fg outline-none",style:{width:t.fullWidth?"100%":`min(${t.width}px, 100%)`,height:h?"100%":void 0,maxHeight:t.fullWidth&&!h||i.place==="outside"?`calc(100% - ${g}px)`:"100%",borderRadius:C?0:"var(--sf-section-radius, 0px)",...o||a?null:{pointerEvents:"auto"}},children:[i.place!=="none"?l("button",{type:"button","aria-label":"Close",onClick:a?void 0:f,"data-popup-close":i.place,"data-popup-close-until":i.until,className:"absolute z-[5] flex h-[38px] w-[38px] items-center justify-center border border-line bg-bg font-mono text-[14px] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:i.place==="outside"?{top:-P,right:0}:{top:12,right:12},children:"×"}):null,i.until?l("style",{children:`@container popup-frame (min-width: ${i.until+1}px){[data-popup-close-until="${i.until}"]{display:none}}`}):null,l("div",{"data-popup-scroll":"",className:"min-h-0 flex-1",style:{overflow:"auto"},children:m})]});return l("div",{role:o||a?"dialog":"region","aria-modal":c?!0:void 0,"aria-label":d,"data-popup-frame":a?"inline":"live",onClick:$,className:a?"relative flex min-h-[100vh] w-full":"fixed inset-0 z-[90] flex",style:{...L[t.placement],background:v(t.tintColor,t.tintOpacity),padding:C?0:i.place==="outside"&&t.placement.startsWith("top")?`${24+g}px 24px 24px`:24,...i.until?{containerType:"inline-size",containerName:"popup-frame"}:null,...o||a?null:{pointerEvents:"none"}},children:j})}export{O as SITE_BLUR,D as SITE_TINT,F as closeButtonPlace,H as default,v as tintOf};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,Fragment as
|
|
1
|
+
"use client";import{jsx as e,Fragment as y,jsxs as F}from"react/jsx-runtime";import X from"next/image";import{useState as q}from"react";import{setSecondSrc as G}from"../lib/wheels/set-mode.js";import{CARD_INDEX_BADGE_CLASS as H,CARD_INDEX_CLASS as M}from"efficient-web-builder/format/lib/sections/product-card-style";import{coverSrcForWheel as O,resolvePaintedSrc as J}from"../lib/wheels/cover-rendering.js";import{wheelCardEyebrow as K,withSetChip as Q}from"./ProductCardEyebrow.js";import{withRMark as T}from"efficient-web-builder/render/components/RMark";import V from"./WheelPlaceholder.js";import{useProductCardChrome as Y}from"./ProductCardChrome.js";import Z,{CardBuyDialog as ee}from"./card-pieces/CardBuyButton.js";import re from"./card-pieces/CardFinishSwatches.js";import oe from"./card-pieces/CardPrice.js";import se from"./card-pieces/CardProductBadge.js";import{useHeldCardPicture as ae}from"./card-pieces/useHeldCardPicture.js";import{useWheelCardState as te,WheelCardStateProvider as ie}from"./card-pieces/ProductCardState.js";import{CardSpecFacts as ne}from"./card-pieces/CardSpecs.js";import de from"./WheelCardFrame.js";import{cardSpinOf as ce}from"./card-spin.js";function le({wheel:n,variant:t="compact",defaultFinish:r}){return e(ie,{wheel:n,defaultFinish:r,children:e(me,{variant:t})})}function me({variant:n}){const t=n==="catalog",{wheel:r,sel:o,isSet:d}=te(),{imageBackgroundFill:B,hover:P,coverIndex:E,indexBadge:m,outline:x,showBadge:k,fieldUsage:h,reserveEyebrow:_,showCardPrice:$,showCardFinishes:v,showCardSizes:z,showCardBuy:f,showCardPage:u,imageSizes:p}=Y(),c=t&&(f||u),A=O(r,E,o.finish?.name,o.shownSrc),D="h-full w-full",l=ce(P),[w,I]=q(()=>new Set),g=s=>{o.pictureFailed(s),I(i=>i.has(s)?i:new Set(i).add(s))},S=J({overrideSrc:A,hookSrc:o.shownSrc,failed:w}),C=(s,i)=>e(X,{alt:i,src:s,width:1e3,height:1e3,sizes:p,className:`block object-contain ${l.className} ${D}`,style:l.style,draggable:!1,onError:()=>g(s)},s),L=o.finish?`${r.name} — ${o.finish.name}`:r.name,j=d?G(r.finishes?.find(s=>s.name===o.finish?.name),S):null,a=ae({src:S,second:j,alt:L,sizes:p,failed:w,onFailed:g,near:o.nearScreen,holdEmpty:o.awaitingProbe}),N=F(y,{children:[a.src?C(a.src,a.alt):e(V,{imageLabel:r.name,spin:l}),a.trial]}),W=a.second?C(a.second,`${a.alt} — right`):void 0,b=K({kindLabel:null,brand:null,process:r.process?T(r.process):null},h),R=d&&!t?Q(b):b,U=m!=="off"?e("span",{"aria-hidden":!0,className:`${M} ${H}`}):null;return F(y,{children:[e(de,{variant:n,wide:d&&t,href:`/wheels/${r.slug}`,outline:x,imageBackgroundFill:B,probes:o.probes,reserveEyebrow:_,indexBadge:U,badges:e(se,{show:k,numbered:m!=="off",axleSets:!0}),image:N,imageSecond:W,eyebrow:R,spec:e(ne,{sizes:z,fieldUsage:h}),price:e(oe,{show:$,quoteSets:!0}),swatches:e(re,{show:v}),identityLink:c,wholeCardLink:!0,buy:e(Z,{buy:c&&f,page:c&&u})}),e(ee,{})]})}export{le as default};
|
|
@@ -4,12 +4,12 @@ import { type StoreProduct } from "../lib/catalog/store-product.js";
|
|
|
4
4
|
import type { HeroPricePlacement } from "../lib/sections/hero-price-placement.js";
|
|
5
5
|
import { type HeroLayout, type HeroTextAlign } from "../lib/sections/hero-arrangement.js";
|
|
6
6
|
import { type HeroGalleryMode, type HeroImageFit } from "../lib/sections/hero-gallery.js";
|
|
7
|
-
import type {
|
|
8
|
-
export interface
|
|
7
|
+
import type { SlotComponent } from "efficient-easel/blocks";
|
|
8
|
+
export interface HeroPriceTemplateProps {
|
|
9
9
|
nodeId?: string;
|
|
10
|
-
|
|
10
|
+
priceTemplate?: SlotComponent;
|
|
11
11
|
}
|
|
12
|
-
interface Props extends
|
|
12
|
+
interface Props extends HeroPriceTemplateProps {
|
|
13
13
|
product: StoreProduct;
|
|
14
14
|
selection: ProductSelection;
|
|
15
15
|
onLightbox: (src: string, alt: string) => void;
|
|
@@ -25,5 +25,5 @@ interface Props extends HeroTextRegionProps {
|
|
|
25
25
|
imageFit?: HeroImageFit;
|
|
26
26
|
trustBullets?: ReactNode;
|
|
27
27
|
}
|
|
28
|
-
export default function ProductHeroPanel({ product, selection, onLightbox, editing, pricePlacement, showVehicleFitment, heroLayout, imageRatio, textAlign, showSpecTable, showPriceQuote, galleryMode, imageFit, trustBullets, nodeId,
|
|
28
|
+
export default function ProductHeroPanel({ product, selection, onLightbox, editing, pricePlacement, showVehicleFitment, heroLayout, imageRatio, textAlign, showSpecTable, showPriceQuote, galleryMode, imageFit, trustBullets, nodeId, priceTemplate, }: Props): import("react").JSX.Element;
|
|
29
29
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{Fragment as b,jsx as a,jsxs as n}from"react/jsx-runtime";import Q from"next/link";import{BUY_ROW_CLASS as Ne}from"./buy-row.js";import{useEffect as J,useRef as Se,useState as Te}from"react";import{useCart as we}from"./CartContext.js";import Re from"./QuoteLink.js";import{useSiteTakesOrders as _e}from"./SiteRecordContext.js";import Ee from"./EmailCaptureForm.js";import{useEnglish as I}from"./EnglishVariant.js";import Ae from"./QuantityStepper.js";import{MarkedLabel as $,heroView as Ce}from"./product-hero/hero-view.js";import Oe from"./ProductGallery.js";import{useRootIsDark as Le}from"efficient-shell/theme";import{useWishlist as ze}from"./WishlistContext.js";import{useStockAlertSignup as Ie}from"./useStockAlertSignup.js";import{SPARE_WORDS as $e,productCartLine as je}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as Me}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as De}from"../lib/catalog/product-options.js";import{STOCK_WORDS as Pe}from"../lib/content/stock-words.js";import{trackViewItem as Fe}from"../lib/google-tag.js";import{DEFAULT_HERO_LAYOUT as He,DEFAULT_HERO_RATIO as Ue,DEFAULT_HERO_TEXT_ALIGN as Be,parseHeroLayout as Ve,parseHeroRatio as Ge,parseHeroTextAlign as We}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as Ke,DEFAULT_HERO_IMAGE_FIT as qe}from"../lib/sections/hero-gallery.js";import{ADD_TO_BASKET_ATTR as Xe,MAX_SPARES as Ye,UNITS_PER_SET as Qe,formatPrice as Z}from"../lib/commerce.js";import{UNPRICED_LABEL as Je,formatSelectionPrice as Ze,setPriceLabel as et}from"../lib/wheels/price-display.js";import{productIsDually as tt,productIsTwoObjects as at,setSuppressesRow as nt}from"../lib/wheels/set-mode.js";import{CONTENT_CAP_GUTTER as ee}from"../lib/sections/content-cap-gutter.js";import rt from"efficient-web-builder/render/components/TextRegionRun";import{SectionTextParts as lt}from"efficient-web-builder/render/lib/document/editing-bridges";import{TEXT_REGION_ATTR as it}from"efficient-web-builder/format/lib/sections/text-regions";const ot=4e3;function st(e){return e?[e.year,e.make,e.model,e.modification].join("-"):""}const ct=.72;function dt(e){const r=e.trim().split(/\s+/).filter(Boolean);if(r.length===0)return;const s=r.map((l,d)=>l.length+(r.length>1&&d===r.length-1?1:0));return`calc(100cqi / ${(Math.max(...s)*ct).toFixed(2)})`}function mt(e,r){return e?{[it]:r}:{}}function pt({editing:e,nodeId:r,partStyles:s,children:l}){return!e||!r?a(b,{children:l}):a(lt,{nodeId:r,sectionType:"ProductHero",partStyles:s,children:l})}function ft({product:e,selection:r,onLightbox:s,editing:l=!1,pricePlacement:d="top",showVehicleFitment:i=!0,heroLayout:p=He,imageRatio:T=Ue,textAlign:ae=Be,showSpecTable:ne=!0,showPriceQuote:w=!0,galleryMode:re=Ke,imageFit:le=qe,trustBullets:ie,nodeId:oe,partStyles:j}){const se=I(),v=Ve(p),M=We(ae),y=Ge(T),ce=v==="imageRight"?`${100-y}fr ${y}fr`:`${y}fr ${100-y}fr`,{picked:de,pick:D,qty:P,setQty:me,choice:g,setChoice:N,angleIdx:pe,setAngleIdx:fe,showValidation:ue,setShowValidation:R,manualMode:F,vehicle:_,rows:H,facts:be,part:x,outOfStock:U,offer:m,preOrder:E,canAddToCart:S,currency:k,price:u,set:B,msrpLabel:V}=r,c=Ce(e,r,l),A=tt(e),ge=at(e),C=i?c.vehicle:null,he=i?c.vehicleMemory:null,O=!Le({whenUnset:!0}),{addAndOpen:xe,warmCatalog:G}=we(),h=_e();J(()=>{!l&&h&&G(e.kind)},[l,h,e.kind,G]);const W=H.filter(t=>!E||t.values.length>0),K=W.filter(t=>t.role==="resolves"),L=W.filter(t=>t.role==="describes"&&!nt(ge,t.key)),q=L.findIndex(t=>t.chosen===null),X=(!C||!c.vehicleAnswersSpecs||r.fitmentSet)&&De(H,E)?q===-1?L:L.slice(0,q+1):[],ve=[...K,...X],ke=mt(l,"price"),z=a(pt,{editing:l,nodeId:oe,partStyles:j,children:n("div",{className:"flex items-baseline gap-5 border-t border-line pt-[18px]",children:[V&&a("div",{className:"font-mono text-[length:var(--size-label,15px)] text-fg-dim line-through",children:V}),a("div",{className:"font-heading2 text-[length:min(var(--size-headingMedium,36px),var(--sf-heading-max,9999px))] font-bold leading-none tracking-[-0.01em] text-fg",...ke,children:a(rt,{region:"price",partStyles:j,children:A?et(u,k):Ze(u,k)})}),u.priced&&a("div",{className:"font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:c.unitLabel}),u.setTotal!=null&&n("div",{className:"ml-auto border border-accent px-3 py-2 font-mono text-[length:var(--size-label,13px)] font-bold uppercase tracking-[0.18em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:[m.quantityLabel,": ",Z(B,k)]})]})}),Y=Se(null);return J(()=>{l||Y.current===e.slug||(Y.current=e.slug,Fe({itemId:x?`${e.slug}|${x.id}`:e.slug,itemName:e.name,variant:c.metaValue,pricePerSet:u.setTotal??u.fromSetTotal??0,currency:k}))},[l,e.slug,e.name,c.metaValue,x,u,k]),n(b,{children:[a("nav",{className:`border-b border-line ${ee} pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))]`,style:O?void 0:{background:"var(--section-bg)"},children:e.crumbs.map((t,o)=>n("span",{children:[o>0&&n(b,{children:[a("span",{className:"mx-3 text-accent",children:"/"}),a("wbr",{})]}),t.href?a(Q,{href:t.href,className:"hover:text-fg",children:a($,{text:t.label})}):a("span",{className:"text-fg",children:a($,{text:t.label})})]},`${t.label}-${o}`))}),n("section",{"data-hero-layout":v,"data-hero-align":M,className:[`grid gap-10 ${ee} py-14 max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))] max-view-tablet:py-8`,v==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-view-desktop:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...O?{}:{background:"var(--section-bg)"},...v==="stacked"?{}:{"--hero-cols":ce}},children:[a(Oe,{product:e,view:c,angleIdx:pe,onSelect:fe,isLight:O,onLightbox:s,galleryMode:re,imageFit:le,style:v==="imageRight"?{order:2}:void 0}),n("div",{className:["flex flex-col gap-7",M==="center"?"items-center text-center":""].filter(Boolean).join(" "),style:v==="imageRight"?{order:1}:void 0,children:[n("div",{className:"w-full [container-type:inline-size]",children:[n("div",{className:"mb-2.5 flex items-center gap-2.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-accent",children:[a("span",{children:a($,{text:e.eyebrow})}),e.badge&&n(b,{children:[a("span",{children:"·"}),a("span",{children:e.badge})]})]}),a("h1",{className:"font-heading2 text-[length:min(min(var(--size-headingMedium,clamp(48px,5.5vw,84px)),var(--hero-name-fit,9999px)),var(--sf-heading-max,9999px))] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[0.92] tracking-[-0.035em]",style:{"--hero-name-fit":dt(c.heading)},children:(()=>{const t=c.heading.lastIndexOf(" ");if(t===-1)return c.heading;const o=c.heading.slice(0,t),f=c.heading.slice(t+1);return n(b,{children:[o," ",n("em",{className:"font-normal italic text-accent",children:[f,"."]})]})})()})]}),d!=="belowSpecs"&&w&&z,he,K.map(t=>a(te,{row:t,onPick:D},t.key)),E&&c.preOrder?n(b,{children:[d==="belowSpecs"&&w&&z,c.preOrder]}):n(b,{children:[C,X.map(t=>a(te,{row:t,onPick:D},t.key)),ne&&a(ut,{facts:be}),(m.packs.length>0||h&&(m.extra||m.spareCounts.length>0))&&n("div",{className:"border-b border-line pb-[26px]",children:[m.packs.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:"How many"}),a("div",{className:"flex flex-wrap gap-1.5",children:m.packs.map(t=>n("button",{type:"button",onClick:()=>N(o=>({...o,unit:t.value})),"aria-pressed":g.unit===t.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",g.unit===t.value?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:g.unit===t.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[g.unit===t.value&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:t.label})]},t.value))})]}),h&&m.extra&&n("label",{className:`${m.packs.length>0?"mt-3.5 ":""}flex cursor-pointer items-center gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-fg`,children:[a("input",{type:"checkbox",checked:g.spares>0,onChange:t=>N(o=>({...o,spares:t.target.checked?Ye:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),m.extra.label]}),h&&m.spareCounts.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:$e.howMany}),a("div",{className:"flex flex-col gap-1.5 sm:flex-row sm:flex-wrap",children:m.spareCounts.map(t=>{const o=t.value-Qe,f=g.spares===o;return n("button",{type:"button",onClick:()=>N(ye=>({...ye,spares:o})),"aria-pressed":f,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",f?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:f?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[f&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),n("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:[t.value," · ",t.label]})]},t.value)})})]}),h&&m.spareSide&&n(b,{children:[a("div",{className:"mb-3.5 mt-[26px] font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:m.spareSide.label}),a("div",{className:"flex flex-wrap gap-1.5",children:m.spareSide.options.map(t=>{const o=g.spareSide===t.value;return n("button",{type:"button",onClick:()=>N(f=>({...f,spareSide:t.value})),"aria-pressed":o,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",o?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:o?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[o&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:t.label})]},t.value)})})]})]}),d==="belowSpecs"&&w&&z,n("div",{className:Ne,children:[h&&!(A&&!u.priced)&&a(Ae,{value:P,onChange:me,size:"large"}),!h||A&&!u.priced?a(Re,{className:"flex-1 cursor-pointer bg-btn px-6 py-4 text-center font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-btn-ink transition-colors hover:bg-fg"}):u.priced?U?a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Pe.outOfStock}):n("button",{type:"button",[Xe]:"",onClick:()=>{if(!S){R(!0),window.setTimeout(()=>R(!1),ot);return}if(R(!1),l)return;const t=je(e,x,de,{choice:g,qty:P},{fitmentLabel:F?c.specCaption:_.appliedName?`For ${_.appliedName}`:"",fitmentKey:F?`manual|${c.specCaption}`:`vehicle|${st(_.applied?.vehicle)}`});t&&xe(t)},"aria-disabled":!S,className:["flex-1 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] transition-colors",S?"cursor-pointer bg-btn text-btn-ink hover:bg-fg hover:text-bg":"cursor-pointer border-2 border-dashed border-accent/50 text-accent/80 hover:border-accent hover:text-accent"].join(" "),style:S?void 0:{background:"color-mix(in oklab, var(--accent) 6%, transparent)"},children:["Add to Cart",u.setTotal!=null?` · ${Z(B,k)}`:""]}):a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Je}),a(bt,{slug:e.slug,name:e.name})]}),U&&x&&a(gt,{partNumbers:x.components.map(t=>t.partNumber),productSlug:e.slug},x.id),ue&&(()=>{const t=ve.filter(f=>f.chosen===null).map(f=>se(f.prompt).replace(/^Select\s+/i,""));if(C&&c.vehicleAnswersSpecs&&!r.fitmentSet&&t.push("vehicle fitment"),t.length===0)return null;const o=t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`;return n("p",{role:"alert",className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em]",style:{color:"var(--alert)"},children:["Please select ",o," first."]})})()]}),ie]})]})]})}function ut({facts:e}){const r=I();return e.length===0?null:a("div",{className:"border-b border-line pb-[26px]",children:a("dl",{className:"flex flex-col gap-2",children:e.map(s=>n("div",{className:"flex flex-wrap items-baseline gap-x-2 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em]",children:[n("dt",{className:"text-fg-dim",children:[r(s.label)," ·"]}),a("dd",{className:"font-semibold text-fg",children:s.value.label})]},s.key))})})}function te({row:e,onPick:r}){const s=I();if(e.values.length===0&&!e.empty)return null;const l=e.values.find(i=>i.value===e.chosen),d=l&&[l.label,l.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[Me]:e.key,children:[n("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:[s(e.label)," · ",a("span",{className:"text-accent",children:d??s(e.prompt)})]}),e.values.length===0?n("p",{className:"font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:[e.empty.text," ",a(Q,{href:e.empty.href,className:"text-accent hover:underline",children:e.empty.linkText})]}):e.display==="swatch"?a("div",{className:"flex flex-wrap gap-2",children:e.values.map(i=>{const p=i.value===e.chosen;return n("button",{type:"button",onClick:()=>r(e.key,i.value),"aria-pressed":p,className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",p?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"].join(" "),style:p?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[p&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:i.swatch}}),a("span",{className:"block min-w-0 break-words font-mono text-[length:var(--size-label,12px)] font-bold uppercase tracking-[0.18em] text-fg",children:i.label})]},i.value)})}):a("div",{className:"flex flex-wrap gap-1.5",children:e.values.map(i=>{const p=i.value===e.chosen;return n("button",{type:"button",onClick:()=>r(e.key,i.value),"aria-pressed":p,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",p?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:p?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[p&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:i.label}),i.note&&a("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:i.note})]},i.value)})})]})}function bt({slug:e,name:r}){const{has:s,toggle:l}=ze(),d=s(e);return a("button",{type:"button",title:d?"Saved":"Save","aria-label":d?`Remove ${r} from wishlist`:`Save ${r} to wishlist`,"aria-pressed":d,onClick:()=>l(e),className:["h-12 w-12 cursor-pointer border-2 bg-transparent transition-colors",d?"border-accent text-accent":"border-fg-dim/50 text-fg hover:border-accent hover:text-accent"].join(" "),children:d?"♥":"♡"})}function gt({partNumbers:e,productSlug:r}){const[s,l]=Te(""),{status:d,submit:i,reset:p}=Ie();function T(){i({partNumbers:e,email:s,productSlug:r})}return d==="sent"?a("p",{className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-accent",children:"We'll email you when it's back."}):a(Ee,{className:"-mt-1",email:s,onEmailChange:l,status:d,onResetVerdict:p,onSubmit:T,inputAriaLabel:"Email for the back-in-stock alert",submitLabel:"Notify me when back",buttonClassName:"cursor-pointer whitespace-nowrap border-2 border-btn px-4 font-mono text-[length:var(--size-label,11px)] font-bold uppercase tracking-[0.22em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-btn",errorMessage:"Couldn't save that — please try again."})}export{ft as default};
|
|
1
|
+
"use client";import{jsx as a,Fragment as b,jsxs as n}from"react/jsx-runtime";import Q from"next/link";import{BUY_ROW_CLASS as ye}from"./buy-row.js";import{useEffect as X,useRef as Ne,useState as Se}from"react";import{useCart as we}from"./CartContext.js";import Te from"./QuoteLink.js";import{useSiteTakesOrders as _e}from"./SiteRecordContext.js";import Re from"./EmailCaptureForm.js";import{useEnglish as I}from"./EnglishVariant.js";import Ee from"./QuantityStepper.js";import{MarkedLabel as $,heroView as Ce}from"./product-hero/hero-view.js";import Ae from"./ProductGallery.js";import{useRootIsDark as Le}from"efficient-shell/theme";import{useWishlist as Oe}from"./WishlistContext.js";import{useStockAlertSignup as ze}from"./useStockAlertSignup.js";import{SPARE_WORDS as Ie,productCartLine as $e}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as je}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as Me}from"../lib/catalog/product-options.js";import{STOCK_WORDS as Pe}from"../lib/content/stock-words.js";import{trackViewItem as De}from"../lib/google-tag.js";import{DEFAULT_HERO_LAYOUT as Fe,DEFAULT_HERO_RATIO as He,DEFAULT_HERO_TEXT_ALIGN as Be,parseHeroLayout as Ue,parseHeroRatio as Ve,parseHeroTextAlign as We}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as Ge,DEFAULT_HERO_IMAGE_FIT as Ke}from"../lib/sections/hero-gallery.js";import{ADD_TO_BASKET_ATTR as qe,MAX_SPARES as Ye,UNITS_PER_SET as Qe,formatPrice as J}from"../lib/commerce.js";import{UNPRICED_LABEL as Xe,formatSelectionPrice as Je,setPriceLabel as Ze}from"../lib/wheels/price-display.js";import{productIsDually as et,productIsTwoObjects as tt,setSuppressesRow as at}from"../lib/wheels/set-mode.js";import{CONTENT_CAP_GUTTER as Z}from"../lib/sections/content-cap-gutter.js";import{CardTemplateRows as nt}from"efficient-web-builder/render/components/CardRowContext";import rt from"./card-pieces/CardPrice.js";import{HeroPriceStateProvider as lt}from"./card-pieces/ProductCardState.js";const ot=4e3;function it(t){return t?[t.year,t.make,t.model,t.modification].join("-"):""}const st=[{}],ct=.72;function dt(t){const r=t.trim().split(/\s+/).filter(Boolean);if(r.length===0)return;const d=r.map((s,c)=>s.length+(r.length>1&&c===r.length-1?1:0));return`calc(100cqi / ${(Math.max(...d)*ct).toFixed(2)})`}function mt({product:t,selection:r,onLightbox:d,editing:s=!1,pricePlacement:c="top",showVehicleFitment:l=!0,heroLayout:p=Fe,imageRatio:w=He,textAlign:te=Be,showSpecTable:ae=!0,showPriceQuote:T=!0,galleryMode:ne=Ge,imageFit:re=Ke,trustBullets:le,nodeId:oe,priceTemplate:j}){const ie=I(),v=Ue(p),M=We(te),y=Ve(w),se=v==="imageRight"?`${100-y}fr ${y}fr`:`${y}fr ${100-y}fr`,{picked:ce,pick:P,qty:D,setQty:de,choice:h,setChoice:N,angleIdx:me,setAngleIdx:pe,showValidation:ue,setShowValidation:_,manualMode:F,vehicle:R,rows:H,facts:fe,part:x,outOfStock:B,offer:m,preOrder:E,canAddToCart:S,currency:k,price:f,set:U,msrpLabel:be}=r,i=Ce(t,r,s),C=et(t),he=tt(t),A=l?i.vehicle:null,ge=l?i.vehicleMemory:null,L=!Le({whenUnset:!0}),{addAndOpen:xe,warmCatalog:V}=we(),g=_e();X(()=>{!s&&g&&V(t.kind)},[s,g,t.kind,V]);const W=H.filter(e=>!E||e.values.length>0),G=W.filter(e=>e.role==="resolves"),O=W.filter(e=>e.role==="describes"&&!at(he,e.key)),K=O.findIndex(e=>e.chosen===null),q=(!A||!i.vehicleAnswersSpecs||r.fitmentSet)&&Me(H,E)?K===-1?O:O.slice(0,K+1):[],ve=[...G,...q],z=a(lt,{value:{kind:"hero",msrpLabel:be||null,amount:C?Ze(f,k):Je(f,k),unitLabel:f.priced?i.unitLabel:null,packBadge:f.setTotal!=null?`${m.quantityLabel}: ${J(U,k)}`:null},children:j?a(nt,{ownerId:oe??"",ownerType:"ProductHero",Template:j,rows:st,fallback:null,children:e=>e}):a(rt,{})}),Y=Ne(null);return X(()=>{s||Y.current===t.slug||(Y.current=t.slug,De({itemId:x?`${t.slug}|${x.id}`:t.slug,itemName:t.name,variant:i.metaValue,pricePerSet:f.setTotal??f.fromSetTotal??0,currency:k}))},[s,t.slug,t.name,i.metaValue,x,f,k]),n(b,{children:[a("nav",{className:`border-b border-line ${Z} pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))]`,style:L?void 0:{background:"var(--section-bg)"},children:t.crumbs.map((e,o)=>n("span",{children:[o>0&&n(b,{children:[a("span",{className:"mx-3 text-accent",children:"/"}),a("wbr",{})]}),e.href?a(Q,{href:e.href,className:"hover:text-fg",children:a($,{text:e.label})}):a("span",{className:"text-fg",children:a($,{text:e.label})})]},`${e.label}-${o}`))}),n("section",{"data-hero-layout":v,"data-hero-align":M,className:[`grid gap-10 ${Z} py-14 max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))] max-view-tablet:py-8`,v==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-view-desktop:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...L?{}:{background:"var(--section-bg)"},...v==="stacked"?{}:{"--hero-cols":se}},children:[a(Ae,{product:t,view:i,angleIdx:me,onSelect:pe,isLight:L,onLightbox:d,galleryMode:ne,imageFit:re,style:v==="imageRight"?{order:2}:void 0}),n("div",{className:["flex flex-col gap-7",M==="center"?"items-center text-center":""].filter(Boolean).join(" "),style:v==="imageRight"?{order:1}:void 0,children:[n("div",{className:"w-full [container-type:inline-size]",children:[n("div",{className:"mb-2.5 flex items-center gap-2.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-accent",children:[a("span",{children:a($,{text:t.eyebrow})}),t.badge&&n(b,{children:[a("span",{children:"·"}),a("span",{children:t.badge})]})]}),a("h1",{className:"font-heading2 text-[length:min(min(var(--size-headingMedium,clamp(48px,5.5vw,84px)),var(--hero-name-fit,9999px)),var(--sf-heading-max,9999px))] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[0.92] tracking-[-0.035em]",style:{"--hero-name-fit":dt(i.heading)},children:(()=>{const e=i.heading.lastIndexOf(" ");if(e===-1)return i.heading;const o=i.heading.slice(0,e),u=i.heading.slice(e+1);return n(b,{children:[o," ",n("em",{className:"font-normal italic text-accent",children:[u,"."]})]})})()})]}),c!=="belowSpecs"&&T&&z,ge,G.map(e=>a(ee,{row:e,onPick:P},e.key)),E&&i.preOrder?n(b,{children:[c==="belowSpecs"&&T&&z,i.preOrder]}):n(b,{children:[A,q.map(e=>a(ee,{row:e,onPick:P},e.key)),ae&&a(pt,{facts:fe}),(m.packs.length>0||g&&(m.extra||m.spareCounts.length>0))&&n("div",{className:"border-b border-line pb-[26px]",children:[m.packs.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:"How many"}),a("div",{className:"flex flex-wrap gap-1.5",children:m.packs.map(e=>n("button",{type:"button",onClick:()=>N(o=>({...o,unit:e.value})),"aria-pressed":h.unit===e.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",h.unit===e.value?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:h.unit===e.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[h.unit===e.value&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:e.label})]},e.value))})]}),g&&m.extra&&n("label",{className:`${m.packs.length>0?"mt-3.5 ":""}flex cursor-pointer items-center gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-fg`,children:[a("input",{type:"checkbox",checked:h.spares>0,onChange:e=>N(o=>({...o,spares:e.target.checked?Ye:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),m.extra.label]}),g&&m.spareCounts.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:Ie.howMany}),a("div",{className:"flex flex-col gap-1.5 sm:flex-row sm:flex-wrap",children:m.spareCounts.map(e=>{const o=e.value-Qe,u=h.spares===o;return n("button",{type:"button",onClick:()=>N(ke=>({...ke,spares:o})),"aria-pressed":u,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",u?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:u?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[u&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),n("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:[e.value," · ",e.label]})]},e.value)})})]}),g&&m.spareSide&&n(b,{children:[a("div",{className:"mb-3.5 mt-[26px] font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:m.spareSide.label}),a("div",{className:"flex flex-wrap gap-1.5",children:m.spareSide.options.map(e=>{const o=h.spareSide===e.value;return n("button",{type:"button",onClick:()=>N(u=>({...u,spareSide:e.value})),"aria-pressed":o,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",o?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:o?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[o&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:e.label})]},e.value)})})]})]}),c==="belowSpecs"&&T&&z,n("div",{className:ye,children:[g&&!(C&&!f.priced)&&a(Ee,{value:D,onChange:de,size:"large"}),!g||C&&!f.priced?a(Te,{className:"flex-1 cursor-pointer bg-btn px-6 py-4 text-center font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-btn-ink transition-colors hover:bg-fg"}):f.priced?B?a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Pe.outOfStock}):n("button",{type:"button",[qe]:"",onClick:()=>{if(!S){_(!0),window.setTimeout(()=>_(!1),ot);return}if(_(!1),s)return;const e=$e(t,x,ce,{choice:h,qty:D},{fitmentLabel:F?i.specCaption:R.appliedName?`For ${R.appliedName}`:"",fitmentKey:F?`manual|${i.specCaption}`:`vehicle|${it(R.applied?.vehicle)}`});e&&xe(e)},"aria-disabled":!S,className:["flex-1 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] transition-colors",S?"cursor-pointer bg-btn text-btn-ink hover:bg-fg hover:text-bg":"cursor-pointer border-2 border-dashed border-accent/50 text-accent/80 hover:border-accent hover:text-accent"].join(" "),style:S?void 0:{background:"color-mix(in oklab, var(--accent) 6%, transparent)"},children:["Add to Cart",f.setTotal!=null?` · ${J(U,k)}`:""]}):a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Xe}),a(ut,{slug:t.slug,name:t.name})]}),B&&x&&a(ft,{partNumbers:x.components.map(e=>e.partNumber),productSlug:t.slug},x.id),ue&&(()=>{const e=ve.filter(u=>u.chosen===null).map(u=>ie(u.prompt).replace(/^Select\s+/i,""));if(A&&i.vehicleAnswersSpecs&&!r.fitmentSet&&e.push("vehicle fitment"),e.length===0)return null;const o=e.length===1?e[0]:e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")}, and ${e.at(-1)}`;return n("p",{role:"alert",className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em]",style:{color:"var(--alert)"},children:["Please select ",o," first."]})})()]}),le]})]})]})}function pt({facts:t}){const r=I();return t.length===0?null:a("div",{className:"border-b border-line pb-[26px]",children:a("dl",{className:"flex flex-col gap-2",children:t.map(d=>n("div",{className:"flex flex-wrap items-baseline gap-x-2 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em]",children:[n("dt",{className:"text-fg-dim",children:[r(d.label)," ·"]}),a("dd",{className:"font-semibold text-fg",children:d.value.label})]},d.key))})})}function ee({row:t,onPick:r}){const d=I();if(t.values.length===0&&!t.empty)return null;const s=t.values.find(l=>l.value===t.chosen),c=s&&[s.label,s.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[je]:t.key,children:[n("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:[d(t.label)," · ",a("span",{className:"text-accent",children:c??d(t.prompt)})]}),t.values.length===0?n("p",{className:"font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:[t.empty.text," ",a(Q,{href:t.empty.href,className:"text-accent hover:underline",children:t.empty.linkText})]}):t.display==="swatch"?a("div",{className:"flex flex-wrap gap-2",children:t.values.map(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"aria-pressed":p,className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",p?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"].join(" "),style:p?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[p&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:l.swatch}}),a("span",{className:"block min-w-0 break-words font-mono text-[length:var(--size-label,12px)] font-bold uppercase tracking-[0.18em] text-fg",children:l.label})]},l.value)})}):a("div",{className:"flex flex-wrap gap-1.5",children:t.values.map(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"aria-pressed":p,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",p?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:p?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[p&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:l.label}),l.note&&a("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:l.note})]},l.value)})})]})}function ut({slug:t,name:r}){const{has:d,toggle:s}=Oe(),c=d(t);return a("button",{type:"button",title:c?"Saved":"Save","aria-label":c?`Remove ${r} from wishlist`:`Save ${r} to wishlist`,"aria-pressed":c,onClick:()=>s(t),className:["h-12 w-12 cursor-pointer border-2 bg-transparent transition-colors",c?"border-accent text-accent":"border-fg-dim/50 text-fg hover:border-accent hover:text-accent"].join(" "),children:c?"♥":"♡"})}function ft({partNumbers:t,productSlug:r}){const[d,s]=Se(""),{status:c,submit:l,reset:p}=ze();function w(){l({partNumbers:t,email:d,productSlug:r})}return c==="sent"?a("p",{className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-accent",children:"We'll email you when it's back."}):a(Re,{className:"-mt-1",email:d,onEmailChange:s,status:c,onResetVerdict:p,onSubmit:w,inputAriaLabel:"Email for the back-in-stock alert",submitLabel:"Notify me when back",buttonClassName:"cursor-pointer whitespace-nowrap border-2 border-btn px-4 font-mono text-[length:var(--size-label,11px)] font-bold uppercase tracking-[0.22em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-btn",errorMessage:"Couldn't save that — please try again."})}export{mt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as a}from"react/jsx-runtime";import{createContext as c,useContext as d,useEffect as g,useState as u}from"react";import m from"./ProductCard.js";import{loadProductCatalog as h}from"./useProductCatalog.js";import{say as f}from"efficient-web-builder/format/lib/editor-words";const i=c({wheels:[],loading:!1,live:!1});function p(e,t){return e.find(r=>r.designCode===t)??e.find(r=>r.slug===t)}function S({wheels:e,children:t}){return a(i.Provider,{value:{wheels:e??[],loading:!1,live:!0},children:t})}function b({children:e}){const[t,r]=u([]),[s,o]=u(!0);return g(()=>{let n=!1;return h().then(l=>{n||(r(l),o(!1))}).catch(()=>{n||o(!1)}),()=>{n=!0}},[]),a(i.Provider,{value:{wheels:t,loading:s,live:!1},children:e})}function v({code:e,finish:t,wheel:r}){const{wheels:s,loading:o,live:n}=d(i),l=r??(e?p(s,e):void 0);return l?a(m,{wheel:l,variant:"catalog",defaultFinish:t},`${l.slug}:${t??""}`):n?null:a("div",{className:"sf-card flex aspect-square w-full items-center justify-center bg-surface-2 p-4 text-center",children:a("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:o?f("Loading…"):e||f("Set a design code")})})}export{b as ProductCatalogProvider,S as SectionWheelsProvider,v as default,p as wheelForCode};
|
|
@@ -19,4 +19,5 @@ export interface ReviewsProps {
|
|
|
19
19
|
cards?: ReactNode;
|
|
20
20
|
omitHead?: boolean;
|
|
21
21
|
}
|
|
22
|
+
export declare const FRAME_OWN_BOX = "mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] pt-0 pb-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]";
|
|
22
23
|
export default function Reviews({ look, eyebrow, title, columns, rows, editing, sample, cards, omitHead, }: ReviewsProps): import("react").JSX.Element | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,Fragment as h,jsxs as i}from"react/jsx-runtime";import u from"efficient-web-builder/render/components/SectionEyebrow";import{renderHeadline as b,splitParagraphs as v}from"efficient-web-builder/render/components/goldPhrases";import N from"./RatingStars.js";import y from"./SectionBand.js";const t={headingMediumUpTo800:"max-view-wide:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",headingMedium:"text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))]",bodySmall:"text-[length:var(--size-body,15px)]",bodyLarge:"text-[length:var(--size-body,19px)]",label:"text-[length:var(--size-label,12px)]"},w="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] py-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",M="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] pt-0 pb-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]";function k({look:d,eyebrow:n,title:r,columns:p,rows:s=[],editing:o=!1,sample:x=!1,cards:g,omitHead:l=!1}){const c=Math.min(3,Math.max(1,p??3));return!o&&s.length===0?null:i(y,{className:"relative z-[2] border-t border-line bg-surface",column:l?M:w,children:[l?null:i(h,{children:[(n??"").trim()&&e(u,{text:n??"",look:d,className:"mb-4 block"}),(r??"").trim()&&e("h2",{className:`mb-12 font-heading2 ${t.headingMedium} font-medium uppercase leading-none tracking-[-0.02em] text-fg max-view-wide:mb-8 ${t.headingMediumUpTo800}`,children:b(r??"",!1)})]}),e("div",{className:"sf-card grid grid-cols-1 gap-px border border-line bg-line min-[700px]:[grid-template-columns:repeat(var(--rv-cols),minmax(0,1fr))]",style:{"--rv-cols":String(c)},children:g??s.map(a=>i("article",{className:["flex flex-col gap-4 bg-bg p-10 max-view-wide:p-8",x?"opacity-60":""].join(" "),children:[a.rating!==void 0&&e(N,{rating:a.rating}),(a.title??"").trim()&&e("h3",{className:`font-display ${t.bodyLarge} font-medium uppercase leading-[1.2] tracking-[-0.01em] text-fg`,children:a.title}),e("div",{className:`flex-1 font-serif ${t.bodySmall} leading-[1.65] text-fg-dim`,children:v(a.quote).map((f,m)=>e("p",{className:m?"mt-3":"",children:f},m))}),i("footer",{className:"flex items-baseline justify-between gap-4 border-t border-line pt-5",children:[e("span",{className:`font-mono ${t.label} uppercase tracking-[0.22em] text-fg`,children:a.name}),e("span",{className:`font-mono ${t.label} uppercase tracking-[0.18em] text-fg-dim`,children:a.meta??""})]})]},a.key))})]})}export{k as default};
|
|
1
|
+
import{jsx as e,Fragment as h,jsxs as i}from"react/jsx-runtime";import u from"efficient-web-builder/render/components/SectionEyebrow";import{renderHeadline as b,splitParagraphs as v}from"efficient-web-builder/render/components/goldPhrases";import N from"./RatingStars.js";import y from"./SectionBand.js";const t={headingMediumUpTo800:"max-view-wide:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",headingMedium:"text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))]",bodySmall:"text-[length:var(--size-body,15px)]",bodyLarge:"text-[length:var(--size-body,19px)]",label:"text-[length:var(--size-label,12px)]"},w="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] py-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",M="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] pt-0 pb-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]";function k({look:d,eyebrow:n,title:r,columns:p,rows:s=[],editing:o=!1,sample:x=!1,cards:g,omitHead:l=!1}){const c=Math.min(3,Math.max(1,p??3));return!o&&s.length===0?null:i(y,{className:"relative z-[2] border-t border-line bg-surface",column:l?M:w,children:[l?null:i(h,{children:[(n??"").trim()&&e(u,{text:n??"",look:d,className:"mb-4 block"}),(r??"").trim()&&e("h2",{className:`mb-12 font-heading2 ${t.headingMedium} font-medium uppercase leading-none tracking-[-0.02em] text-fg max-view-wide:mb-8 ${t.headingMediumUpTo800}`,children:b(r??"",!1)})]}),e("div",{className:"sf-card grid grid-cols-1 gap-px border border-line bg-line min-[700px]:[grid-template-columns:repeat(var(--rv-cols),minmax(0,1fr))]",style:{"--rv-cols":String(c)},children:g??s.map(a=>i("article",{className:["flex flex-col gap-4 bg-bg p-10 max-view-wide:p-8",x?"opacity-60":""].join(" "),children:[a.rating!==void 0&&e(N,{rating:a.rating}),(a.title??"").trim()&&e("h3",{className:`font-display ${t.bodyLarge} font-medium uppercase leading-[1.2] tracking-[-0.01em] text-fg`,children:a.title}),e("div",{className:`flex-1 font-serif ${t.bodySmall} leading-[1.65] text-fg-dim`,children:v(a.quote).map((f,m)=>e("p",{className:m?"mt-3":"",children:f},m))}),i("footer",{className:"flex items-baseline justify-between gap-4 border-t border-line pt-5",children:[e("span",{className:`font-mono ${t.label} uppercase tracking-[0.22em] text-fg`,children:a.name}),e("span",{className:`font-mono ${t.label} uppercase tracking-[0.18em] text-fg-dim`,children:a.meta??""})]})]},a.key))})]})}export{M as FRAME_OWN_BOX,k as default};
|