implements OnInit {
public trackPanelBy(_: number, panel: PanelModel) {
diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts
index 6ebcaf4539..aac310ea57 100644
--- a/packages/survey-core/src/default-theme/base-theme.ts
+++ b/packages/survey-core/src/default-theme/base-theme.ts
@@ -260,88 +260,90 @@ export default {
"--sjs2-layout-component-message-box-padding-vertical": "var(--sjs2-spacing-x100)",
"--sjs2-layout-component-message-box-gap-vertical": "var(--sjs2-spacing-x100)",
"--sjs2-layout-component-message-content-gap-horizontal": "var(--sjs2-spacing-x100)",
- "--sjs2-layout-component-page-box-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-box-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-box-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-box-gap-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-content-area-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-page-content-area-padding-vertical": "var(--sjs2-spacing-x500)",
- "--sjs2-layout-component-page-content-area-gap-horizontal": "var(--sjs2-spacing-x300)",
- "--sjs2-layout-component-page-content-area-gap-vertical": "var(--sjs2-spacing-x300)",
- "--sjs2-layout-component-page-header-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-page-header-padding-vertical": "var(--sjs2-spacing-large-vertical)",
- "--sjs2-layout-component-page-header-gap-vertical": "var(--sjs2-spacing-x050)",
- "--sjs2-layout-component-page-title-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-title-padding-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-description-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-description-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-description-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-page-footer-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-page-footer-padding-vertical": "var(--sjs2-spacing-large-vertical)",
- "--sjs2-layout-component-page-footer-action-group-gap": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-box-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-box-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-box-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-box-gap-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-content-area-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-content-area-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-content-area-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-content-area-gap-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-content-area-gap-vertical": "var(--sjs2-spacing-medium-vertical)",
+ "--sjs2-layout-component-page-box-padding-horizontal": "var(--sjs2-spacing-large-horizontal)", // + should be --sjs2-spacing-x000
+ "--sjs2-layout-component-page-box-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-box-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-box-gap-vertical": "var(--sjs2-spacing-x300)", // + should be --sjs2-spacing-x000
+ "--sjs2-layout-component-page-content-area-padding-horizontal": "var(--sjs2-spacing-x000)", // + should be --sjs2-spacing-large-horizontal
+ "--sjs2-layout-component-page-content-area-padding-vertical": "var(--sjs2-spacing-x000)", // + should be --sjs2-spacing-large-vertical
+ "--sjs2-layout-component-page-content-area-gap-horizontal": "var(--sjs2-spacing-x200)", // + should be --sjs2-spacing-medium-horizontal
+ "--sjs2-layout-component-page-content-area-gap-vertical": "var(--sjs2-spacing-x200)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-page-header-padding-horizontal": "var(--sjs2-spacing-large-horizontal)", // not used
+ "--sjs2-layout-component-page-header-padding-vertical": "var(--sjs2-spacing-large-vertical)", // not used
+ "--sjs2-layout-component-page-header-gap-vertical": "var(--sjs2-spacing-x050)", // +
+ "--sjs2-layout-component-page-title-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-title-padding-vertical": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-description-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-description-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-description-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-page-footer-padding-horizontal": "var(--sjs2-spacing-large-horizontal)", // not used
+ "--sjs2-layout-component-page-footer-padding-vertical": "var(--sjs2-spacing-large-vertical)", // not used
+ "--sjs2-layout-component-page-footer-action-group-gap": "var(--sjs2-spacing-x150)", // not used
+ "--sjs2-layout-component-panel-box-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-box-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-box-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-box-gap-vertical": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-content-area-padding-horizontal": "var(--sjs2-spacing-large-horizontal)", // +
+ "--sjs2-layout-component-panel-content-area-padding-vertical": "var(--sjs2-spacing-large-vertical)",
+ "--sjs2-layout-component-panel-content-area-padding-top": "var(--sjs2-spacing-large-vertical)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-content-area-padding-bottom": "var(--sjs2-spacing-large-vertical)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-content-area-gap-horizontal": "var(--sjs2-spacing-large-horizontal)", // +
+ "--sjs2-layout-component-panel-content-area-gap-vertical": "var(--sjs2-spacing-x400)", // + should be --sjs2-spacing-medium-vertical
"--sjs2-layout-component-panel-header-padding-left": "var(--sjs2-spacing-large-horizontal)",
"--sjs2-layout-component-panel-header-padding-right": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-header-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-header-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-header-gap-vertical": "var(--sjs2-spacing-x050)",
+ "--sjs2-layout-component-panel-header-padding-top": "var(--sjs2-spacing-x400)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-header-padding-bottom": "var(--sjs2-spacing-x400)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-header-gap-vertical": "var(--sjs2-spacing-x050)", // +
"--sjs2-layout-component-panel-header-gap-horizontal": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-title-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-title-padding-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-description-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-description-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-description-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-footer-padding-left": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-footer-padding-right": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-footer-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-footer-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
+ "--sjs2-layout-component-panel-title-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-title-padding-vertical": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-description-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-description-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-description-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-footer-padding-left": "var(--sjs2-spacing-large-horizontal)", // +
+ "--sjs2-layout-component-panel-footer-padding-right": "var(--sjs2-spacing-large-horizontal)", // +
+ "--sjs2-layout-component-panel-footer-padding-top": "calc(0.5 * var(--sd-base-vertical-padding))", // + should be var(--sjs2-spacing-x000)
+ "--sjs2-layout-component-panel-footer-padding-bottom": "var(--sjs2-spacing-x200)", // + sholud be --sjs2-spacing-medium-vertical
"--sjs2-layout-component-panel-footer-gap": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-footer-action-group-gap": "var(--sjs2-spacing-x150)",
+ "--sjs2-layout-component-panel-footer-action-group-gap": "var(--sjs2-spacing-x150)", // +
"--sjs2-layout-component-panel-header-action-group-gap": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-simple-box-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-simple-box-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-simple-box-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-simple-box-gap-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-simple-content-area-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-simple-content-area-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-simple-content-area-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-simple-content-area-gap-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-simple-content-area-gap-vertical": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-footer-padding-left": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-nested-footer-padding-right": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-nested-footer-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-footer-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-footer-gap": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-nested-box-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-box-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-box-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-box-gap-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-content-area-padding-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-nested-content-area-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-content-area-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-content-area-gap-horizontal": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-nested-content-area-gap-vertical": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-nested-header-padding-left": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-nested-header-padding-right": "var(--sjs2-spacing-large-horizontal)",
+ "--sjs2-layout-component-panel-simple-box-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-simple-box-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-simple-box-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-panel-simple-box-gap-vertical": "calc(0.5 * var(--sd-base-vertical-padding))", // + should be var(--sjs2-spacing-x000)
+ "--sjs2-layout-component-panel-simple-box-gap-horizontal": "var(--sjs2-spacing-x300)", // new
+ "--sjs2-layout-component-panel-simple-content-area-padding-horizontal": "var(--sd-base-padding)", // + should be --sjs2-spacing-large-horizontal
+ "--sjs2-layout-component-panel-simple-content-area-padding-top": "var(--sd-base-padding)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-simple-content-area-padding-bottom": "var(--sd-base-padding)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-simple-content-area-gap-horizontal": "var(--sjs2-spacing-x300)", // + should be --sjs2-spacing-large-horizontal
+ "--sjs2-layout-component-panel-simple-content-area-gap-vertical": "calc(0.5 * var(--sd-base-vertical-padding))", // + should be var(--sjs2-spacing-medium-vertical)
+ "--sjs2-layout-component-panel-nested-footer-padding-left": "var(--sjs2-layout-component-panel-footer-padding-left)",
+ "--sjs2-layout-component-panel-nested-footer-padding-right": "var(--sjs2-layout-component-panel-footer-padding-right)",
+ "--sjs2-layout-component-panel-nested-footer-padding-top": "var(--sjs2-layout-component-panel-footer-padding-top)",
+ "--sjs2-layout-component-panel-nested-footer-padding-bottom": "var(--sjs2-layout-component-panel-footer-padding-bottom)",
+ "--sjs2-layout-component-panel-nested-footer-gap": "var(--sjs2-layout-component-panel-footer-gap)",
+ "--sjs2-layout-component-panel-nested-box-padding-horizontal": "var(--sjs2-layout-component-panel-box-padding-horizontal)",
+ "--sjs2-layout-component-panel-nested-box-padding-top": "var(--sjs2-layout-component-panel-box-padding-top)",
+ "--sjs2-layout-component-panel-nested-box-padding-bottom": "var(--sjs2-layout-component-panel-box-padding-bottom)",
+ "--sjs2-layout-component-panel-nested-box-gap-vertical": "var(--sjs2-layout-component-panel-box-gap-vertical)",
+ "--sjs2-layout-component-panel-nested-content-area-padding-horizontal": "var(--sd-base-padding)",
+ "--sjs2-layout-component-panel-nested-content-area-padding-top": "var(--sjs2-layout-component-panel-content-area-padding-top)",
+ "--sjs2-layout-component-panel-nested-content-area-padding-bottom": "var(--sd-base-padding)",
+ "--sjs2-layout-component-panel-nested-content-area-gap-horizontal": "var(--sjs2-layout-component-panel-content-area-gap-horizontal)",
+ "--sjs2-layout-component-panel-nested-content-area-gap-vertical": "var(--sjs2-layout-component-panel-content-area-gap-vertical)",
+ "--sjs2-layout-component-panel-nested-header-padding-left": "var(--sjs2-layout-component-panel-header-padding-left)",
+ "--sjs2-layout-component-panel-nested-header-padding-right": "var(--sjs2-layout-component-panel-header-padding-right)",
"--sjs2-layout-component-panel-nested-header-padding-top": "var(--sjs2-spacing-x200)",
"--sjs2-layout-component-panel-nested-header-padding-bottom": "var(--sjs2-spacing-x200)",
- "--sjs2-layout-component-panel-nested-header-gap-vertical": "var(--sjs2-spacing-x050)",
- "--sjs2-layout-component-panel-nested-header-gap-horizontal": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-nested-title-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-title-padding-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-description-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-description-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-description-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-panel-nested-footer-action-group-gap": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-panel-nested-header-action-group-gap": "var(--sjs2-spacing-x150)",
+ "--sjs2-layout-component-panel-nested-header-gap-vertical": "var(--sjs2-layout-component-panel-header-gap-vertical)",
+ "--sjs2-layout-component-panel-nested-header-gap-horizontal": "var(--sjs2-layout-component-panel-header-gap-horizontal)",
+ "--sjs2-layout-component-panel-nested-title-padding-horizontal": "var(--sjs2-layout-component-panel-title-padding-horizontal)",
+ "--sjs2-layout-component-panel-nested-title-padding-vertical": "var(--sjs2-layout-component-panel-title-padding-vertical)",
+ "--sjs2-layout-component-panel-nested-description-padding-horizontal": "var(--sjs2-layout-component-panel-description-padding-horizontal)",
+ "--sjs2-layout-component-panel-nested-description-padding-top": "var(--sjs2-layout-component-panel-description-padding-top)",
+ "--sjs2-layout-component-panel-nested-description-padding-bottom": "var(--sjs2-layout-component-panel-description-padding-bottom)",
+ "--sjs2-layout-component-panel-nested-footer-action-group-gap": "var(--sjs2-layout-component-panel-footer-action-group-gap)",
+ "--sjs2-layout-component-panel-nested-header-action-group-gap": "var(--sjs2-layout-component-panel-header-action-group-gap)",
"--sjs2-layout-component-panel-dynamic-box-padding-horizontal": "var(--sjs2-spacing-x000)",
"--sjs2-layout-component-panel-dynamic-box-padding-top": "var(--sjs2-spacing-x000)",
"--sjs2-layout-component-panel-dynamic-box-padding-bottom": "var(--sjs2-spacing-x000)",
@@ -353,8 +355,8 @@ export default {
"--sjs2-layout-component-panel-dynamic-content-area-gap-vertical": "var(--sjs2-spacing-x000)",
"--sjs2-layout-component-panel-dynamic-header-padding-left": "var(--sjs2-spacing-large-horizontal)",
"--sjs2-layout-component-panel-dynamic-header-padding-right": "var(--sjs2-spacing-large-horizontal)",
- "--sjs2-layout-component-panel-dynamic-header-padding-top": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-dynamic-header-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
+ "--sjs2-layout-component-panel-dynamic-header-padding-top": "var(--sjs2-spacing-x400)", // + should be --sjs2-spacing-medium-vertical
+ "--sjs2-layout-component-panel-dynamic-header-padding-bottom": "var(--sjs2-spacing-x400)", // + should be --sjs2-spacing-medium-vertical
"--sjs2-layout-component-panel-dynamic-header-gap-vertical": "var(--sjs2-spacing-x050)",
"--sjs2-layout-component-panel-dynamic-header-gap-horizontal": "var(--sjs2-spacing-x150)",
"--sjs2-layout-component-panel-dynamic-title-padding-horizontal": "var(--sjs2-spacing-x000)",
@@ -366,7 +368,7 @@ export default {
"--sjs2-layout-component-panel-dynamic-footer-padding-right": "var(--sjs2-spacing-large-horizontal)",
"--sjs2-layout-component-panel-dynamic-footer-padding-top": "var(--sjs2-spacing-medium-vertical)",
"--sjs2-layout-component-panel-dynamic-footer-padding-bottom": "var(--sjs2-spacing-medium-vertical)",
- "--sjs2-layout-component-panel-dynamic-footer-gap": "var(--sjs2-spacing-x150)",
+ "--sjs2-layout-component-panel-dynamic-footer-gap": "var(--sjs2-spacing-x050)", // + should be --sjs2-spacing-x150
"--sjs2-layout-component-panel-dynamic-footer-action-group-gap": "var(--sjs2-spacing-x150)",
"--sjs2-layout-component-panel-dynamic-header-action-group-gap": "var(--sjs2-spacing-x150)",
"--sjs2-layout-component-labeled-group-box-padding-vertical": "var(--sjs2-spacing-x150)",
@@ -377,25 +379,25 @@ export default {
"--sjs2-layout-component-label-box-padding-vertical": "var(--sjs2-spacing-x000)",
"--sjs2-layout-component-label-box-gap-vertical": "var(--sjs2-spacing-x100)",
"--sjs2-layout-component-label-content-gap-horizontal": "var(--sjs2-spacing-x050)",
- "--sjs2-layout-component-question-box-gap-vertical": "var(--sjs2-spacing-x200)",
- "--sjs2-layout-component-question-box-gap-horizontal": "var(--sjs2-spacing-x300)",
- "--sjs2-layout-component-question-header-padding-left": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-padding-right": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-padding-bottom": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-gap-horizontal": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-question-header-gap-vertical": "var(--sjs2-spacing-x050)",
- "--sjs2-layout-component-question-header-side-padding-left": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-side-padding-right": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-header-side-padding-top": "var(--sjs2-spacing-x150)",
- "--sjs2-layout-component-question-header-side-padding-bottom": "var(--sjs2-spacing-x000)",
+ "--sjs2-layout-component-question-box-gap-vertical": "var(--sjs2-spacing-x200)", // used panel-simple-box-gap instead
+ "--sjs2-layout-component-question-box-gap-horizontal": "var(--sjs2-spacing-x300)", // used panel-simple-box-gap instead
+ "--sjs2-layout-component-question-header-padding-left": "var(--sd-base-padding)", // + should be --sjs2-spacing-x000
+ "--sjs2-layout-component-question-header-padding-right": "var(--sd-base-padding)", // + should be --sjs2-spacing-x000
+ "--sjs2-layout-component-question-header-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-header-padding-bottom": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-header-gap-horizontal": "var(--sjs2-spacing-x150)", // +
+ "--sjs2-layout-component-question-header-gap-vertical": "calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050))", // + should be var(--sjs2-spacing-x050)
+ "--sjs2-layout-component-question-header-side-padding-left": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-header-side-padding-right": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-header-side-padding-top": "var(--sjs2-spacing-x150)", // + used as top margin for title left location
+ "--sjs2-layout-component-question-header-side-padding-bottom": "var(--sjs2-spacing-x000)", // +
"--sjs2-layout-component-question-header-side-gap-horizontal": "var(--sjs2-spacing-x150)",
"--sjs2-layout-component-question-header-side-gap-vertical": "var(--sjs2-spacing-x050)",
- "--sjs2-layout-component-question-title-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-title-padding-vertical": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-description-padding-horizontal": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-description-padding-top": "var(--sjs2-spacing-x000)",
- "--sjs2-layout-component-question-description-padding-bottom": "var(--sjs2-spacing-x000)",
+ "--sjs2-layout-component-question-title-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-title-padding-vertical": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-description-padding-horizontal": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-description-padding-top": "var(--sjs2-spacing-x000)", // +
+ "--sjs2-layout-component-question-description-padding-bottom": "var(--sjs2-spacing-x000)", // +
"--sjs2-layout-component-question-header-action-group-gap": "var(--sjs2-spacing-x150)",
"--sjs2-layout-component-caption-box-padding-left": "var(--sjs2-spacing-x000)",
"--sjs2-layout-component-caption-box-padding-right": "var(--sjs2-spacing-x050)",
diff --git a/packages/survey-core/src/default-theme/blocks/sd-collapsed-element.scss b/packages/survey-core/src/default-theme/blocks/sd-collapsed-element.scss
index 4f08e4e606..dee400a721 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-collapsed-element.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-collapsed-element.scss
@@ -1,7 +1,7 @@
@use "../variables.scss" as *;
-.sd-element--expanded,
-.sd-element--collapsed {
+.sd-element--expanded > div > div,
+.sd-element--collapsed > div > div {
&>.sd-element__header {
cursor: pointer;
}
@@ -9,16 +9,11 @@
.sd-element--collapsed {
&>.sd-element__header {
- padding: var(--sjs2-spacing-x000) var(--sd-base-padding);
box-sizing: border-box;
background-color: $background;
- margin-inline-start: calc(-1 * var(--sd-base-padding));
- width: calc(100% + 2 * var(--sd-base-padding));
}
&.sd-element--with-frame {
- padding-top: 0;
- padding-bottom: 0;
&>.sd-element__header {
padding-top: var(--sjs2-spacing-x200);
@@ -39,4 +34,30 @@
box-shadow: 0 var(--sjs2-spacing-negative-x200) 0 0 $background-dim-light, 0 var(--sjs2-spacing-x200) 0 $background-dim-light;
}
}
+
+ &.sd-element--nested > div > div {
+
+ &>.sd-element__header:hover,
+ &>.sd-element__header:focus-within {
+ background-color: $background-dim-light;
+ box-shadow: var(--sjs2-spacing-negative-x300) 0px 0px var(--sjs2-spacing-x200) var(--sjs2-color-bg-basic-secondary), var(--sjs2-spacing-x300) 0px 0px var(--sjs2-spacing-x200) var(--sjs2-color-bg-basic-secondary);
+ }
+ }
+}
+
+.sd-element--expandable > div > div {
+ &>.sd-element__header {
+ cursor: pointer;
+ }
+}
+
+.sd-element--with-frame.sd-element--collapsed > div {
+ &> .sd-question__header-and-content-container {
+ padding-top: var(--sjs2-spacing-x200);
+ padding-bottom: var(--sjs2-spacing-x200);
+ border-radius: var(--sjs2-radius-component-panel);
+ &:hover, &:focus-within {
+ background-color: $background-dim-light;
+ }
+ }
}
\ No newline at end of file
diff --git a/packages/survey-core/src/default-theme/blocks/sd-complex-element.scss b/packages/survey-core/src/default-theme/blocks/sd-complex-element.scss
index 5e949da91d..1929f8ce8a 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-complex-element.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-complex-element.scss
@@ -10,6 +10,17 @@
margin-bottom: 0;
}
+.sd-element__header ~ hr {
+ margin: 0 calc(-1 * var(--sd-base-padding));
+ margin-top: calc(0.5 * var(--sd-base-vertical-padding));
+ width: calc(100% + 2 * var(--sd-base-padding));
+ border: none;
+ height: 1px;
+ background-color: $border-light;
+ position: sticky;
+ left: calc(-1 * var(--sd-base-padding));
+}
+
.sd-element--complex > .sd-element__header {
&:after {
content: " ";
@@ -21,16 +32,6 @@
}
}
-.sd-element--complex.sd-element--with-frame > .sd-element__header {
- padding-top: var(--sd-base-vertical-padding);
- padding-bottom: var(--sd-base-vertical-padding);
-}
-
-.sd-element--collapsed.sd-element--complex > .sd-element__header {
- padding-top: var(--sjs2-spacing-x200);
- padding-bottom: var(--sjs2-spacing-x200);
-}
-
.sd-element--nested.sd-element--complex {
& > .sd-element__header--location-top {
&:after {
@@ -39,28 +40,36 @@
}
}
+.sd-element--nested.sd-element--complex>div>div {
+ & > .sd-element__header--location-top {
+ &~hr {
+ display: block;
+ margin: 0;
+ width: 100%;
+ }
+ }
+}
+
.sd-element--nested-with-borders {
border: 1px solid $border-light;
border-radius: var(--sjs2-radius-component-panel-nested);
box-sizing: border-box;
- padding-left: var(--sd-base-padding);
- padding-right: var(--sd-base-padding);
& > .sd-element__header--location-top {
padding-top: calc(0.5 * var(--sd-base-vertical-padding));
padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
}
-
- & > .sd-element__erbox {
- margin-left: calc(-1 * var(--sd-base-padding));
- margin-right: calc(-1 * var(--sd-base-padding));
- width: calc(100% + 2 * var(--sd-base-padding));
+ & >div>div> .sd-element__header--location-top {
+ padding-top: calc(0.5 * var(--sd-base-vertical-padding));
+ padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
}
- & > .sd-question__erbox--below-question {
- bottom: 0;
- margin-top: 0;
- }
+ // Commented out: question erbox is no longer a direct child of the question root
+ // (it is nested inside .sd-question__container)
+ // & > .sd-question__erbox--below-question {
+ // bottom: 0;
+ // margin-top: 0;
+ // }
&.sd-element--collapsed {
& > .sd-element__header--location-top {
@@ -90,20 +99,40 @@
}
.sd-question--empty.sd-question--complex {
- & > .sd-question__content {
- padding-top: 0;
- padding-bottom: 0;
- }
- & > .sd-question__content:first-of-type {
- padding-top: var(--sd-base-padding);
+ &>.sd-question__container {
+ row-gap: 0;
+ &>.sd-question__header-and-content-container {
+ row-gap: 0;
+ padding-bottom: var(--sd-base-padding);
+ &>.sd-element__header {
+ padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
+ &~hr {
+ display: none;
+ }
+ }
+ }
}
+}
- & > .sd-question__header--location-top {
- padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
-
- &:after {
- display: none;
- }
+// TODO: remove this after the next release, it is a temporary fix to keep screenshot
+.sd-element--complex.sd-element--with-frame.sd-question--left {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ &>.sd-element__header {
+ margin-top: calc(var(--sjs2-size-x300) + var(--sjs2-size-x050));
+ &~hr {
+ display: none;
+ }
+ &:after {
+ content: " ";
+ display: block;
+ height: 1px;
+ position: relative;
+ background: var(--sjs2-color-border-basic-secondary);
+ bottom: var(--sjs2-size-x050);
+ }
+ }
+ }
}
-}
+}
\ No newline at end of file
diff --git a/packages/survey-core/src/default-theme/blocks/sd-dropdown.scss b/packages/survey-core/src/default-theme/blocks/sd-dropdown.scss
index 96cc4827a0..4feb58bf99 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-dropdown.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-dropdown.scss
@@ -6,13 +6,13 @@
position: relative;
}
.sd-dropdown--select {
+ justify-content: end;
&:before {
pointer-events: none;
content: "";
@include sjs2--typography--component--input--content;
min-height: calc(1lh + var(--sjs2-layout-component-input-medium-content-padding-vertical) * 2);
}
- justify-content: end;
select.sd-dropdown__input {
position: absolute;
padding:
diff --git a/packages/survey-core/src/default-theme/blocks/sd-element.scss b/packages/survey-core/src/default-theme/blocks/sd-element.scss
index 0f65ab4661..4ff31a67c7 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-element.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-element.scss
@@ -2,11 +2,6 @@
@use "../mixins.scss" as mixins;
@use "../typography-mixins.scss" as *;
-.sd-element {
- padding-left: var(--sv-element-add-padding-left, 0px);
- padding-right: var(--sv-element-add-padding-right, 0px);
-}
-
.sd-element__title {
outline: none;
}
@@ -136,10 +131,6 @@
.sd-element--with-frame {
border-radius: var(--sjs2-radius-component-panel);
box-sizing: border-box;
- padding-top: var(--sd-base-padding);
- padding-left: calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px));
- padding-right: calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px));
- padding-bottom: var(--sd-base-padding);
background: var(--sjs2-color-component-panel-default-bg);
box-shadow: $shadow-small;
}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-list.scss b/packages/survey-core/src/default-theme/blocks/sd-list.scss
index 48f31891db..248fe9dae2 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-list.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-list.scss
@@ -2,12 +2,9 @@
@use "../typography-mixins.scss" as *;
.sd-list {
- // padding-right: var(--sjs2-spacing-x050);
- // padding-left: var(--sjs2-spacing-x050);
}
.sd-list__item {
- // padding: 0;
}
.sd-list__item-body {
diff --git a/packages/survey-core/src/default-theme/blocks/sd-matrixdynamic.scss b/packages/survey-core/src/default-theme/blocks/sd-matrixdynamic.scss
index 8750800248..992f31696c 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-matrixdynamic.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-matrixdynamic.scss
@@ -26,6 +26,11 @@
}
}
+// TODO: Remove after new design system is implemented
+.sd-question--mobile .sd-matrixdynamic__footer:first-child {
+ margin-top: var(--sjs2-spacing-negative-x100);
+}
+
.sd-matrixdynamic__footer {
padding-top: var(--sjs2-spacing-x200);
}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-page.scss b/packages/survey-core/src/default-theme/blocks/sd-page.scss
index 7cde022236..39f1ecfa24 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-page.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss
@@ -3,50 +3,84 @@
.sd-page {
position: relative;
+ width: 100%;
display: flex;
flex-direction: column;
align-items: flex-start;
- padding: 0 var(--sjs2-spacing-x500);
- width: 100%;
box-sizing: border-box;
+ padding-top: var(--sjs2-layout-component-page-box-padding-top);
+ padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom);
+ padding-left: var(--sjs2-layout-component-page-box-padding-horizontal);
+ padding-right: var(--sjs2-layout-component-page-box-padding-horizontal);
border-radius: var(--sjs2-radius-component-page);
+ row-gap: var(--sjs2-layout-component-page-box-gap-vertical);
+ column-gap: var(--sjs2-layout-component-page-box-gap-horizontal);
}
-.sd-root-modern--mobile .sd-page {
- padding: 0;
+.sd-page__header {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ gap: var(--sjs2-layout-component-page-header-gap-vertical);
+ margin: 0 0 var(--sjs2-layout-component-page-header-gap-vertical) 0;
}
-.sd-page .sd-page__title {
+.sd-page__title {
@include sjs2--typography--component--page--title;
position: static;
- margin: 0 0 var(--sjs2-spacing-x050) 0px;
+ padding-inline-start: var(--sjs2-layout-component-page-title-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-page-title-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-page-title-padding-vertical);
+ padding-bottom: var(--sjs2-layout-component-page-title-padding-vertical);
}
-.sd-page .sd-page__description {
+.sd-page__description {
@include sjs2--typography--component--page--description;
position: static;
- margin: 0 0 var(--sjs2-spacing-x050) 0;
+ padding-inline-start: var(--sjs2-layout-component-page-description-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-page-description-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-page-description-padding-top);
+ padding-bottom: var(--sjs2-layout-component-page-description-padding-bottom);
}
-
-.sd-page__errbox {
- padding: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)) var(--sd-base-padding);
+.sd-page__content {
+ display: flex;
+ flex-direction: column;
+ padding: var(--sjs2-layout-component-page-content-area-padding-vertical) var(--sjs2-layout-component-page-content-area-padding-horizontal);
+ row-gap: var(--sjs2-layout-component-page-content-area-gap-vertical);
+ column-gap: var(--sjs2-layout-component-page-content-area-gap-horizontal);
+ width: 100%;
+ box-sizing: border-box;
}
-.sd-page__title,
-.sd-page__description {
- &~.sd-page__errbox {
- margin-top: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100));
- margin-bottom: var(--sjs2-spacing-negative-x100);
+// TODO: Remove after new tokens are released, it is a temporary fix to keep screenshot
+.sd-root-modern--mobile {
+ .sd-page {
+ padding: 0;
}
}
+.sd-page__errbox {
+ // TODO: Remove after new tokens are released, it is a temporary fix to keep screenshot
+ padding: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)) var(--sd-base-padding);
+}
+
.sd-root--compact {
- .sd-page__title,
- .sd-page__description {
- &~.sd-page__errbox {
- margin-bottom: 0;
+ // TODO: Remove after new tokens are released, it is a temporary fix to keep screenshot
+ .sd-page__header ~ .sd-page__content {
+ .sd-page__errbox {
+ margin-top: var(--sjs2-spacing-negative-x100);
}
}
-}
\ No newline at end of file
+
+ .sd-page {
+ // TODO: Discuss with design team. To remove in favour of compact theme?
+ row-gap: var(--sd-base-vertical-padding);
+ }
+
+ .sd-page__content {
+ // TODO: Discuss with design team. To remove in favour of compact theme?
+ row-gap: var(--sd-base-vertical-padding);
+ }
+}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-panel-nested.scss b/packages/survey-core/src/default-theme/blocks/sd-panel-nested.scss
new file mode 100644
index 0000000000..52e932808e
--- /dev/null
+++ b/packages/survey-core/src/default-theme/blocks/sd-panel-nested.scss
@@ -0,0 +1,68 @@
+// TODO: Discuss whether we need this file: only 2 CSS variables are differ from ordinary panel
+.sd-panel.sd-element--nested {
+ padding-inline-start: var(--sjs2-layout-component-panel-nested-box-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-nested-box-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-nested-box-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-nested-box-padding-bottom);
+ gap: var(--sjs2-layout-component-panel-nested-box-gap-vertical);
+
+ & > .sd-panel__header {
+ padding-top: var(--sjs2-layout-component-panel-nested-header-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-nested-header-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-nested-header-padding-left);
+ padding-inline-end: var(--sjs2-layout-component-panel-nested-header-padding-right);
+ }
+
+ .sd-panel__title {
+ padding: var(--sjs2-layout-component-panel-nested-title-padding-vertical)
+ var(--sjs2-layout-component-panel-nested-title-padding-horizontal);
+ }
+
+ .sd-panel__description {
+ padding-top: var(--sjs2-layout-component-panel-nested-description-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-nested-description-padding-bottom);
+ padding-inline: var(--sjs2-layout-component-panel-nested-description-padding-horizontal);
+ }
+
+ .sd-panel__title ~ .sd-panel__description {
+ margin-top: var(--sjs2-layout-component-panel-nested-header-gap-vertical);
+ }
+
+ & > .sd-panel__content {
+ padding-inline-start: var(--sjs2-layout-component-panel-nested-content-area-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-nested-content-area-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-nested-content-area-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-nested-content-area-padding-bottom);
+ --animation-padding-top: var(--sjs2-layout-component-panel-nested-content-area-padding-bottom);
+ row-gap: var(--sjs2-layout-component-panel-nested-content-area-gap-vertical);
+ column-gap: var(--sjs2-layout-component-panel-nested-content-area-gap-horizontal);
+ }
+
+ & > .sd-panel__footer {
+ padding-top: var(--sjs2-layout-component-panel-nested-footer-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-nested-footer-padding-bottom);
+ padding-inline-start: calc(var(--sjs2-layout-component-panel-nested-footer-padding-left) - 1.75 * var(--sjs2-spacing-x100));
+ padding-inline-end: var(--sjs2-layout-component-panel-nested-footer-padding-right);
+ --sd-action-bar-gap: var(--sjs2-layout-component-panel-nested-footer-action-group-gap);
+ }
+}
+
+// Restore the ".sd-panel--as-page .sd-panel__footer" override (sd-panel.scss) that the
+// higher-specificity nested footer rule above would otherwise beat.
+.sd-panel--as-page .sd-panel.sd-element--nested > .sd-panel__footer {
+ padding: var(--sjs2-spacing-x400) 0 0;
+ margin: 0;
+ border: none;
+ width: initial;
+}
+
+.sd-root-modern--mobile {
+ .sd-element--nested > .sd-panel__header {
+ padding: var(--sjs2-spacing-x100) var(--sjs2-spacing-x300);
+ }
+ // Restore the mobile gap (sd-panel.scss mobile ".sd-panel__content" rule) that the
+ // higher-specificity nested content rule above would otherwise beat.
+ .sd-panel.sd-element--nested > .sd-panel__content {
+ gap: var(--sjs2-spacing-x200);
+ }
+}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-panel.scss b/packages/survey-core/src/default-theme/blocks/sd-panel.scss
index ff92f03227..81e605948d 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss
@@ -2,13 +2,60 @@
@use "../typography-mixins.scss" as *;
.sd-panel {
+ display: flex;
+ flex-direction: column;
position: relative;
+ padding-inline-start: var(--sjs2-layout-component-panel-box-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-box-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-box-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-box-padding-bottom);
+ gap: var(--sjs2-layout-component-panel-box-gap-vertical);
+}
+
+.sd-panel__header {
+ padding-top: var(--sjs2-layout-component-panel-header-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-header-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-header-padding-left);
+ padding-inline-end: var(--sjs2-layout-component-panel-header-padding-right);
+}
+
+.sd-panel__title {
+ padding: var(--sjs2-layout-component-panel-title-padding-vertical) var(--sjs2-layout-component-panel-title-padding-horizontal);
+}
+
+.sd-panel__description {
+ padding-inline-start: var(--sjs2-layout-component-panel-description-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-description-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-description-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-description-padding-bottom);
+}
+
+.sd-panel__content {
+ padding-inline-start: var(--sjs2-layout-component-panel-content-area-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-content-area-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-content-area-padding-top);
+ --animation-padding-top: var(--sjs2-layout-component-panel-content-area-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-content-area-padding-bottom);
+ row-gap: var(--sjs2-layout-component-panel-content-area-gap-vertical);
+ column-gap: var(--sjs2-layout-component-panel-content-area-gap-horizontal);
+ display: flex;
+ flex-direction: column;
+}
+
+.sd-root-modern--mobile {
+ .sd-panel__header {
+ padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300);
+ }
+ .sd-panel__content {
+ padding: var(--sjs2-spacing-x300);
+ gap: var(--sjs2-spacing-x200);
+ }
}
.sd-panel.sd-panel--as-page {
& > .sd-panel__header.sd-panel__header {
- padding-top: 0;
- padding-bottom: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100));
+ padding: 0;
+ padding-bottom: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x150));
&:after {
content: none;
@@ -17,7 +64,6 @@
.sd-panel__title {
@include sjs2--typography--component--page--title;
position: static;
- margin: 0 0 var(--sjs2-spacing-x050) 0px;
span {
font-family: inherit;
@@ -38,7 +84,6 @@
.sd-panel__description {
@include sjs2--typography--component--page--description;
position: static;
- margin: 0 0 var(--sjs2-spacing-x050) 0;
}
.sd-panel__required-text {
@@ -47,20 +92,25 @@
}
& > .sd-panel__errbox {
- margin: 0 0 var(--sjs2-spacing-x200) 0;
+ margin: 0 0 var(--sjs2-layout-component-page-content-area-gap-vertical) 0;
padding: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)) var(--sd-base-padding);
}
& > .sd-panel__content {
- padding-top: 0;
+ padding: 0;
+ row-gap: var(--sjs2-layout-component-page-content-area-gap-vertical);
}
}
.sd-root--compact {
+
.sd-panel--as-page {
& > .sd-panel__errbox {
margin: 0 0 var(--sd-base-vertical-padding) 0;
}
+ .sd-panel__content {
+ row-gap: var(--sd-base-vertical-padding);
+ }
}
}
@@ -88,8 +138,8 @@
padding-inline: var(--sjs2-layout-component-panel-description-padding-horizontal);
}
-.sd-panel__header .sd-panel__description {
- margin-top: calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050));
+.sd-panel__title ~ .sd-panel__description {
+ margin-top: var(--sjs2-layout-component-panel-header-gap-vertical);
}
.sd-panel > .sd-panel__header:after {
@@ -98,32 +148,18 @@
.sd-panel__footer {
box-sizing: border-box;
- padding-left: calc(var(--sd-base-padding) + var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025));
- margin-left: calc(-1 * var(--sd-base-padding));
- width: calc(100% + 2 * var(--sd-base-padding));
- margin-bottom: calc(-1 * var(--sd-base-padding) + 0.5 * var(--sd-base-vertical-padding));
- margin-top: calc(0.5 * var(--sd-base-vertical-padding));
border-top: 1px solid $border-light;
- padding-top: calc(0.5 * var(--sd-base-vertical-padding));
+ margin-top: calc(-1 * var(--sjs2-spacing-x300));
+ padding-top: var(--sjs2-layout-component-panel-footer-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-footer-padding-bottom);
+ padding-inline-start: calc(var(--sjs2-layout-component-panel-footer-padding-left) - 1.75 * var(--sjs2-spacing-x100));
+ padding-inline-end: var(--sjs2-layout-component-panel-footer-padding-right);
--sd-action-bar-gap: var(--sjs2-layout-component-panel-footer-action-group-gap);
}
+
.sd-panel--as-page .sd-panel__footer {
padding: var(--sjs2-spacing-x400) 0 0;
margin: 0;
border: none;
width: initial;
}
-.sd-panel__content {
- padding-top: var(--sd-base-padding);
-}
-
-.sd-panel.sd-element--nested {
- & > .sd-panel__content {
- padding-bottom: var(--sd-base-padding);
- --animation-padding-top: var(--sd-base-padding);
- }
-}
-
-.sd-panel__content {
- --animation-padding-top: var(--sd-base-padding);
-}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss
index 9835f1f8c2..2268b6919b 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss
@@ -1,13 +1,22 @@
@use "../variables.scss" as *;
.sd-paneldynamic {
+ padding-top: var(--sjs2-layout-component-panel-dynamic-box-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-dynamic-box-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-dynamic-box-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-dynamic-box-padding-horizontal);
+ gap: var(--sjs2-layout-component-panel-dynamic-box-gap-vertical);
+
.sd-progress {
position: absolute;
left: 0;
right: 0;
height: 2px;
z-index: 2;
- transform: translateY(-1px);
+ }
+
+ .sd-progress ~ .sd-paneldynamic__panels-container {
+ padding-top: 1px;
}
& > .sd-panel {
@@ -15,33 +24,128 @@
padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
}
- & .sd-paneldynamic__panel-wrapper > .sd-panel > .sd-panel__header {
- padding-top: var(--sd-base-vertical-padding);
- padding-bottom: 0;
+ & .sd-paneldynamic__panel-wrapper > .sd-panel {
+ &> .sd-panel__header {
+ padding-top: var(--sd-base-vertical-padding);
+ padding-bottom: 0;
- &:after {
- display: none;
+ &:after {
+ display: none;
+ }
+
+ & > .sd-panel__title {
+ color: $foreground-light;
+ }
}
+ }
+}
+
+.sd-paneldynamic ~ .sd-question__comment-area {
+ padding: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x500)) var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500));
+ padding-top: 0;
+}
+.sd-root-modern--mobile {
+ .sd-paneldynamic ~ .sd-question__comment-area {
+ padding: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x300)) var(--sjs2-spacing-x300);
+ padding-top: 0;
+ }
+}
- & > .sd-panel__title {
- color: $foreground-light;
+// Commented out: .sd-paneldynamic__footer / .sd-paneldynamic__panel-footer are never
+// direct children of the question root (footer lives inside .sd-paneldynamic,
+// panel footer inside .sd-panel)
+// .sd-question:not(.sd-element--with-frame) {
+// &>.sd-paneldynamic__footer {
+// padding: 0;
+// }
+
+// &>.sd-paneldynamic__panel-footer {
+// padding: 0;
+// }
+// }
+
+.sd-question--paneldynamic {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ padding: 0;
+ gap: 0;
}
}
}
+.sd-paneldynamic__header {
+ padding-top: var(--sjs2-layout-component-panel-dynamic-header-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-dynamic-header-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-dynamic-header-padding-left);
+ padding-inline-end: var(--sjs2-layout-component-panel-dynamic-header-padding-right);
+ gap: var(--sjs2-layout-component-panel-dynamic-header-gap-vertical);
+}
+
+.sd-paneldynamic__header .sd-question__title {
+ padding: var(--sjs2-layout-component-panel-dynamic-title-padding-vertical) var(--sjs2-layout-component-panel-dynamic-title-padding-horizontal);
+}
+
+.sd-paneldynamic__header .sd-question__description {
+ padding-inline: var(--sjs2-layout-component-panel-dynamic-description-padding-horizontal);
+ padding-top: var(--sjs2-layout-component-panel-dynamic-description-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-dynamic-description-padding-bottom);
+}
+
+.sd-paneldynamic__header ~ hr {
+ margin: 0;
+ width: 100%;
+}
+.sd-paneldynamic__header-tab ~ hr {
+ display: none;
+}
+.sd-paneldynamic__navigation--top {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ & > hr {
+ display: none;
+ }
+ }
+ }
+}
+
+.sd-paneldynamic__footer {
+ clear: both;
+ padding-top: var(--sjs2-layout-component-panel-dynamic-footer-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-dynamic-footer-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-dynamic-footer-padding-left);
+ padding-inline-end: var(--sjs2-layout-component-panel-dynamic-footer-padding-right);
+ gap: var(--sjs2-layout-component-panel-dynamic-footer-gap);
+ position: relative;
+
+ .sd-progress {
+ top: -1px;
+ }
+
+ .sd-paneldynamic__progress-text,
+ .sd-paneldynamic__progress--bottom {
+ display: initial;
+ }
+}
+
+.sd-root-modern--mobile {
+ .sd-paneldynamic__header {
+ padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300);
+ }
+ .sd-paneldynamic__footer {
+ padding: var(--sjs2-spacing-x100) var(--sjs2-spacing-x300);
+ }
+ .sd-paneldynamic__panel-footer {
+ padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300);
+ margin-top: calc(var(--sjs2-spacing-negative-x400));
+ }
+}
+
.sd-question--readonly,
.sd-question--preview {
.sd-paneldynamic .sd-question__placeholder {
color: $foreground;
}
}
-.sd-paneldynamic__separator {
- display: none;
-}
-.sd-paneldynamic__panel-wrapper {
- box-sizing: border-box;
- padding-bottom: calc(1 * var(--sd-base-padding));
-}
.sd-paneldynamic__panel-wrapper:after {
display: table;
@@ -49,11 +153,15 @@
content: " ";
}
+.sd-paneldynamic__separator {
+ display: none;
+}
.sd-paneldynamic__footer .sd-paneldynamic__separator,
.sd-paneldynamic__panel-wrapper--list ~ .sd-paneldynamic__panel-wrapper--list:before {
content: " ";
display: block;
position: absolute;
+ top: 0;
left: 0;
right: 0;
margin: 0;
@@ -79,19 +187,9 @@
}
}
-.sd-paneldynamic__footer {
- clear: both;
-
- .sd-paneldynamic__progress-text,
- .sd-paneldynamic__progress--bottom {
- display: initial;
- }
-}
-
.sd-paneldynamic__buttons-container {
display: flex;
align-items: center;
- padding: calc(var(--sd-base-vertical-padding) - var(--sjs2-spacing-x100)) 0;
}
.sd-paneldynamic__progress-text {
@@ -108,20 +206,24 @@
}
}
-.sd-question--empty.sd-question--paneldynamic {
- & > .sd-question__content {
- padding-bottom: var(--sd-base-padding);
- --animation-padding-bottom: var(--sd-base-padding);
- }
-}
-
-.sd-question--paneldynamic:not(.sd-question--empty) {
- & > .sd-question__content {
- & > .sd-question__comment-area {
- padding-bottom: var(--sd-base-padding);
- }
- }
-}
+// Commented out: .sd-question__content is no longer a direct child of the question root
+// (it is nested inside .sd-question__container > .sd-question__header-and-content-container)
+// .sd-question--empty.sd-question--paneldynamic {
+// & > .sd-question__content {
+// padding-bottom: var(--sd-base-padding);
+// --animation-padding-bottom: var(--sd-base-padding);
+// }
+// }
+
+// .sd-question--paneldynamic:not(.sd-question--empty) {
+// & > .sd-question__content {
+// padding: 0;
+// --animation-padding-bottom: 0;
+// & > .sd-question__comment-area {
+// padding-bottom: var(--sd-base-padding);
+// }
+// }
+// }
.sd-paneldynamic__buttons-container .sd-action-bar {
width: 100%;
@@ -133,18 +235,24 @@
.sd-paneldynamic__panel-footer {
border-top: none;
position: relative;
- top: calc(0.5 * var(--sd-base-vertical-padding));
+ padding: var(--sjs2-layout-component-panel-dynamic-footer-padding-top) var(--sjs2-layout-component-panel-dynamic-footer-padding-right) var(--sjs2-layout-component-panel-dynamic-footer-padding-bottom) var(--sjs2-layout-component-panel-dynamic-footer-padding-left);
justify-content: flex-end;
+ padding-top: 0;
+ margin-top: calc(var(--sjs2-spacing-negative-x300));
--sd-action-bar-gap: var(--sjs2-layout-component-panel-footer-action-group-gap);
-}
-.sd-paneldynamic__panel-footer {
+ &.sd-action-bar--empty {
+ display: none;
+ }
.sd-action-bar__item:not(.sd-action-bar__item--hidden) {
margin-bottom: var(--sjs2-spacing-negative-x100);
}
}
+
.sd-paneldynamic__tabs-container {
padding-top: var(--sd-base-padding);
+ padding-left: var(--sjs2-layout-component-panel-dynamic-header-padding-left);
+ padding-right: var(--sjs2-layout-component-panel-dynamic-header-padding-right);
.sd-tabs-toolbar {
margin-bottom: -1px;
}
@@ -155,13 +263,20 @@
position: relative;
background: $border-light;
bottom: 0;
- inset-inline-start: calc(-1 * var(--sd-base-padding));
- width: calc(100% + 2 * var(--sd-base-padding));
+ margin: 0 calc(-1 * var(--sjs2-layout-component-panel-dynamic-header-padding-right)) 0 calc(-1 * var(--sjs2-layout-component-panel-dynamic-header-padding-left));
}
}
.sd-paneldynamic__tabs-container--with-header {
padding-top: var(--sjs2-spacing-x300);
}
+.sd-root-modern--mobile {
+ .sd-paneldynamic__tabs-container--with-header {
+ &:after {
+ margin: 0 var(--sjs2-spacing-negative-x300);
+ }
+ }
+}
+
.sd-tabs-toolbar.sd-action-bar {
align-items: flex-start;
z-index: 1;
@@ -270,20 +385,20 @@
content: none;
}
-.sd-question--paneldynamic.sd-element--with-frame {
- padding-bottom: 0;
-}
-
.sd-paneldynamic__panels-container {
position: relative;
overflow: hidden;
- margin-left: calc(-1 * var(--sd-base-padding));
- padding-left: var(--sd-base-padding);
- margin-right: calc(-1 * var(--sd-base-padding));
- padding-right: var(--sd-base-padding);
+ padding-top: var(--sjs2-layout-component-panel-dynamic-content-area-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-dynamic-content-area-padding-bottom);
+ padding-inline-start: var(--sjs2-layout-component-panel-dynamic-content-area-padding-horizontal);
+ padding-inline-end: var(--sjs2-layout-component-panel-dynamic-content-area-padding-horizontal);
+ row-gap: var(--sjs2-layout-component-panel-dynamic-content-area-gap-vertical);
+ column-gap: var(--sjs2-layout-component-panel-dynamic-content-area-gap-horizontal);
}
+
.sd-paneldynamic__panel-wrapper {
box-sizing: border-box;
+ position: relative;
}
@keyframes movePanel {
diff --git a/packages/survey-core/src/default-theme/blocks/sd-question.scss b/packages/survey-core/src/default-theme/blocks/sd-question.scss
index a030bfed0b..f527be1628 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-question.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss
@@ -5,83 +5,151 @@
position: relative;
}
-.sd-question--no-pointer-events {
-
- .sd-selectbase,
- .sd-rating {
- label {
- pointer-events: none;
+.sd-question__container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ padding-top: var(--sjs2-layout-component-panel-simple-box-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-simple-box-padding-bottom);
+ padding-left: var(--sjs2-layout-component-panel-simple-box-padding-horizontal);
+ padding-right: var(--sjs2-layout-component-panel-simple-box-padding-horizontal);
+ row-gap: var(--sjs2-layout-component-panel-simple-box-gap-vertical);
+ column-gap: var(--sjs2-layout-component-panel-simple-box-gap-horizontal);
+}
+
+.sd-element--with-frame > .sd-question__container {
+ gap: 0;
+}
+// TODO: Refactor
+.sd-composite > .sd-question__container > .sd-question__header-and-content-container {
+ padding: 0;
+ &>.sd-question__header {
+ padding-left: calc(var(--sjs2-layout-component-question-header-padding-left) + var(--sv-element-add-padding-left, 0px));
+ padding-right: calc(var(--sjs2-layout-component-question-header-padding-right) + var(--sv-element-add-padding-right, 0px));
+ & ~ hr {
+ width: 100%;
+ left: 0;
+ margin-left: 0;
+ }
+ }
+ &>.sd-question__header ~ .sd-question__content {
+ padding: 0;
+ &>.sd-panel>.sd-panel__content {
+ padding-top: calc(var(--sd-base-padding) - 0.5 * var(--sd-base-vertical-padding));
}
}
}
-.sd-element__erbox--above-element {
- margin-bottom: var(--sjs2-spacing-x100);
-}
-
-.sd-question__erbox--below-question {
- margin-top: var(--sjs2-spacing-x100);
+.sd-question__header-and-content-container {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ padding-top: var(--sjs2-layout-component-panel-simple-content-area-padding-top);
+ padding-bottom: var(--sjs2-layout-component-panel-simple-content-area-padding-bottom);
+ padding-left: calc(var(--sjs2-layout-component-panel-simple-content-area-padding-horizontal) + var(--sv-element-add-padding-left, 0px));
+ padding-right: calc(var(--sjs2-layout-component-panel-simple-content-area-padding-horizontal) + var(--sv-element-add-padding-right, 0px));
+ row-gap: var(--sjs2-layout-component-panel-simple-content-area-gap-vertical);
+ column-gap: var(--sjs2-layout-component-panel-simple-content-area-gap-horizontal);
}
-.sd-question__content--support-container-queries {
- container-type: inline-size;
+// TODO: Remove after new design system is implemented
+.sd-element--with-frame.sd-question--title-top:not(.sd-element--collapsed):not(.sd-question--paneldynamic) > .sd-question__container {
+ &>.sd-question__header-and-content-container {
+ padding-top: var(--sd-base-vertical-padding);
+ }
}
-
-.sd-question--title-top>.sd-question__erbox--above-question {
- margin-bottom: calc(0.5 * var(--sd-base-vertical-padding));
+.sd-element--with-frame.sd-question--title-top:not(.sd-element--collapsed):not(.sd-element--complex)>div>.sd-element__erbox--above-element {
+ &~.sd-question__header-and-content-container {
+ padding-top: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100));
+ }
}
-.sd-question--description-under-input>.sd-question__erbox--below-question,
-.sd-question--title-bottom>.sd-question__erbox--below-question {
- margin-top: calc(0.25 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x050));
+.sd-question--title-bottom > .sd-question__container {
+ &>.sd-question__header-and-content-container {
+ row-gap: calc(0.375 * var(--sd-base-vertical-padding));
+ }
}
-
-.sd-element--with-frame>.sd-element__erbox--above-element {
- margin-bottom: var(--sd-base-padding);
- border-radius: var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel) 0 0;
+// TODO: Remove after new design system is implemented
+.sd-element--nested {
+ &.sd-question--error-top.sd-question--left,
+ &.sd-question--error-bottom:not(.sd-question--left) {
+ &> .sd-question__container {
+ row-gap: var(--sjs2-spacing-x100);
+ }
+ }
}
-.sd-question--left>.sd-element__erbox--above-element {
- margin-bottom: 0;
+.sd-question--left {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ flex-direction: row;
+ flex-wrap: wrap;
+ column-gap: var(--sjs2-spacing-x300);
+ row-gap: var(--sjs2-spacing-x100);
+ }
+ }
}
-.sd-element--with-frame.sd-question--left>.sd-element__erbox--above-element {
- margin-bottom: calc(1 * var(--sd-base-vertical-padding));
+.sd-element--nested > div > .sd-question__header-and-content-container {
+ padding: 0;
}
-.sd-element--with-frame>.sd-question__erbox--below-question {
- margin-top: auto;
- border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel);
+.sd-root--compact {
+ .sd-question:not(.sd-question--complex) > .sd-question__container {
+ &>.sd-question__header-and-content-container {
+ padding: 0;
+ }
+ }
+ .sd-question--left {
+ &>.sd-question__container {
+ row-gap: var(--sjs2-spacing-x100);
+ }
+ }
}
-.sd-element--with-frame.sd-question--title-top>.sd-question__erbox--above-question {
- margin-bottom: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100));
+.sd-question:not(.sd-element--with-frame) > .sd-question__container {
+ .sd-question__header-and-content-container {
+ padding: 0;
+ }
}
-.sd-element--with-frame.sd-question--description-under-input>.sd-question__erbox--below-question,
-.sd-element--with-frame.sd-question--title-bottom>.sd-question__erbox--below-question {
- margin-top: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100));
+.sd-question--single-input {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ padding: 0;
+ &>.sd-paneldynamic__header {
+ padding: 0;
+ }
+ }
+ }
}
.sd-question__header {
- width: 100%;
- padding-left: var(--sjs2-layout-component-question-header-padding-left);
- padding-right: var(--sjs2-layout-component-question-header-padding-right);
+ display: flex;
+ flex-direction: column;
+ padding-top: var(--sjs2-layout-component-question-header-padding-top);
+ padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom);
+ row-gap: var(--sjs2-layout-component-question-header-gap-vertical);
+ column-gap: var(--sjs2-layout-component-question-header-gap-horizontal);
}
-.sd-question__header--location-top {
- padding-top: var(--sjs2-layout-component-question-header-padding-top);
- padding-bottom: calc(0.5 * var(--sd-base-vertical-padding));
+.sd-question__header--location--left {
+ width: auto;
+ vertical-align: top;
+ margin-top: var(--sjs2-layout-component-question-header-side-padding-top);
+ margin-bottom: var(--sjs2-layout-component-question-header-side-padding-bottom);
+ margin-left: var(--sjs2-layout-component-question-header-side-padding-left);
+ margin-right: var(--sjs2-layout-component-question-header-side-padding-right);
}
-.sd-question__header--location--bottom {
- padding-top: calc(0.375 * var(--sd-base-vertical-padding));
+.sd-question__content--left {
+ flex: 1;
+ max-width: 100%;
}
.sd-question__title {
@include sjs2--typography--component--question--title;
- padding: var(--sjs2-layout-component-question-title-padding-vertical)
- var(--sjs2-layout-component-question-title-padding-horizontal);
+ padding: var(--sjs2-layout-component-question-title-padding-vertical) var(--sjs2-layout-component-question-title-padding-horizontal);
}
.sd-question__title--empty {
@@ -100,71 +168,42 @@
padding-bottom: var(--sjs2-layout-component-question-description-padding-bottom);
}
-.sd-question__description--under-input {
- padding-top: calc(0.375 * var(--sd-base-vertical-padding));
-}
-
-.sd-question__header .sd-question__description {
- margin-top: calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050));
-}
-
-.sd-element--with-frame {
- &.sd-question--title-top {
- padding-top: var(--sd-base-vertical-padding);
- }
-
- &.sd-question--error-top {
- padding-top: 0;
- }
-
- &.sd-question--error-bottom {
- padding-bottom: 0;
- display: flex;
- flex-direction: column;
-
- &>.sd-question__content {
- margin-bottom: var(--sd-base-padding);
+.sd-question--no-pointer-events {
+ .sd-selectbase,
+ .sd-rating {
+ label {
+ pointer-events: none;
}
}
-
- &>.sd-element__erbox {
- margin-left: calc(-1 * var(--sd-base-padding));
- margin-right: calc(-1 * var(--sd-base-padding));
- width: calc(100% + 2 * var(--sd-base-padding));
- position: sticky;
- left: calc(-1 * var(--sd-base-padding));
- }
}
-.sd-scrollable .sd-question__content {
- overflow-x: auto;
- padding: var(--sjs2-spacing-x200) 0;
+.sd-question__content--support-container-queries {
+ container-type: inline-size;
}
-.sd-question__header--location--left {
- display: inline-block;
- width: auto;
- vertical-align: top;
- margin-top: var(--sjs2-spacing-x150);
+.sd-element--with-frame>.sd-element__erbox--above-element {
+ border-radius: var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel) 0 0;
+}
+.sd-element--with-frame>div>.sd-element__erbox--above-element {
+ border-radius: var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel) 0 0;
}
-.sd-question--left {
- display: flex;
- flex-wrap: wrap;
- flex-direction: row;
- column-gap: var(--sjs2-spacing-x300);
- row-gap: calc(0.25 * var(--sd-base-vertical-padding));
+// Commented out: question erbox is no longer a direct child of the question root
+// (it is nested inside .sd-question__container), see the >div> variant below
+// .sd-element--with-frame>.sd-question__erbox--below-question {
+// border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel);
+// }
+.sd-element--with-frame>div>.sd-question__erbox--below-question {
+ border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel);
}
-.sd-question__content--left {
- display: inline-block;
- flex: 1;
- margin-top: calc(0.25 * var(--sd-base-vertical-padding)) 0;
- max-width: 100%;
+.sd-question__description--under-input {
+ padding-top: calc(0.375 * var(--sd-base-vertical-padding));
}
-.sd-element--with-frame>.sd-question__content--left {
- margin: 0;
+.sd-scrollable .sd-question__content {
+ overflow-x: auto;
+ padding: var(--sjs2-spacing-x200) 0;
}
.sd-question__required-text {
@@ -207,7 +246,3 @@
overflow: visible;
max-width: 100%;
}
-
-.sd-question__content {
- box-sizing: border-box;
-}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-rating.scss b/packages/survey-core/src/default-theme/blocks/sd-rating.scss
index 8da6affc54..be3927efa7 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-rating.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-rating.scss
@@ -564,7 +564,6 @@ legend+sv-ng-rating-item+.sd-rating__item-smiley {
&.sd-rating__min-text {
margin-right: var(--sjs2-spacing-x100);
- // margin-left: var(--sjs2-spacing-x200);
border-left: 0px;
}
diff --git a/packages/survey-core/src/default-theme/blocks/sd-row.scss b/packages/survey-core/src/default-theme/blocks/sd-row.scss
index 8390867db4..d51bc1c2fc 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-row.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-row.scss
@@ -5,42 +5,6 @@
flex-direction: row;
width: 100%;
box-sizing: border-box;
- margin-top: var(--sd-base-vertical-padding);
-}
-
-.sd-row.sd-page__row {
- margin-top: var(--sjs2-spacing-x200);
-}
-
-.sd-page__row.sd-row--compact {
- margin-top: var(--sd-base-vertical-padding);
-}
-
-.sd-row:first-of-type {
- margin-top: 0;
-}
-
-.sd-page__title,
-.sd-page__description {
- & ~ .sd-row.sd-page__row:not(.sd-row--compact) {
- margin-top: var(--sjs2-spacing-x300);
- }
-
- & ~ .sd-page__row.sd-row--compact {
- margin-top: var(--sd-base-vertical-padding);
- }
- & ~ .sd-page__row.sd-row.sd-row--enter.sd-row-delayed-enter {
- margin-top: 0;
- }
-}
-
-.sd-row.sd-page__row:not(.sd-row--compact) {
- & ~ .sd-row.sd-page__row:not(.sd-row--compact) {
- margin-top: var(--sjs2-spacing-x200);
- }
- & ~ .sd-page__row.sd-row.sd-row--enter.sd-row-delayed-enter {
- margin-top: 0;
- }
}
.sd-row--multiple {
diff --git a/packages/survey-core/src/default-theme/blocks/sd-table.scss b/packages/survey-core/src/default-theme/blocks/sd-table.scss
index 1381b5a1eb..9367baea07 100644
--- a/packages/survey-core/src/default-theme/blocks/sd-table.scss
+++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss
@@ -30,6 +30,7 @@
)};
}
}
+
.sd-table {
width: 100%;
border-collapse: separate;
@@ -77,81 +78,6 @@
padding-top: var(--sjs2-spacing-x300);
}
-.sd-panel:not(.sd-panel--as-page) {
- & > .sd-panel__content {
- .sd-table--no-header {
- padding-top: 0;
- }
-
- .sd-question--table {
- .sd-question__content {
- padding-bottom: var(--sjs2-spacing-x025);
- margin-bottom: var(--sjs2-spacing-negative-x025);
- padding-top: var(--sjs2-spacing-x100);
- margin-top: var(--sjs2-spacing-negative-x100);
- }
-
- & > .sd-question__header {
- & ~ .sd-question__content {
- padding-top: var(--sjs2-spacing-x200);
- --animation-padding-top: #{var(--sjs2-spacing-x200)};
-
- .sd-table--no-header {
- padding-top: var(--sjs2-spacing-x400);
- }
- }
- }
- }
-
- .sd-question--table > .sd-question__content .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
- margin-top: var(--sjs2-spacing-negative-x300);
- }
-
- .sd-question--table.sd-question--error-top
- > .sd-question__content
- .sd-table-wrapper
- .sd-table:not(.sd-table--no-header) {
- margin-top: 0;
- }
-
- &
- > .sd-row:not(:first-of-type)
- .sd-question--table
- > .sd-question__content
- .sd-table-wrapper
- .sd-table:not(.sd-table--no-header) {
- margin-top: var(--sjs2-spacing-negative-x200);
- }
-
- &
- > .sd-row:not(:first-of-type)
- .sd-question--table.sd-question--error-top
- > .sd-question__content
- .sd-table-wrapper
- .sd-table:not(.sd-table--no-header) {
- margin-top: var(--sjs2-spacing-x000);
- }
-
- .sd-question--table
- > .sd-question__header
- ~ .sd-question__content
- .sd-table-wrapper
- .sd-table:not(.sd-table--no-header) {
- margin-top: var(--sjs2-spacing-x100);
- }
-
- &
- > .sd-row:not(:first-of-type)
- .sd-question--table
- > .sd-question__header
- ~ .sd-question__content
- .sd-table-wrapper
- .sd-table:not(.sd-table--no-header) {
- margin-top: var(--sjs2-spacing-x100);
- }
- }
-}
-
.sd-question:not(.sd-question--mobile) {
.sd-table--alternate-rows {
margin-left: var(--sjs2-spacing-x100);
@@ -326,8 +252,11 @@
.sd-table__cell--detail-panel {
border-top: calc(var(--sjs2-base-unit-border-width) * 8) solid transparent;
- padding: var(--sjs2-spacing-x300) var(--sjs2-spacing-x100) var(--sjs2-spacing-x400);
+ padding: var(--sjs2-spacing-x400) var(--sjs2-spacing-x100);
border-bottom: calc(var(--sjs2-base-unit-border-width) * 8) solid transparent;
+ .sd-panel__content {
+ padding: 0;
+ }
}
.sd-table__cell--actions,
@@ -400,12 +329,58 @@
.sd-question.sd-question--table {
position: relative;
- overflow-x: auto;
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ overflow-x: auto;
+ .sd-question__header {
+ position: sticky;
+ left: 0;
+ }
+ }
+ }
}
.sd-question--table.sd-element--collapsed,
.sd-question--table.sd-element--nested {
- overflow-x: visible;
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ overflow-x: visible;
+ &>.sd-question__content {
+ margin: 0 calc(-1 * var(--sd-base-padding));
+ padding: 0 calc(var(--sd-base-padding));
+ min-width: auto;
+ overflow-x: auto;
+ }
+ }
+ }
+}
+
+// TODO: Discuss with team if we need to keep this or not.
+.sd-panel:not(.sd-panel--as-page) > .sd-panel__content > .sd-row:first-of-type {
+ .sd-question--table.sd-element--nested {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ &>.sd-question__content:first-of-type {
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ margin-top: var(--sjs2-spacing-negative-x200);
+ }
+ }
+ }
+ }
+ }
+}
+.sd-panel:not(.sd-panel--as-page) > .sd-panel__content > .sd-row:not(:first-of-type) {
+ .sd-question--table.sd-element--nested {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ &>.sd-question__content:first-of-type {
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ margin-top: var(--sjs2-spacing-negative-x200);
+ }
+ }
+ }
+ }
+ }
}
.sd-table-wrapper {
@@ -449,26 +424,32 @@
}
.sd-question--table {
- & > .sd-question__header,
+ // Commented out "& > .sd-question__header": the header is no longer a direct child of
+ // the question root (sticky header is handled by the .sd-question.sd-question--table rule above)
+ // & > .sd-question__header,
.sd-question__description--under-input .sv-string-viewer {
position: sticky;
left: 0;
}
- & > .sd-question__content {
- padding-top: var(--sjs2-spacing-x200);
- --animation-padding-top: #{var(--sjs2-spacing-x200)};
- min-width: min-content;
- }
-
- &.sd-element--nested {
- & > .sd-question__content {
- min-width: auto;
- overflow-x: auto;
- }
- }
-
- &.sd-element--nested > .sd-question__content,
+ // Commented out: .sd-question__content is no longer a direct child of the question root
+ // (it is nested inside .sd-question__container > .sd-question__header-and-content-container)
+ // & > .sd-question__content {
+ // padding-top: var(--sd-base-vertical-padding);
+ // --animation-padding-top: #{var(--sd-base-vertical-padding)};
+ // min-width: min-content;
+ // }
+
+ // Commented out: same reason, replaced by the .sd-question--table.sd-element--nested rule above
+ // &.sd-element--nested {
+ // & > .sd-question__content {
+ // min-width: auto;
+ // overflow-x: auto;
+ // }
+ // }
+
+ // Commented out "&.sd-element--nested > .sd-question__content": content is no longer a direct child of the question root
+ // &.sd-element--nested > .sd-question__content,
&:not(.sd-element--with-frame):not(.sd-element--nested) {
padding-right: var(--sd-base-padding);
margin-right: calc(-1 * var(--sd-base-padding));
@@ -476,10 +457,20 @@
margin-left: calc(-1 * var(--sd-base-padding));
box-sizing: content-box;
}
+
+ &:not(.sd-element--nested)>.sd-question__container {
+ &>.sd-question__header-and-content-container:first-child {
+ padding-top: calc(0.5 * var(--sd-base-vertical-padding));
+ }
+ }
}
.sd-row--multiple {
- .sd-question--table.sd-element--nested > .sd-question__content {
+ // Commented out: content is no longer a direct child of the question root, see the updated rule below
+ // .sd-question--table.sd-element--nested > .sd-question__content {
+ // padding-right: calc(var(--sd-base-padding) + 2px);
+ // }
+ .sd-question--table.sd-element--nested > .sd-question__container >.sd-question__header-and-content-container > .sd-question__content {
padding-right: calc(var(--sd-base-padding) + 2px);
}
}
@@ -497,22 +488,26 @@
}
@mixin table_responsive {
- &.sd-question.sd-question--table {
- & > .sd-question__content {
- padding-top: 0;
- --animation-padding-top: 0;
- }
- }
+ // Commented out: .sd-question__content is no longer a direct child of the question root
+ // (it is nested inside .sd-question__container > .sd-question__header-and-content-container)
+ // &.sd-question.sd-question--table {
+ // & > .sd-question__content {
+ // padding-top: var(--sjs2-spacing-x100);
+ // --animation-padding-top: var(--sjs2-spacing-x100);
+ // }
+ // }
&.sd-question--table,
&.sd-question--scroll {
overflow-x: visible;
}
- & > .sd-question__content {
- min-width: auto;
- }
+ // Commented out: content is no longer a direct child of the question root
+ // & > .sd-question__content {
+ // min-width: auto;
+ // }
.sd-table-wrapper {
width: auto;
+ margin-top: calc(-1 * var(--sjs2-spacing-x100));
}
.sd-table {
display: block;
@@ -615,7 +610,6 @@
padding-top: var(--sjs2-spacing-x500);
&::before {
- // top: var(--sjs2-spacing-negative-x200);
background-color: transparent;
}
}
@@ -760,12 +754,6 @@
@include table_responsive();
}
-.sd-table__cell--detail-panel {
- .sd-panel__content {
- padding-top: var(--sjs2-spacing-x100);
- }
-}
-
.sd-table__question-wrapper {
.sd-boolean-root {
margin: auto;
@@ -798,3 +786,47 @@
.sd-table.sd-matrixdynamic {
table-layout: auto;
}
+
+////////////////////////////////////////////////////////////////////////////////////////
+
+.sd-question--table {
+ &.sd-element--with-frame {
+ &>.sd-question__container {
+ &>.sd-question__header-and-content-container {
+ &>.sd-question__content {
+ .sd-table-wrapper .sd-table.sd-table--no-header {
+ }
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ }
+ &:first-of-type { // No question header
+ .sd-table-wrapper .sd-table.sd-table--no-header {
+ }
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ }
+ }
+ }
+ }
+ }
+ }
+ &.sd-element--nested {
+ &>.sd-question__container {
+ padding: 0;
+ &>.sd-question__header-and-content-container {
+ padding: 0;
+ &>.sd-question__content {
+ .sd-table-wrapper .sd-table.sd-table--no-header {
+ }
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ }
+ &:first-of-type { // No question header
+ .sd-table-wrapper .sd-table.sd-table--no-header {
+ padding-top: 0;
+ }
+ .sd-table-wrapper .sd-table:not(.sd-table--no-header) {
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/survey-core/src/default-theme/blocks/sv-list.scss b/packages/survey-core/src/default-theme/blocks/sv-list.scss
index 4b65e2bd73..1380c7ba3b 100644
--- a/packages/survey-core/src/default-theme/blocks/sv-list.scss
+++ b/packages/survey-core/src/default-theme/blocks/sv-list.scss
@@ -55,7 +55,6 @@
width: 100%;
align-items: center;
box-sizing: border-box;
- // padding: var(--sjs2-spacing-x100) var(--sjs2-spacing-x800) var(--sjs2-spacing-x100) var(--sjs2-spacing-x200);
padding-block: var(--sjs2-spacing-x100);
padding-inline-end: var(--sjs2-spacing-x800);
padding-inline-start: var(--sjs2-spacing-x200);
@@ -223,7 +222,6 @@ li:focus .sv-list__item.sv-list__item--selected {
.sv-list__filter {
border-bottom: 1px solid $border-inside;
- // padding-bottom: var(--sjs2-spacing-x100);
}
.sv-list__filter-icon {
diff --git a/packages/survey-core/src/default-theme/blocks/sv-ranking.scss b/packages/survey-core/src/default-theme/blocks/sv-ranking.scss
index e7fe909da6..72d28d4a4d 100644
--- a/packages/survey-core/src/default-theme/blocks/sv-ranking.scss
+++ b/packages/survey-core/src/default-theme/blocks/sv-ranking.scss
@@ -397,8 +397,6 @@
.sv-ranking__container--empty {
&.sv-ranking__container--to {
- //padding-right: var(--sjs2-spacing-x300);
-
.sv-ranking-item {
left: initial;
}
@@ -409,8 +407,6 @@
}
&.sv-ranking__container--from {
- //padding-left: var(--sjs2-spacing-x300);
-
.sv-ranking__container-placeholder {
padding-right: var(--sjs2-spacing-x500);
}
@@ -438,7 +434,6 @@
}
.sv-ranking__container--empty {
- //padding: var(--sjs2-spacing-x800);
box-sizing: border-box;
text-align: center;
}
diff --git a/packages/survey-core/src/default-theme/default.fontless.scss b/packages/survey-core/src/default-theme/default.fontless.scss
index 25abf3aa5d..0ddf675194 100644
--- a/packages/survey-core/src/default-theme/default.fontless.scss
+++ b/packages/survey-core/src/default-theme/default.fontless.scss
@@ -29,6 +29,7 @@
@use "blocks/sd-formbox.scss";
@use "blocks/sd-comment.scss";
@use "blocks/sd-panel.scss";
+@use "blocks/sd-panel-nested.scss";
@use "blocks/sd-signaturepad.scss";
@use "blocks/sd-matrixdynamic.scss";
@use "blocks/sd-table.scss";
diff --git a/packages/survey-core/src/default-theme/default.m600.scss b/packages/survey-core/src/default-theme/default.m600.scss
index 1ed53534df..95b9f0b187 100644
--- a/packages/survey-core/src/default-theme/default.m600.scss
+++ b/packages/survey-core/src/default-theme/default.m600.scss
@@ -7,6 +7,10 @@
--sd-base-padding: var(--sjs2-spacing-x500);
--sd-base-vertical-padding: var(--sjs2-spacing-x400);
--sd-page-vertical-padding: var(--sjs2-spacing-x300);
+ --sjs2-spacing-large-horizontal: var(--sjs2-spacing-x500);
+ --sjs2-spacing-large-vertical: var(--sjs2-spacing-x500);
+ --sjs2-spacing-medium-horizontal: var(--sjs2-spacing-x300);
+ --sjs2-spacing-medium-vertical: var(--sjs2-spacing-x300);
}
.sd-root-modern.sd-root-modern--mobile,
@@ -14,6 +18,10 @@
--sd-base-padding: var(--sjs2-spacing-x300);
--sd-base-vertical-padding: var(--sjs2-spacing-x200);
--sd-page-vertical-padding: var(--sjs2-spacing-x200);
+ --sjs2-spacing-large-horizontal: var(--sjs2-spacing-x200);
+ --sjs2-spacing-large-vertical: var(--sjs2-spacing-x300); // TODO x500
+ --sjs2-spacing-medium-horizontal: var(--sjs2-spacing-x200);
+ --sjs2-spacing-medium-vertical: var(--sjs2-spacing-x200);
}
.sd-root-modern {
@@ -22,10 +30,6 @@
@include mixins.num_inline();
}
- // .sd-element__title--expandable:before {
- // inset-inline-start: var(--sjs2-spacing-negative-x250);
- // }
-
.sd-element__title-expandable-svg {
inset-inline-start: var(--sjs2-spacing-negative-x250);
}
diff --git a/packages/survey-core/src/defaultCss/defaultCss.ts b/packages/survey-core/src/defaultCss/defaultCss.ts
index 25523c11fa..2bc7079ae2 100644
--- a/packages/survey-core/src/defaultCss/defaultCss.ts
+++ b/packages/survey-core/src/defaultCss/defaultCss.ts
@@ -164,9 +164,11 @@ export var defaultCss = {
progressTextInBar: "sd-hidden",
page: {
root: "sd-page sd-body__page",
+ header: "sd-page__header",
emptyHeaderRoot: "sd-page__empty-header",
title: "sd-title sd-page__title",
description: "sd-description sd-page__description",
+ content: "sd-page__content",
number: "sd-page__num",
errorsContainer: "sd-page__errbox"
},
@@ -187,6 +189,7 @@ export var defaultCss = {
leave: "sd-element-wrapper--leave",
mobile: "sd-question--mobile",
mainRoot: "sd-element sd-question sd-row__question",
+ rootSingleInput: "sd-element sd-question--single-input",
flowRoot: "sd-element sd-question sd-row__question sd-row__question--flow",
withFrame: "sd-element--with-frame",
asCell: "sd-table__cell",
@@ -259,6 +262,8 @@ export var defaultCss = {
summaryRowAction: "sd-summary-row-action",
summaryRowActionEdit: "sd-summary-row-action sd-summary-row-action--edit",
summaryRowActionDelete: "sd-summary-row-action sd-summary-row-action--delete",
+ questionContainer: "sd-question__container",
+ headerAndContentContainer: "sd-question__header-and-content-container"
},
image: {
mainRoot: "sd-element sd-question sd-question--image",
diff --git a/packages/survey-core/src/page.ts b/packages/survey-core/src/page.ts
index f50a39533a..43d0e2f561 100644
--- a/packages/survey-core/src/page.ts
+++ b/packages/survey-core/src/page.ts
@@ -231,6 +231,12 @@ export class PageModel extends PanelModel implements IPage {
!((
this.survey).isShowProgressBarOnTop && !(this.survey).isStaring))
.toString();
}
+ public get cssHeader(): string {
+ return this.cssClasses.page?.header || this.cssClasses.panel?.header;
+ }
+ public get cssContent(): string {
+ return this.cssClasses.page?.content || this.cssClasses.panel?.content;
+ }
protected getCssError(cssClasses: any): string {
if (this.isPanel) return super.getCssError(cssClasses);
return new CssClassBuilder()
diff --git a/packages/survey-core/src/question.ts b/packages/survey-core/src/question.ts
index bf0b3be656..92657a26b6 100644
--- a/packages/survey-core/src/question.ts
+++ b/packages/survey-core/src/question.ts
@@ -1521,6 +1521,7 @@ export class Question extends SurveyElement
public getRootCss(): string {
return new CssClassBuilder()
.append(this.cssRoot, !this.singleInputQuestion)
+ .append(this.cssClasses.rootSingleInput, !!this.singleInputQuestion)
.append(this.cssClasses.mobile, this.isMobile)
.append(this.cssClasses.readOnly, this.isReadOnlyStyle)
.append(this.cssClasses.disabled, this.isDisabledStyle)
@@ -1528,7 +1529,21 @@ export class Question extends SurveyElement
.append(this.cssClasses.invisible, !this.isDesignMode && this.areInvisibleElementsShowing && !this.visible)
.toString();
}
-
+ public getQuestionContainerCss(): string {
+ return new CssClassBuilder()
+ .append(this.cssClasses.questionContainer)
+ .toString();
+ }
+ public getHeaderAndContentContainerCss(): string {
+ return new CssClassBuilder()
+ .append(this.cssClasses.headerAndContentContainer)
+ .toString();
+ }
+ public get isComplexQuestion(): boolean {
+ const rootCss = this.getRootCss() || "";
+ return rootCss.indexOf("sd-element--complex") > -1;
+ // return this.isContainer || !!this.singleInputQuestion;
+ }
public getQuestionRootCss() {
return new CssClassBuilder()
.append(this.cssClasses.root)
diff --git a/packages/survey-core/src/question_paneldynamic.ts b/packages/survey-core/src/question_paneldynamic.ts
index d98e4355b6..e256373c19 100644
--- a/packages/survey-core/src/question_paneldynamic.ts
+++ b/packages/survey-core/src/question_paneldynamic.ts
@@ -2477,12 +2477,14 @@ export class QuestionPanelDynamicModel extends Question implements IDynamicItemM
return getLocaleString("progressbar", this.getLocale());
}
public getRootCss(): string {
- return new CssClassBuilder().append(super.getRootCss()).append(this.cssClasses.empty, this.getShowNoEntriesPlaceholder()).toString();
+ return new CssClassBuilder().append(super.getRootCss()).append(this.cssClasses.empty, this.getShowNoEntriesPlaceholder())
+ .append(this.cssClasses.navigation + "--top", this.isRangeShowing && this.isProgressTopShowing).append(this.cssClasses.navigation + "--bottom", this.isRangeShowing && this.isProgressBottomShowing).toString();
}
public get cssHeader(): string {
const showTab = this.isRenderModeTab && !!this.visiblePanelCount;
return new CssClassBuilder()
.append(super.getCssHeader(this.cssClasses))
+ .append(this.cssClasses.root + "__header-" + this.displayMode, this.displayMode !== "tab")
.append(this.cssClasses.headerTab, this.hasTitleOnTop && showTab)
.toString();
}
diff --git a/packages/survey-core/tests/question_paneldynamic_tests.ts b/packages/survey-core/tests/question_paneldynamic_tests.ts
index 9f8ee1a70c..3f19cba95e 100644
--- a/packages/survey-core/tests/question_paneldynamic_tests.ts
+++ b/packages/survey-core/tests/question_paneldynamic_tests.ts
@@ -5681,10 +5681,10 @@ describe("Survey_QuestionPanelDynamic", () => {
expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv-paneldynamic__header-tab");
panel.renderMode = undefined;
- expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header");
+ expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv_panel_dynamic__header-list");
panel.titleLocation = "hidden";
- expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header");
+ expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv_panel_dynamic__header-list");
panel.displayMode = "tab";
panel.titleLocation = "top";
diff --git a/packages/survey-react-ui/src/page.tsx b/packages/survey-react-ui/src/page.tsx
index 0dd1ccca97..18941ce435 100644
--- a/packages/survey-react-ui/src/page.tsx
+++ b/packages/survey-react-ui/src/page.tsx
@@ -28,12 +28,22 @@ export class SurveyPage extends SurveyPanelBase {
creator={this.creator}
/>
);
+ var header: any = null;
+ if (this.page.hasTitle || this.page._showDescription) {
+ header = (
+
+ {title}
+ {description}
+
+ );
+ }
return (
- {title}
- {description}
- {errors}
- {rows}
+ {header}
+
+ {errors}
+ {rows}
+
);
}
diff --git a/packages/survey-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx
index e60f9214da..46c9853072 100644
--- a/packages/survey-react-ui/src/panel.tsx
+++ b/packages/survey-react-ui/src/panel.tsx
@@ -27,16 +27,23 @@ export class SurveyPanel extends SurveyPanelBase {
creator={this.creator}
/>
);
- const style = {
- paddingLeft: this.panel.innerPaddingLeft,
+ // const panelPaddingHorizontal = "var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))";
+ const panelPaddingHorizontal = this.panel.isDesignMode ? "var(--sjs2-spacing-x000)" : "var(--sd-base-padding, var(--sjs2-spacing-x500))";
+ const style: React.CSSProperties = {
+ paddingInlineStart: this.panel.innerPaddingLeft
+ ? `calc(${panelPaddingHorizontal} + ${this.panel.innerPaddingLeft})`
+ : this.panel.innerPaddingLeft,
+ // paddingInlineEnd: this.panel.innerPaddingLeft ? panelPaddingHorizontal : undefined,
display: this.panel.renderedIsExpanded ? undefined : "none",
};
let content: React.JSX.Element | null = null;
+ let bottom: React.JSX.Element | null = null;
if (this.panel.renderedIsExpanded) {
// this.hasBeenExpanded = true;
const rows: React.JSX.Element[] = this.renderRows(this.panelBase.cssClasses);
const className: string = this.panelBase.cssClasses.panel.content;
content = this.renderContent(style, rows, className);
+ bottom = this.renderBottom();
}
const focusIn = () => {
if (this.panelBase) (this.panelBase as PanelModel).focusIn();
@@ -53,6 +60,7 @@ export class SurveyPanel extends SurveyPanelBase {
{header}
{this.panel.showErrorsAbovePanel ? null : errors}
{content}
+ {bottom}
);
}
@@ -71,7 +79,6 @@ export class SurveyPanel extends SurveyPanelBase {
return wrapper ?? element;
}
protected renderContent(style: any, rows: React.JSX.Element[], className: string): React.JSX.Element {
- const bottom: React.JSX.Element | null = this.renderBottom();
return (
);
}
diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx
index 0349b8f825..dfba37ca9a 100644
--- a/packages/survey-react-ui/src/reactquestion.tsx
+++ b/packages/survey-react-ui/src/reactquestion.tsx
@@ -162,11 +162,16 @@ export class SurveyQuestion extends SurveyElementBase