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 a4d639143a..2c4ca73649 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 @@ -7,7 +7,7 @@ } } -.sd-element--collapsed { +.sd-element--collapsed:not(.sd-panel) { &>.sd-element__header { padding: calcSize(0) var(--sd-base-padding); box-sizing: border-box; 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 45511164e6..f9973a3847 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -87,7 +87,11 @@ width: initial; } .sd-panel__content { - padding-top: var(--sd-base-padding); + display: flex; + padding: var(--sd-base-padding); + flex-direction: column; + align-items: flex-start; + align-self: stretch; } .sd-panel.sd-element--nested { 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 bb0ca5318a..374e3051a6 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -16,8 +16,11 @@ } & .sd-paneldynamic__panel-wrapper > .sd-panel > .sd-panel__header { - padding-top: var(--sd-base-vertical-padding); - padding-bottom: 0; + border-bottom: 1px solid var(--_lbr-panel-border-color-nested, #DCDCDC); + display: flex; + padding: calc(2 * #{$base-unit}) var(--sd-base-padding); + align-items: flex-start; + align-self: stretch; &:after { display: none; @@ -27,6 +30,10 @@ color: $foreground-light; } } + + & .sd-paneldynamic__panel-wrapper > .sd-element--collapsed > .sd-panel__header { + border-bottom: none; + } } .sd-question--readonly, @@ -40,7 +47,11 @@ } .sd-paneldynamic__panel-wrapper { box-sizing: border-box; - padding-bottom: calc(1 * var(--sd-base-padding)); + display: flex; + flex-direction: column; + align-items: flex-start; + align-self: stretch; + border: 1px solid var(--_lbr-panel-border-color-nested, #DCDCDC); } .sd-paneldynamic__panel-wrapper:after { @@ -50,18 +61,7 @@ } .sd-paneldynamic__footer .sd-paneldynamic__separator, -.sd-paneldynamic__panel-wrapper--list ~ .sd-paneldynamic__panel-wrapper--list:before { - content: " "; - display: block; - position: absolute; - left: 0; - right: 0; - margin: 0; - border-color: $border-light; - background: $border-light; - height: 1px; - border: none; -} + .sd-paneldynamic__separator:only-child { display: none; } @@ -172,18 +172,15 @@ } .sd-paneldynamic__panel-footer { - border-top: none; position: relative; - top: calc(0.5 * var(--sd-base-vertical-padding)); - margin-right: calcSize(-3); + display: flex; + padding: calcSize(2); justify-content: flex-end; + align-items: flex-start; + align-self: stretch; + border-top: 1px solid #DCDCDC; } -.sd-paneldynamic__panel-footer { - .sv-action:not(.sv-action--hidden) { - margin-bottom: calcSize(-1); - } -} .sd-paneldynamic__tabs-container { padding-top: var(--sd-base-padding); .sd-tabs-toolbar { @@ -320,12 +317,13 @@ } .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); + display: flex; + padding: calc(4 * #{$base-unit}) 0; + flex-direction: column; + align-items: flex-start; + align-self: stretch; + gap: calc(2 * #{$base-unit}); } .sd-paneldynamic__panel-wrapper { box-sizing: border-box; diff --git a/packages/survey-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx index e60f9214da..b4418803c5 100644 --- a/packages/survey-react-ui/src/panel.tsx +++ b/packages/survey-react-ui/src/panel.tsx @@ -70,18 +70,24 @@ export class SurveyPanel extends SurveyPanelBase { } return wrapper ?? element; } + protected renderFooterInContent(): boolean { + return true; + } protected renderContent(style: any, rows: React.JSX.Element[], className: string): React.JSX.Element { const bottom: React.JSX.Element | null = this.renderBottom(); return ( -
- {rows} - {bottom} -
+ <> +
+ {rows} + {this.renderFooterInContent() ? bottom : null} +
+ {this.renderFooterInContent() ? null : bottom} + ); } protected renderTitle(): React.JSX.Element | null { diff --git a/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx b/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx index d8a1eb3e1f..5f35233f91 100644 --- a/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx +++ b/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx @@ -116,6 +116,9 @@ export class SurveyQuestionPanelDynamicItem extends SurveyPanel { const survey = this.getSurvey(); return !!survey ? survey.getCss() : {}; } + protected renderFooterInContent(): boolean { + return false; + } public render() { const panel = super.render(); const removeButton = this.renderButton();