@cloud-ru/ds-uikit-product-page-layout 1.4.2-preview-a0540d7f.0 → 1.4.3

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 CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 1.4.3 (2026-09-18)
7
+
8
+ **Note:** Version bump only for package @ds/uikit-product-page-layout
9
+
10
+ ## 1.4.2 (2026-09-14)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **FF-9049:** use size l for page form footer buttons ([7321fa1](https://github.com/cloud-ru-tech/snack-v2/commit/7321fa13b4d887272a59ba725b72a752b551d84e))
15
+
6
16
  ## 1.4.1 (2026-09-10)
7
17
 
8
18
  **Note:** Version bump only for package @ds/uikit-product-page-layout
@@ -23,9 +23,9 @@ function DesktopPageForm({ children, stepper, title, subtitle, className, footer
23
23
  return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.container, className), ...(0, utils_1.extractSupportProps)(rest), children: [(0, jsx_runtime_1.jsxs)(block_1.Block, { size: block_1.SIZE.L, className: styles_module_scss_1.default.form, contentClassName: styles_module_scss_1.default.formContent, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.headline, children: (0, jsx_runtime_1.jsx)(Headline_1.Headline, { title: title, subtitle: subtitle }) }), stepper, (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.body, children: children }), footer && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.footer, {
24
24
  [styles_module_scss_1.default.footerSticky]: stickyFooter,
25
25
  [styles_module_scss_1.default.footerStuck]: stickyFooter && !atBottom,
26
- }), children: [footer.buttonSecondary && ((0, jsx_runtime_1.jsx)(SecondaryButton, { ...footer.buttonSecondary, size: button_1.SIZE.M, appearance: button_1.APPEARANCE.Neutral, label: footer.buttonSecondary.variant === 'custom'
26
+ }), children: [footer.buttonSecondary && ((0, jsx_runtime_1.jsx)(SecondaryButton, { ...footer.buttonSecondary, size: button_1.SIZE.L, appearance: button_1.APPEARANCE.Neutral, label: footer.buttonSecondary.variant === 'custom'
27
27
  ? footer.buttonSecondary.label
28
- : getButtonLabel(footer.buttonSecondary.variant) })), (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.mainActions, children: [footer.buttonAdditional && ((0, jsx_runtime_1.jsx)(AdditionalButton, { ...footer.buttonAdditional, size: button_1.SIZE.M, appearance: button_1.APPEARANCE.Neutral })), (0, jsx_runtime_1.jsx)(PrimaryButton, { ...footer.buttonPrimary, size: button_1.SIZE.M, appearance: button_1.APPEARANCE.Primary, label: footer.buttonPrimary.variant === 'custom'
28
+ : getButtonLabel(footer.buttonSecondary.variant) })), (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.mainActions, children: [footer.buttonAdditional && ((0, jsx_runtime_1.jsx)(AdditionalButton, { ...footer.buttonAdditional, size: button_1.SIZE.L, appearance: button_1.APPEARANCE.Neutral })), (0, jsx_runtime_1.jsx)(PrimaryButton, { ...footer.buttonPrimary, size: button_1.SIZE.L, appearance: button_1.APPEARANCE.Primary, label: footer.buttonPrimary.variant === 'custom'
29
29
  ? footer.buttonPrimary.label
30
30
  : getButtonLabel(footer.buttonPrimary.variant) })] })] }), stickyFooter && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", { ref: sentinelRef, className: styles_module_scss_1.default.footerSentinel, "aria-hidden": true }) }))] }))] }), moreItems.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.sideItems, children: moreItems.map((item, index) => ((0, jsx_runtime_1.jsx)("div", { children: item }, index))) }))] }));
31
31
  }
@@ -50,7 +50,7 @@ function MobilePageFormBase({ children, title, subtitle, className, footer, step
50
50
  })), children: (0, jsx_runtime_1.jsx)(button_1.Button, { view: button_1.VIEW.Function, appearance: button_1.APPEARANCE.Neutral, icon: (0, jsx_runtime_1.jsx)(system_1.KebabSVG, {}), size: 'm' }) })) : undefined }), stepper] }), sideBlock && ((0, jsx_runtime_1.jsx)(modal_1.ModalCustom, { open: openMoreContentIndex !== undefined, onClose: () => setOpenMoreContentIndex(undefined),
51
51
  // Высоту листа задаёт сам sideBlock-элемент (`snapPoints`); напр. `[1]` — на всю высоту.
52
52
  // По умолчанию — по высоте контента.
53
- snapPoints: sideBlock[openMoreContentIndex ?? 0].snapPoints, children: (0, jsx_runtime_1.jsx)(modal_1.ModalCustom.Body, { content: sideBlock[openMoreContentIndex ?? 0].content }) })), (0, jsx_runtime_1.jsx)("div", { className: mobileStyles_module_scss_1.default.body, children: children }), (priceSummary || footer) && ((0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.footer, children: [priceSummary && ((0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.priceSummary, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: typography_1.VARIANT.body, size: typography_1.SIZE.m, className: mobileStyles_module_scss_1.default.priceSummaryText, children: "\u041E\u0446\u0435\u043D\u043A\u0430 \u0431\u044E\u0434\u0436\u0435\u0442\u0430" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { open: openPriceSummary, onOpenChange: setOpenPriceSummary, content: (0, jsx_runtime_1.jsx)("div", { className: mobileStyles_module_scss_1.default.modalContent, children: priceSummary.content }), "data-test-id": constants_1.TEST_IDS.pageForm.priceSummarySheet, children: (0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.priceSummaryRight, "data-test-id": constants_1.TEST_IDS.pageForm.priceSummaryTrigger, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: typography_1.VARIANT.label, size: typography_1.SIZE.l, className: mobileStyles_module_scss_1.default.priceSummaryTotal, children: priceSummary.total }), priceSummary.content && ((0, jsx_runtime_1.jsx)(button_1.Button, { view: button_1.VIEW.Function, appearance: button_1.APPEARANCE.Neutral, size: 'm', icon: (0, jsx_runtime_1.jsx)(system_1.ChevronRightSVG, {}) }))] }) })] })), footer && ((0, jsx_runtime_1.jsx)(button_1.ButtonGroup, { size: 'm', filled: true,
53
+ snapPoints: sideBlock[openMoreContentIndex ?? 0].snapPoints, children: (0, jsx_runtime_1.jsx)(modal_1.ModalCustom.Body, { content: sideBlock[openMoreContentIndex ?? 0].content }) })), (0, jsx_runtime_1.jsx)("div", { className: mobileStyles_module_scss_1.default.body, children: children }), (priceSummary || footer) && ((0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.footer, children: [priceSummary && ((0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.priceSummary, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: typography_1.VARIANT.body, size: typography_1.SIZE.m, className: mobileStyles_module_scss_1.default.priceSummaryText, children: "\u041E\u0446\u0435\u043D\u043A\u0430 \u0431\u044E\u0434\u0436\u0435\u0442\u0430" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { open: openPriceSummary, onOpenChange: setOpenPriceSummary, content: (0, jsx_runtime_1.jsx)("div", { className: mobileStyles_module_scss_1.default.modalContent, children: priceSummary.content }), "data-test-id": constants_1.TEST_IDS.pageForm.priceSummarySheet, children: (0, jsx_runtime_1.jsxs)("div", { className: mobileStyles_module_scss_1.default.priceSummaryRight, "data-test-id": constants_1.TEST_IDS.pageForm.priceSummaryTrigger, children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: typography_1.VARIANT.label, size: typography_1.SIZE.l, className: mobileStyles_module_scss_1.default.priceSummaryTotal, children: priceSummary.total }), priceSummary.content && ((0, jsx_runtime_1.jsx)(button_1.Button, { view: button_1.VIEW.Function, appearance: button_1.APPEARANCE.Neutral, size: 'm', icon: (0, jsx_runtime_1.jsx)(system_1.ChevronRightSVG, {}) }))] }) })] })), footer && ((0, jsx_runtime_1.jsx)(button_1.ButtonGroup, { size: 'l', filled: true,
54
54
  // 2 кнопки — в ряд (делят ширину); 3 — в столбик (правило футеров).
55
55
  vertical: [footer.buttonPrimary, footer.buttonSecondary, footer.buttonAdditional].filter(Boolean).length >= 3, renderAction: (button, slot) => {
56
56
  const tooltip = footerTooltips?.[slot];
@@ -17,9 +17,9 @@ export function DesktopPageForm({ children, stepper, title, subtitle, className,
17
17
  return (_jsxs("div", { className: cn(styles.container, className), ...extractSupportProps(rest), children: [_jsxs(Block, { size: BLOCK_SIZE.L, className: styles.form, contentClassName: styles.formContent, children: [_jsx("div", { className: styles.headline, children: _jsx(Headline, { title: title, subtitle: subtitle }) }), stepper, _jsx("div", { className: styles.body, children: children }), footer && (_jsxs(_Fragment, { children: [_jsxs("div", { className: cn(styles.footer, {
18
18
  [styles.footerSticky]: stickyFooter,
19
19
  [styles.footerStuck]: stickyFooter && !atBottom,
20
- }), children: [footer.buttonSecondary && (_jsx(SecondaryButton, { ...footer.buttonSecondary, size: SIZE.M, appearance: APPEARANCE.Neutral, label: footer.buttonSecondary.variant === 'custom'
20
+ }), children: [footer.buttonSecondary && (_jsx(SecondaryButton, { ...footer.buttonSecondary, size: SIZE.L, appearance: APPEARANCE.Neutral, label: footer.buttonSecondary.variant === 'custom'
21
21
  ? footer.buttonSecondary.label
22
- : getButtonLabel(footer.buttonSecondary.variant) })), _jsxs("div", { className: styles.mainActions, children: [footer.buttonAdditional && (_jsx(AdditionalButton, { ...footer.buttonAdditional, size: SIZE.M, appearance: APPEARANCE.Neutral })), _jsx(PrimaryButton, { ...footer.buttonPrimary, size: SIZE.M, appearance: APPEARANCE.Primary, label: footer.buttonPrimary.variant === 'custom'
22
+ : getButtonLabel(footer.buttonSecondary.variant) })), _jsxs("div", { className: styles.mainActions, children: [footer.buttonAdditional && (_jsx(AdditionalButton, { ...footer.buttonAdditional, size: SIZE.L, appearance: APPEARANCE.Neutral })), _jsx(PrimaryButton, { ...footer.buttonPrimary, size: SIZE.L, appearance: APPEARANCE.Primary, label: footer.buttonPrimary.variant === 'custom'
23
23
  ? footer.buttonPrimary.label
24
24
  : getButtonLabel(footer.buttonPrimary.variant) })] })] }), stickyFooter && (_jsx(_Fragment, { children: _jsx("div", { ref: sentinelRef, className: styles.footerSentinel, "aria-hidden": true }) }))] }))] }), moreItems.length > 0 && (_jsx("div", { className: styles.sideItems, children: moreItems.map((item, index) => (_jsx("div", { children: item }, index))) }))] }));
25
25
  }
@@ -44,7 +44,7 @@ function MobilePageFormBase({ children, title, subtitle, className, footer, step
44
44
  })), children: _jsx(Button, { view: VIEW.Function, appearance: APPEARANCE.Neutral, icon: _jsx(KebabSVG, {}), size: 'm' }) })) : undefined }), stepper] }), sideBlock && (_jsx(ModalCustom, { open: openMoreContentIndex !== undefined, onClose: () => setOpenMoreContentIndex(undefined),
45
45
  // Высоту листа задаёт сам sideBlock-элемент (`snapPoints`); напр. `[1]` — на всю высоту.
46
46
  // По умолчанию — по высоте контента.
47
- snapPoints: sideBlock[openMoreContentIndex ?? 0].snapPoints, children: _jsx(ModalCustom.Body, { content: sideBlock[openMoreContentIndex ?? 0].content }) })), _jsx("div", { className: styles.body, children: children }), (priceSummary || footer) && (_jsxs("div", { className: styles.footer, children: [priceSummary && (_jsxs("div", { className: styles.priceSummary, children: [_jsx(Typography, { variant: VARIANT.body, size: SIZE.m, className: styles.priceSummaryText, children: "\u041E\u0446\u0435\u043D\u043A\u0430 \u0431\u044E\u0434\u0436\u0435\u0442\u0430" }), _jsx(Dropdown, { open: openPriceSummary, onOpenChange: setOpenPriceSummary, content: _jsx("div", { className: styles.modalContent, children: priceSummary.content }), "data-test-id": TEST_IDS.pageForm.priceSummarySheet, children: _jsxs("div", { className: styles.priceSummaryRight, "data-test-id": TEST_IDS.pageForm.priceSummaryTrigger, children: [_jsx(Typography, { variant: VARIANT.label, size: SIZE.l, className: styles.priceSummaryTotal, children: priceSummary.total }), priceSummary.content && (_jsx(Button, { view: VIEW.Function, appearance: APPEARANCE.Neutral, size: 'm', icon: _jsx(ChevronRightSVG, {}) }))] }) })] })), footer && (_jsx(ButtonGroup, { size: 'm', filled: true,
47
+ snapPoints: sideBlock[openMoreContentIndex ?? 0].snapPoints, children: _jsx(ModalCustom.Body, { content: sideBlock[openMoreContentIndex ?? 0].content }) })), _jsx("div", { className: styles.body, children: children }), (priceSummary || footer) && (_jsxs("div", { className: styles.footer, children: [priceSummary && (_jsxs("div", { className: styles.priceSummary, children: [_jsx(Typography, { variant: VARIANT.body, size: SIZE.m, className: styles.priceSummaryText, children: "\u041E\u0446\u0435\u043D\u043A\u0430 \u0431\u044E\u0434\u0436\u0435\u0442\u0430" }), _jsx(Dropdown, { open: openPriceSummary, onOpenChange: setOpenPriceSummary, content: _jsx("div", { className: styles.modalContent, children: priceSummary.content }), "data-test-id": TEST_IDS.pageForm.priceSummarySheet, children: _jsxs("div", { className: styles.priceSummaryRight, "data-test-id": TEST_IDS.pageForm.priceSummaryTrigger, children: [_jsx(Typography, { variant: VARIANT.label, size: SIZE.l, className: styles.priceSummaryTotal, children: priceSummary.total }), priceSummary.content && (_jsx(Button, { view: VIEW.Function, appearance: APPEARANCE.Neutral, size: 'm', icon: _jsx(ChevronRightSVG, {}) }))] }) })] })), footer && (_jsx(ButtonGroup, { size: 'l', filled: true,
48
48
  // 2 кнопки — в ряд (делят ширину); 3 — в столбик (правило футеров).
49
49
  vertical: [footer.buttonPrimary, footer.buttonSecondary, footer.buttonAdditional].filter(Boolean).length >= 3, renderAction: (button, slot) => {
50
50
  const tooltip = footerTooltips?.[slot];