diff --git a/e2e/questions/panel.spec.ts b/e2e/questions/panel.spec.ts index e5b98242ae..c51baa0273 100644 --- a/e2e/questions/panel.spec.ts +++ b/e2e/questions/panel.spec.ts @@ -75,8 +75,9 @@ frameworks.forEach((framework) => { const getTitle3 = page.locator(".sd-element__title").filter({ hasText: "question3" }); const getTitle4 = page.locator(".sd-element__title").filter({ hasText: "question4" }); + // TODO: Check whether this test actual for new rendering const getPanelsCountByMargin = await page.evaluate( - () => (window as any).survey.rootElement.getRootNode().querySelectorAll('div[style*="padding-left: 20px"]').length + () => (window as any).survey.rootElement.getRootNode().querySelectorAll('div[style*="padding-inline-start"][style*="20px"]').length ); await expect(getTitle1).toBeVisible({ timeout: 1000 }); diff --git a/packages/survey-angular-ui/src/page.component.html b/packages/survey-angular-ui/src/page.component.html index 1b2d538395..2396fc7bc9 100644 --- a/packages/survey-angular-ui/src/page.component.html +++ b/packages/survey-angular-ui/src/page.component.html @@ -1,16 +1,20 @@
- -
- +
+ +
+ +
+
+
+
+ + + + +
-
- - - - -
\ No newline at end of file diff --git a/packages/survey-angular-ui/src/panel.component.html b/packages/survey-angular-ui/src/panel.component.html index 1f369a34b7..5e4a619112 100644 --- a/packages/survey-angular-ui/src/panel.component.html +++ b/packages/survey-angular-ui/src/panel.component.html @@ -3,14 +3,14 @@
-
-
+
\ No newline at end of file diff --git a/packages/survey-angular-ui/src/panel.component.ts b/packages/survey-angular-ui/src/panel.component.ts index 045ed316b8..b22be90a67 100644 --- a/packages/survey-angular-ui/src/panel.component.ts +++ b/packages/survey-angular-ui/src/panel.component.ts @@ -9,6 +9,7 @@ import { AngularComponentFactory } from "./component-factory"; export class PanelComponent extends BaseAngular implements AfterViewInit { @Input() model!: PanelModel; @ViewChild("panelContainer", { static: false, read: ElementRef }) panelContainerRef!: ElementRef; + private readonly panelPaddingHorizontal = "var(--sd-base-padding, var(--sjs2-spacing-x500))"; protected getModel(): PanelModel { return this.model; } @@ -23,5 +24,11 @@ export class PanelComponent extends BaseAngular implements AfterView public get canRender() { return this.model && this.model.survey && this.model.getIsContentVisible(); } + public get panelContentStyle(): Record { + const hasInnerPadding = !!this.model?.innerPaddingLeft; + return hasInnerPadding ? { + "padding-inline-start": `calc(${this.panelPaddingHorizontal} + ${this.model.innerPaddingLeft})`, + } : {}; + } } AngularComponentFactory.Instance.registerComponent("panel", PanelComponent); \ No newline at end of file diff --git a/packages/survey-angular-ui/src/question.component.html b/packages/survey-angular-ui/src/question.component.html index c2c2b0453a..ae8387f87b 100644 --- a/packages/survey-angular-ui/src/question.component.html +++ b/packages/survey-angular-ui/src/question.component.html @@ -9,32 +9,37 @@ [model]="model.singleInputActions" [css]="model.cssClasses" > -
-
- - - -
+
+
+
+
+
+ + -
-
- -
-
+ *ngIf="!model.singleInputSummary && !singleQuestion" + [component]="{ name: getQuestionContentWrapperComponentName(), data: getQuestionContentWrapperComponentData() }"> +
+ +
+
+ +
+
+
+ +
- -
-
+
+
\ No newline at end of file diff --git a/packages/survey-angular-ui/src/questions/composite.component.ts b/packages/survey-angular-ui/src/questions/composite.component.ts index ac66a3b778..1bbb2661f2 100644 --- a/packages/survey-angular-ui/src/questions/composite.component.ts +++ b/packages/survey-angular-ui/src/questions/composite.component.ts @@ -6,7 +6,8 @@ import { PanelModel, QuestionCompositeModel } from "survey-core"; @Component({ selector: "sv-ng-composite-question", - template: "" + template: "", + styles: [":host { display: none } "] }) export class CompositeQuestionComponent extends QuestionAngular { get contentPanel(): PanelModel { diff --git a/packages/survey-angular-ui/src/questions/paneldynamic.component.html b/packages/survey-angular-ui/src/questions/paneldynamic.component.html index 5eedd5a77e..5ce14a41ab 100644 --- a/packages/survey-angular-ui/src/questions/paneldynamic.component.html +++ b/packages/survey-angular-ui/src/questions/paneldynamic.component.html @@ -1,30 +1,33 @@ -
-
- -
- -
-
-
-
- -
- - + +
+
+ +
+ +
+
+
+
+ +
- -
-
-
+ [component]="{ name: getPanelComponentName(panel), data: getPanelComponentData(panel) }"> + + + +
+
+ +
+
- -
+ + -
+

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 (
{rows} - {bottom}
); } 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 { aria-expanded={question.ariaExpanded} > {singleBreadcrumbs} - {errorsAboveQuestion} - {headerTop} - {questionContent} - {headerBottom} - {errorsBelowQuestion} +
+ {errorsAboveQuestion} +
+ {headerTop} + {headerTop && question.isComplexQuestion ?
: null} + {questionContent} + {headerBottom} +
+ {errorsBelowQuestion} +
); diff --git a/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx b/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx index d8a1eb3e1f..2eaf056f45 100644 --- a/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx +++ b/packages/survey-react-ui/src/reactquestion_paneldynamic.tsx @@ -87,6 +87,7 @@ export class SurveyQuestionPanelDynamic extends SurveyQuestionElementBase { protected renderNavigator(): React.JSX.Element | null { if (!this.question.showNavigation) return null; const range: React.JSX.Element | null = this.question.isRangeShowing && this.question.isProgressBottomShowing ? this.renderRange() : null; + if (!range && !this.question.showFooterToolbar) return null; return (

{range} diff --git a/packages/survey-vue3-ui/src/Page.vue b/packages/survey-vue3-ui/src/Page.vue index b9e7003aba..1c12aea236 100644 --- a/packages/survey-vue3-ui/src/Page.vue +++ b/packages/survey-vue3-ui/src/Page.vue @@ -1,21 +1,25 @@ diff --git a/packages/survey-vue3-ui/src/Panel.vue b/packages/survey-vue3-ui/src/Panel.vue index 2ff7553204..cf5cc419da 100644 --- a/packages/survey-vue3-ui/src/Panel.vue +++ b/packages/survey-vue3-ui/src/Panel.vue @@ -24,7 +24,7 @@ />
-
+
@@ -75,6 +76,15 @@ const props = defineProps<{ }>(); const root = ref(null as any); const survey = computed(() => props.element.survey); +const panelPaddingHorizontal = "var(--sd-base-padding, var(--sjs2-spacing-x500))"; +const panelContentStyle = computed(() => { + const innerPaddingLeft = props.element.innerPaddingLeft; + return innerPaddingLeft + ? { + paddingInlineStart: `calc(${panelPaddingHorizontal} + ${innerPaddingLeft})`, + } + : {}; +}); useBase(() => props.element); diff --git a/packages/survey-vue3-ui/src/PanelDynamicProgress.vue b/packages/survey-vue3-ui/src/PanelDynamicProgress.vue index 8e25f888cd..ace18b2762 100644 --- a/packages/survey-vue3-ui/src/PanelDynamicProgress.vue +++ b/packages/survey-vue3-ui/src/PanelDynamicProgress.vue @@ -1,5 +1,11 @@ diff --git a/screenshots/matrix.spec.ts-snapshots/question-matrix-alternate-rows-invalid-value.png b/screenshots/matrix.spec.ts-snapshots/question-matrix-alternate-rows-invalid-value.png index 79cf7cec99..3bb1ddcff4 100644 Binary files a/screenshots/matrix.spec.ts-snapshots/question-matrix-alternate-rows-invalid-value.png and b/screenshots/matrix.spec.ts-snapshots/question-matrix-alternate-rows-invalid-value.png differ diff --git a/screenshots/matrix.spec.ts-snapshots/question-matrix-multi-select-in-panel-no-title.png b/screenshots/matrix.spec.ts-snapshots/question-matrix-multi-select-in-panel-no-title.png index 170b1ac88f..a8bec1723e 100644 Binary files a/screenshots/matrix.spec.ts-snapshots/question-matrix-multi-select-in-panel-no-title.png and b/screenshots/matrix.spec.ts-snapshots/question-matrix-multi-select-in-panel-no-title.png differ diff --git a/screenshots/matrix.spec.ts-snapshots/question-matrix-single-select-in-panel-no-title.png b/screenshots/matrix.spec.ts-snapshots/question-matrix-single-select-in-panel-no-title.png index 9342ede2a3..30c3723c05 100644 Binary files a/screenshots/matrix.spec.ts-snapshots/question-matrix-single-select-in-panel-no-title.png and b/screenshots/matrix.spec.ts-snapshots/question-matrix-single-select-in-panel-no-title.png differ diff --git a/screenshots/paneldynamic.spec.ts b/screenshots/paneldynamic.spec.ts index 42361def2f..de423cecf7 100644 --- a/screenshots/paneldynamic.spec.ts +++ b/screenshots/paneldynamic.spec.ts @@ -452,7 +452,8 @@ frameworks.forEach(framework => { await compareScreenshot(page, paneldynamicRoot, "panel-dynamic-comment.png"); }); - test("Paneldynamic: removePanelButtonLocation=right", async ({ page }) => { + // TODO: Reanimate in processing of https://github.com/surveyjs/survey-library/issues/11421 + test.skip("Paneldynamic: removePanelButtonLocation=right", async ({ page }) => { await page.setViewportSize({ width: 1920, height: 1080 }); const json = { "elements": [ diff --git a/screenshots/question.spec.ts-snapshots/question-scrollable-with-error.png b/screenshots/question.spec.ts-snapshots/question-scrollable-with-error.png index 5c1241ca6e..8c6ee202f5 100644 Binary files a/screenshots/question.spec.ts-snapshots/question-scrollable-with-error.png and b/screenshots/question.spec.ts-snapshots/question-scrollable-with-error.png differ diff --git a/screenshots/rating.spec.ts-snapshots/question-rating-selected-label-should-have-the-same-width.png b/screenshots/rating.spec.ts-snapshots/question-rating-selected-label-should-have-the-same-width.png index 6e765b0cd2..ef7f6478be 100644 Binary files a/screenshots/rating.spec.ts-snapshots/question-rating-selected-label-should-have-the-same-width.png and b/screenshots/rating.spec.ts-snapshots/question-rating-selected-label-should-have-the-same-width.png differ diff --git a/screenshots/readonly-preview.spec.ts-snapshots/preview-matrix-single.png b/screenshots/readonly-preview.spec.ts-snapshots/preview-matrix-single.png index be35e44fc8..7de2dc0be6 100644 Binary files a/screenshots/readonly-preview.spec.ts-snapshots/preview-matrix-single.png and b/screenshots/readonly-preview.spec.ts-snapshots/preview-matrix-single.png differ diff --git a/screenshots/readonly-preview.spec.ts-snapshots/readonly-matrix-single.png b/screenshots/readonly-preview.spec.ts-snapshots/readonly-matrix-single.png index efe3f2528a..2723802989 100644 Binary files a/screenshots/readonly-preview.spec.ts-snapshots/readonly-matrix-single.png and b/screenshots/readonly-preview.spec.ts-snapshots/readonly-matrix-single.png differ diff --git a/tests/markup/etalon.ts b/tests/markup/etalon.ts index 9c65744e0d..726c0246f5 100644 --- a/tests/markup/etalon.ts +++ b/tests/markup/etalon.ts @@ -42,6 +42,6 @@ registerMarkupTests([ } ] }, - etalon: "
HTML content here
" + etalon: "
HTML content here
" }, ]); \ No newline at end of file diff --git a/tests/markup/helper.ts b/tests/markup/helper.ts index 96e642ecbe..b888fa7819 100644 --- a/tests/markup/helper.ts +++ b/tests/markup/helper.ts @@ -274,9 +274,9 @@ export function testQuestionMarkup(assert: any, test: MarkupTestDescriptor, plat platform.render(platform.survey, surveyElement); } -const removeExtraElementsConditions: Array<(htmlElement: HTMLElement) => boolean> = [ - (htmlElement: HTMLElement) => htmlElement.classList.contains("sv-vue-title-additional-div"), - (HTMLElement: HTMLElement) => HTMLElement.tagName.toLowerCase().search(/^sv-/) > -1 +const removeExtraElementsConditions: Array<(e: HTMLElement) => boolean> = [ + (e: HTMLElement) => e.classList.contains("sv-vue-title-additional-div"), + (e: HTMLElement) => e.tagName.toLowerCase().search(/^sv-/) > -1, ]; function clearExtraElements(innerHTML: string): string { diff --git a/tests/markup/snapshots/boolean-checkbox-custom-icon.snap.html b/tests/markup/snapshots/boolean-checkbox-custom-icon.snap.html index 9bd97e60be..e76b500ceb 100644 --- a/tests/markup/snapshots/boolean-checkbox-custom-icon.snap.html +++ b/tests/markup/snapshots/boolean-checkbox-custom-icon.snap.html @@ -1,18 +1,22 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-checkbox-defaultV2-required.snap.html b/tests/markup/snapshots/boolean-checkbox-defaultV2-required.snap.html index 4013276f60..f4a14047db 100644 --- a/tests/markup/snapshots/boolean-checkbox-defaultV2-required.snap.html +++ b/tests/markup/snapshots/boolean-checkbox-defaultV2-required.snap.html @@ -1,16 +1,20 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-checkbox-defaultV2.snap.html b/tests/markup/snapshots/boolean-checkbox-defaultV2.snap.html index cea03058b8..c14f8ce062 100644 --- a/tests/markup/snapshots/boolean-checkbox-defaultV2.snap.html +++ b/tests/markup/snapshots/boolean-checkbox-defaultV2.snap.html @@ -1,18 +1,22 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-checkbox-disabled.snap.html b/tests/markup/snapshots/boolean-checkbox-disabled.snap.html index 49e65c89b0..42d38170b2 100644 --- a/tests/markup/snapshots/boolean-checkbox-disabled.snap.html +++ b/tests/markup/snapshots/boolean-checkbox-disabled.snap.html @@ -1,14 +1,18 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-checkbox-readonly-defaultV2.snap.html b/tests/markup/snapshots/boolean-checkbox-readonly-defaultV2.snap.html index 6cb04d12fe..a8e8ad8015 100644 --- a/tests/markup/snapshots/boolean-checkbox-readonly-defaultV2.snap.html +++ b/tests/markup/snapshots/boolean-checkbox-readonly-defaultV2.snap.html @@ -1,18 +1,22 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-checkbox.snap.html b/tests/markup/snapshots/boolean-checkbox.snap.html index 22c474453f..6c12c9139b 100644 --- a/tests/markup/snapshots/boolean-checkbox.snap.html +++ b/tests/markup/snapshots/boolean-checkbox.snap.html @@ -1,14 +1,18 @@ -
-
- +
+
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-disabled.snap.html b/tests/markup/snapshots/boolean-disabled.snap.html index d296413e39..8a9cc16d9a 100644 --- a/tests/markup/snapshots/boolean-disabled.snap.html +++ b/tests/markup/snapshots/boolean-disabled.snap.html @@ -1,19 +1,23 @@ -
-
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-radio-v2.snap.html b/tests/markup/snapshots/boolean-radio-v2.snap.html index afc7e8db3d..708d10ef19 100644 --- a/tests/markup/snapshots/boolean-radio-v2.snap.html +++ b/tests/markup/snapshots/boolean-radio-v2.snap.html @@ -1,32 +1,36 @@ -
- +
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-radio-values.snap.html b/tests/markup/snapshots/boolean-radio-values.snap.html index b3668bc70e..36b0fe908f 100644 --- a/tests/markup/snapshots/boolean-radio-values.snap.html +++ b/tests/markup/snapshots/boolean-radio-values.snap.html @@ -1,32 +1,36 @@ -
- +
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-radio.snap.html b/tests/markup/snapshots/boolean-radio.snap.html index c6b991945b..840ecc20b2 100644 --- a/tests/markup/snapshots/boolean-radio.snap.html +++ b/tests/markup/snapshots/boolean-radio.snap.html @@ -1,32 +1,36 @@ -
- +
\ No newline at end of file diff --git a/tests/markup/snapshots/boolean-readonly.snap.html b/tests/markup/snapshots/boolean-readonly.snap.html index d80f288da6..1d5e4a9b34 100644 --- a/tests/markup/snapshots/boolean-readonly.snap.html +++ b/tests/markup/snapshots/boolean-readonly.snap.html @@ -1,19 +1,23 @@ -
-