efficient-storefront-blocks 0.84.0 → 0.86.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-3NVDTH56.js → EditorPreviewCheckout-4LNXFNN7.js} +1 -1
- package/dist/chunks/{SiteEditorProvider-77K7CGYZ.js → SiteEditorProvider-A2HMVDKS.js} +1 -1
- package/dist/chunks/{chunk-F3MB7QCR.js → chunk-ALMIS7CK.js} +1 -1
- package/dist/chunks/{chunk-VYOK2XBF.js → chunk-EUKK2IN6.js} +1 -1
- package/dist/chunks/chunk-FJRKNPNN.js +340 -0
- package/dist/chunks/chunk-SLRULFYY.js +1 -0
- package/dist/chunks/{chunk-VJLQXB7I.js → chunk-TGBNREUJ.js} +1 -1
- package/dist/chunks/{fitment-data-PWXEDMOA.js → fitment-data-TSYW6AFA.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/FitmentPicker/fields.d.ts +2 -0
- package/dist/editor/lib/document/blocks/commerce/FitmentPicker/fields.js +1 -0
- package/dist/editor/lib/document/blocks/commerce/FitmentTable/fields.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/ProductGrid/fields.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/SpecTable/fields.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/StockFitment/fields.d.ts +2 -0
- package/dist/editor/lib/document/blocks/commerce/StockFitment/fields.js +1 -0
- package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
- package/dist/editor/lib/document/blocks/commerce/index.js +1 -1
- package/dist/editor/lib/document/blocks/commerce/page-rules.d.ts +5 -0
- package/dist/editor/lib/document/blocks/commerce/page-rules.js +1 -1
- package/dist/editor/lib/document/blocks/service/ArticleBody/fields.d.ts +2 -0
- package/dist/editor/lib/document/blocks/service/ArticleBody/fields.js +1 -0
- package/dist/editor/lib/document/blocks/service/SiteFooter/fields.js +1 -1
- package/dist/editor/lib/document/blocks/service/SiteHeader/fields.js +1 -1
- package/dist/editor/lib/document/blocks/service/index.d.ts +1 -1
- package/dist/editor/lib/document/blocks/service/index.js +1 -1
- package/dist/editor/lib/document/box-header.d.ts +1 -1
- package/dist/editor/lib/document/box-header.js +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/efficient-backend.js +1 -1
- package/dist/editor/lib/efficient-block-sources.js +1 -1
- package/dist/editor/lib/storefront-editor-words.d.ts +21 -1
- package/dist/editor/lib/storefront-editor-words.js +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.js +134 -58
- package/dist/render/app/globals.css +156 -0
- package/dist/render/built-with.json +1 -1
- package/dist/render/components/ArticleBody.d.ts +7 -0
- package/dist/render/components/ArticleBody.js +1 -0
- package/dist/render/components/BoxHeaderBar.d.ts +2 -1
- package/dist/render/components/BoxHeaderBar.js +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/PopupFrame.d.ts +10 -1
- package/dist/render/components/PopupFrame.js +5 -1
- package/dist/render/components/ProductGridSection.d.ts +2 -1
- package/dist/render/components/ProductGridSection.js +1 -1
- package/dist/render/components/PublishedHeader.js +1 -1
- package/dist/render/components/Reviews.d.ts +1 -0
- package/dist/render/components/Reviews.js +1 -1
- package/dist/render/components/SectionBand.d.ts +2 -1
- package/dist/render/components/SectionBand.js +1 -1
- package/dist/render/components/SectionBandChoice.d.ts +2 -1
- package/dist/render/components/SectionBandChoice.js +1 -1
- package/dist/render/components/SectionGroupBody.d.ts +2 -2
- package/dist/render/components/SectionGroupBody.js +1 -1
- package/dist/render/components/SpecTable.d.ts +3 -1
- package/dist/render/components/SpecTable.js +1 -1
- package/dist/render/components/TyreSizeGrid.d.ts +17 -0
- package/dist/render/components/TyreSizeGrid.js +1 -0
- package/dist/render/components/fitment/FitmentPickerGrid.d.ts +5 -1
- package/dist/render/components/fitment/FitmentPickerGrid.js +1 -1
- package/dist/render/components/fitment/FitmentPickerPart.d.ts +8 -0
- package/dist/render/components/fitment/FitmentPickerPart.js +1 -0
- package/dist/render/components/fitment/StockFitmentPart.d.ts +4 -0
- package/dist/render/components/fitment/StockFitmentPart.js +1 -0
- package/dist/render/components/fitment/useVehicleFit.d.ts +2 -1
- package/dist/render/components/fitment/useVehicleFit.js +1 -1
- 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/DynamicFitmentTable.d.ts +5 -0
- package/dist/render/components/pdp-dynamic/DynamicFitmentTable.js +1 -1
- package/dist/render/components/pdp-dynamic/DynamicSpecTable.d.ts +1 -0
- package/dist/render/components/pdp-dynamic/DynamicSpecTable.js +1 -1
- package/dist/render/components/pdp-dynamic/DynamicTyreSizes.js +1 -1
- package/dist/render/components/pdp-dynamic/FitmentTableBlock.d.ts +3 -1
- package/dist/render/components/pdp-dynamic/FitmentTableBlock.js +1 -1
- package/dist/render/lib/content/article-body-seed.d.ts +9 -0
- package/dist/render/lib/content/article-body-seed.js +1 -0
- package/dist/render/lib/content/article-body.d.ts +8 -0
- package/dist/render/lib/content/article-body.js +5 -0
- package/dist/render/lib/content/article-page-seed.d.ts +12 -0
- package/dist/render/lib/content/article-page-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/FitmentPicker/meta.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/FitmentPicker/meta.js +1 -0
- package/dist/render/lib/document/blocks/commerce/FitmentPicker/render.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/FitmentPicker/render.js +1 -0
- package/dist/render/lib/document/blocks/commerce/FitmentTable/meta.js +1 -1
- package/dist/render/lib/document/blocks/commerce/FitmentTable/render.js +1 -1
- package/dist/render/lib/document/blocks/commerce/ProductGrid/render.js +1 -1
- package/dist/render/lib/document/blocks/commerce/SpecTable/render.js +1 -1
- package/dist/render/lib/document/blocks/commerce/StockFitment/meta.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/StockFitment/meta.js +1 -0
- package/dist/render/lib/document/blocks/commerce/StockFitment/render.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/StockFitment/render.js +1 -0
- package/dist/render/lib/document/blocks/commerce/metas.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/metas.js +1 -1
- package/dist/render/lib/document/blocks/commerce/renders.d.ts +2 -0
- package/dist/render/lib/document/blocks/commerce/renders.js +1 -1
- package/dist/render/lib/document/blocks/service/ArticleBody/meta.d.ts +8 -0
- package/dist/render/lib/document/blocks/service/ArticleBody/meta.js +1 -0
- package/dist/render/lib/document/blocks/service/ArticleBody/render.d.ts +2 -0
- package/dist/render/lib/document/blocks/service/ArticleBody/render.js +1 -0
- package/dist/render/lib/document/blocks/service/SiteFooter/render.js +1 -1
- package/dist/render/lib/document/blocks/service/SiteHeader/render.js +1 -1
- package/dist/render/lib/document/blocks/service/metas.d.ts +1 -0
- package/dist/render/lib/document/blocks/service/metas.js +1 -1
- package/dist/render/lib/document/blocks/service/renders.d.ts +1 -0
- package/dist/render/lib/document/blocks/service/renders.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/lazy-draws.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-grid-columns.d.ts +5 -0
- package/dist/render/lib/sections/product-grid-columns.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/vehicle-memory.d.ts +13 -0
- package/dist/render/lib/wheels/vehicle-memory.js +1 -1
- package/dist/words.d.ts +58 -12
- package/dist/words.js +5 -5
- package/package.json +5 -4
- package/dist/chunks/chunk-5EQD5D3L.js +0 -340
- package/dist/chunks/chunk-DQFD2BJD.js +0 -1
- /package/dist/chunks/{chunk-5EQD5D3L.js.LEGAL.txt → chunk-FJRKNPNN.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
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SlotComponent } from "efficient-easel/blocks";
|
|
2
|
+
export interface ArticleBodyProps {
|
|
3
|
+
id: string;
|
|
4
|
+
template?: SlotComponent;
|
|
5
|
+
editing?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export default function ArticleBody({ id, template, editing }: ArticleBodyProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as o}from"react/jsx-runtime";import{CardTemplateRows as i}from"efficient-web-builder/render/components/CardRowContext";import{useCurrentRecordOf as n}from"../lib/document/current-record.js";import{ARTICLE_BODY_FIELD as f,BLOG_POST_RECORD_TYPE as m,articleRows as a,sampleArticleRows as d}from"../lib/content/article-body.js";function p({id:l,template:t,editing:s}){const e=n(m),r=e?a(e.fields[f]):s?d():[];return r.length?o(i,{ownerId:l,ownerType:"ArticleBody",Template:t,rows:r,fallback:null,children:c=>o("div",{className:"flex flex-col",children:c})}):null}export{p as default};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { type HeaderStickyMode } from "./useHeaderBar.js";
|
|
3
3
|
export declare const resolveStickyMode: (v: unknown) => HeaderStickyMode;
|
|
4
|
-
export default function BoxHeaderBar({ sticky, topTextColor, heightPx, theme, children, }: {
|
|
4
|
+
export default function BoxHeaderBar({ sticky, topTextColor, heightPx, theme, bandCapped, children, }: {
|
|
5
5
|
sticky?: unknown;
|
|
6
6
|
topTextColor?: unknown;
|
|
7
7
|
heightPx?: unknown;
|
|
8
8
|
theme?: unknown;
|
|
9
|
+
bandCapped?: boolean;
|
|
9
10
|
children: ReactNode;
|
|
10
11
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as _}from"react/jsx-runtime";import{useEffect as k,useState as E}from"react";import{useRootIsDark as v}from"efficient-shell/theme";import{usePathname as y}from"next/navigation";import{useHeaderBar as D}from"./useHeaderBar.js";import{headerSolidBackground as I,isProductPage as R,resolveHeaderHeightPx as T}from"../lib/content/header-bar.js";import{headerThemeWrap as P}from"../lib/content/header-theme.js";import{HEADER_SET_HEIGHT_VAR as S}from"efficient-web-builder/render/lib/document/header-clearance";import{HEADER_INK_OVERRIDE_ATTR as A,resolveHeaderInkMode as B}from"efficient-web-builder/render/lib/document/header-ink";import{centredCap as j,SITE_WIDTH_CAP as w}from"efficient-web-builder/format/lib/content/page-width";const M=["none","always","on_scroll_up"],C=e=>M.includes(e)?e:"always";function N({sticky:e,topTextColor:i,heightPx:u,theme:f,bandCapped:m=!1,children:h}){const t=C(e),n=T(u),{headerRef:o,scrolled:a,navHidden:p}=D({stickyMode:t,heightPx:n}),s=B(i),g=s==="auto"?null:{[A]:s},r=P(f),d=R(y()),[b,x]=E(null);k(()=>x(o.current?.ownerDocument??null),[o]);const H=!v({doc:b,whenUnset:!0}),l=a||d,c=I(H,d);return _("header",{ref:o,"data-scrolled":a||void 0,"data-box-header":"",...g,className:["sf-site-header",...r?[r.className]:[],"flex flex-col justify-center",t==="none"?"absolute":"fixed","inset-x-0 top-0 z-50",l?"border-b border-line backdrop-blur-md":"border-b border-transparent","transition-[background,border-color,transform] duration-300 ease-out"].join(" "),style:{...r?r.style:null,minHeight:`var(${S}, ${n}px)`,...m?j(w):null,...p?{transform:"translateY(-100%)"}:null,...l?{background:c,color:"var(--fg)","--sf-header-ground":c}:{color:"var(--sf-header-overlay-fg)","--sf-header-ground":"var(--sf-header-overlay-ground)"}},children:h})}export{N as default,C as resolveStickyMode};
|
|
@@ -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};
|
|
@@ -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};
|
|
@@ -45,6 +45,7 @@ interface Props {
|
|
|
45
45
|
catalog?: ProductSummary[];
|
|
46
46
|
kinds?: string[];
|
|
47
47
|
columns?: number;
|
|
48
|
+
columnsPhone?: unknown;
|
|
48
49
|
limit?: number;
|
|
49
50
|
editing?: boolean;
|
|
50
51
|
contentCapped?: boolean;
|
|
@@ -62,5 +63,5 @@ interface Props {
|
|
|
62
63
|
showCardBuy?: boolean;
|
|
63
64
|
showCardPage?: boolean;
|
|
64
65
|
}
|
|
65
|
-
export default function ProductGridSection({ num, catalog, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, limit, editing, contentCapped, imageBackground, hover, coverIndex, indexBadge, outline, showBadge, fieldUsage, showCardPrice, showCardFinishes, showCardSizes, showCardBuy, showCardPage, cardImage, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
|
|
66
|
+
export default function ProductGridSection({ num, catalog, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, columnsPhone, limit, editing, contentCapped, imageBackground, hover, coverIndex, indexBadge, outline, showBadge, fieldUsage, showCardPrice, showCardFinishes, showCardSizes, showCardBuy, showCardPage, cardImage, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
|
|
66
67
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as r,jsxs as x,Fragment as
|
|
1
|
+
"use client";import{jsx as r,jsxs as x,Fragment as De}from"react/jsx-runtime";import{GRID_CARD_SHOW as D}from"../lib/sections/card-show-defaults.js";import{useScopeClass as He}from"../lib/use-scope-class.js";import{useEffect as _,useMemo as p,useState as Ue}from"react";import{CARD_IMAGE_BG_OFF as je,resolveCardImageBackground as We}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as Xe}from"efficient-web-builder/format/lib/content/card-image-shape";import{containerGapProps as Ke,GAP_ZONE_CLASS as Ze}from"efficient-web-builder/format/lib/content/container-gap";import qe from"next/link";import Ve from"./ProductCard.js";import{CARD_ROWS_GRID_CLASS as Ye,cardRowsGap as Je,cardRowsGridStyle as Qe}from"./WheelCardFrame.js";import{ProductCardChromeProvider as er}from"./ProductCardChrome.js";import{gridClassImageSizes as rr}from"../lib/sections/card-image-sizes.js";import{fillRowCss as tr}from"../lib/sections/fill-row.js";import{noHoleBands as re,noHoleCss as te,showsASetCard as ne}from"../lib/sections/grid-no-hole.js";import{setIsWide as nr,summarySetBuild as sr}from"../lib/wheels/set-mode.js";import{answersForKind as se}from"../lib/content/field-usage.js";import{wheelCardEyebrowShows as or}from"./ProductCardEyebrow.js";import ar from"./NoCurrencyNote.js";import{DEFAULT_CARD_OUTLINE as ir,cardIndexCss as lr,parseCardIndexFormat as dr}from"efficient-web-builder/format/lib/sections/product-card-style";import{DEFAULT_COVER_INDEX as mr}from"../lib/wheels/cover-rendering.js";import{SITE_WIDTH_CAP as cr,centredCap as pr}from"efficient-web-builder/format/lib/content/page-width";import{ProductCatalogProvider as ur,SectionWheelsProvider as gr}from"./ProductRef.js";import{useCurrency as hr}from"./CurrencyContext.js";import{COLLECTION_ATTR as fr,useCatalogFilter as xr}from"./catalog/CatalogFilterContext.js";import wr from"./SectionBand.js";import{useInsideBox as vr,useInsideSiteGutter as yr}from"efficient-web-builder/render/components/SiteGutterFrame";import{productGridColumnsClass as Cr}from"../lib/sections/product-grid-columns.js";import{renderGold as H,renderHeadline as br}from"efficient-web-builder/render/components/goldPhrases";import{applyCatalogFilters as Sr}from"../lib/wheels/catalog-filters.js";import{normalizeCatalogRows as $r}from"../lib/wheels/wheel-summary-casing.js";import Mr from"./TyreSummaryCard.js";import{itemKind as U,plpKindNoun as Nr}from"../lib/catalog/plp-item.js";import{filterBarCategoryOf as _r,gridKindsOf as Er,gridRowsOf as Tr}from"../lib/wheels/grid-source.js";import{useUnifiedProductCatalog as zr}from"./useProductCatalog.js";import{STICKY_UNDERHEADER_CLASS as Ir}from"efficient-web-builder/render/lib/document/header-clearance";import{finishFamiliesOf as Lr}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as Ar}from"../lib/wheels/lug-count.js";import{diametersOf as Br}from"../lib/wheels/size-range.js";import{say as Pr}from"efficient-web-builder/format/lib/editor-words";import{DEFAULT_TITLE_SIZE as Rr}from"../lib/sections/product-grid-title.js";const s={headingMediumUpTo800Xs:"max-view-wide:text-[length:var(--size-headingMedium,28px)]",headingMediumUpTo800Small:"max-view-wide:text-[length:var(--size-headingMedium,32px)]",headingMediumUpTo800Large:"max-view-wide:text-[length:var(--size-headingMedium,36px)]",headingMediumUpTo800Xl:"max-view-wide:text-[length:var(--size-headingMedium,40px)]",body:"text-[length:var(--size-body,13px)]",headingMedium1:"text-[length:var(--size-headingMedium,40px)]",headingMedium2:"text-[length:var(--size-headingMedium,48px)]",headingMedium3:"text-[length:var(--size-headingMedium,56px)]",headingMedium4:"text-[length:var(--size-headingMedium,64px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},oe=[{value:"para",label:"Paragraph size — 13px",cls:`font-mono font-normal uppercase tracking-[0.22em] ${s.labelLarge}`},{value:"sm",label:"Small — 40px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium1} ${s.headingMediumUpTo800Xs}`},{value:"md",label:"Medium — 48px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium2} ${s.headingMediumUpTo800Small}`},{value:"lg",label:"Large — 56px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium3} ${s.headingMediumUpTo800Large}`},{value:"xl",label:"Extra large — 64px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium4} ${s.headingMediumUpTo800Xl}`}];function Fr(w){return(oe.find(u=>u.value===w)??oe.find(u=>u.value===Rr)).cls}function Or({num:w,catalog:u,kinds:E,title:T,titleSize:ae,padTop:j,description:C,link:v,products:ie,wheels:le,source:d,columns:de,columnsPhone:me,limit:o,editing:y,contentCapped:ce=!1,imageBackground:pe,hover:ue,coverIndex:ge,indexBadge:he,outline:fe,showBadge:xe,fieldUsage:g,showCardPrice:we,showCardFinishes:ve,showCardSizes:ye,showCardBuy:Ce,showCardPage:be,cardImage:Se,gap:$e,gapPhone:Me}){const z=p(()=>g?se(g,"alloy-wheel"):void 0,[g]),Ne=p(()=>g?se(g,"tyre"):void 0,[g]),e=He("pg"),m=Cr(de,me),W=typeof o=="number"&&o>0,X=ce,_e=yr(),Ee=vr(),Te=_e||Ee,K=zr(y===!0&&!!d),i=p(()=>d?$r(Tr(d,E,K??u??[])):null,[u,K,d,E]),c=_r(d),h=c!==null,{filters:b,reportCount:I,reportLugs:L,reportSizes:A,reportFinishes:B,reportCategories:P,vehicle:Z}=xr(),{currency:R}=hr(),F=h&&!!b.process&&b.process!==c,t=p(()=>i?h?Sr(i,b,R,Z.fit):i:null,[i,h,b,R,Z.fit]);_(()=>(P(e,c===null?[]:[c]),()=>P(e,[])),[c,P,e]),_(()=>{if(h)return I(e,F?0:t?.length??0),()=>I(e,0)},[h,F,t,I,e]);const ze=p(()=>{const n=(t??[]).filter(l=>U(l)!=="tyre");if(n.length===0)return!1;const a=n.some(l=>!!l.process);return n.some(l=>!!l.setWords)||or({kind:!1,brand:!1,process:a},z??[])},[t,z]),S=p(()=>({lugs:Ar(i??[]),sizes:Br(i??[]),finishes:Lr(i??[])}),[i]);_(()=>(L(e,S.lugs),A(e,S.sizes),B(e,S.finishes),()=>{L(e,[]),A(e,[]),B(e,[])}),[S,L,A,B,e]);const f=Ke("ProductGrid",$e,"both",Me),q=f.className.includes(Ze),O=`${e} grid${f.className} bg-[var(--catalog-grid-bg)] ${m}`,Ie=q?`${O} ${Ye}`:O,Le=q?{...f.style,...Qe(Je(f))}:f.style,Ae=t?t.length>0?r("div",{className:Ie,style:Le,children:t.map((n,a)=>U(n)==="tyre"?r(Mr,{item:n,currency:R,editing:y,fieldUsage:Ne},`tyre:${n.slug}-${a}`):r(Ve,{wheel:n,variant:"catalog"},`${n.slug}-${a}`))}):y?r("div",{className:"flex min-h-[320px] items-center justify-center rounded bg-surface-2 p-4 text-center",children:r("span",{className:`font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:Pr("No products in “{name}” yet",{name:d?.name??""})})}):null:r(ie,{className:O,style:f.style,minEmptyHeight:320}),$=t?t.length:null,V=Nr(Er(d,E)),Be=w||T||C||v?x("div",{className:`${Ir} sticky top-[var(--sf-header-h,88px)] z-30 mb-5 flex items-center justify-between gap-4 max-view-wide:flex-wrap max-view-wide:gap-y-2 border-b border-line bg-bg/95 py-3 backdrop-blur-md ${X||Te?"":"-mx-[var(--sf-site-gutter,40px)] px-[var(--sf-site-gutter,40px)] max-view-wide:-mx-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]"}`,children:[x("div",{className:"flex min-w-0 items-end gap-6 max-view-wide:flex-col max-view-wide:items-stretch max-view-wide:gap-3",children:[w&&r("span",{className:`font-mono ${s.labelLarge} leading-none uppercase tracking-[0.22em] text-fg-dim`,children:H(w)}),T&&r("h2",{className:`${Fr(ae)} leading-none text-fg max-view-wide:leading-[1] [&>span]:block`,children:br(T,!1)})]}),(C||v||$!==null)&&x("div",{className:"flex items-center gap-5 max-view-wide:gap-3 view-wide:grow view-wide:justify-end",children:[C&&r("span",{className:`max-w-[340px] truncate font-display ${s.body} leading-[1.4] text-fg-dim max-view-wide:hidden view-wide:w-0 view-wide:grow view-wide:text-right`,children:H(C)}),v&&x(qe,{href:v.href,className:`inline-flex items-center gap-2 whitespace-nowrap font-mono ${s.labelLarge} uppercase tracking-[0.2em] text-fg-dim transition-colors hover:text-fg`,children:[H(v.text),r("span",{"aria-hidden":!0,children:"→"})]}),$!==null&&x("span",{className:`whitespace-nowrap font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:[$," ",$===1?V.one:V.many]})]})]}):null,Pe=typeof j=="number"?{"--pg-pt":`${j}px`}:{},Y=dr(he),M=p(()=>{if(!t)return null;const n=t.map(a=>U(a)!=="tyre"&&nr(sr(a))?2:1);return ne(n,o)?re(m,n,o):null},[t,m,o]),[Re,Fe]=Ue("");_(()=>{if(t)return;const n=document.querySelector(`.${e}`);if(!n)return;const a=()=>{const l=[...n.children].map(ke=>ke.classList.contains("col-span-2")?2:1);Fe(ne(l,o)?te(e,re(m,l,o,!1),l.length):"")};a();const k=new MutationObserver(a);return k.observe(n,{childList:!0}),()=>k.disconnect()},[t,e,m,o]);const Oe=M?M[0].tracks:t?W?Math.min(t.length,o):t.length:void 0,N=M?te(e,M,t.length):Re,J=N?"":tr(e,m,{limit:o,cards:t?.length}),Q=lr(e,Y),ee=x(De,{children:[W&&!N&&r("style",{children:`.${e} > *:nth-child(n+${o+1}){display:none}`}),N&&r("style",{children:N}),J&&r("style",{children:J}),Q&&r("style",{children:Q}),Be,Ae,r(ar,{editing:y})]});if(F)return null;const G=r(wr,{attrs:h&&c!==null?{[fr]:c}:void 0,className:"relative z-[2] bg-bg px-[var(--sf-site-gutter,40px)] pt-[var(--pg-pt)] pb-[120px] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:pt-[70px] max-view-wide:pb-[70px]",column:null,inAnyBox:!0,style:{...Pe,...Xe(Se)},defaults:{"--pg-pt":"120px"},children:X?r("div",{style:pr(cr),children:ee}):ee}),Ge=i?G:y?r(ur,{children:G}):r(gr,{wheels:le,children:G});return r(er,{imageSizes:rr(m,Oe),imageBackgroundFill:We(pe,je),hover:ue,coverIndex:ge??mr,indexBadge:Y,outline:fe??ir,showBadge:xe??!0,fieldUsage:z,reserveEyebrow:ze,showCardPrice:we??!0,showCardFinishes:ve??!0,showCardSizes:ye??D.showCardSizes,showCardBuy:Ce??D.showCardBuy,showCardPage:be??D.showCardPage,children:Ge})}export{oe as TITLE_SIZES,Or as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as t}from"react/jsx-runtime";import{Render as
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import{Render as n}from"efficient-easel/render";import i from"./BoxHeaderBar.js";import{headerRenderConfig as p}from"../lib/document/render-config.js";import{migrateRenamedProps as m}from"efficient-web-builder/format/lib/document/renamed-props";import{chromeOwnWidth as s}from"efficient-web-builder/format/lib/content/section-width";function a({group:e}){const r=m({root:{props:{}},content:[e],zones:{}}),o=e.props??{};return t(i,{sticky:o.sticky,topTextColor:o.topTextColor,heightPx:o.heightPx,theme:o.sectionAccent,bandCapped:s(e.props??{}).background==="content",children:t(n,{config:p(),data:r})})}export{a as default};
|
|
@@ -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};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CSSProperties, ReactNode } from "react";
|
|
2
2
|
export { BAND_CAP } from "../lib/sections/section-band.js";
|
|
3
|
-
export default function SectionBand({ className, capped, column, style, defaults, id, attrs, children, }: {
|
|
3
|
+
export default function SectionBand({ className, capped, column, style, defaults, id, attrs, inAnyBox, children, }: {
|
|
4
4
|
className: string;
|
|
5
5
|
capped?: boolean;
|
|
6
6
|
column?: string | null;
|
|
@@ -8,5 +8,6 @@ export default function SectionBand({ className, capped, column, style, defaults
|
|
|
8
8
|
defaults?: CSSProperties;
|
|
9
9
|
id?: string;
|
|
10
10
|
attrs?: Record<string, string>;
|
|
11
|
+
inAnyBox?: boolean;
|
|
11
12
|
children?: ReactNode;
|
|
12
13
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as A}from"efficient-web-builder/format/lib/content/page-width";import{BAND_CAP as C,bandClassesInBox as d}from"../lib/sections/section-band.js";import N from"./SectionBandChoice.js";import{BAND_CAP as v}from"../lib/sections/section-band.js";function _({className:e,capped:f=!1,column:n=A,style:i,defaults:s,id:a,attrs:r,inAnyBox:p=!1,children:t}){const l=d(e),c=n===null?"":d(n),m=o("section",{...r,className:l||void 0,style:i,id:a,children:c?o("div",{className:c,children:t}):t}),x=s?{...s,...i}:i,B=o("section",{...r,className:f?`${C} ${e}`:e,style:x,id:a,children:n===null?t:o("div",{className:n,children:t})});return o(N,{inBox:m,atTop:B,anyBox:p})}export{v as BAND_CAP,_ as default};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
export default function SectionBandChoice({ inBox, atTop }: {
|
|
2
|
+
export default function SectionBandChoice({ inBox, atTop, anyBox }: {
|
|
3
3
|
inBox: ReactNode;
|
|
4
4
|
atTop: ReactNode;
|
|
5
|
+
anyBox?: boolean;
|
|
5
6
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{Fragment as
|
|
1
|
+
"use client";import{Fragment as o,jsx as r}from"react/jsx-runtime";import{useInsideBox as u,useInsideSiteGutter as a}from"efficient-web-builder/render/components/SiteGutterFrame";function c({inBox:e,atTop:t,anyBox:n=!1}){const i=a(),s=u();return r(o,{children:i||n&&s?e:t})}export{c as default};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { SlotComponent } from "efficient-easel/blocks";
|
|
2
|
-
export default function SectionGroupBody({ place, sections: Sections, editing,
|
|
2
|
+
export default function SectionGroupBody({ place, sections: Sections, editing, widths, navTextCase, menuRow, }: {
|
|
3
3
|
place: "header" | "footer";
|
|
4
4
|
sections: SlotComponent;
|
|
5
5
|
editing?: boolean;
|
|
6
|
-
|
|
6
|
+
widths: Readonly<Record<string, unknown>>;
|
|
7
7
|
navTextCase?: unknown;
|
|
8
8
|
menuRow?: unknown;
|
|
9
9
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as e}from"react/jsx-runtime";import{PhoneMenuToolsProvider as m}from"efficient-web-builder/render/components/PhoneMenuTools";import{SectionGroupWidthsProvider as h}from"efficient-web-builder/render/components/SiteGutterFrame";import{chromeOwnWidth as p}from"efficient-web-builder/format/lib/content/section-width";import{centredCap as g,SITE_WIDTH_CAP as v}from"efficient-web-builder/format/lib/content/page-width";import{resolveMenuRow as x,resolveNavTextCase as b}from"../lib/content/header-bar.js";function w({place:o,sections:d,editing:l=!1,widths:c,navTextCase:u,menuRow:i}){const a=o==="footer"?"footer":"div",n=p(c),t=n.content==="full"?"100vw":n.contentMax===null?null:`${n.contentMax}px`,r=o==="footer"&&n.background==="content"?g(v):null,f=t===null&&r===null?void 0:{...r,...t===null?null:{"--sf-site-width":t}},s=e(a,{"data-section-group":o,...o==="header"?{"data-header-nav-case":b(u),"data-header-menu-row":x(i)??"top"}:null,className:l&&o==="footer"?"sf-theme-surfaces bg-bg text-fg":void 0,style:f,children:e(h,{value:{background:n.background,content:n.content==="content"?"content":null},children:e(d,{minEmptyHeight:120})})});return o==="header"?e(m,{children:s}):s}export{w as default};
|