diff --git a/.mapping.json b/.mapping.json index 8c84272e9..237b71b81 100644 --- a/.mapping.json +++ b/.mapping.json @@ -19716,6 +19716,8 @@ "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages-end/firefoxMobile/horizontal-pager-wrap-content-size-mode-few-pages-end.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages-end/firefoxMobile/horizontal-pager-wrap-content-size-mode-few-pages-end.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages/chromeMobile/horizontal-pager-wrap-content-size-mode-few-pages.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages/chromeMobile/horizontal-pager-wrap-content-size-mode-few-pages.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages/firefoxMobile/horizontal-pager-wrap-content-size-mode-few-pages.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-few-pages/firefoxMobile/horizontal-pager-wrap-content-size-mode-few-pages.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/chromeMobile/horizontal-pager-wrap-content-size-mode-match-parent.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/chromeMobile/horizontal-pager-wrap-content-size-mode-match-parent.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/firefoxMobile/horizontal-pager-wrap-content-size-mode-match-parent.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/firefoxMobile/horizontal-pager-wrap-content-size-mode-match-parent.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-with-item-spacing/chromeMobile/horizontal-pager-wrap-content-size-mode-with-item-spacing.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-with-item-spacing/chromeMobile/horizontal-pager-wrap-content-size-mode-with-item-spacing.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-with-item-spacing/firefoxMobile/horizontal-pager-wrap-content-size-mode-with-item-spacing.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-with-item-spacing/firefoxMobile/horizontal-pager-wrap-content-size-mode-with-item-spacing.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-width-with-paddings/chromeMobile/horizontal-pager-wrap-content-width-with-paddings.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-width-with-paddings/chromeMobile/horizontal-pager-wrap-content-width-with-paddings.png", @@ -19808,6 +19810,8 @@ "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height-with-paddings/firefoxMobile/vertical-pager-wrap-content-height-with-paddings.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height-with-paddings/firefoxMobile/vertical-pager-wrap-content-height-with-paddings.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height/chromeMobile/vertical-pager-wrap-content-height.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height/chromeMobile/vertical-pager-wrap-content-height.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height/firefoxMobile/vertical-pager-wrap-content-height.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-height/firefoxMobile/vertical-pager-wrap-content-height.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/chromeMobile/vertical-pager-wrap-content-size-match-parent.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/chromeMobile/vertical-pager-wrap-content-size-match-parent.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/firefoxMobile/vertical-pager-wrap-content-size-match-parent.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/firefoxMobile/vertical-pager-wrap-content-size-match-parent.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-end/chromeMobile/vertical-pager-wrap-content-size-mode-alignment-end.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-end/chromeMobile/vertical-pager-wrap-content-size-mode-alignment-end.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-end/firefoxMobile/vertical-pager-wrap-content-size-mode-alignment-end.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-end/firefoxMobile/vertical-pager-wrap-content-size-mode-alignment-end.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-start/chromeMobile/vertical-pager-wrap-content-size-mode-alignment-start.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-mode-alignment-start/chromeMobile/vertical-pager-wrap-content-size-mode-alignment-start.png", diff --git a/client/web/divkit/src/components/pager/Pager.svelte b/client/web/divkit/src/components/pager/Pager.svelte index 5b4e68e7a..d404fc91c 100644 --- a/client/web/divkit/src/components/pager/Pager.svelte +++ b/client/web/divkit/src/components/pager/Pager.svelte @@ -109,7 +109,8 @@ let itemSpacing = '0em'; let paddingObj: EdgeInsets = {}; let padding = ''; - let sizeVal = ''; + let autoSizeVal = ''; + let templateSizeVal = ''; let childLayoutParams: LayoutParams = {}; let crossAxisAlignment: 'start' | 'center' | 'end' = 'start'; @@ -361,7 +362,8 @@ padding = edgeInsertsToCss(paddingObj, $direction); } - $: gridSizeProp = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows'; + $: gridAutoSizeProp = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows'; + $: gridTemplateSizeProp = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows'; $: if ($jsonScrollAxisAlignment === 'start' || $jsonScrollAxisAlignment === 'center' || $jsonScrollAxisAlignment === 'end') { scrollAxisAlignment = $jsonScrollAxisAlignment; @@ -392,20 +394,39 @@ const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value || 0; if (scrollAxisAlignment === 'center') { - sizeVal = `calc(100% + ${paddingStart} + ${paddingEnd} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})`; + autoSizeVal = `calc(100% + ${paddingStart} + ${paddingEnd} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})`; } else if (scrollAxisAlignment === 'start') { - sizeVal = `calc(100% + ${paddingEnd} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`; + autoSizeVal = `calc(100% + ${paddingEnd} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`; } else { - sizeVal = `calc(100% + ${paddingStart} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`; + autoSizeVal = `calc(100% + ${paddingStart} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`; } + templateSizeVal = ''; } else if ($jsonLayoutMode?.type === 'percentage') { let pageWidth = $jsonLayoutMode.page_width?.value; if (typeof pageWidth !== 'number' || pageWidth < 0) { pageWidth = 100; } - sizeVal = `calc(${(pageWidth / 100).toFixed(2)} * (100% + ${paddingStart} + ${paddingEnd}))`; + autoSizeVal = `calc(${(pageWidth / 100).toFixed(2)} * (100% + ${paddingStart} + ${paddingEnd}))`; + templateSizeVal = ''; } else if ($jsonLayoutMode?.type === 'wrap_content') { - sizeVal = 'minmax(max-content, auto)'; + autoSizeVal = ''; + templateSizeVal = visibleItems.map(item => { + const size = item[orientation === 'horizontal' ? 'width' : 'height']; + + if (size?.type === 'fixed' || size?.type === 'wrap_content') { + return 'minmax(max-content, auto)'; + } + let val = '100%'; + if (size?.type === 'match_parent') { + if (isNonNegativeNumber(size.max_size?.value)) { + val = `min(${val}, ${pxToEmWithUnits(size.max_size.value)})`; + } + if (isNonNegativeNumber(size.min_size?.value)) { + val = `max(${val}, ${pxToEmWithUnits(size.min_size.value)})`; + } + } + return val; + }).join(' '); } } @@ -420,7 +441,8 @@ $: style = { 'grid-gap': itemSpacing, padding, - [gridSizeProp]: sizeVal, + [gridAutoSizeProp]: autoSizeVal, + [gridTemplateSizeProp]: templateSizeVal, transform: transformStr, }; diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/chromeMobile/horizontal-pager-wrap-content-size-mode-match-parent.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/chromeMobile/horizontal-pager-wrap-content-size-mode-match-parent.png new file mode 100644 index 000000000..9a54ddf3a Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/chromeMobile/horizontal-pager-wrap-content-size-mode-match-parent.png differ diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/firefoxMobile/horizontal-pager-wrap-content-size-mode-match-parent.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/firefoxMobile/horizontal-pager-wrap-content-size-mode-match-parent.png new file mode 100644 index 000000000..2463ba7bf Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/horizontal-pager-wrap-content-size-mode-match-parent/firefoxMobile/horizontal-pager-wrap-content-size-mode-match-parent.png differ diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/chromeMobile/vertical-pager-wrap-content-size-match-parent.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/chromeMobile/vertical-pager-wrap-content-size-match-parent.png new file mode 100644 index 000000000..fe50e9149 Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/chromeMobile/vertical-pager-wrap-content-size-match-parent.png differ diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/firefoxMobile/vertical-pager-wrap-content-size-match-parent.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/firefoxMobile/vertical-pager-wrap-content-size-match-parent.png new file mode 100644 index 000000000..5aa7abda0 Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-pager/vertical-pager-wrap-content-size-match-parent/firefoxMobile/vertical-pager-wrap-content-size-match-parent.png differ diff --git a/test_data/snapshot_test_data/div-pager/horizontal-pager-wrap-content-size-mode-match-parent.json b/test_data/snapshot_test_data/div-pager/horizontal-pager-wrap-content-size-mode-match-parent.json index acebb534a..b53a28cab 100644 --- a/test_data/snapshot_test_data/div-pager/horizontal-pager-wrap-content-size-mode-match-parent.json +++ b/test_data/snapshot_test_data/div-pager/horizontal-pager-wrap-content-size-mode-match-parent.json @@ -1,7 +1,8 @@ { "description": "Horizontal pager with wrap_content layout mode and children with match_parent width without constraints.", "platforms": [ - "android" + "android", + "web" ], "templates": { "text_page": { diff --git a/test_data/snapshot_test_data/div-pager/vertical-pager-wrap-content-size-match-parent.json b/test_data/snapshot_test_data/div-pager/vertical-pager-wrap-content-size-match-parent.json index ff1c21328..c141d2068 100644 --- a/test_data/snapshot_test_data/div-pager/vertical-pager-wrap-content-size-match-parent.json +++ b/test_data/snapshot_test_data/div-pager/vertical-pager-wrap-content-size-match-parent.json @@ -1,7 +1,8 @@ { "description": "Vertical pager with wrap_content layout mode and children with match_parent height with constraints.", "platforms": [ - "android" + "android", + "web" ], "templates": { "text_page": {