From 34bf33441f7d28dd8bd99dbfa3b68cd9560e77cc Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 16 Jun 2026 15:26:15 +0300 Subject: [PATCH 001/155] New tokens: panel Fixes #11421 --- .../src/panel.component.html | 2 +- .../survey-angular-ui/src/panel.component.ts | 10 +++++ .../blocks/sd-collapsed-element.scss | 4 +- .../src/default-theme/blocks/sd-panel.scss | 45 ++++++++++++++++--- .../src/default-theme/blocks/sd-row.scss | 8 ++-- packages/survey-react-ui/src/panel.tsx | 8 +++- packages/survey-vue3-ui/src/Panel.vue | 12 ++++- 7 files changed, 73 insertions(+), 16 deletions(-) diff --git a/packages/survey-angular-ui/src/panel.component.html b/packages/survey-angular-ui/src/panel.component.html index 1f369a34b7..e85a629ed6 100644 --- a/packages/survey-angular-ui/src/panel.component.html +++ b/packages/survey-angular-ui/src/panel.component.html @@ -3,7 +3,7 @@
-
diff --git a/packages/survey-angular-ui/src/panel.component.ts b/packages/survey-angular-ui/src/panel.component.ts index 045ed316b8..ee7fdd6c2d 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(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; protected getModel(): PanelModel { return this.model; } @@ -23,5 +24,14 @@ 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 { + "padding-inline-start": hasInnerPadding + ? `calc(${this.panelPaddingHorizontal} + ${this.model.innerPaddingLeft})` + : this.panelPaddingHorizontal, + "padding-inline-end": this.panelPaddingHorizontal, + }; + } } AngularComponentFactory.Instance.registerComponent("panel", PanelComponent); \ No newline at end of file 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..ae5c20ed39 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 @@ -12,8 +12,8 @@ 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)); + // margin-inline-start: calc(-1 * var(--sd-base-padding)); + // width: calc(100% + 2 * var(--sd-base-padding)); } &.sd-element--with-frame { 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 5874a1a673..27dcf49e84 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -3,6 +3,39 @@ .sd-panel { position: relative; + padding-inline-start: var(--sjs2-layout-component-panel-box-padding-horizontal, var(--sjs2-spacing-x000)); + padding-inline-end: var(--sjs2-layout-component-panel-box-padding-horizontal, var(--sjs2-spacing-x000)); + padding-top: var(--sjs2-layout-component-panel-box-padding-top, var(--sjs2-spacing-x000)); + padding-bottom: var(--sjs2-layout-component-panel-box-padding-bottom, var(--sjs2-spacing-x000)); + gap: var(--sjs2-layout-component-panel-box-gap-vertical, var(--sjs2-spacing-x000)); +} + +.sd-panel__header { + padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); + gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); +} + +.sd-panel__title { + padding: var(--sjs2-layout-component-panel-title-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-panel-title-padding-horizontal, var(--sjs2-spacing-x000)); +} + +.sd-panel__description { + padding-inline-start: var(--sjs2-layout-component-panel-description-padding-horizontal, var(--sjs2-spacing-x000)); + padding-inline-end: var(--sjs2-layout-component-panel-description-padding-horizontal, var(--sjs2-spacing-x000)); + padding-top: var(--sjs2-layout-component-panel-description-padding-top, var(--sjs2-spacing-x000)); + padding-bottom: var(--sjs2-layout-component-panel-description-padding-bottom, var(--sjs2-spacing-x000)); +} + +.sd-panel__content { + padding-inline-start: var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500)); + padding-inline-end: var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500)); + padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); + --animation-padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); + padding-bottom: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); + row-gap: var(--sjs2-layout-component-panel-content-area-gap-horizontal, var(--sjs2-spacing-x400)); + column-gap: var(--sjs2-layout-component-panel-content-area-gap-vertical, var(--sjs2-spacing-x500)); + display: flex; + flex-direction: column; } .sd-panel.sd-panel--as-page { @@ -90,9 +123,9 @@ border: none; width: initial; } -.sd-panel__content { - padding-top: var(--sd-base-padding); -} +// .sd-panel__content { +// padding-top: var(--sd-base-padding); +// } .sd-panel.sd-element--nested { & > .sd-panel__content { @@ -101,6 +134,6 @@ } } -.sd-panel__content { - --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-row.scss b/packages/survey-core/src/default-theme/blocks/sd-row.scss index 8390867db4..fd9eb91dd2 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-row.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-row.scss @@ -5,7 +5,7 @@ flex-direction: row; width: 100%; box-sizing: border-box; - margin-top: var(--sd-base-vertical-padding); + // margin-top: var(--sd-base-vertical-padding); } .sd-row.sd-page__row { @@ -16,9 +16,9 @@ margin-top: var(--sd-base-vertical-padding); } -.sd-row:first-of-type { - margin-top: 0; -} +// .sd-row:first-of-type { +// margin-top: 0; +// } .sd-page__title, .sd-page__description { diff --git a/packages/survey-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx index e60f9214da..cced6c3bf2 100644 --- a/packages/survey-react-ui/src/panel.tsx +++ b/packages/survey-react-ui/src/panel.tsx @@ -27,8 +27,12 @@ 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 style: React.CSSProperties = { + paddingInlineStart: this.panel.innerPaddingLeft + ? `calc(${panelPaddingHorizontal} + ${this.panel.innerPaddingLeft})` + : panelPaddingHorizontal, + paddingInlineEnd: panelPaddingHorizontal, display: this.panel.renderedIsExpanded ? undefined : "none", }; let content: React.JSX.Element | null = null; diff --git a/packages/survey-vue3-ui/src/Panel.vue b/packages/survey-vue3-ui/src/Panel.vue index 2ff7553204..de13cf5e9c 100644 --- a/packages/survey-vue3-ui/src/Panel.vue +++ b/packages/survey-vue3-ui/src/Panel.vue @@ -24,7 +24,7 @@ />
(); const root = ref(null as any); const survey = computed(() => props.element.survey); +const panelPaddingHorizontal = "var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; +const panelContentStyle = computed(() => { + const innerPaddingLeft = props.element.innerPaddingLeft; + return { + paddingInlineStart: innerPaddingLeft + ? `calc(${panelPaddingHorizontal} + ${innerPaddingLeft})` + : panelPaddingHorizontal, + paddingInlineEnd: panelPaddingHorizontal, + }; +}); useBase(() => props.element); From 1bcbfedd414e39abf0fe8cb25d130fce67c77d84 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 10:26:36 +0300 Subject: [PATCH 002/155] New tokens: page Fixes #11421 --- .../src/default-theme/blocks/sd-page.scss | 40 +++++++++++++- .../src/default-theme/blocks/sd-row.scss | 54 +++++++++---------- .../survey-core/src/defaultCss/defaultCss.ts | 2 + packages/survey-core/src/page.ts | 6 +++ packages/survey-react-ui/src/page.tsx | 16 ++++-- 5 files changed, 87 insertions(+), 31 deletions(-) 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..d88ea9c4ed 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -6,10 +6,48 @@ display: flex; flex-direction: column; align-items: flex-start; - padding: 0 var(--sjs2-spacing-x500); + // padding: 0 var(--sjs2-spacing-x500); width: 100%; box-sizing: border-box; border-radius: var(--sjs2-radius-component-page); + + padding-inline-start: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); + padding-inline-end: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); + padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x500)); + padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x500)); + row-gap: var(--sjs2-layout-component-page-box-gap-horizontal, var(--sjs2-spacing-x300)); + column-gap: var(--sjs2-layout-component-page-box-gap-vertical, var(--sjs2-spacing-x300)); +} + +.sd-page__header { + display: flex; + flex-direction: column; + width: 100%; + padding: var(--sjs2-layout-component-page-header-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-header-padding-horizontal, var(--sjs2-spacing-x000)); + gap: var(--sjs2-layout-component-page-header-gap-vertical, var(--sjs2-spacing-x050)); +} + +.sd-page__title { + padding: var(--sjs2-layout-component-page-title-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-title-padding-horizontal, var(--sjs2-spacing-x000)); +} + +.sd-page__description { + padding-inline-start: var(--sjs2-layout-component-page-description-padding-horizontal, var(--sjs2-spacing-x000)); + padding-inline-end: var(--sjs2-layout-component-page-description-padding-horizontal, var(--sjs2-spacing-x000)); + padding-top: var(--sjs2-layout-component-page-description-padding-top, var(--sjs2-spacing-x000)); + padding-bottom: var(--sjs2-layout-component-page-description-padding-bottom, var(--sjs2-spacing-x000)); +} + +.sd-page__content { + padding-inline-start: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); + padding-inline-end: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); + padding-top: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); + padding-bottom: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); + row-gap: var(--sjs2-layout-component-page-content-area-gap-horizontal, var(--sjs2-spacing-x200)); + column-gap: var(--sjs2-layout-component-page-content-area-gap-vertical, var(--sjs2-spacing-x200)); + display: flex; + flex-direction: column; + width: 100%; } .sd-root-modern--mobile .sd-page { 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 fd9eb91dd2..baa8ddfb69 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-row.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-row.scss @@ -8,40 +8,40 @@ // margin-top: var(--sd-base-vertical-padding); } -.sd-row.sd-page__row { - margin-top: var(--sjs2-spacing-x200); -} +// .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-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-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.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 { row-gap: var(--sjs2-spacing-x200); diff --git a/packages/survey-core/src/defaultCss/defaultCss.ts b/packages/survey-core/src/defaultCss/defaultCss.ts index 0179dff8a0..98ff718d6a 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" }, diff --git a/packages/survey-core/src/page.ts b/packages/survey-core/src/page.ts index cb977d1cbb..d57982651c 100644 --- a/packages/survey-core/src/page.ts +++ b/packages/survey-core/src/page.ts @@ -230,6 +230,12 @@ export class PageModel extends PanelModel implements IPage { !((this.survey).isShowProgressBarOnTop && !(this.survey).isStaring)) .toString(); } + public get cssHeader(): string { + return this.cssClasses.page.header; + } + public get cssContent(): string { + return this.cssClasses.page.content; + } protected getCssError(cssClasses: any): string { if (this.isPanel) return super.getCssError(cssClasses); return new CssClassBuilder() diff --git a/packages/survey-react-ui/src/page.tsx b/packages/survey-react-ui/src/page.tsx index 0dd1ccca97..f7615bf27f 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} + {header} {errors} - {rows} +
+ {rows} +
); } From 32f6d193a676762cb8c0d26e4c71c31159f1205b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 12:51:59 +0300 Subject: [PATCH 003/155] New tokens: page Fixes #11421 left page top/bottom paddings 0 for a while --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d88ea9c4ed..7404b4e089 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -13,8 +13,8 @@ padding-inline-start: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); padding-inline-end: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); - padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x500)); - padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x500)); + padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x000)); + padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x000)); row-gap: var(--sjs2-layout-component-page-box-gap-horizontal, var(--sjs2-spacing-x300)); column-gap: var(--sjs2-layout-component-page-box-gap-vertical, var(--sjs2-spacing-x300)); } From 904c32e58cefc30d3e4b361d974013cfaa41fe7c Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 13:05:38 +0300 Subject: [PATCH 004/155] Page top/bottom padding - temporary fix - DON'T FORGET TO DISCUSS --- packages/survey-core/src/default-theme/base-theme.ts | 4 ++-- packages/survey-core/src/default-theme/blocks/sd-page.scss | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts index 56e51fdc92..dcea5be8c5 100644 --- a/packages/survey-core/src/default-theme/base-theme.ts +++ b/packages/survey-core/src/default-theme/base-theme.ts @@ -261,8 +261,8 @@ export default { "--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-x500)", - "--sjs2-layout-component-page-box-padding-top": "var(--sjs2-spacing-x500)", - "--sjs2-layout-component-page-box-padding-bottom": "var(--sjs2-spacing-x500)", + "--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-x000)", "--sjs2-layout-component-page-content-area-padding-vertical": "var(--sjs2-spacing-x000)", 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 7404b4e089..d88ea9c4ed 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -13,8 +13,8 @@ padding-inline-start: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); padding-inline-end: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); - padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x000)); - padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x000)); + padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x500)); + padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x500)); row-gap: var(--sjs2-layout-component-page-box-gap-horizontal, var(--sjs2-spacing-x300)); column-gap: var(--sjs2-layout-component-page-box-gap-vertical, var(--sjs2-spacing-x300)); } From 20e11d32fa1829592c0516d4c26797f37e4ca6d7 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 14:18:09 +0300 Subject: [PATCH 005/155] Layout: page - COMPACT MODE - TO DISCUSS --- .../survey-core/src/default-theme/blocks/sd-page.scss | 8 ++++++++ 1 file changed, 8 insertions(+) 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 d88ea9c4ed..9bd8a46742 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -87,4 +87,12 @@ margin-bottom: 0; } } + + .sd-page { + row-gap: var(--sd-base-vertical-padding); + } + + .sd-page__content { + row-gap: var(--sd-base-vertical-padding); + } } \ No newline at end of file From 934ddd82bb9a4f94b83b523c50ea3edfaa9e6c41 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 14:55:37 +0300 Subject: [PATCH 006/155] Fixed page header bottom space --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 9bd8a46742..3513f2201b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -25,6 +25,7 @@ width: 100%; padding: var(--sjs2-layout-component-page-header-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-header-padding-horizontal, var(--sjs2-spacing-x000)); gap: var(--sjs2-layout-component-page-header-gap-vertical, var(--sjs2-spacing-x050)); + margin: 0 0 var(--sjs2-spacing-x050) 0; } .sd-page__title { @@ -57,13 +58,13 @@ .sd-page .sd-page__title { @include sjs2--typography--component--page--title; position: static; - margin: 0 0 var(--sjs2-spacing-x050) 0px; + // margin: 0 0 var(--sjs2-spacing-x050) 0px; } .sd-page .sd-page__description { @include sjs2--typography--component--page--description; position: static; - margin: 0 0 var(--sjs2-spacing-x050) 0; + // margin: 0 0 var(--sjs2-spacing-x050) 0; } @@ -95,4 +96,4 @@ .sd-page__content { row-gap: var(--sd-base-vertical-padding); } -} \ No newline at end of file +} From 6601be7896243397d3c4cdfe75b42a85ebc2d4d3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 15:29:03 +0300 Subject: [PATCH 007/155] Layout: panel - COMPACT MODE --- .../survey-core/src/default-theme/blocks/sd-panel.scss | 7 +++++++ 1 file changed, 7 insertions(+) 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 27dcf49e84..4917665335 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -90,6 +90,13 @@ } .sd-root--compact { + .sd-panel__content { + padding-top: var(--sjs2-spacing-x500); + --animation-padding-top: var(--sjs2-spacing-x500); + padding-bottom: var(--sjs2-spacing-x500); + row-gap: var(--sjs2-spacing-x400); + } + .sd-panel--as-page { & > .sd-panel__errbox { margin: 0 0 var(--sd-base-vertical-padding) 0; From 30ed489a988c94849b5bbe67e834ef8f2f847a54 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 16:36:13 +0300 Subject: [PATCH 008/155] Layout: panel - paneldynamic --- .../default-theme/blocks/sd-paneldynamic.scss | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) 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 739009aac6..9394c8e72a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -29,19 +29,33 @@ } } +.sd-paneldynamic__header { + padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); + gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); +} + +.sd-paneldynamic__footer { + clear: both; + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); + gap: var(--sjs2-layout-component-panel-footer-gap-vertical, var(--sjs2-spacing-x050)); + position: relative; + + .sd-paneldynamic__progress-text, + .sd-paneldynamic__progress--bottom { + display: initial; + } +} + .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 { +// box-sizing: border-box; +// padding-bottom: calc(1 * var(--sd-base-padding)); +// } .sd-paneldynamic__panel-wrapper:after { display: table; @@ -49,11 +63,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 +97,10 @@ } } -.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; + // padding: calc(var(--sd-base-vertical-padding) - var(--sjs2-spacing-x100)) 0; } .sd-paneldynamic__progress-text { @@ -132,7 +141,7 @@ .sd-paneldynamic__panel-footer { border-top: none; position: relative; - top: calc(0.5 * var(--sd-base-vertical-padding)); + // top: calc(0.5 * var(--sd-base-vertical-padding)); margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); justify-content: flex-end; } @@ -270,7 +279,7 @@ } .sd-question--paneldynamic.sd-element--with-frame { - padding-bottom: 0; + padding: 0; } .sd-paneldynamic__panels-container { From dfe7da6b08cb0dccf9da9af1a7553433f44342cb Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 16:41:42 +0300 Subject: [PATCH 009/155] Layout: panel - fixed errors position in page --- packages/survey-react-ui/src/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/survey-react-ui/src/page.tsx b/packages/survey-react-ui/src/page.tsx index f7615bf27f..18941ce435 100644 --- a/packages/survey-react-ui/src/page.tsx +++ b/packages/survey-react-ui/src/page.tsx @@ -40,8 +40,8 @@ export class SurveyPage extends SurveyPanelBase { return (
{header} - {errors}
+ {errors} {rows}
From ae297bcd41ae9671aedb8a03c467a5c09024ecdc Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 17:31:09 +0300 Subject: [PATCH 010/155] Layout: panel - fixed vertical spacings --- .../src/default-theme/base-theme.ts | 2 +- .../src/default-theme/blocks/sd-panel.scss | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts index dcea5be8c5..d49c5c15f0 100644 --- a/packages/survey-core/src/default-theme/base-theme.ts +++ b/packages/survey-core/src/default-theme/base-theme.ts @@ -295,7 +295,7 @@ export default { "--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-x500)", - "--sjs2-layout-component-panel-content-area-padding-vertical": "var(--sjs2-spacing-x400)", + "--sjs2-layout-component-panel-content-area-padding-vertical": "var(--sjs2-spacing-x500)", "--sjs2-layout-component-panel-content-area-gap-horizontal": "var(--sjs2-spacing-x500)", "--sjs2-layout-component-panel-content-area-gap-vertical": "var(--sjs2-spacing-x400)", "--sjs2-layout-component-panel-header-padding-horizontal": "var(--sjs2-layout-component-panel-content-area-padding-horizontal)", 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 4917665335..d7eb8730a8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -29,11 +29,11 @@ .sd-panel__content { padding-inline-start: var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500)); padding-inline-end: var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500)); - padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); - --animation-padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); - padding-bottom: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x400)); - row-gap: var(--sjs2-layout-component-panel-content-area-gap-horizontal, var(--sjs2-spacing-x400)); - column-gap: var(--sjs2-layout-component-panel-content-area-gap-vertical, var(--sjs2-spacing-x500)); + padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x500)); + --animation-padding-top: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x500)); + padding-bottom: var(--sjs2-layout-component-panel-content-area-padding-vertical, var(--sjs2-spacing-x500)); + row-gap: var(--sjs2-layout-component-panel-content-area-gap-vertical, var(--sjs2-spacing-x400)); + column-gap: var(--sjs2-layout-component-panel-content-area-gap-horizontal, var(--sjs2-spacing-x500)); display: flex; flex-direction: column; } @@ -90,12 +90,12 @@ } .sd-root--compact { - .sd-panel__content { - padding-top: var(--sjs2-spacing-x500); - --animation-padding-top: var(--sjs2-spacing-x500); - padding-bottom: var(--sjs2-spacing-x500); - row-gap: var(--sjs2-spacing-x400); - } + // .sd-panel__content { + // padding-top: var(--sjs2-spacing-x500); + // --animation-padding-top: var(--sjs2-spacing-x500); + // padding-bottom: var(--sjs2-spacing-x500); + // row-gap: var(--sjs2-spacing-x400); + // } .sd-panel--as-page { & > .sd-panel__errbox { From f9210394821674fab5c36816b208b7699508e457 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 18 Jun 2026 18:18:08 +0300 Subject: [PATCH 011/155] Layout: panel - "panel-as-page" mode --- .../survey-core/src/default-theme/blocks/sd-panel.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 d7eb8730a8..412ed96fae 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -50,7 +50,7 @@ .sd-panel__title { @include sjs2--typography--component--page--title; position: static; - margin: 0 0 var(--sjs2-spacing-x050) 0px; + // margin: 0 0 var(--sjs2-spacing-x050) 0px; span { font-family: inherit; @@ -71,7 +71,7 @@ .sd-panel__description { @include sjs2--typography--component--page--description; position: static; - margin: 0 0 var(--sjs2-spacing-x050) 0; + // margin: 0 0 var(--sjs2-spacing-x050) 0; } .sd-panel__required-text { @@ -85,7 +85,7 @@ } & > .sd-panel__content { - padding-top: 0; + padding: 0; } } @@ -125,7 +125,7 @@ padding-top: calc(0.5 * var(--sd-base-vertical-padding)); } .sd-panel--as-page .sd-panel__footer { - padding: var(--sjs2-spacing-x400) 0 0; + padding: 0; margin: 0; border: none; width: initial; From c0bd94c9764c8b2e2c09d685c31dd015093d85a9 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 11:21:43 +0300 Subject: [PATCH 012/155] Layout: panel - try to fix scr tests in ci --- packages/survey-react-ui/src/panel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/survey-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx index cced6c3bf2..a5028d4743 100644 --- a/packages/survey-react-ui/src/panel.tsx +++ b/packages/survey-react-ui/src/panel.tsx @@ -31,8 +31,8 @@ export class SurveyPanel extends SurveyPanelBase { const style: React.CSSProperties = { paddingInlineStart: this.panel.innerPaddingLeft ? `calc(${panelPaddingHorizontal} + ${this.panel.innerPaddingLeft})` - : panelPaddingHorizontal, - paddingInlineEnd: panelPaddingHorizontal, + : this.panel.innerPaddingLeft, + // paddingInlineEnd: this.panel.innerPaddingLeft ? panelPaddingHorizontal : undefined, display: this.panel.renderedIsExpanded ? undefined : "none", }; let content: React.JSX.Element | null = null; From f13b7b5041e3fe16769741266d96a62f559fe6d1 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 12:05:12 +0300 Subject: [PATCH 013/155] Layout: panel - get rid of extra bottom padding in paneldynamic panel in case of empty action container --- packages/survey-core/src/default-theme/base-theme.ts | 2 +- .../src/default-theme/blocks/sd-paneldynamic.scss | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts index 05eff7e893..052ba945d6 100644 --- a/packages/survey-core/src/default-theme/base-theme.ts +++ b/packages/survey-core/src/default-theme/base-theme.ts @@ -295,7 +295,7 @@ export default { "--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-x500)", - "--sjs2-layout-component-panel-content-area-padding-vertical": "var(--sjs2-spacing-x500)", + "--sjs2-layout-component-panel-content-area-padding-vertical": "var(--sjs2-spacing-x500)", // TODO: This is a temporary fix to make the panel content area padding match the design spec. The correct value should be var(--sjs2-spacing-x400) but this will cause a breaking change in the UI. We will need to update the design spec to match the current implementation. "--sjs2-layout-component-panel-content-area-padding-top": "var(--sjs2-spacing-x400)", "--sjs2-layout-component-panel-content-area-padding-bottom": "var(--sjs2-spacing-x400)", "--sjs2-layout-component-panel-content-area-gap-horizontal": "var(--sjs2-spacing-x500)", 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 9394c8e72a..5ff3f1ec65 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -144,13 +144,16 @@ // top: calc(0.5 * var(--sd-base-vertical-padding)); margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); justify-content: flex-end; -} -.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); .sd-tabs-toolbar { From 5b35587e761d00a5b2e5cb6a9791d88f4514f764 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 13:11:40 +0300 Subject: [PATCH 014/155] Layout: panel - fixed extra footer spacings in dynamic panels --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 2 +- packages/survey-react-ui/src/reactquestion_paneldynamic.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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 5ff3f1ec65..d67aaba1f6 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -145,7 +145,7 @@ margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); justify-content: flex-end; - .sd-action-bar--empty { + &.sd-action-bar--empty { display: none; } 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} From 093e5b1e7b7828bedb2f17ce9e433273730db64b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 14:59:37 +0300 Subject: [PATCH 015/155] Layout: panel - Removed extra paddings --- .../src/default-theme/blocks/sd-complex-element.scss | 4 ++-- .../src/default-theme/blocks/sd-paneldynamic.scss | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) 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..5682849123 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 @@ -43,8 +43,8 @@ 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); + // 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)); 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 d67aaba1f6..6f625e1e95 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -288,10 +288,10 @@ .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); + // 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); } .sd-paneldynamic__panel-wrapper { box-sizing: border-box; From ffb9c627f38a30d6e91c99ec8a9fd4ed383818ea Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 16:12:00 +0300 Subject: [PATCH 016/155] Layout: panels: fixed nested collapsed element title horizontal paddings --- .../src/default-theme/blocks/sd-collapsed-element.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ae5c20ed39..e5016eefa0 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 @@ -9,7 +9,7 @@ .sd-element--collapsed { &>.sd-element__header { - padding: var(--sjs2-spacing-x000) var(--sd-base-padding); + // 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)); From 186ef43c357853c021161f603609c74e76d657df Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 16:12:34 +0300 Subject: [PATCH 017/155] Layout: panel - Fixed dynamic panel footer vertical paddings --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 6f625e1e95..7d70d3772e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -36,7 +36,7 @@ .sd-paneldynamic__footer { clear: both; - padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x300)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-footer-gap-vertical, var(--sjs2-spacing-x050)); position: relative; @@ -295,6 +295,7 @@ } .sd-paneldynamic__panel-wrapper { box-sizing: border-box; + position: relative; } @keyframes movePanel { From 43c0ddf41425a2877fa3f5bf6f4c37cf17866d5d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 19 Jun 2026 16:51:30 +0300 Subject: [PATCH 018/155] New tokens: panel - TO DISCUSS - PanelDynamic inner panel footer Fixes #11421 --- .../src/default-theme/blocks/sd-paneldynamic.scss | 3 +++ packages/survey-react-ui/src/panel.tsx | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) 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 7d70d3772e..e5030d90ab 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -142,8 +142,11 @@ border-top: none; position: relative; // top: calc(0.5 * var(--sd-base-vertical-padding)); + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x300)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); justify-content: flex-end; + padding-top: 0; + margin-top: calc(var(--sjs2-spacing-negative-x300)); &.sd-action-bar--empty { display: none; diff --git a/packages/survey-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx index a5028d4743..d70629e8d2 100644 --- a/packages/survey-react-ui/src/panel.tsx +++ b/packages/survey-react-ui/src/panel.tsx @@ -36,11 +36,13 @@ export class SurveyPanel extends SurveyPanelBase { 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(); @@ -57,6 +59,7 @@ export class SurveyPanel extends SurveyPanelBase { {header} {this.panel.showErrorsAbovePanel ? null : errors} {content} + {bottom}
); } @@ -75,7 +78,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}
); } From 368b892e96694bd77e93595a1403bf52ee2444f5 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 10:24:04 +0300 Subject: [PATCH 019/155] Layout: panel - fixed paneldynamic row divided --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e5030d90ab..c9404a1057 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -169,8 +169,8 @@ position: relative; background: $border-light; bottom: 0; - inset-inline-start: calc(-1 * var(--sd-base-padding)); - width: calc(100% + 2 * var(--sd-base-padding)); + // inset-inline-start: calc(-1 * var(--sd-base-padding)); + // width: calc(100% + 2 * var(--sd-base-padding)); } } .sd-paneldynamic__tabs-container--with-header { From ccca9fbd9436564476362c09720066ce2a6d731e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 10:24:40 +0300 Subject: [PATCH 020/155] Layout: page - Try to fix page rows gap in compact mode --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 3513f2201b..84da1d706e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -89,9 +89,9 @@ } } - .sd-page { - row-gap: var(--sd-base-vertical-padding); - } + // .sd-page { + // row-gap: var(--sd-base-vertical-padding); + // } .sd-page__content { row-gap: var(--sd-base-vertical-padding); From 8e4368241f56a5ce70b2ab72592800f91e91eb15 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 10:53:33 +0300 Subject: [PATCH 021/155] Reverted page row gap in compact mode --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 84da1d706e..3513f2201b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -89,9 +89,9 @@ } } - // .sd-page { - // row-gap: var(--sd-base-vertical-padding); - // } + .sd-page { + row-gap: var(--sd-base-vertical-padding); + } .sd-page__content { row-gap: var(--sd-base-vertical-padding); From b006ee98ba23fe2dc32794b37b42a91d99ed5434 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 11:40:43 +0300 Subject: [PATCH 022/155] New tokens: panel - Fixed nested table panel paddings Fixes #11421 --- .../src/default-theme/blocks/sd-table.scss | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) 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 db277d32f4..4c54e3d021 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -295,8 +295,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, @@ -757,11 +760,11 @@ @include table_responsive(); } -.sd-table__cell--detail-panel { - .sd-panel__content { - padding-top: var(--sjs2-spacing-x100); - } -} +// .sd-table__cell--detail-panel { +// .sd-panel__content { +// padding-top: var(--sjs2-spacing-x100); +// } +// } .sd-table__question-wrapper { .sd-boolean-root { From adb1e31bd316f0a36652c8586aedc7258518398b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 11:53:46 +0300 Subject: [PATCH 023/155] Layout: panel - try to remove redundant negative margins --- .../survey-core/src/default-theme/blocks/sd-question.scss | 8 ++++---- .../survey-core/src/default-theme/blocks/sd-table.scss | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) 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 ddfa962684..6114290254 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -128,11 +128,11 @@ } &>.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)); + // 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)); + // left: calc(-1 * var(--sd-base-padding)); } } 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 4c54e3d021..ba7a533ac4 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -470,10 +470,10 @@ &.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)); - padding-left: var(--sd-base-padding); - margin-left: calc(-1 * var(--sd-base-padding)); + // padding-right: var(--sd-base-padding); + // margin-right: calc(-1 * var(--sd-base-padding)); + // padding-left: var(--sd-base-padding); + // margin-left: calc(-1 * var(--sd-base-padding)); box-sizing: content-box; } } From ccf515a6ed66b92d16aa412a8e644d6a4dcdc049 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 12:08:50 +0300 Subject: [PATCH 024/155] Layout: panel - reverted nested element in table paddings hack --- .../survey-core/src/default-theme/blocks/sd-table.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 ba7a533ac4..4c54e3d021 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -470,10 +470,10 @@ &.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)); - // padding-left: var(--sd-base-padding); - // margin-left: calc(-1 * var(--sd-base-padding)); + padding-right: var(--sd-base-padding); + margin-right: calc(-1 * var(--sd-base-padding)); + padding-left: var(--sd-base-padding); + margin-left: calc(-1 * var(--sd-base-padding)); box-sizing: content-box; } } From 1ce233d9ee13c633c1469a61f3546d8252ada2b5 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 12:20:18 +0300 Subject: [PATCH 025/155] Layout: panel - REVERT - try to remove redundant negative margins --- .../survey-core/src/default-theme/blocks/sd-question.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 6114290254..ddfa962684 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -128,11 +128,11 @@ } &>.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)); + 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)); + left: calc(-1 * var(--sd-base-padding)); } } From 9253e90b219e2ca609302169862e8b96d5df6946 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 13:45:44 +0300 Subject: [PATCH 026/155] Layout: panel - panel footer spacings --- .../src/default-theme/blocks/sd-panel.scss | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) 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 b9b750bc08..07e0757148 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -138,14 +138,17 @@ .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)); + // 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)); + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x200)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); 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-inline-start: calc(var(--sjs2-layout-component-panel-content-area-padding-horizontal) - 1.75 * var(--sjs2-spacing-x100)); } + .sd-panel--as-page .sd-panel__footer { padding: 0; margin: 0; From 7280ed75523056b36e64a9d543a78e7fe257c2ba Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 15:14:48 +0300 Subject: [PATCH 027/155] New tokens: panel - Added styles for mobile mode Fixes #11421 --- .../src/default-theme/blocks/sd-panel.scss | 10 ++++++++++ .../src/default-theme/blocks/sd-paneldynamic.scss | 14 ++++++++++++++ .../src/default-theme/blocks/sd-question.scss | 8 ++++++++ 3 files changed, 32 insertions(+) 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 07e0757148..f3aa9a231b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -38,6 +38,16 @@ flex-direction: column; } +.sd-root-modern--mobile { + .sd-panel__header { + padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) 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; 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 c9404a1057..8b231dec1b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -46,6 +46,20 @@ } } +.sd-root-modern--mobile { + .sd-paneldynamic__header { + padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-spacing-x300)); + } + .sd-paneldynamic__footer { + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x100)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x300)); + } + .sd-paneldynamic__panel-footer { + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x200)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x200)); + margin-right: calc(1.5 * var(--sjs2-spacing-negative-x050)); + margin-top: calc(var(--sjs2-spacing-negative-x400)); + } +} + .sd-question--readonly, .sd-question--preview { .sd-paneldynamic .sd-question__placeholder { 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 ddfa962684..6aa84bd85c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -180,6 +180,14 @@ gap: var(--sjs2-spacing-x100); color: $foreground; white-space: normal; + 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-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-question__placeholder { From a284083f26148258d66766e7a7e6027fc7e3d959 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 15:38:29 +0300 Subject: [PATCH 028/155] Layout: panel - fix comment area spacings for paneldynamic only --- .../src/default-theme/blocks/sd-paneldynamic.scss | 12 ++++++++++++ .../src/default-theme/blocks/sd-question.scss | 8 -------- 2 files changed, 12 insertions(+), 8 deletions(-) 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 8b231dec1b..ba0a303344 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -29,6 +29,18 @@ } } +.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-paneldynamic__header { padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); 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 6aa84bd85c..ddfa962684 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -180,14 +180,6 @@ gap: var(--sjs2-spacing-x100); color: $foreground; white-space: normal; - 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-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-question__placeholder { From da63185ef64516cf2ca97491732b5680b01b0aef Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 22 Jun 2026 16:39:32 +0300 Subject: [PATCH 029/155] Layout: paneldynamic header responsivity fix --- .../src/default-theme/blocks/sd-paneldynamic.scss | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) 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 ba0a303344..965f5136ea 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -185,9 +185,14 @@ .sd-paneldynamic__tabs-container { padding-top: var(--sd-base-padding); + padding-left: var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); + padding-right: var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); .sd-tabs-toolbar { margin-bottom: -1px; } +} +.sd-paneldynamic__tabs-container--with-header { + padding-top: var(--sjs2-spacing-x300); &:after { content: " "; display: block; @@ -197,11 +202,17 @@ 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-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal))); } } -.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; From 2cf80ed6531b80e328f229b85500fe2e9d08fdd4 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 15:38:04 +0300 Subject: [PATCH 030/155] Update pr.yml --- azure-pipelines/V3/pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/V3/pr.yml b/azure-pipelines/V3/pr.yml index fcf97417b9..93254a0a05 100644 --- a/azure-pipelines/V3/pr.yml +++ b/azure-pipelines/V3/pr.yml @@ -36,6 +36,7 @@ pr: branches: include: - V3 + - tsv2013/issue11421 pool: name: main-selfhosted @@ -350,4 +351,4 @@ stages: jobs: - template: templates/pdf/test.yml parameters: - checkout: PDF \ No newline at end of file + checkout: PDF From 5b233b036ff12e5e1680d02aadc3b7658ab73368 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 15:42:47 +0300 Subject: [PATCH 031/155] Update pr.yml --- azure-pipelines/V3/pr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/azure-pipelines/V3/pr.yml b/azure-pipelines/V3/pr.yml index 93254a0a05..1aa625d6c4 100644 --- a/azure-pipelines/V3/pr.yml +++ b/azure-pipelines/V3/pr.yml @@ -36,7 +36,6 @@ pr: branches: include: - V3 - - tsv2013/issue11421 pool: name: main-selfhosted From c51ae3340cd91860db84ae7c9f298884abb86471 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 15:43:08 +0300 Subject: [PATCH 032/155] Layout: paneldynamic - apply header paddings horizontal paddings for elements with frame only (#11482) * Layout: paneldynamic - apply header paddings horizontal paddings for elements with frame only * Update pr.yml * Trigger CI * Update pr.yml * Trigger CI --------- Co-authored-by: tsv2013 --- .../src/default-theme/base-theme.ts | 6 +-- .../blocks/sd-collapsed-element.scss | 4 +- .../blocks/sd-complex-element.scss | 18 ++++---- .../src/default-theme/blocks/sd-element.scss | 8 ++-- .../default-theme/blocks/sd-paneldynamic.scss | 43 +++++++++++++------ .../src/default-theme/blocks/sd-question.scss | 41 ++++++++++++------ 6 files changed, 75 insertions(+), 45 deletions(-) diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts index 052ba945d6..e3e7711998 100644 --- a/packages/survey-core/src/default-theme/base-theme.ts +++ b/packages/survey-core/src/default-theme/base-theme.ts @@ -377,9 +377,9 @@ 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-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-left": "var(--sjs2-spacing-x500)", + "--sjs2-layout-component-question-header-padding-right": "var(--sjs2-spacing-x500)", + "--sjs2-layout-component-question-header-padding-top": "var(--sjs2-spacing-x400)", "--sjs2-layout-component-question-header-padding-bottom": "var(--sjs2-spacing-x200)", "--sjs2-layout-component-question-header-gap-horizontal": "var(--sjs2-spacing-x150)", "--sjs2-layout-component-question-header-gap-vertical": "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 e5016eefa0..c0603e636f 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 @@ -17,8 +17,8 @@ } &.sd-element--with-frame { - padding-top: 0; - padding-bottom: 0; + // padding-top: 0; + // padding-bottom: 0; &>.sd-element__header { padding-top: var(--sjs2-spacing-x200); 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 5682849123..f4da3382a9 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 @@ -21,15 +21,15 @@ } } -.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--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 { 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..bcd9a1e097 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-element.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-element.scss @@ -136,10 +136,10 @@ .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); + // 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-paneldynamic.scss b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss index 965f5136ea..2002039347 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -15,16 +15,21 @@ 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; - - &:after { - display: none; - } - - & > .sd-panel__title { - color: $foreground-light; + & .sd-paneldynamic__panel-wrapper > .sd-panel { + // &>.sd-panel__content { + // padding: 0; + // } + &> .sd-panel__header { + padding-top: var(--sd-base-vertical-padding); + padding-bottom: 0; + + &:after { + display: none; + } + + & > .sd-panel__title { + color: $foreground-light; + } } } } @@ -40,6 +45,15 @@ } } +.sd-question:not(.sd-element--with-frame) { + &>.sd-paneldynamic__footer { + padding: 0; + } + + &>.sd-paneldynamic__panel-footer { + padding: 0; + } +} .sd-paneldynamic__header { padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); @@ -78,6 +92,7 @@ color: $foreground; } } + // .sd-paneldynamic__panel-wrapper { // box-sizing: border-box; // padding-bottom: calc(1 * var(--sd-base-padding)); @@ -152,6 +167,8 @@ .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); } @@ -321,9 +338,9 @@ content: none; } -.sd-question--paneldynamic.sd-element--with-frame { - padding: 0; -} +// .sd-question--paneldynamic.sd-element--with-frame { +// padding: 0; +// } .sd-paneldynamic__panels-container { position: relative; 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 ddfa962684..eeda3d951b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -5,6 +5,29 @@ position: relative; } +.sd-question__header { + padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); + padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); +} + +.sd-question__content { + box-sizing: border-box; + padding-left: var(--sjs2-layout-component-question-content-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); + padding-right: var(--sjs2-layout-component-question-content-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); + padding-bottom: var(--sd-base-padding); +} + +.sd-question:not(.sd-element--with-frame) { + >.sd-question__header { + padding-top: 0; + padding-left: 0; + padding-right: 0; + } + >.sd-question__content { + padding: 0; + } +} + .sd-question--no-pointer-events { .sd-selectbase, @@ -63,14 +86,8 @@ margin-top: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)); } -.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); -} - .sd-question__header--location-top { - padding-top: var(--sjs2-layout-component-question-header-padding-top); + padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-padding)); padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); } @@ -109,9 +126,9 @@ } .sd-element--with-frame { - &.sd-question--title-top { - padding-top: var(--sd-base-vertical-padding); - } + // &.sd-question--title-top { + // padding-top: var(--sd-base-vertical-padding); + // } &.sd-question--error-top { padding-top: 0; @@ -207,7 +224,3 @@ overflow: visible; max-width: 100%; } - -.sd-question__content { - box-sizing: border-box; -} From 66a265bcada32937e5acb8be97a1413ef343ad18 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 17:36:22 +0300 Subject: [PATCH 033/155] Fixed question title paddings in mobile mode --- .../src/default-theme/blocks/sd-question.scss | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 eeda3d951b..4b01d5289e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -28,6 +28,19 @@ } } +.sd-root-modern--mobile { + .sd-question__header { + padding-left: var(--sjs2-spacing-x300); + padding-right: var(--sjs2-spacing-x300); + } + + .sd-question__content { + padding-left: var(--sjs2-spacing-x300); + padding-right: var(--sjs2-spacing-x300); + padding-bottom: var(--sjs2-spacing-x300); + } +} + .sd-question--no-pointer-events { .sd-selectbase, @@ -91,6 +104,12 @@ padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); } +.sd-root-modern--mobile { + .sd-question__header--location-top { + padding-top: var(--sjs2-spacing-x200); + } +} + .sd-question__header--location--bottom { padding-top: calc(0.375 * var(--sd-base-vertical-padding)); } From 3ad02b1207c24adf882af6714a5279463b637421 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 17:56:21 +0300 Subject: [PATCH 034/155] Fixed mobile page paddings --- .../src/default-theme/blocks/sd-page.scss | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) 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 3513f2201b..90683e82ac 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -49,24 +49,36 @@ display: flex; flex-direction: column; width: 100%; + box-sizing: border-box; } -.sd-root-modern--mobile .sd-page { - padding: 0; -} +.sd-root-modern--mobile { + .sd-page { + padding: 0; + } -.sd-page .sd-page__title { - @include sjs2--typography--component--page--title; - position: static; - // margin: 0 0 var(--sjs2-spacing-x050) 0px; -} + .sd-page__title { + @include sjs2--typography--component--page--title; + position: static; + // margin: 0 0 var(--sjs2-spacing-x050) 0px; + } -.sd-page .sd-page__description { - @include sjs2--typography--component--page--description; - position: static; - // margin: 0 0 var(--sjs2-spacing-x050) 0; -} + .sd-page__description { + @include sjs2--typography--component--page--description; + position: static; + // margin: 0 0 var(--sjs2-spacing-x050) 0; + } + .sd-page__content { + // padding-inline-start: var(--sjs2-spacing-x300); + // padding-inline-end: var(--sjs2-spacing-x300); + // padding-top: var(--sjs2-spacing-x300); + // padding-bottom: var(--sjs2-spacing-x300); + row-gap: var(--sjs2-spacing-x200); + column-gap: var(--sjs2-spacing-x200); + padding: 0; + } +} .sd-page__errbox { padding: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)) var(--sd-base-padding); From dc4a242761223bdb5272929925c11b4268a134ae Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 23 Jun 2026 18:04:46 +0300 Subject: [PATCH 035/155] Fixed new css variables for page spacings --- .../src/default-theme/blocks/sd-page.scss | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) 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 90683e82ac..7803ac2ead 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -11,10 +11,10 @@ box-sizing: border-box; border-radius: var(--sjs2-radius-component-page); - padding-inline-start: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); - padding-inline-end: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); - padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x500)); - padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x500)); + // padding-inline-start: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); + // padding-inline-end: var(--sjs2-layout-component-page-box-padding-horizontal, var(--sjs2-spacing-x500)); + // padding-top: var(--sjs2-layout-component-page-box-padding-top, var(--sjs2-spacing-x500)); + // padding-bottom: var(--sjs2-layout-component-page-box-padding-bottom, var(--sjs2-spacing-x500)); row-gap: var(--sjs2-layout-component-page-box-gap-horizontal, var(--sjs2-spacing-x300)); column-gap: var(--sjs2-layout-component-page-box-gap-vertical, var(--sjs2-spacing-x300)); } @@ -42,10 +42,12 @@ .sd-page__content { padding-inline-start: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); padding-inline-end: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); - padding-top: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); - padding-bottom: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); - row-gap: var(--sjs2-layout-component-page-content-area-gap-horizontal, var(--sjs2-spacing-x200)); - column-gap: var(--sjs2-layout-component-page-content-area-gap-vertical, var(--sjs2-spacing-x200)); + // padding-top: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); + // padding-bottom: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); + // row-gap: var(--sjs2-layout-component-page-content-area-gap-horizontal, var(--sjs2-spacing-x200)); + // column-gap: var(--sjs2-layout-component-page-content-area-gap-vertical, var(--sjs2-spacing-x200)); + row-gap: var(--sjs2-spacing-x200); + column-gap: var(--sjs2-spacing-x200); display: flex; flex-direction: column; width: 100%; @@ -53,9 +55,9 @@ } .sd-root-modern--mobile { - .sd-page { - padding: 0; - } + // .sd-page { + // padding: 0; + // } .sd-page__title { @include sjs2--typography--component--page--title; From 05279828eec3c399e3f092cf5d7044eb09e673e9 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 10:23:20 +0300 Subject: [PATCH 036/155] Fixed page paddings - TO REVIEW LATER --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 7803ac2ead..da82a3d8fe 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -40,8 +40,8 @@ } .sd-page__content { - padding-inline-start: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); - padding-inline-end: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); + // padding-inline-start: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); + // padding-inline-end: var(--sjs2-layout-component-page-content-area-padding-horizontal, var(--sjs2-spacing-x000)); // padding-top: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); // padding-bottom: var(--sjs2-layout-component-page-content-area-padding-vertical, var(--sjs2-spacing-x000)); // row-gap: var(--sjs2-layout-component-page-content-area-gap-horizontal, var(--sjs2-spacing-x200)); From 4a39f5d6bd28fd63e66b99d0fdb51e126136e0aa Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 12:30:08 +0300 Subject: [PATCH 037/155] Layout: question header spacings --- .../src/default-theme/blocks/sd-panel.scss | 2 +- .../default-theme/blocks/sd-paneldynamic.scss | 2 +- .../src/default-theme/blocks/sd-question.scss | 74 +++++++++---------- .../src/default-theme/blocks/sd-table.scss | 8 +- 4 files changed, 40 insertions(+), 46 deletions(-) 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 f3aa9a231b..88792a7b6a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -40,7 +40,7 @@ .sd-root-modern--mobile { .sd-panel__header { - padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-spacing-x300); + padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300); } .sd-panel__content { padding: var(--sjs2-spacing-x300); 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 2002039347..30ae7ba1d7 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -74,7 +74,7 @@ .sd-root-modern--mobile { .sd-paneldynamic__header { - padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-spacing-x300)); + padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300); } .sd-paneldynamic__footer { padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x100)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x300)); 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 4b01d5289e..897e86f45a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -6,8 +6,37 @@ } .sd-question__header { + padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); + padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); + row-gap: var(--sjs2-layout-component-question-header-gap-vertical, var(--sjs2-spacing-x050)); + column-gap: var(--sjs2-layout-component-question-header-gap-horizontal, var(--sjs2-spacing-x150)); +} + +.sd-question__header--location--bottom { + padding-top: calc(0.375 * var(--sd-base-vertical-padding)); +} + +.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); +} + +.sd-question__title--empty { + .sv-string-viewer { + display: inline-block; + height: multiply(1.5, $font-questiontitle-size); + } +} + +.sd-question__description { + @include sjs2--typography--component--question--description; + color: $font-questiondescription-color; + white-space: normal; + padding-inline: var(--sjs2-layout-component-question-description-padding-horizontal); + padding-top: var(--sjs2-layout-component-question-description-padding-top); + padding-bottom: var(--sjs2-layout-component-question-description-padding-bottom); } .sd-question__content { @@ -30,8 +59,10 @@ .sd-root-modern--mobile { .sd-question__header { + padding-top: var(--sjs2-spacing-x200); padding-left: var(--sjs2-spacing-x300); padding-right: var(--sjs2-spacing-x300); + padding-bottom: var(--sjs2-spacing-x100); } .sd-question__content { @@ -99,50 +130,13 @@ margin-top: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)); } -.sd-question__header--location-top { - padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-padding)); - padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); -} - -.sd-root-modern--mobile { - .sd-question__header--location-top { - padding-top: var(--sjs2-spacing-x200); - } -} - -.sd-question__header--location--bottom { - padding-top: calc(0.375 * var(--sd-base-vertical-padding)); -} - -.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); -} - -.sd-question__title--empty { - .sv-string-viewer { - display: inline-block; - height: multiply(1.5, $font-questiontitle-size); - } -} - -.sd-question__description { - @include sjs2--typography--component--question--description; - color: $font-questiondescription-color; - white-space: normal; - padding-inline: var(--sjs2-layout-component-question-description-padding-horizontal); - padding-top: var(--sjs2-layout-component-question-description-padding-top); - 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-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 { 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 4c54e3d021..434e36a285 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -456,8 +456,8 @@ } & > .sd-question__content { - padding-top: var(--sjs2-spacing-x200); - --animation-padding-top: #{var(--sjs2-spacing-x200)}; + padding-top: var(--sd-base-vertical-padding); + --animation-padding-top: #{var(--sd-base-vertical-padding)}; min-width: min-content; } @@ -499,8 +499,8 @@ @mixin table_responsive { &.sd-question.sd-question--table { & > .sd-question__content { - padding-top: 0; - --animation-padding-top: 0; + padding-top: var(--sjs2-spacing-x100); + --animation-padding-top: var(--sjs2-spacing-x100); } } From 4198090e8546c8b2e557dcd4828995178a8c9fa2 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 12:44:03 +0300 Subject: [PATCH 038/155] Layout: page - fixed page horizontal paddings --- .../survey-core/src/default-theme/blocks/sd-page.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 da82a3d8fe..f203710175 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -6,7 +6,7 @@ display: flex; flex-direction: column; align-items: flex-start; - // padding: 0 var(--sjs2-spacing-x500); + padding: 0 var(--sjs2-spacing-x500); width: 100%; box-sizing: border-box; border-radius: var(--sjs2-radius-component-page); @@ -55,9 +55,9 @@ } .sd-root-modern--mobile { - // .sd-page { - // padding: 0; - // } + .sd-page { + padding: 0; + } .sd-page__title { @include sjs2--typography--component--page--title; From 8e67fece4bdcb9716edb8b6b1a1c3cb1e61a24ea Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 14:47:39 +0300 Subject: [PATCH 039/155] New tokens: panel - temporary rollback page header paddings Fixes #11421 --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f203710175..541249b091 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -23,7 +23,7 @@ display: flex; flex-direction: column; width: 100%; - padding: var(--sjs2-layout-component-page-header-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-header-padding-horizontal, var(--sjs2-spacing-x000)); + // padding: var(--sjs2-layout-component-page-header-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-header-padding-horizontal, var(--sjs2-spacing-x000)); gap: var(--sjs2-layout-component-page-header-gap-vertical, var(--sjs2-spacing-x050)); margin: 0 0 var(--sjs2-spacing-x050) 0; } From 78e5260772c1df1f007465dc5abcf192a79c0bd2 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 14:55:53 +0300 Subject: [PATCH 040/155] Layout: page fixed page title typography --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 541249b091..0718757b33 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -29,7 +29,9 @@ } .sd-page__title { - padding: var(--sjs2-layout-component-page-title-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-title-padding-horizontal, var(--sjs2-spacing-x000)); + @include sjs2--typography--component--page--title; + position: static; + // padding: var(--sjs2-layout-component-page-title-padding-vertical, var(--sjs2-spacing-x000)) var(--sjs2-layout-component-page-title-padding-horizontal, var(--sjs2-spacing-x000)); } .sd-page__description { @@ -60,8 +62,6 @@ } .sd-page__title { - @include sjs2--typography--component--page--title; - position: static; // margin: 0 0 var(--sjs2-spacing-x050) 0px; } From ee5358b0c71ba762ea1a2c8a779de55906e1fc71 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 15:19:09 +0300 Subject: [PATCH 041/155] Layout: page - Fixed page description typography --- packages/survey-core/src/default-theme/blocks/sd-page.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 0718757b33..08759308fd 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -35,6 +35,8 @@ } .sd-page__description { + @include sjs2--typography--component--page--description; + position: static; padding-inline-start: var(--sjs2-layout-component-page-description-padding-horizontal, var(--sjs2-spacing-x000)); padding-inline-end: var(--sjs2-layout-component-page-description-padding-horizontal, var(--sjs2-spacing-x000)); padding-top: var(--sjs2-layout-component-page-description-padding-top, var(--sjs2-spacing-x000)); @@ -66,8 +68,6 @@ } .sd-page__description { - @include sjs2--typography--component--page--description; - position: static; // margin: 0 0 var(--sjs2-spacing-x050) 0; } From 7f85a7ea8e8074bb3503d16d9cf398852dbcd60b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 15:32:23 +0300 Subject: [PATCH 042/155] Layout: question - Try to fix tests changing selector --- screenshots/buttongroup.spec.ts | 4 +- screenshots/dropdown.spec.ts | 4 +- screenshots/readonly-preview.spec.ts | 88 ++++++++++++++-------------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/screenshots/buttongroup.spec.ts b/screenshots/buttongroup.spec.ts index a5bae25c3b..66328d6aa2 100644 --- a/screenshots/buttongroup.spec.ts +++ b/screenshots/buttongroup.spec.ts @@ -57,11 +57,11 @@ frameworks.forEach(framework => { }; await initSurvey(page, framework, json); await resetFocusToBody(page); - await compareScreenshot(page, ".sd-question__content", "buttongroup-renderas-default.png"); + await compareScreenshot(page, ".sd-question__content>div", "buttongroup-renderas-default.png"); await page.setViewportSize({ width: 500, height: 1000 }); await page.waitForTimeout(500); - await compareScreenshot(page, ".sd-question__content", "buttongroup-renderas-dropdown.png"); + await compareScreenshot(page, ".sd-question__content>div", "buttongroup-renderas-dropdown.png"); }); }); }); \ No newline at end of file diff --git a/screenshots/dropdown.spec.ts b/screenshots/dropdown.spec.ts index d18319ae84..0680527cbb 100644 --- a/screenshots/dropdown.spec.ts +++ b/screenshots/dropdown.spec.ts @@ -417,7 +417,7 @@ frameworks.forEach(framework => { ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content svg")).style.height = "48px"; ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content input")).style.backgroundColor = "red"; }); - await compareScreenshot(page, ".sd-question__content", "dropdown-custom-component.png"); + await compareScreenshot(page, ".sd-question__content>div", "dropdown-custom-component.png"); }); test("Check ReadOnly dropdown with custom component", async ({ page }) => { @@ -443,7 +443,7 @@ frameworks.forEach(framework => { // ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content svg")).style.height = "48px"; // ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content input")).style.backgroundColor = "red"; // }); - await compareScreenshot(page, ".sd-question__content", "dropdown-readonly-custom-component.png"); + await compareScreenshot(page, ".sd-question__content>div", "dropdown-readonly-custom-component.png"); }); test("Check overlay popup in dropdown question", async ({ page }) => { diff --git a/screenshots/readonly-preview.spec.ts b/screenshots/readonly-preview.spec.ts index 01da8853ca..dcfcefb1cf 100644 --- a/screenshots/readonly-preview.spec.ts +++ b/screenshots/readonly-preview.spec.ts @@ -26,11 +26,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-radiogroup.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-radiogroup.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-radiogroup.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-radiogroup.png"); }); test("Single Input ReadOnly and Preview", async ({ page }) => { @@ -49,11 +49,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-single-input.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-single-input.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-single-input.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-single-input.png"); }); test("Comment Input ReadOnly and Preview", async ({ page }) => { @@ -72,15 +72,15 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-comment.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-comment.png"); await page.keyboard.press("Tab"); - await compareScreenshot(page, ".sd-question__content", "readonly-comment-with-focus.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-comment-with-focus.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-comment.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-comment.png"); }); test("Multiple text Input ReadOnly and Preview", async ({ page }) => { @@ -106,11 +106,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-multiple.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-multiple.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-multiple.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-multiple.png"); }); test("Rating ReadOnly and Preview", async ({ page }) => { @@ -134,11 +134,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-rating.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-rating.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-rating.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-rating.png"); }); test("Rating as dropdown ReadOnly and Preview", async ({ page }) => { @@ -163,11 +163,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-rating-dropdown.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-dropdown.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-rating-dropdown.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-rating-dropdown.png"); }); test("Rating Stars ReadOnly and Preview", async ({ page }) => { @@ -192,11 +192,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-rating-stars.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-stars.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-rating-stars.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-rating-stars.png"); }); test("Rating Smileys ReadOnly and Preview", async ({ page }) => { @@ -221,11 +221,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-rating-smileys.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-smileys.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-rating-smileys.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-rating-smileys.png"); }); test("Rating Smileys colored ReadOnly and Preview", async ({ page }) => { @@ -251,11 +251,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-rating-smileys-colored.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-smileys-colored.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-rating-smileys-colored.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-rating-smileys-colored.png"); }); test("Rating Smileys and Stars in matrix ReadOnly and Preview", async ({ page }) => { @@ -321,11 +321,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-dropdown.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-dropdown.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-dropdown.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-dropdown.png"); }); test("Tagbox ReadOnly and Preview", async ({ page }) => { @@ -345,11 +345,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-tagbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-tagbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-tagbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-tagbox.png"); }); test("Checkbox Group ReadOnly and Preview", async ({ page }) => { @@ -369,11 +369,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-checkbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-checkbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-checkbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-checkbox.png"); }); test("Signature ReadOnly and Preview", async ({ page }) => { @@ -391,11 +391,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-signature.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-signature.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-signature.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-signature.png"); }); test("Panel Dynamic ReadOnly and Preview", async ({ page }) => { @@ -491,11 +491,11 @@ frameworks.forEach(framework => { }, ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-ranking.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-ranking.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-ranking.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-ranking.png"); }); test("Boolean ReadOnly and Preview", async ({ page }) => { @@ -515,11 +515,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-boolean.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-boolean.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-boolean.png"); }); test("Boolean:Indeterminate ReadOnly and Preview", async ({ page }) => { @@ -539,11 +539,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-boolean-indeterminate.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-indeterminate.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-boolean-indeterminate.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-indeterminate.png"); }); test("Boolean:Radio ReadOnly and Preview", async ({ page }) => { @@ -564,11 +564,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-boolean-radio.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-radio.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-boolean-radio.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-radio.png"); }); test("Boolean:Checkbox ReadOnly and Preview", async ({ page }) => { @@ -592,11 +592,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-boolean-checkbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-checkbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-boolean-checkbox.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-checkbox.png"); }); test("ImagePicker ReadOnly and Preview", async ({ page }) => { @@ -628,11 +628,11 @@ frameworks.forEach(framework => { ] }); await page.waitForLoadState("networkidle"); - await compareScreenshot(page, ".sd-question__content", "readonly-imagepicker.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-imagepicker.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-imagepicker.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-imagepicker.png"); }); test("Matrix ReadOnly and Preview", async ({ page }) => { @@ -658,11 +658,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-matrix-single.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-matrix-single.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-matrix-single.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-matrix-single.png"); }); test("Matrix ReadOnly and Preview alt rows", async ({ page }) => { @@ -723,11 +723,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content", "readonly-file.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-file.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content", "preview-file.png"); + await compareScreenshot(page, ".sd-question__content>div", "preview-file.png"); }); test("Numbered page Preview", async ({ page }) => { @@ -770,7 +770,7 @@ frameworks.forEach(framework => { await initSurvey(page, framework, json); await page.locator("div").filter({ hasText: /^Yes$/ }).click(); - await compareScreenshot(page, ".sd-question__content", "readonly-and-focus-unselect-item-not-focused.png"); + await compareScreenshot(page, ".sd-question__content>div", "readonly-and-focus-unselect-item-not-focused.png"); }); }); }); \ No newline at end of file From 26428cab58064f54124be970dfbd30d3bf82cd8d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 15:45:40 +0300 Subject: [PATCH 043/155] New tokens: panel - Fixed error box negative margins Fixes #11421 --- .../src/default-theme/blocks/sd-complex-element.scss | 10 +++++----- .../src/default-theme/blocks/sd-question.scss | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) 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 f4da3382a9..5b80603ff1 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 @@ -51,11 +51,11 @@ 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)); - } + // & > .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)); + // } & > .sd-question__erbox--below-question { bottom: 0; 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 897e86f45a..78b45f5777 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -158,11 +158,11 @@ } &>.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)); + // 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)); + // left: calc(-1 * var(--sd-base-padding)); } } From 79550252e6c4948df5ddc5a3fdd9573208d16bbe Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 16:35:23 +0300 Subject: [PATCH 044/155] Layout: question - Fixed left and bottom title location paddings --- .../src/default-theme/blocks/sd-question.scss | 68 +++++++++++-------- 1 file changed, 40 insertions(+), 28 deletions(-) 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 78b45f5777..f28ec07486 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -5,6 +5,15 @@ position: relative; } +.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)); + align-items: anchor-center; +} + .sd-question__header { padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); @@ -14,8 +23,24 @@ column-gap: var(--sjs2-layout-component-question-header-gap-horizontal, var(--sjs2-spacing-x150)); } -.sd-question__header--location--bottom { - padding-top: calc(0.375 * var(--sd-base-vertical-padding)); +.sd-question__header--location--left { + padding-right: 0; + padding-bottom: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); + display: inline-block; + width: auto; + // vertical-align: top; + // margin-top: var(--sjs2-spacing-x150); +} + +.sd-question--title-bottom { + .sd-question__content { + padding-top: var(--sd-base-padding); + padding-bottom: 0; + } + .sd-question__header--location--bottom { + padding-top: calc(0.375 * var(--sd-base-vertical-padding)); + padding-bottom: var(--sjs2-spacing-x500); + } } .sd-question__title { @@ -46,6 +71,19 @@ padding-bottom: var(--sd-base-padding); } +.sd-question__content--left { + display: inline-block; + flex: 1; + padding-top: var(--sd-base-padding); + padding-left: 0; + // margin-top: calc(0.25 * var(--sd-base-vertical-padding)) 0; + max-width: 100%; +} + +// .sd-element--with-frame>.sd-question__content--left { +// margin: 0; +// } + .sd-question:not(.sd-element--with-frame) { >.sd-question__header { padding-top: 0; @@ -171,32 +209,6 @@ padding: var(--sjs2-spacing-x200) 0; } -.sd-question__header--location--left { - display: inline-block; - width: auto; - vertical-align: top; - margin-top: var(--sjs2-spacing-x150); -} - -.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)); -} - -.sd-question__content--left { - display: inline-block; - flex: 1; - margin-top: calc(0.25 * var(--sd-base-vertical-padding)) 0; - max-width: 100%; -} - -.sd-element--with-frame>.sd-question__content--left { - margin: 0; -} - .sd-question__required-text { color: $red; vertical-align: top; From a150098062ba0710789a1a4411c0e617f757c806 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 16:51:48 +0300 Subject: [PATCH 045/155] Layout: question - Fixed error boxes --- .../src/default-theme/blocks/sd-question.scss | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) 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 f28ec07486..aed9e34b85 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -181,25 +181,26 @@ // padding-top: var(--sd-base-vertical-padding); // } - &.sd-question--error-top { - padding-top: 0; - } + // &.sd-question--error-top { + // padding-top: 0; + // } - &.sd-question--error-bottom { - padding-bottom: 0; - display: flex; - flex-direction: column; + // &.sd-question--error-bottom { + // padding-bottom: 0; + // display: flex; + // flex-direction: column; - &>.sd-question__content { - margin-bottom: var(--sd-base-padding); - } - } + // // &>.sd-question__content { + // // margin-bottom: var(--sd-base-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)); position: sticky; + left: 0; // left: calc(-1 * var(--sd-base-padding)); } } From 7218bc79be0d036f4b943ee52f5deb1896a29b63 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 24 Jun 2026 18:03:17 +0300 Subject: [PATCH 046/155] Layout: panel - Fixed footer top padding on preview --- packages/survey-core/src/default-theme/blocks/sd-panel.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 88792a7b6a..61dd1391ab 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -160,7 +160,7 @@ } .sd-panel--as-page .sd-panel__footer { - padding: 0; + padding: var(--sjs2-spacing-x400) 0 0; margin: 0; border: none; width: initial; From 1439d04d13bc4f17afe4ab9eb11af41c686c0215 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 25 Jun 2026 16:07:56 +0300 Subject: [PATCH 047/155] New tokens: question - Rolled back selectors in scr tests Fixes #11421 --- screenshots/buttongroup.spec.ts | 4 +- screenshots/dropdown.spec.ts | 4 +- screenshots/readonly-preview.spec.ts | 88 ++++++++++++++-------------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/screenshots/buttongroup.spec.ts b/screenshots/buttongroup.spec.ts index 66328d6aa2..a5bae25c3b 100644 --- a/screenshots/buttongroup.spec.ts +++ b/screenshots/buttongroup.spec.ts @@ -57,11 +57,11 @@ frameworks.forEach(framework => { }; await initSurvey(page, framework, json); await resetFocusToBody(page); - await compareScreenshot(page, ".sd-question__content>div", "buttongroup-renderas-default.png"); + await compareScreenshot(page, ".sd-question__content", "buttongroup-renderas-default.png"); await page.setViewportSize({ width: 500, height: 1000 }); await page.waitForTimeout(500); - await compareScreenshot(page, ".sd-question__content>div", "buttongroup-renderas-dropdown.png"); + await compareScreenshot(page, ".sd-question__content", "buttongroup-renderas-dropdown.png"); }); }); }); \ No newline at end of file diff --git a/screenshots/dropdown.spec.ts b/screenshots/dropdown.spec.ts index 0680527cbb..d18319ae84 100644 --- a/screenshots/dropdown.spec.ts +++ b/screenshots/dropdown.spec.ts @@ -417,7 +417,7 @@ frameworks.forEach(framework => { ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content svg")).style.height = "48px"; ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content input")).style.backgroundColor = "red"; }); - await compareScreenshot(page, ".sd-question__content>div", "dropdown-custom-component.png"); + await compareScreenshot(page, ".sd-question__content", "dropdown-custom-component.png"); }); test("Check ReadOnly dropdown with custom component", async ({ page }) => { @@ -443,7 +443,7 @@ frameworks.forEach(framework => { // ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content svg")).style.height = "48px"; // ((window as any).survey.rootElement.getRootNode().querySelector(".sd-question__content input")).style.backgroundColor = "red"; // }); - await compareScreenshot(page, ".sd-question__content>div", "dropdown-readonly-custom-component.png"); + await compareScreenshot(page, ".sd-question__content", "dropdown-readonly-custom-component.png"); }); test("Check overlay popup in dropdown question", async ({ page }) => { diff --git a/screenshots/readonly-preview.spec.ts b/screenshots/readonly-preview.spec.ts index dcfcefb1cf..01da8853ca 100644 --- a/screenshots/readonly-preview.spec.ts +++ b/screenshots/readonly-preview.spec.ts @@ -26,11 +26,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-radiogroup.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-radiogroup.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-radiogroup.png"); + await compareScreenshot(page, ".sd-question__content", "preview-radiogroup.png"); }); test("Single Input ReadOnly and Preview", async ({ page }) => { @@ -49,11 +49,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-single-input.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-single-input.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-single-input.png"); + await compareScreenshot(page, ".sd-question__content", "preview-single-input.png"); }); test("Comment Input ReadOnly and Preview", async ({ page }) => { @@ -72,15 +72,15 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-comment.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-comment.png"); await page.keyboard.press("Tab"); - await compareScreenshot(page, ".sd-question__content>div", "readonly-comment-with-focus.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-comment-with-focus.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-comment.png"); + await compareScreenshot(page, ".sd-question__content", "preview-comment.png"); }); test("Multiple text Input ReadOnly and Preview", async ({ page }) => { @@ -106,11 +106,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-multiple.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-multiple.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-multiple.png"); + await compareScreenshot(page, ".sd-question__content", "preview-multiple.png"); }); test("Rating ReadOnly and Preview", async ({ page }) => { @@ -134,11 +134,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-rating.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-rating.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-rating.png"); + await compareScreenshot(page, ".sd-question__content", "preview-rating.png"); }); test("Rating as dropdown ReadOnly and Preview", async ({ page }) => { @@ -163,11 +163,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-dropdown.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-rating-dropdown.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-rating-dropdown.png"); + await compareScreenshot(page, ".sd-question__content", "preview-rating-dropdown.png"); }); test("Rating Stars ReadOnly and Preview", async ({ page }) => { @@ -192,11 +192,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-stars.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-rating-stars.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-rating-stars.png"); + await compareScreenshot(page, ".sd-question__content", "preview-rating-stars.png"); }); test("Rating Smileys ReadOnly and Preview", async ({ page }) => { @@ -221,11 +221,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-smileys.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-rating-smileys.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-rating-smileys.png"); + await compareScreenshot(page, ".sd-question__content", "preview-rating-smileys.png"); }); test("Rating Smileys colored ReadOnly and Preview", async ({ page }) => { @@ -251,11 +251,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-rating-smileys-colored.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-rating-smileys-colored.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-rating-smileys-colored.png"); + await compareScreenshot(page, ".sd-question__content", "preview-rating-smileys-colored.png"); }); test("Rating Smileys and Stars in matrix ReadOnly and Preview", async ({ page }) => { @@ -321,11 +321,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-dropdown.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-dropdown.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-dropdown.png"); + await compareScreenshot(page, ".sd-question__content", "preview-dropdown.png"); }); test("Tagbox ReadOnly and Preview", async ({ page }) => { @@ -345,11 +345,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-tagbox.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-tagbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-tagbox.png"); + await compareScreenshot(page, ".sd-question__content", "preview-tagbox.png"); }); test("Checkbox Group ReadOnly and Preview", async ({ page }) => { @@ -369,11 +369,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-checkbox.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-checkbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-checkbox.png"); + await compareScreenshot(page, ".sd-question__content", "preview-checkbox.png"); }); test("Signature ReadOnly and Preview", async ({ page }) => { @@ -391,11 +391,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-signature.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-signature.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-signature.png"); + await compareScreenshot(page, ".sd-question__content", "preview-signature.png"); }); test("Panel Dynamic ReadOnly and Preview", async ({ page }) => { @@ -491,11 +491,11 @@ frameworks.forEach(framework => { }, ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-ranking.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-ranking.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-ranking.png"); + await compareScreenshot(page, ".sd-question__content", "preview-ranking.png"); }); test("Boolean ReadOnly and Preview", async ({ page }) => { @@ -515,11 +515,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-boolean.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-boolean.png"); + await compareScreenshot(page, ".sd-question__content", "preview-boolean.png"); }); test("Boolean:Indeterminate ReadOnly and Preview", async ({ page }) => { @@ -539,11 +539,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-indeterminate.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-boolean-indeterminate.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-indeterminate.png"); + await compareScreenshot(page, ".sd-question__content", "preview-boolean-indeterminate.png"); }); test("Boolean:Radio ReadOnly and Preview", async ({ page }) => { @@ -564,11 +564,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-radio.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-boolean-radio.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-radio.png"); + await compareScreenshot(page, ".sd-question__content", "preview-boolean-radio.png"); }); test("Boolean:Checkbox ReadOnly and Preview", async ({ page }) => { @@ -592,11 +592,11 @@ frameworks.forEach(framework => { ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-boolean-checkbox.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-boolean-checkbox.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-boolean-checkbox.png"); + await compareScreenshot(page, ".sd-question__content", "preview-boolean-checkbox.png"); }); test("ImagePicker ReadOnly and Preview", async ({ page }) => { @@ -628,11 +628,11 @@ frameworks.forEach(framework => { ] }); await page.waitForLoadState("networkidle"); - await compareScreenshot(page, ".sd-question__content>div", "readonly-imagepicker.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-imagepicker.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-imagepicker.png"); + await compareScreenshot(page, ".sd-question__content", "preview-imagepicker.png"); }); test("Matrix ReadOnly and Preview", async ({ page }) => { @@ -658,11 +658,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-matrix-single.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-matrix-single.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-matrix-single.png"); + await compareScreenshot(page, ".sd-question__content", "preview-matrix-single.png"); }); test("Matrix ReadOnly and Preview alt rows", async ({ page }) => { @@ -723,11 +723,11 @@ frameworks.forEach(framework => { } ] }); - await compareScreenshot(page, ".sd-question__content>div", "readonly-file.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-file.png"); await page.evaluate(() => { (window as any).survey.showPreview(); }); - await compareScreenshot(page, ".sd-question__content>div", "preview-file.png"); + await compareScreenshot(page, ".sd-question__content", "preview-file.png"); }); test("Numbered page Preview", async ({ page }) => { @@ -770,7 +770,7 @@ frameworks.forEach(framework => { await initSurvey(page, framework, json); await page.locator("div").filter({ hasText: /^Yes$/ }).click(); - await compareScreenshot(page, ".sd-question__content>div", "readonly-and-focus-unselect-item-not-focused.png"); + await compareScreenshot(page, ".sd-question__content", "readonly-and-focus-unselect-item-not-focused.png"); }); }); }); \ No newline at end of file From a5a05f67664a6147fad257d1d4ad26a3fa04eb3e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 29 Jun 2026 14:19:17 +0300 Subject: [PATCH 048/155] New tokens: panel - WARNING - Question markup changed Fixes #11421 --- .../src/default-theme/base-theme.ts | 2 +- .../blocks/sd-complex-element.scss | 23 ++ .../src/default-theme/blocks/sd-panel.scss | 9 +- .../default-theme/blocks/sd-paneldynamic.scss | 20 +- .../src/default-theme/blocks/sd-question.scss | 222 ++++++++++-------- .../src/default-theme/blocks/sd-table.scss | 1 + .../survey-core/src/defaultCss/defaultCss.ts | 2 + packages/survey-core/src/question.ts | 16 +- packages/survey-react-ui/src/panel.tsx | 3 +- .../survey-react-ui/src/reactquestion.tsx | 15 +- 10 files changed, 206 insertions(+), 107 deletions(-) diff --git a/packages/survey-core/src/default-theme/base-theme.ts b/packages/survey-core/src/default-theme/base-theme.ts index ebb1055ba5..6771b55b52 100644 --- a/packages/survey-core/src/default-theme/base-theme.ts +++ b/packages/survey-core/src/default-theme/base-theme.ts @@ -292,7 +292,7 @@ export default { "--sjs2-layout-component-panel-header-padding-left": "var(--sjs2-layout-component-panel-content-area-padding-horizontal)", "--sjs2-layout-component-panel-header-padding-right": "var(--sjs2-layout-component-panel-content-area-padding-horizontal)", "--sjs2-layout-component-panel-header-padding-top": "var(--sjs2-spacing-x400)", - "--sjs2-layout-component-panel-header-padding-bottom": "var(--sjs2-spacing-x400)", + "--sjs2-layout-component-panel-header-padding-bottom": "var(--sjs2-spacing-x200)", // "--sjs2-layout-component-panel-content-area-padding-horizontal": "var(--sjs2-layout-large-horizontal)", // "--sjs2-layout-component-panel-content-area-padding-top": "var(--sjs2-layout-medium-vertical)", // "--sjs2-layout-component-panel-content-area-padding-bottom": "var(--sjs2-layout-medium-vertical)", 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 5b80603ff1..f4e05c1121 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,15 @@ 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; +} + .sd-element--complex > .sd-element__header { &:after { content: " "; @@ -39,6 +48,16 @@ } } +.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); @@ -50,6 +69,10 @@ padding-top: calc(0.5 * var(--sd-base-vertical-padding)); padding-bottom: calc(0.5 * var(--sd-base-vertical-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-element__erbox { // margin-left: calc(-1 * var(--sd-base-padding)); 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 61dd1391ab..9829ffaa2b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -42,6 +42,9 @@ .sd-panel__header { padding: var(--sjs2-spacing-x200) var(--sjs2-spacing-x300); } + .sd-element--nested > .sd-panel__header { + padding: var(--sjs2-spacing-x100) var(--sjs2-spacing-x300); + } .sd-panel__content { padding: var(--sjs2-spacing-x300); gap: var(--sjs2-spacing-x200); @@ -138,9 +141,9 @@ 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__header .sd-panel__description { +// margin-top: calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050)); +// } .sd-panel > .sd-panel__header:after { background: var(--sjs2-color-component-panel-default-separator); 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 30ae7ba1d7..8ccd38563a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -7,9 +7,13 @@ right: 0; height: 2px; z-index: 2; - transform: translateY(-1px); + // transform: translateY(-1px); } + .sd-progress ~ .sd-paneldynamic__panels-container { + padding-top: 1px; + } + & > .sd-panel { padding-top: 1px; padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); @@ -55,11 +59,24 @@ } } +.sd-question--paneldynamic { + &>.sd-question__container { + &>.sd-question__header-and-content-container { + padding: 0; + gap: 0; + } + } +} + .sd-paneldynamic__header { padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); } +.sd-paneldynamic__header ~ hr { + display: none; +} + .sd-paneldynamic__footer { clear: both; padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x300)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); @@ -350,6 +367,7 @@ // margin-right: calc(-1 * var(--sd-base-padding)); // padding-right: var(--sd-base-padding); } + .sd-paneldynamic__panel-wrapper { box-sizing: border-box; position: relative; 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 aed9e34b85..f4a24b6e8c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -5,47 +5,83 @@ position: relative; } -.sd-question--left { +.sd-question__container { + display: flex; + flex-direction: column; + row-gap: calc(0.5 * var(--sd-base-vertical-padding)); + column-gap: var(--sjs2-spacing-x300); +} + +.sd-element--with-frame > .sd-question__container { + gap: 0; +} + +.sd-question__header-and-content-container { display: flex; - flex-wrap: wrap; - flex-direction: row; + flex-direction: column; + padding-top: var(--sd-base-vertical-padding); + padding-left: var(--sjs2-layout-component-question-content-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); + padding-right: var(--sjs2-layout-component-question-content-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); + padding-bottom: var(--sd-base-padding); + row-gap: calc(0.5 * var(--sd-base-vertical-padding)); column-gap: var(--sjs2-spacing-x300); - row-gap: calc(0.25 * var(--sd-base-vertical-padding)); - align-items: anchor-center; } +.sd-question--left { + .sd-question__header-and-content-container { + flex-direction: row; + flex-wrap: wrap; + column-gap: var(--sjs2-spacing-x300); + // row-gap: calc(0.25 * var(--sd-base-vertical-padding)); + padding-top: var(--sd-base-padding); + } +} + +.sd-element--nested > div > .sd-question__header-and-content-container { + padding: 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)); +// align-items: anchor-center; +// } + .sd-question__header { - padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); - padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); - padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); - padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); + // padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); + // padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); + // padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); + // padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); row-gap: var(--sjs2-layout-component-question-header-gap-vertical, var(--sjs2-spacing-x050)); column-gap: var(--sjs2-layout-component-question-header-gap-horizontal, var(--sjs2-spacing-x150)); } .sd-question__header--location--left { - padding-right: 0; - padding-bottom: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); + // padding-right: 0; + // padding-bottom: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); display: inline-block; width: auto; - // vertical-align: top; - // margin-top: var(--sjs2-spacing-x150); + vertical-align: top; + margin-top: var(--sjs2-spacing-x150); } -.sd-question--title-bottom { - .sd-question__content { - padding-top: var(--sd-base-padding); - padding-bottom: 0; - } - .sd-question__header--location--bottom { - padding-top: calc(0.375 * var(--sd-base-vertical-padding)); - padding-bottom: var(--sjs2-spacing-x500); - } -} +// .sd-question--title-bottom { +// .sd-question__content { +// padding-top: var(--sd-base-padding); +// padding-bottom: 0; +// } +// .sd-question__header--location--bottom { +// padding-top: calc(0.375 * var(--sd-base-vertical-padding)); +// padding-bottom: var(--sjs2-spacing-x500); +// } +// } .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 { @@ -60,58 +96,54 @@ color: $font-questiondescription-color; white-space: normal; padding-inline: var(--sjs2-layout-component-question-description-padding-horizontal); - padding-top: var(--sjs2-layout-component-question-description-padding-top); - padding-bottom: var(--sjs2-layout-component-question-description-padding-bottom); + // padding-top: var(--sjs2-layout-component-question-description-padding-top); + // padding-bottom: var(--sjs2-layout-component-question-description-padding-bottom); } -.sd-question__content { - box-sizing: border-box; - padding-left: var(--sjs2-layout-component-question-content-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); - padding-right: var(--sjs2-layout-component-question-content-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); - padding-bottom: var(--sd-base-padding); -} +// .sd-question__content { +// box-sizing: border-box; +// } -.sd-question__content--left { - display: inline-block; - flex: 1; - padding-top: var(--sd-base-padding); - padding-left: 0; - // margin-top: calc(0.25 * var(--sd-base-vertical-padding)) 0; - max-width: 100%; -} +// .sd-question__content--left { +// display: inline-block; +// flex: 1; +// padding-top: var(--sd-base-padding); +// padding-left: 0; +// // margin-top: calc(0.25 * var(--sd-base-vertical-padding)) 0; +// max-width: 100%; +// } // .sd-element--with-frame>.sd-question__content--left { // margin: 0; // } -.sd-question:not(.sd-element--with-frame) { - >.sd-question__header { - padding-top: 0; - padding-left: 0; - padding-right: 0; - } - >.sd-question__content { - padding: 0; - } -} - -.sd-root-modern--mobile { - .sd-question__header { - padding-top: var(--sjs2-spacing-x200); - padding-left: var(--sjs2-spacing-x300); - padding-right: var(--sjs2-spacing-x300); - padding-bottom: var(--sjs2-spacing-x100); - } +// .sd-question:not(.sd-element--with-frame) { +// >.sd-question__header { +// padding-top: 0; +// padding-left: 0; +// padding-right: 0; +// } +// >.sd-question__content { +// padding: 0; +// } +// } - .sd-question__content { - padding-left: var(--sjs2-spacing-x300); - padding-right: var(--sjs2-spacing-x300); - padding-bottom: var(--sjs2-spacing-x300); - } -} +// .sd-root-modern--mobile { +// .sd-question__header { +// padding-top: var(--sjs2-spacing-x200); +// padding-left: var(--sjs2-spacing-x300); +// padding-right: var(--sjs2-spacing-x300); +// padding-bottom: var(--sjs2-spacing-x100); +// } + +// .sd-question__content { +// padding-left: var(--sjs2-spacing-x300); +// padding-right: var(--sjs2-spacing-x300); +// padding-bottom: var(--sjs2-spacing-x300); +// } +// } .sd-question--no-pointer-events { - .sd-selectbase, .sd-rating { label { @@ -120,53 +152,53 @@ } } -.sd-element__erbox--above-element { - margin-bottom: var(--sjs2-spacing-x100); -} +// .sd-element__erbox--above-element { +// margin-bottom: var(--sjs2-spacing-x100); +// } -.sd-question__erbox--below-question { - margin-top: var(--sjs2-spacing-x100); -} +// .sd-question__erbox--below-question { +// margin-top: var(--sjs2-spacing-x100); +// } .sd-question__content--support-container-queries { container-type: inline-size; } -.sd-question--title-top>.sd-question__erbox--above-question { - margin-bottom: calc(0.5 * 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-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--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-element--with-frame>.sd-element__erbox--above-element { - margin-bottom: var(--sd-base-padding); +.sd-element--with-frame>div>.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; } -.sd-question--left>.sd-element__erbox--above-element { - margin-bottom: 0; -} +// .sd-question--left>.sd-element__erbox--above-element { +// margin-bottom: 0; +// } -.sd-element--with-frame.sd-question--left>.sd-element__erbox--above-element { - margin-bottom: calc(1 * var(--sd-base-vertical-padding)); -} +// .sd-element--with-frame.sd-question--left>.sd-element__erbox--above-element { +// margin-bottom: calc(1 * var(--sd-base-vertical-padding)); +// } -.sd-element--with-frame>.sd-question__erbox--below-question { - margin-top: auto; +.sd-element--with-frame>div>.sd-question__erbox--below-question { + // margin-top: auto; border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel); } -.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-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-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-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__description--under-input { padding-top: calc(0.375 * var(--sd-base-vertical-padding)); 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 434e36a285..4d01192773 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -513,6 +513,7 @@ } .sd-table-wrapper { width: auto; + margin-top: calc(-1 * var(--sjs2-spacing-x100)); } .sd-table { display: block; diff --git a/packages/survey-core/src/defaultCss/defaultCss.ts b/packages/survey-core/src/defaultCss/defaultCss.ts index 98ff718d6a..0b2ae392c2 100644 --- a/packages/survey-core/src/defaultCss/defaultCss.ts +++ b/packages/survey-core/src/defaultCss/defaultCss.ts @@ -261,6 +261,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/question.ts b/packages/survey-core/src/question.ts index 2277816e7a..202e7a078d 100644 --- a/packages/survey-core/src/question.ts +++ b/packages/survey-core/src/question.ts @@ -1526,7 +1526,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-react-ui/src/panel.tsx b/packages/survey-react-ui/src/panel.tsx index d70629e8d2..6c453ee844 100644 --- a/packages/survey-react-ui/src/panel.tsx +++ b/packages/survey-react-ui/src/panel.tsx @@ -27,7 +27,8 @@ export class SurveyPanel extends SurveyPanelBase { creator={this.creator} /> ); - const panelPaddingHorizontal = "var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; + // const panelPaddingHorizontal = "var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; + const panelPaddingHorizontal = "var(--sd-base-padding, var(--sjs2-spacing-x500))"; const style: React.CSSProperties = { paddingInlineStart: this.panel.innerPaddingLeft ? `calc(${panelPaddingHorizontal} + ${this.panel.innerPaddingLeft})` diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx index c9374ae126..d1fa80dd06 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} + {question.isComplexQuestion ?
: null} + {questionContent} + {headerBottom} +
+ {errorsBelowQuestion} +
); From fb7142ed3aa115de30bb1233e2c6602cfc0c093c Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 29 Jun 2026 15:05:04 +0300 Subject: [PATCH 049/155] Fixed build after merge --- .../survey-core/src/default-theme/blocks/sd-dropdown.scss | 2 +- .../src/default-theme/blocks/sd-paneldynamic.scss | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) 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-paneldynamic.scss b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss index 76c35aaa3f..e4ff4e8935 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -13,7 +13,7 @@ .sd-progress ~ .sd-paneldynamic__panels-container { padding-top: 1px; } - + & > .sd-panel { padding-top: 1px; padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); @@ -213,9 +213,6 @@ &.sd-action-bar--empty { display: none; } -} - - .sd-action-bar__item:not(.sd-action-bar__item--hidden) { margin-bottom: var(--sjs2-spacing-negative-x100); } From de4929246bac0ac534b4cf6bc76bed14e63bf336 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 09:34:51 +0300 Subject: [PATCH 050/155] New tokens: question layout - fixed compact mode Fixes #11421 --- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 ++++++ 1 file changed, 6 insertions(+) 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 dd7987bee3..4e6802b379 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -41,6 +41,12 @@ padding: 0; } +.sd-root--compact { + .sd-question__header-and-content-container { + padding: 0; + } +} + // .sd-question--left { // display: flex; // flex-wrap: wrap; From 749f93e7d0f617562a19858fb1796ceadbbae239 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 09:51:24 +0300 Subject: [PATCH 051/155] Removed question paddings for elements without frame --- .../survey-core/src/default-theme/blocks/sd-question.scss | 7 +++++++ 1 file changed, 7 insertions(+) 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 4e6802b379..3bd2b0e7ff 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -47,6 +47,13 @@ } } +.sd-question:not(.sd-element--with-frame) > .sd-question__container { + .sd-question__header-and-content-container { + padding: 0; + } +} + + // .sd-question--left { // display: flex; // flex-wrap: wrap; From ce6445d26c1b1f700ed62853310d56f57144b825 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 12:51:28 +0300 Subject: [PATCH 052/155] Fixed question header row gap and added temporary fix for error bottom spacing --- .../src/default-theme/blocks/sd-question.scss | 83 +++++++++++-------- 1 file changed, 50 insertions(+), 33 deletions(-) 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 3bd2b0e7ff..a1a4ffa77d 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -53,6 +53,16 @@ } } +// TODO: remove this during tockens update +.sd-question__erbox ~ .sd-question__header-and-content-container { + padding-top: var(--sjs2-spacing-x300); +} +.sd-root-modern--mobile { + .sd-question__erbox ~ .sd-question__header-and-content-container { + padding-top: var(--sd-base-vertical-padding); + } +} +// END TODO: remove this during tockens update // .sd-question--left { // display: flex; @@ -64,6 +74,8 @@ // } .sd-question__header { + display: flex; + flex-direction: column; // padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); // padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); // padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); @@ -186,11 +198,21 @@ // margin-top: calc(0.25 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x050)); // } +.sd-element--with-frame>div>.sd-element__erbox { + position: sticky; + left: 0; +} + .sd-element--with-frame>div>.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; } +.sd-element--with-frame>div>.sd-question__erbox--below-question { + // margin-top: auto; + border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel); +} + // .sd-question--left>.sd-element__erbox--above-element { // margin-bottom: 0; // } @@ -199,11 +221,6 @@ // margin-bottom: calc(1 * var(--sd-base-vertical-padding)); // } -.sd-element--with-frame>div>.sd-question__erbox--below-question { - // margin-top: auto; - border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel); -} - // .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)); // } @@ -221,34 +238,34 @@ // 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-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: 0; - // left: calc(-1 * var(--sd-base-padding)); - } -} +// .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-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: 0; +// // left: calc(-1 * var(--sd-base-padding)); +// } +// } .sd-scrollable .sd-question__content { overflow-x: auto; From a1cadcc9941f0477bb845adf296098e6083da9a1 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 15:15:21 +0300 Subject: [PATCH 053/155] Fixed boolean question top padding --- packages/survey-core/src/default-theme/blocks/sd-boolean.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss index 8821cc82b9..4e393e9605 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss @@ -183,4 +183,8 @@ .sd-item__control-label { display: flex; } + // TODO: remove this during tockens update + &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { + padding-top: var(--sd-base-padding); + } } From f46ece9a31db8de979d91ea6dec8dc93d053a951 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 15:15:58 +0300 Subject: [PATCH 054/155] Fixed table w/o header top paddings --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 4 ++-- packages/survey-react-ui/src/reactquestion.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 3add9485da..a4b5699acc 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,7 +74,7 @@ } .sd-table--no-header { - padding-top: var(--sjs2-spacing-x300); + padding-top: var(--sjs2-spacing-x100); } .sd-panel:not(.sd-panel--as-page) { @@ -516,7 +516,7 @@ } .sd-table-wrapper { width: auto; - margin-top: calc(-1 * var(--sjs2-spacing-x100)); + margin-top: calc(-2 * var(--sjs2-spacing-x100)); } .sd-table { display: block; diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx index d1fa80dd06..0cf0329694 100644 --- a/packages/survey-react-ui/src/reactquestion.tsx +++ b/packages/survey-react-ui/src/reactquestion.tsx @@ -166,7 +166,7 @@ export class SurveyQuestion extends SurveyElementBase { {errorsAboveQuestion}
{headerTop} - {question.isComplexQuestion ?
: null} + {headerTop && question.isComplexQuestion ?
: null} {questionContent} {headerBottom}
From a7904307063a91efcd934ba6f4f9087b01f3932e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 15:28:35 +0300 Subject: [PATCH 055/155] Rollback --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a4b5699acc..e167a0761e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -516,7 +516,7 @@ } .sd-table-wrapper { width: auto; - margin-top: calc(-2 * var(--sjs2-spacing-x100)); + margin-top: calc(-1 * var(--sjs2-spacing-x100)); } .sd-table { display: block; From b37ce5763156fe67441eb8e99b8f1f061c8e9e38 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 15:40:08 +0300 Subject: [PATCH 056/155] Rollback --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e167a0761e..3add9485da 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,7 +74,7 @@ } .sd-table--no-header { - padding-top: var(--sjs2-spacing-x100); + padding-top: var(--sjs2-spacing-x300); } .sd-panel:not(.sd-panel--as-page) { From 8a35b5e3690061fe705e927ed42b36d827add466 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 15:53:02 +0300 Subject: [PATCH 057/155] Rollback --- .../survey-core/src/default-theme/blocks/sd-boolean.scss | 6 +++--- packages/survey-react-ui/src/reactquestion.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss index 4e393e9605..464b9848f2 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss @@ -184,7 +184,7 @@ display: flex; } // TODO: remove this during tockens update - &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { - padding-top: var(--sd-base-padding); - } + // &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { + // padding-top: var(--sd-base-padding); + // } } diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx index 0cf0329694..d1fa80dd06 100644 --- a/packages/survey-react-ui/src/reactquestion.tsx +++ b/packages/survey-react-ui/src/reactquestion.tsx @@ -166,7 +166,7 @@ export class SurveyQuestion extends SurveyElementBase { {errorsAboveQuestion}
{headerTop} - {headerTop && question.isComplexQuestion ?
: null} + {question.isComplexQuestion ?
: null} {questionContent} {headerBottom}
From 9abbeb2d6d8afc5a7f3985c812ddce8da7b82417 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 16:08:44 +0300 Subject: [PATCH 058/155] Try to fix boolean top padding --- .../survey-core/src/default-theme/blocks/sd-boolean.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss index 464b9848f2..4e393e9605 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss @@ -184,7 +184,7 @@ display: flex; } // TODO: remove this during tockens update - // &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { - // padding-top: var(--sd-base-padding); - // } + &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { + padding-top: var(--sd-base-padding); + } } From 15c4428b7ed3f6da4b514f63e8deb58473410008 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 16:22:05 +0300 Subject: [PATCH 059/155] Layout fixes --- .../survey-core/src/default-theme/blocks/sd-boolean.scss | 4 ---- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 ++++++ packages/survey-core/src/default-theme/blocks/sd-table.scss | 2 +- packages/survey-react-ui/src/reactquestion.tsx | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss index 4e393e9605..8821cc82b9 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-boolean.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-boolean.scss @@ -183,8 +183,4 @@ .sd-item__control-label { display: flex; } - // TODO: remove this during tockens update - &.sd-element--with-frame > .sd-question__container > .sd-question__header-and-content-container { - padding-top: var(--sd-base-padding); - } } 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 a1a4ffa77d..31bd6c4c9c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -12,6 +12,12 @@ column-gap: var(--sjs2-spacing-x300); } +.sd-element--nested { + &>.sd-question__container { + row-gap: var(--sjs2-spacing-x100); + } +} + .sd-element--with-frame > .sd-question__container { gap: 0; } 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 3add9485da..e167a0761e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,7 +74,7 @@ } .sd-table--no-header { - padding-top: var(--sjs2-spacing-x300); + padding-top: var(--sjs2-spacing-x100); } .sd-panel:not(.sd-panel--as-page) { diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx index d1fa80dd06..0cf0329694 100644 --- a/packages/survey-react-ui/src/reactquestion.tsx +++ b/packages/survey-react-ui/src/reactquestion.tsx @@ -166,7 +166,7 @@ export class SurveyQuestion extends SurveyElementBase { {errorsAboveQuestion}
{headerTop} - {question.isComplexQuestion ?
: null} + {headerTop && question.isComplexQuestion ?
: null} {questionContent} {headerBottom}
From a2a585ddae770ac46a1b4a20ebcb03e4e62e33f2 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 16:43:00 +0300 Subject: [PATCH 060/155] Layout fixes --- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 ++++++ packages/survey-react-ui/src/reactquestion.tsx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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 a1a4ffa77d..31bd6c4c9c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -12,6 +12,12 @@ column-gap: var(--sjs2-spacing-x300); } +.sd-element--nested { + &>.sd-question__container { + row-gap: var(--sjs2-spacing-x100); + } +} + .sd-element--with-frame > .sd-question__container { gap: 0; } diff --git a/packages/survey-react-ui/src/reactquestion.tsx b/packages/survey-react-ui/src/reactquestion.tsx index d1fa80dd06..0cf0329694 100644 --- a/packages/survey-react-ui/src/reactquestion.tsx +++ b/packages/survey-react-ui/src/reactquestion.tsx @@ -166,7 +166,7 @@ export class SurveyQuestion extends SurveyElementBase { {errorsAboveQuestion}
{headerTop} - {question.isComplexQuestion ?
: null} + {headerTop && question.isComplexQuestion ?
: null} {questionContent} {headerBottom}
From a27d0bbbc9ccd92dc4c00c8205f0d41c2c4b58ba Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 17:09:54 +0300 Subject: [PATCH 061/155] Fixed paneldynamic footer buttons right edge position --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e4ff4e8935..97f0d8ff24 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -98,7 +98,7 @@ } .sd-paneldynamic__panel-footer { padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x200)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x200)); - margin-right: calc(1.5 * var(--sjs2-spacing-negative-x050)); + // margin-right: calc(1.5 * var(--sjs2-spacing-negative-x050)); margin-top: calc(var(--sjs2-spacing-negative-x400)); } } @@ -204,7 +204,7 @@ position: relative; // top: calc(0.5 * var(--sd-base-vertical-padding)); padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x300)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); - margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); + // margin-right: calc(var(--sjs2-spacing-negative-x150) + var(--sjs2-spacing-negative-x025)); justify-content: flex-end; padding-top: 0; margin-top: calc(var(--sjs2-spacing-negative-x300)); From c71943baec9946ae7bfd9fdec0e326ce39f3cae3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 17:22:55 +0300 Subject: [PATCH 062/155] Fixed line below panel dynamic header --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 97f0d8ff24..e2d4976cc5 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -74,7 +74,8 @@ } .sd-paneldynamic__header ~ hr { - display: none; + margin: 0; + width: 100%; } .sd-paneldynamic__footer { From c9390cbe1d18080d1fe3d37578480057d09fe9c3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 18:03:28 +0300 Subject: [PATCH 063/155] Fixes of question layout --- .../src/default-theme/blocks/sd-question.scss | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) 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 31bd6c4c9c..e549cd241f 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -38,7 +38,7 @@ flex-direction: row; flex-wrap: wrap; column-gap: var(--sjs2-spacing-x300); - // row-gap: calc(0.25 * var(--sd-base-vertical-padding)); + row-gap: var(--sjs2-spacing-x100); padding-top: var(--sd-base-padding); } } @@ -59,17 +59,6 @@ } } -// TODO: remove this during tockens update -.sd-question__erbox ~ .sd-question__header-and-content-container { - padding-top: var(--sjs2-spacing-x300); -} -.sd-root-modern--mobile { - .sd-question__erbox ~ .sd-question__header-and-content-container { - padding-top: var(--sd-base-vertical-padding); - } -} -// END TODO: remove this during tockens update - // .sd-question--left { // display: flex; // flex-wrap: wrap; @@ -99,6 +88,11 @@ margin-top: var(--sjs2-spacing-x150); } +.sd-question__content--left { + flex: 1; + max-width: 100%; +} + // .sd-question--title-bottom { // .sd-question__content { // padding-top: var(--sd-base-padding); From 29102d92b0c9328304b2d4b35a6898ec37fb02c5 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 18:06:20 +0300 Subject: [PATCH 064/155] Rollback --- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 ------ 1 file changed, 6 deletions(-) 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 e549cd241f..a9106aa01e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -12,12 +12,6 @@ column-gap: var(--sjs2-spacing-x300); } -.sd-element--nested { - &>.sd-question__container { - row-gap: var(--sjs2-spacing-x100); - } -} - .sd-element--with-frame > .sd-question__container { gap: 0; } From 95e8b1cd98f4ad6d7d62f65ca40cd9578407baaa Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 30 Jun 2026 18:52:28 +0300 Subject: [PATCH 065/155] Fixed "panel as page" mode --- .../survey-core/src/default-theme/blocks/sd-panel.scss | 9 +++++++-- packages/survey-core/src/page.ts | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) 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 83bd79539e..ddb2e4baa4 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -2,6 +2,8 @@ @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, var(--sjs2-spacing-x000)); padding-inline-end: var(--sjs2-layout-component-panel-box-padding-horizontal, var(--sjs2-spacing-x000)); @@ -11,6 +13,8 @@ } .sd-panel__header { + display: flex; + flex-direction: column; padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); } @@ -53,8 +57,8 @@ .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; @@ -99,6 +103,7 @@ & > .sd-panel__content { padding: 0; + row-gap: var(--sjs2-spacing-x200); } } diff --git a/packages/survey-core/src/page.ts b/packages/survey-core/src/page.ts index 13028e3551..43d0e2f561 100644 --- a/packages/survey-core/src/page.ts +++ b/packages/survey-core/src/page.ts @@ -232,10 +232,10 @@ export class PageModel extends PanelModel implements IPage { .toString(); } public get cssHeader(): string { - return this.cssClasses.page.header; + return this.cssClasses.page?.header || this.cssClasses.panel?.header; } public get cssContent(): string { - return this.cssClasses.page.content; + return this.cssClasses.page?.content || this.cssClasses.panel?.content; } protected getCssError(cssClasses: any): string { if (this.isPanel) return super.getCssError(cssClasses); From a719babcba987812123b32d8954839b8bb3982d3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 12:16:15 +0300 Subject: [PATCH 066/155] Fixed panel header --- .../src/default-theme/blocks/sd-panel.scss | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 ddb2e4baa4..badf946c34 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -13,10 +13,10 @@ } .sd-panel__header { - display: flex; - flex-direction: column; + // display: flex; + // flex-direction: column; padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); - gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); + // gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); } .sd-panel__title { @@ -146,9 +146,10 @@ 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: calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050)); + margin-top: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); +} .sd-panel > .sd-panel__header:after { background: var(--sjs2-color-component-panel-default-separator); From d4bb360f05d9698439a86575ea974efbb9e15742 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 13:11:19 +0300 Subject: [PATCH 067/155] Fixed question layout: collapsed, error/header bottom --- .../blocks/sd-collapsed-element.scss | 79 +++++++++++-------- .../src/default-theme/blocks/sd-question.scss | 24 +++++- 2 files changed, 68 insertions(+), 35 deletions(-) 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 c0603e636f..79cce6c472 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,42 +1,59 @@ @use "../variables.scss" as *; -.sd-element--expanded, -.sd-element--collapsed { - &>.sd-element__header { - cursor: pointer; - } -} +// .sd-element--expanded > div > div, +// .sd-element--collapsed > div > div { +// &>.sd-element__header { +// cursor: pointer; +// } +// } -.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--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--with-frame { +// // padding-top: 0; +// // padding-bottom: 0; - &>.sd-element__header { - padding-top: var(--sjs2-spacing-x200); - padding-bottom: var(--sjs2-spacing-x200); - border-radius: var(--sjs2-radius-component-panel); - } - } +// &>.sd-element__header { +// padding-top: var(--sjs2-spacing-x200); +// padding-bottom: var(--sjs2-spacing-x200); +// border-radius: var(--sjs2-radius-component-panel); +// } +// } - &>.sd-element__header:focus-within, - &>.sd-element__header:hover { - background-color: $background-dim-light; - } +// &>.sd-element__header:focus-within, +// &>.sd-element__header:hover { +// background-color: $background-dim-light; +// } + +// &.sd-element--nested { - &.sd-element--nested { +// &>.sd-element__header:hover, +// &>.sd-element__header:focus-within { +// box-shadow: 0 var(--sjs2-spacing-negative-x200) 0 0 $background-dim-light, 0 var(--sjs2-spacing-x200) 0 $background-dim-light; +// } +// } +// } + +.sd-element--expandable > div > div { + &>.sd-element__header { + cursor: pointer; + } +} - &>.sd-element__header:hover, - &>.sd-element__header:focus-within { - box-shadow: 0 var(--sjs2-spacing-negative-x200) 0 0 $background-dim-light, 0 var(--sjs2-spacing-x200) 0 $background-dim-light; +.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-question.scss b/packages/survey-core/src/default-theme/blocks/sd-question.scss index a9106aa01e..9abdb329cc 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -10,6 +10,7 @@ flex-direction: column; row-gap: calc(0.5 * var(--sd-base-vertical-padding)); column-gap: var(--sjs2-spacing-x300); + height: 100%; } .sd-element--with-frame > .sd-question__container { @@ -18,6 +19,7 @@ .sd-question__header-and-content-container { display: flex; + flex: 1; flex-direction: column; padding-top: var(--sd-base-vertical-padding); padding-left: var(--sjs2-layout-component-question-content-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); @@ -27,6 +29,14 @@ column-gap: var(--sjs2-spacing-x300); } +.sd-question--title-bottom > .sd-question__container { + &>.sd-question__header-and-content-container { + padding-top: var(--sd-base-padding); + row-gap: calc(0.375 * var(--sd-base-vertical-padding)); + } +} + +// TODO: Remove as not working .sd-question--left { .sd-question__header-and-content-container { flex-direction: row; @@ -192,15 +202,21 @@ // margin-top: calc(0.25 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x050)); // } -.sd-element--with-frame>div>.sd-element__erbox { - position: sticky; - left: 0; -} +// .sd-element--with-frame>div>.sd-element__erbox { +// position: sticky; +// left: 0; +// } .sd-element--with-frame>div>.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--with-frame: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-element--with-frame>div>.sd-question__erbox--below-question { // margin-top: auto; From 8108270b698297c13369c5851f83c6db8e8025fb Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 13:25:18 +0300 Subject: [PATCH 068/155] Fixed question content top padding --- .../src/default-theme/blocks/sd-question.scss | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 9abdb329cc..25ec76c145 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -21,17 +21,23 @@ display: flex; flex: 1; flex-direction: column; - padding-top: var(--sd-base-vertical-padding); + padding-top: var(--sd-base-padding); + padding-bottom: var(--sd-base-padding); padding-left: var(--sjs2-layout-component-question-content-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); padding-right: var(--sjs2-layout-component-question-content-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); - padding-bottom: var(--sd-base-padding); row-gap: calc(0.5 * var(--sd-base-vertical-padding)); column-gap: var(--sjs2-spacing-x300); } + +.sd-element--with-frame.sd-question--title-top > .sd-question__container { + &>.sd-question__header-and-content-container { + padding-top: var(--sd-base-vertical-padding); + } +} + .sd-question--title-bottom > .sd-question__container { &>.sd-question__header-and-content-container { - padding-top: var(--sd-base-padding); row-gap: calc(0.375 * var(--sd-base-vertical-padding)); } } @@ -43,7 +49,6 @@ flex-wrap: wrap; column-gap: var(--sjs2-spacing-x300); row-gap: var(--sjs2-spacing-x100); - padding-top: var(--sd-base-padding); } } From b95ae83f45d8487707866caa829aeeeff2eb5ee8 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 13:34:45 +0300 Subject: [PATCH 069/155] Fixed error padding for question title location "left" --- packages/survey-core/src/default-theme/blocks/sd-question.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 25ec76c145..e54fd2287d 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -217,7 +217,7 @@ border-radius: var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel) 0 0; } // TODO: Remove after new design system is implemented -.sd-element--with-frame:not(.sd-element--complex)>div>.sd-element__erbox--above-element { +.sd-element--with-frame.sd-question--title-top: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)); } From 4e15154b115e036701965ea0488c8e776ea809c6 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 13:48:08 +0300 Subject: [PATCH 070/155] Fixed paneldynamic header --- .../src/default-theme/blocks/sd-question.scss | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) 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 e54fd2287d..8eba1dbf60 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -29,11 +29,16 @@ column-gap: var(--sjs2-spacing-x300); } - -.sd-element--with-frame.sd-question--title-top > .sd-question__container { +// TODO: Remove after new design system is implemented +.sd-element--with-frame.sd-question--title-top:not(.sd-element--complex) > .sd-question__container { &>.sd-question__header-and-content-container { padding-top: var(--sd-base-vertical-padding); } + &>.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--title-bottom > .sd-question__container { @@ -216,12 +221,6 @@ // 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--with-frame.sd-question--title-top: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-element--with-frame>div>.sd-question__erbox--below-question { // margin-top: auto; From 7f5203b2c4b82aa4f0e528af02fda2932059da97 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 13:52:22 +0300 Subject: [PATCH 071/155] Fixed paneldynamic tab header extra hr --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 3 +++ 1 file changed, 3 insertions(+) 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 e2d4976cc5..8b4998c40d 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -77,6 +77,9 @@ margin: 0; width: 100%; } +.sd-paneldynamic__header-tab ~ hr { + display: none; +} .sd-paneldynamic__footer { clear: both; From ed8fa7845a5854f411048fa4d914e098f6ea9d8d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 14:05:06 +0300 Subject: [PATCH 072/155] Fixed question header row gap --- packages/survey-core/src/default-theme/blocks/sd-question.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 8eba1dbf60..479fdf9b2a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -89,7 +89,8 @@ // padding-bottom: var(--sjs2-layout-component-question-header-padding-bottom, calc(0.5 * var(--sd-base-vertical-padding))); // padding-left: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); // padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + var(--sv-element-add-padding-right, 0px))); - row-gap: var(--sjs2-layout-component-question-header-gap-vertical, var(--sjs2-spacing-x050)); + row-gap: calc(0.25 * var(--sd-base-vertical-padding) - var(--sjs2-size-x050)); + // row-gap: var(--sjs2-layout-component-question-header-gap-vertical, var(--sjs2-spacing-x050)); column-gap: var(--sjs2-layout-component-question-header-gap-horizontal, var(--sjs2-spacing-x150)); } From 4168e21bfe4865496226b37c48eeed07e2edb293 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 14:06:44 +0300 Subject: [PATCH 073/155] Reverted --- .../src/default-theme/blocks/sd-question.scss | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 479fdf9b2a..248cad0208 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -30,14 +30,14 @@ } // TODO: Remove after new design system is implemented -.sd-element--with-frame.sd-question--title-top:not(.sd-element--complex) > .sd-question__container { +.sd-element--with-frame.sd-question--title-top > .sd-question__container { &>.sd-question__header-and-content-container { padding-top: var(--sd-base-vertical-padding); } - &>.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-element--with-frame.sd-question--title-top: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)); } } From adeb90e4688a0a73559e593e88666725c57dfd8b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 14:26:43 +0300 Subject: [PATCH 074/155] Try to fix paneldynamic header top padding --- packages/survey-core/src/default-theme/blocks/sd-question.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 248cad0208..559cd0fcca 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -30,7 +30,7 @@ } // TODO: Remove after new design system is implemented -.sd-element--with-frame.sd-question--title-top > .sd-question__container { +.sd-element--with-frame.sd-question--title-top:not(.sd-question--paneldynamic) > .sd-question__container { &>.sd-question__header-and-content-container { padding-top: var(--sd-base-vertical-padding); } From 795a539df46c24883a2c29145dd992e01f678793 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 14:41:09 +0300 Subject: [PATCH 075/155] Reanimated panel collapsed header and fixed paneldynamic header top padding --- .../blocks/sd-collapsed-element.scss | 80 +++++++++---------- .../src/default-theme/blocks/sd-question.scss | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) 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 79cce6c472..f3a08c3222 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,45 +1,45 @@ @use "../variables.scss" as *; -// .sd-element--expanded > div > div, -// .sd-element--collapsed > div > div { -// &>.sd-element__header { -// cursor: pointer; -// } -// } - -// .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); -// padding-bottom: var(--sjs2-spacing-x200); -// border-radius: var(--sjs2-radius-component-panel); -// } -// } - -// &>.sd-element__header:focus-within, -// &>.sd-element__header:hover { -// background-color: $background-dim-light; -// } - -// &.sd-element--nested { - -// &>.sd-element__header:hover, -// &>.sd-element__header:focus-within { -// box-shadow: 0 var(--sjs2-spacing-negative-x200) 0 0 $background-dim-light, 0 var(--sjs2-spacing-x200) 0 $background-dim-light; -// } -// } -// } +.sd-element--expanded > div > div, +.sd-element--collapsed > div > div { + &>.sd-element__header { + cursor: pointer; + } +} + +.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); + padding-bottom: var(--sjs2-spacing-x200); + border-radius: var(--sjs2-radius-component-panel); + } + } + + &>.sd-element__header:focus-within, + &>.sd-element__header:hover { + background-color: $background-dim-light; + } + + &.sd-element--nested { + + &>.sd-element__header:hover, + &>.sd-element__header:focus-within { + box-shadow: 0 var(--sjs2-spacing-negative-x200) 0 0 $background-dim-light, 0 var(--sjs2-spacing-x200) 0 $background-dim-light; + } + } +} .sd-element--expandable > div > div { &>.sd-element__header { 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 559cd0fcca..e7d507d884 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -30,7 +30,7 @@ } // TODO: Remove after new design system is implemented -.sd-element--with-frame.sd-question--title-top:not(.sd-question--paneldynamic) > .sd-question__container { +.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); } From 5b15435a4f15e1923df1c7b67cfc0915ef85e67a Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 15:11:47 +0300 Subject: [PATCH 076/155] New tokens: question layout - error paddings Fixes #11421 --- .../src/default-theme/blocks/sd-question.scss | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 e7d507d884..c7f0eb1fbe 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -35,7 +35,7 @@ padding-top: var(--sd-base-vertical-padding); } } -.sd-element--with-frame.sd-question--title-top:not(.sd-element--complex)>div>.sd-element__erbox--above-element { +.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)); } @@ -218,11 +218,19 @@ // left: 0; // } +.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; +} .sd-element--with-frame>div>.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; } +.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-element--with-frame>div>.sd-question__erbox--below-question { // margin-top: auto; border-radius: 0 0 var(--sjs2-radius-component-panel) var(--sjs2-radius-component-panel); From 898540116437003e96ba168185193a416fc6b2e3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 15:25:09 +0300 Subject: [PATCH 077/155] Fixed question error bottom gap --- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 c7f0eb1fbe..38957a62b2 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -42,9 +42,9 @@ } .sd-question--title-bottom > .sd-question__container { - &>.sd-question__header-and-content-container { - row-gap: calc(0.375 * var(--sd-base-vertical-padding)); - } +} +.sd-question--error-bottom:not(.sd-question--left) > .sd-question__container { + row-gap: var(--sjs2-spacing-x100); } // TODO: Remove as not working From 59507d36333ee6e77a4f4f8bfeea2a281c3276a7 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 15:27:20 +0300 Subject: [PATCH 078/155] Returned header padding --- .../survey-core/src/default-theme/blocks/sd-question.scss | 4 ++++ 1 file changed, 4 insertions(+) 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 38957a62b2..791081dcdf 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -42,7 +42,11 @@ } .sd-question--title-bottom > .sd-question__container { + &>.sd-question__header-and-content-container { + row-gap: calc(0.375 * var(--sd-base-vertical-padding)); + } } +// TODO: Remove after new design system is implemented .sd-question--error-bottom:not(.sd-question--left) > .sd-question__container { row-gap: var(--sjs2-spacing-x100); } From 585c9a6c620979c5b53377937d3f7e5414ad0d71 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 17:05:54 +0300 Subject: [PATCH 079/155] Fixed page error box top padding --- .../src/default-theme/blocks/sd-page.scss | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) 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 08759308fd..46155bcafe 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -86,21 +86,24 @@ padding: calc(0.5 * var(--sd-base-vertical-padding) + var(--sjs2-spacing-x100)) var(--sd-base-padding); } -.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); - } -} +// .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); +// } +// } .sd-root--compact { - .sd-page__title, - .sd-page__description { - &~.sd-page__errbox { - margin-bottom: 0; - } + // .sd-page__title, + // .sd-page__description { + // &~.sd-page__errbox { + // margin-bottom: 0; + // } + // } + .sd-page__errbox { + margin-top: var(--sjs2-spacing-negative-x100); } .sd-page { From 214e125029501936c9355cbf0af01bcc1487cb6e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 17:20:31 +0300 Subject: [PATCH 080/155] Temporary fix for matrixdynamic top action padding in mobile mode --- .../src/default-theme/blocks/sd-matrixdynamic.scss | 5 +++++ 1 file changed, 5 insertions(+) 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); } From 3125485fc36451a7c51843b39c7004816d810cfa Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 1 Jul 2026 17:55:56 +0300 Subject: [PATCH 081/155] Temporary fix error top padding --- packages/survey-core/src/default-theme/blocks/sd-question.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 791081dcdf..ac05c8fc58 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -47,7 +47,7 @@ } } // TODO: Remove after new design system is implemented -.sd-question--error-bottom:not(.sd-question--left) > .sd-question__container { +.sd-element--nested.sd-question--error-bottom:not(.sd-question--left) > .sd-question__container { row-gap: var(--sjs2-spacing-x100); } From 2ab96a7287887376e64b74bc102ce4e38f6c85b8 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 12:30:24 +0300 Subject: [PATCH 082/155] Fixed matrix scrolling --- .../src/default-theme/blocks/sd-complex-element.scss | 2 ++ .../src/default-theme/blocks/sd-question.scss | 2 ++ .../survey-core/src/default-theme/blocks/sd-table.scss | 9 +++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) 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 f4e05c1121..c6ead0b9f2 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 @@ -17,6 +17,8 @@ border: none; height: 1px; background-color: $border-light; + position: sticky; + left: calc(-1 * var(--sd-base-padding)); } .sd-element--complex > .sd-element__header { 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 ac05c8fc58..968682241e 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -87,6 +87,8 @@ // } .sd-question__header { + position: sticky; + left: 0; display: flex; flex-direction: column; // padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); 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 e167a0761e..5db7421b5b 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -403,12 +403,17 @@ .sd-question.sd-question--table { position: relative; - overflow-x: auto; + // overflow-x: auto; + &>.sd-question__container { + &>.sd-question__header-and-content-container { + overflow-x: auto; + } + } } .sd-question--table.sd-element--collapsed, .sd-question--table.sd-element--nested { - overflow-x: visible; + // overflow-x: visible; } .sd-table-wrapper { From f345e9bd978cb63f9878ce1ac08c7b91ed1d0b48 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 12:31:51 +0300 Subject: [PATCH 083/155] Added style --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 5 +++++ 1 file changed, 5 insertions(+) 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 5db7421b5b..28f27b8351 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -414,6 +414,11 @@ .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-table-wrapper { From 745337ce000534d4ac177e52f5326fbe0778d563 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 13:00:12 +0300 Subject: [PATCH 084/155] Fixed unnecessary sticky position --- .../survey-core/src/default-theme/blocks/sd-question.scss | 2 -- packages/survey-core/src/default-theme/blocks/sd-table.scss | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) 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 968682241e..ac05c8fc58 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -87,8 +87,6 @@ // } .sd-question__header { - position: sticky; - left: 0; display: flex; flex-direction: column; // padding-top: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); 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 28f27b8351..977574b5cc 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -406,6 +406,10 @@ // overflow-x: auto; &>.sd-question__container { &>.sd-question__header-and-content-container { + .sd-question__header { + position: sticky; + left: 0; + } overflow-x: auto; } } From 472f2958cf19c2a42ed6d593b95c36c70463534a Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 13:50:35 +0300 Subject: [PATCH 085/155] Fixed question paddings in single input mode --- .../src/default-theme/blocks/sd-question.scss | 11 +++++++++++ packages/survey-core/src/defaultCss/defaultCss.ts | 1 + packages/survey-core/src/question.ts | 1 + 3 files changed, 13 insertions(+) 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 ac05c8fc58..a5e894e98a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -77,6 +77,17 @@ } } +.sd-question--single-input { + &>.sd-question__container { + &>.sd-question__header-and-content-container { + padding: 0; + &>.sd-paneldynamic__header { + padding: 0; + } + } + } +} + // .sd-question--left { // display: flex; // flex-wrap: wrap; diff --git a/packages/survey-core/src/defaultCss/defaultCss.ts b/packages/survey-core/src/defaultCss/defaultCss.ts index bc87e4741f..34ccf10f91 100644 --- a/packages/survey-core/src/defaultCss/defaultCss.ts +++ b/packages/survey-core/src/defaultCss/defaultCss.ts @@ -189,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", diff --git a/packages/survey-core/src/question.ts b/packages/survey-core/src/question.ts index 202e7a078d..ad60c328a0 100644 --- a/packages/survey-core/src/question.ts +++ b/packages/survey-core/src/question.ts @@ -1519,6 +1519,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) From 47cc37751e2cbae17244fd8fe745077445a64779 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 14:12:34 +0300 Subject: [PATCH 086/155] Try to fix extra 1px diff in paneldynamic --- .../src/default-theme/blocks/sd-paneldynamic.scss | 6 ++++-- packages/survey-core/src/question_paneldynamic.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) 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 8b4998c40d..bd44e64d05 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -77,8 +77,10 @@ margin: 0; width: 100%; } -.sd-paneldynamic__header-tab ~ hr { - display: none; +.sd-paneldynamic__header-tab, .sd-paneldynamic__header-carousel { + & ~ hr { + display: none; + } } .sd-paneldynamic__footer { diff --git a/packages/survey-core/src/question_paneldynamic.ts b/packages/survey-core/src/question_paneldynamic.ts index e0029883b6..bddf2d06a9 100644 --- a/packages/survey-core/src/question_paneldynamic.ts +++ b/packages/survey-core/src/question_paneldynamic.ts @@ -2473,6 +2473,7 @@ export class QuestionPanelDynamicModel extends Question implements IDynamicItemM const showTab = this.isRenderModeTab && !!this.visiblePanelCount; return new CssClassBuilder() .append(super.getCssHeader(this.cssClasses)) + .append(this.cssClasses.root + "__header-" + this.displayMode) .append(this.cssClasses.headerTab, this.hasTitleOnTop && showTab) .toString(); } From 6a6c4a3629c353def3d192e1414477b6a8526372 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 14:15:13 +0300 Subject: [PATCH 087/155] Updated unit test --- packages/survey-core/tests/question_paneldynamic_tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/survey-core/tests/question_paneldynamic_tests.ts b/packages/survey-core/tests/question_paneldynamic_tests.ts index 623b7ab751..c6370589c8 100644 --- a/packages/survey-core/tests/question_paneldynamic_tests.ts +++ b/packages/survey-core/tests/question_paneldynamic_tests.ts @@ -5621,7 +5621,7 @@ describe("Survey_QuestionPanelDynamic", () => { }); setOldTheme(survey); const panel = survey.getQuestionByName("relatives"); - expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header"); + expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv_panel_dynamic__header-tab"); panel.addPanel(); expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv-paneldynamic__header-tab"); From be71d6741597a29d528b5fbbd3efa248101b4106 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 14:28:29 +0300 Subject: [PATCH 088/155] Fixed u-test --- .../src/default-theme/blocks/sd-paneldynamic.scss | 7 +++---- packages/survey-core/src/question_paneldynamic.ts | 2 +- packages/survey-core/tests/question_paneldynamic_tests.ts | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) 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 bd44e64d05..e177943d00 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -76,11 +76,10 @@ .sd-paneldynamic__header ~ hr { margin: 0; width: 100%; + display: none } -.sd-paneldynamic__header-tab, .sd-paneldynamic__header-carousel { - & ~ hr { - display: none; - } +.sd-paneldynamic__header-list ~ hr { + display: block; } .sd-paneldynamic__footer { diff --git a/packages/survey-core/src/question_paneldynamic.ts b/packages/survey-core/src/question_paneldynamic.ts index bddf2d06a9..d7705c1b5c 100644 --- a/packages/survey-core/src/question_paneldynamic.ts +++ b/packages/survey-core/src/question_paneldynamic.ts @@ -2473,7 +2473,7 @@ export class QuestionPanelDynamicModel extends Question implements IDynamicItemM const showTab = this.isRenderModeTab && !!this.visiblePanelCount; return new CssClassBuilder() .append(super.getCssHeader(this.cssClasses)) - .append(this.cssClasses.root + "__header-" + this.displayMode) + .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 c6370589c8..af4aeb025a 100644 --- a/packages/survey-core/tests/question_paneldynamic_tests.ts +++ b/packages/survey-core/tests/question_paneldynamic_tests.ts @@ -5621,16 +5621,16 @@ describe("Survey_QuestionPanelDynamic", () => { }); setOldTheme(survey); const panel = survey.getQuestionByName("relatives"); - expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header sv_panel_dynamic__header-tab"); + expect(panel.cssHeader).toBe("sv-paneldynamic__header sv_header"); panel.addPanel(); 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"; From 6d3f65cf6dd9993ddff37c6c4b5f069ff4fc6735 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 15:51:02 +0300 Subject: [PATCH 089/155] Paneldynamic layout fix --- .../src/default-theme/blocks/sd-paneldynamic.scss | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 e177943d00..16c63defd8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -76,10 +76,9 @@ .sd-paneldynamic__header ~ hr { margin: 0; width: 100%; - display: none } -.sd-paneldynamic__header-list ~ hr { - display: block; +.sd-paneldynamic__header-tab ~ hr { + display: none; } .sd-paneldynamic__footer { @@ -88,6 +87,10 @@ gap: var(--sjs2-layout-component-panel-footer-gap-vertical, var(--sjs2-spacing-x050)); position: relative; + .sd-progress { + top: -1px; + } + .sd-paneldynamic__progress-text, .sd-paneldynamic__progress--bottom { display: initial; From 29e620975d3cbb5c6e77d68037f1144d72e1e5a6 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 15:51:18 +0300 Subject: [PATCH 090/155] Ho header table top padding fix --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 977574b5cc..44fba1fb8c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,7 +74,7 @@ } .sd-table--no-header { - padding-top: var(--sjs2-spacing-x100); + padding-top: var(--sjs2-spacing-x300); } .sd-panel:not(.sd-panel--as-page) { From a86fc7b04d49f95e5570f46ed4f0992574036226 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 16:20:23 +0300 Subject: [PATCH 091/155] Fixed no title table top padding --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 6 ++++++ 1 file changed, 6 insertions(+) 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 44fba1fb8c..a2c4713928 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -493,6 +493,12 @@ 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 { From 02240ef6d95f4990e7cf1634a6bdea6d3e48dc3e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 16:28:07 +0300 Subject: [PATCH 092/155] Fix panel as page row gap in compact mode --- packages/survey-core/src/default-theme/blocks/sd-panel.scss | 3 +++ 1 file changed, 3 insertions(+) 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 badf946c34..3d7482bafd 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-panel.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-panel.scss @@ -119,6 +119,9 @@ & > .sd-panel__errbox { margin: 0 0 var(--sd-base-vertical-padding) 0; } + .sd-panel__content { + row-gap: var(--sd-base-vertical-padding); + } } } From 4ae5afa3401b73850917988315ca7734962b48b1 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 16:37:33 +0300 Subject: [PATCH 093/155] Fixed question title teft error top space --- .../src/default-theme/blocks/sd-question.scss | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 a5e894e98a..a39d0ed16d 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -53,11 +53,14 @@ // TODO: Remove as not working .sd-question--left { - .sd-question__header-and-content-container { - flex-direction: row; - flex-wrap: wrap; - column-gap: var(--sjs2-spacing-x300); + &>.sd-question__container { row-gap: var(--sjs2-spacing-x100); + &>.sd-question__header-and-content-container { + flex-direction: row; + flex-wrap: wrap; + column-gap: var(--sjs2-spacing-x300); + row-gap: var(--sjs2-spacing-x100); + } } } From 141dedae1847385879c589ad356c2c353c6b683d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 17:01:43 +0300 Subject: [PATCH 094/155] Fixed empty paneldynamic layout --- .../src/default-theme/blocks/sd-paneldynamic.scss | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 16c63defd8..e576507fd0 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -68,6 +68,20 @@ } } +.sd-question--paneldynamic.sd-question--empty { + &>.sd-question__container { + &>.sd-question__header-and-content-container { + padding-bottom: var(--sd-base-padding); + &>.sd-paneldynamic__header { + padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); + &~hr { + display: none; + } + } + } + } +} + .sd-paneldynamic__header { padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); From 97dd319ae9116545d41c835f1abadb44770b4c2b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 17:11:26 +0300 Subject: [PATCH 095/155] Fixed error box spacing for title location left --- .../survey-core/src/default-theme/blocks/sd-question.scss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 a39d0ed16d..93fe5891df 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -51,10 +51,8 @@ row-gap: var(--sjs2-spacing-x100); } -// TODO: Remove as not working .sd-question--left { &>.sd-question__container { - row-gap: var(--sjs2-spacing-x100); &>.sd-question__header-and-content-container { flex-direction: row; flex-wrap: wrap; @@ -72,6 +70,11 @@ .sd-question__header-and-content-container { padding: 0; } + .sd-question--left { + &>.sd-question__container { + row-gap: var(--sjs2-spacing-x100); + } + } } .sd-question:not(.sd-element--with-frame) > .sd-question__container { From a78a434d75ae13eec052ad9ffcb15c5847d7b742 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 17:31:01 +0300 Subject: [PATCH 096/155] Fixed complex element empty layout --- .../blocks/sd-complex-element.scss | 37 +++++++++++++------ .../default-theme/blocks/sd-paneldynamic.scss | 14 ------- 2 files changed, 25 insertions(+), 26 deletions(-) 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 c6ead0b9f2..0d5234b510 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 @@ -115,20 +115,33 @@ } .sd-question--empty.sd-question--complex { - & > .sd-question__content { - padding-top: 0; - padding-bottom: 0; - } + // & > .sd-question__content { + // padding-top: 0; + // padding-bottom: 0; + // } - & > .sd-question__content:first-of-type { - padding-top: var(--sd-base-padding); - } + // & > .sd-question__content:first-of-type { + // padding-top: var(--sd-base-padding); + // } - & > .sd-question__header--location-top { - padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); + // & > .sd-question__header--location-top { + // padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); - &:after { - display: none; - } + // &:after { + // display: none; + // } + // } + &>.sd-question__container { + row-gap: 0; + &>.sd-question__header-and-content-container { + row-gap: 0; + padding-bottom: var(--sd-base-padding); + &>.sd-question__header { + padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); + &~hr { + display: none; + } + } + } } } 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 e576507fd0..16c63defd8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -68,20 +68,6 @@ } } -.sd-question--paneldynamic.sd-question--empty { - &>.sd-question__container { - &>.sd-question__header-and-content-container { - padding-bottom: var(--sd-base-padding); - &>.sd-paneldynamic__header { - padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); - &~hr { - display: none; - } - } - } - } -} - .sd-paneldynamic__header { padding: var(--sjs2-layout-component-panel-header-padding-vertical, var(--sjs2-spacing-x400)) var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal)); gap: var(--sjs2-layout-component-panel-header-gap-vertical, var(--sjs2-spacing-x050)); From b9b0c05ff68fa5bdf5d6b93f444f58721b166a5e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 17:45:46 +0300 Subject: [PATCH 097/155] Try to fix readonly panel dynamic mode --- .../src/default-theme/blocks/sd-complex-element.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0d5234b510..4cd5619246 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 @@ -136,7 +136,7 @@ &>.sd-question__header-and-content-container { row-gap: 0; padding-bottom: var(--sd-base-padding); - &>.sd-question__header { + &>.sd-element__header { padding-bottom: calc(0.5 * var(--sd-base-vertical-padding)); &~hr { display: none; From 3984d239739e59dc2db8236671a03cedf7c1b9c2 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 17:56:11 +0300 Subject: [PATCH 098/155] One more x100 error spacing case --- .../src/default-theme/blocks/sd-question.scss | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 93fe5891df..d7e140720f 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -47,8 +47,13 @@ } } // TODO: Remove after new design system is implemented -.sd-element--nested.sd-question--error-bottom:not(.sd-question--left) > .sd-question__container { - row-gap: var(--sjs2-spacing-x100); +.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 { From b7ece41947a91f9b4a5d0d18f8bb9d5795453be9 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Thu, 2 Jul 2026 18:05:38 +0300 Subject: [PATCH 099/155] Try fix matrix many columns --- .../survey-core/src/default-theme/blocks/sd-question.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 d7e140720f..f1a266a540 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -72,8 +72,10 @@ } .sd-root--compact { - .sd-question__header-and-content-container { - padding: 0; + .sd-question:not(.sd-question--complex) > .sd-question__container { + &>.sd-question__header-and-content-container { + padding: 0; + } } .sd-question--left { &>.sd-question__container { From 87fd5484d2a0562ec01c7e57299321a373d2823d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 11:48:11 +0300 Subject: [PATCH 100/155] Fixed complex element title left layout --- .../blocks/sd-complex-element.scss | 22 +++++++++++++++++++ .../src/default-theme/blocks/sd-question.scss | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) 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 4cd5619246..266eb85f73 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 @@ -145,3 +145,25 @@ } } } + +// 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-question.scss b/packages/survey-core/src/default-theme/blocks/sd-question.scss index f1a266a540..4694a3fe3f 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -125,7 +125,7 @@ .sd-question__header--location--left { // padding-right: 0; // padding-bottom: var(--sjs2-layout-component-question-header-padding-top, var(--sd-base-vertical-padding)); - display: inline-block; + // display: inline-block; width: auto; vertical-align: top; margin-top: var(--sjs2-spacing-x150); From df5599ea0f3a7e3564f4888846f785cd2898e907 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 12:13:02 +0300 Subject: [PATCH 101/155] Try to fix specific nested matrix layout --- .../src/default-theme/blocks/sd-table.scss | 161 +++++++++++------- 1 file changed, 95 insertions(+), 66 deletions(-) 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 a2c4713928..c163ec2be7 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; @@ -83,72 +84,72 @@ 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--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); + // } } } @@ -425,6 +426,34 @@ } } +// 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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x300); + } + } + } + } + } +} +.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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x200); + } + } + } + } + } +} + .sd-table-wrapper { display: flex; margin: 0 calc(-1 * var(--sd-base-padding)); From 4172d64624feb65331883ba05fef98561777e144 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 12:47:02 +0300 Subject: [PATCH 102/155] Try to fix table "no header" top padding --- .../survey-core/src/default-theme/blocks/sd-table.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 c163ec2be7..b4d63f019c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -80,9 +80,9 @@ .sd-panel:not(.sd-panel--as-page) { & > .sd-panel__content { - .sd-table--no-header { - padding-top: 0; - } + // .sd-table--no-header { + // padding-top: 0; + // } // .sd-question--table { // .sd-question__content { @@ -728,7 +728,7 @@ } .sd-table--no-header { - padding-top: 0; + // padding-top: 0; .sd-table__responsive-title { display: none; } From 677792f249c418fefa542a0fffa01da52393c183 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 12:58:48 +0300 Subject: [PATCH 103/155] Returned mobile no header zero top padding --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b4d63f019c..97cd435ed8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -728,7 +728,7 @@ } .sd-table--no-header { - // padding-top: 0; + padding-top: 0; .sd-table__responsive-title { display: none; } From 91e78cd62ca784d0c93b2fb611049b35cee089bf Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 14:04:53 +0300 Subject: [PATCH 104/155] Try to fix matrixes --- .../src/default-theme/blocks/sd-table.scss | 85 +++++++++++-------- .../src/reactquestion_matrix.tsx | 2 +- 2 files changed, 52 insertions(+), 35 deletions(-) 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 97cd435ed8..3e060679a3 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -386,13 +386,27 @@ z-index: 12; &:first-of-type { - left: var(--sjs2-spacing-negative-x100); + // left: var(--sjs2-spacing-negative-x100); + padding-left: 0; + left: 0; } &:last-of-type { - right: var(--sjs2-spacing-negative-x100); + // right: var(--sjs2-spacing-negative-x100); + padding-right: 0; + right: 0; } } +.sd-table tr > th:first-of-type, +.sd-table tr > td:first-of-type { + padding-left: 0; + left: 0; +} +.sd-table__cell:last-of-type, +.sd-matrix__cell:last-of-type { + padding-right: 0; + right: 0; +} .sd-table__cell--actions:not(.sd-table__cell--vertical):last-child { .sd-action-bar { @@ -407,11 +421,14 @@ // overflow-x: auto; &>.sd-question__container { &>.sd-question__header-and-content-container { + overflow-x: auto; .sd-question__header { position: sticky; left: 0; + ~ hr { + left: 0; + } } - overflow-x: auto; } } } @@ -421,7 +438,7 @@ // overflow-x: visible; &>.sd-question__container { &>.sd-question__header-and-content-container { - overflow-x: visible; + overflow-x: auto; } } } @@ -456,43 +473,43 @@ .sd-table-wrapper { display: flex; - margin: 0 calc(-1 * var(--sd-base-padding)); + // margin: 0 calc(-1 * var(--sd-base-padding)); width: fit-content; - min-width: calc(100% + 2 * var(--sd-base-padding)); - - &:before, - &:after { - content: ""; - display: block; - position: sticky; - min-height: 100%; - width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); - flex-shrink: 0; - background: var(--sd-table-sticky-background-color); - z-index: 11; - } - - &::before { - left: calc(-1 * var(--sd-base-padding)); - } - - &:after { - right: calc(-1 * var(--sd-base-padding)); - } + // min-width: calc(100% + 2 * var(--sd-base-padding)); + + // &:before, + // &:after { + // content: ""; + // display: block; + // position: absolute; + // min-height: 100%; + // width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); + // flex-shrink: 0; + // background: var(--sd-table-sticky-background-color); + // z-index: 11; + // } + + // &::before { + // left: calc(-1 * var(--sd-base-padding)); + // } + + // &:after { + // right: calc(-1 * var(--sd-base-padding)); + // } & > * { flex-basis: 100%; } } -.sd-table-wrapper--left { - margin-left: var(--sjs2-spacing-negative-x300); - min-width: calc(100% + 1 * var(--sd-base-padding)); - &::before { - left: var(--sjs2-spacing-negative-x300); - width: var(--sjs2-size-x200); - } -} +// .sd-table-wrapper--left { +// margin-left: var(--sjs2-spacing-negative-x300); +// min-width: calc(100% + 1 * var(--sd-base-padding)); +// &::before { +// left: var(--sjs2-spacing-negative-x300); +// width: var(--sjs2-size-x200); +// } +// } .sd-question--table { & > .sd-question__header, diff --git a/packages/survey-react-ui/src/reactquestion_matrix.tsx b/packages/survey-react-ui/src/reactquestion_matrix.tsx index f80ada5a91..9da798e208 100644 --- a/packages/survey-react-ui/src/reactquestion_matrix.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrix.tsx @@ -34,7 +34,7 @@ export class SurveyQuestionMatrix extends SurveyQuestionElementBase { protected renderElement(): React.JSX.Element { var cssClasses = this.question.cssClasses; - var rowsTH = this.question.hasRows ? : null; + var rowsTH = this.question.hasRows ? : null; var headers: Array = []; for (var i = 0; i < this.question.visibleColumns.length; i++) { var column = this.question.visibleColumns[i]; From 7eb95682d8c696e54b594e0d64573bfa057ad492 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 16:11:57 +0300 Subject: [PATCH 105/155] Last cell right padding fix --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 3e060679a3..93b6ceccf4 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -402,8 +402,10 @@ padding-left: 0; left: 0; } -.sd-table__cell:last-of-type, -.sd-matrix__cell:last-of-type { +.sd-matrix tr > th:last-of-type, +.sd-matrix tr > td:last-of-type, +.sd-table tr > th:last-of-type, +.sd-table tr > td:last-of-type { padding-right: 0; right: 0; } From 84b3fb4c933d1f3ef7d56eb89b8ec2367f69eaa8 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 16:36:45 +0300 Subject: [PATCH 106/155] Revert "Last cell right padding fix" This reverts commit 7eb95682d8c696e54b594e0d64573bfa057ad492. --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 93b6ceccf4..3e060679a3 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -402,10 +402,8 @@ padding-left: 0; left: 0; } -.sd-matrix tr > th:last-of-type, -.sd-matrix tr > td:last-of-type, -.sd-table tr > th:last-of-type, -.sd-table tr > td:last-of-type { +.sd-table__cell:last-of-type, +.sd-matrix__cell:last-of-type { padding-right: 0; right: 0; } From c23b991377b16e68c3b12dd06b660e9390cc438a Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 16:37:24 +0300 Subject: [PATCH 107/155] Revert "Try to fix matrixes" This reverts commit 91e78cd62ca784d0c93b2fb611049b35cee089bf. --- .../src/default-theme/blocks/sd-table.scss | 85 ++++++++----------- .../src/reactquestion_matrix.tsx | 2 +- 2 files changed, 35 insertions(+), 52 deletions(-) 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 3e060679a3..97cd435ed8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -386,27 +386,13 @@ z-index: 12; &:first-of-type { - // left: var(--sjs2-spacing-negative-x100); - padding-left: 0; - left: 0; + left: var(--sjs2-spacing-negative-x100); } &:last-of-type { - // right: var(--sjs2-spacing-negative-x100); - padding-right: 0; - right: 0; + right: var(--sjs2-spacing-negative-x100); } } -.sd-table tr > th:first-of-type, -.sd-table tr > td:first-of-type { - padding-left: 0; - left: 0; -} -.sd-table__cell:last-of-type, -.sd-matrix__cell:last-of-type { - padding-right: 0; - right: 0; -} .sd-table__cell--actions:not(.sd-table__cell--vertical):last-child { .sd-action-bar { @@ -421,14 +407,11 @@ // overflow-x: auto; &>.sd-question__container { &>.sd-question__header-and-content-container { - overflow-x: auto; .sd-question__header { position: sticky; left: 0; - ~ hr { - left: 0; - } } + overflow-x: auto; } } } @@ -438,7 +421,7 @@ // overflow-x: visible; &>.sd-question__container { &>.sd-question__header-and-content-container { - overflow-x: auto; + overflow-x: visible; } } } @@ -473,43 +456,43 @@ .sd-table-wrapper { display: flex; - // margin: 0 calc(-1 * var(--sd-base-padding)); + margin: 0 calc(-1 * var(--sd-base-padding)); width: fit-content; - // min-width: calc(100% + 2 * var(--sd-base-padding)); - - // &:before, - // &:after { - // content: ""; - // display: block; - // position: absolute; - // min-height: 100%; - // width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); - // flex-shrink: 0; - // background: var(--sd-table-sticky-background-color); - // z-index: 11; - // } - - // &::before { - // left: calc(-1 * var(--sd-base-padding)); - // } - - // &:after { - // right: calc(-1 * var(--sd-base-padding)); - // } + min-width: calc(100% + 2 * var(--sd-base-padding)); + + &:before, + &:after { + content: ""; + display: block; + position: sticky; + min-height: 100%; + width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); + flex-shrink: 0; + background: var(--sd-table-sticky-background-color); + z-index: 11; + } + + &::before { + left: calc(-1 * var(--sd-base-padding)); + } + + &:after { + right: calc(-1 * var(--sd-base-padding)); + } & > * { flex-basis: 100%; } } -// .sd-table-wrapper--left { -// margin-left: var(--sjs2-spacing-negative-x300); -// min-width: calc(100% + 1 * var(--sd-base-padding)); -// &::before { -// left: var(--sjs2-spacing-negative-x300); -// width: var(--sjs2-size-x200); -// } -// } +.sd-table-wrapper--left { + margin-left: var(--sjs2-spacing-negative-x300); + min-width: calc(100% + 1 * var(--sd-base-padding)); + &::before { + left: var(--sjs2-spacing-negative-x300); + width: var(--sjs2-size-x200); + } +} .sd-question--table { & > .sd-question__header, diff --git a/packages/survey-react-ui/src/reactquestion_matrix.tsx b/packages/survey-react-ui/src/reactquestion_matrix.tsx index 9da798e208..f80ada5a91 100644 --- a/packages/survey-react-ui/src/reactquestion_matrix.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrix.tsx @@ -34,7 +34,7 @@ export class SurveyQuestionMatrix extends SurveyQuestionElementBase { protected renderElement(): React.JSX.Element { var cssClasses = this.question.cssClasses; - var rowsTH = this.question.hasRows ? : null; + var rowsTH = this.question.hasRows ? : null; var headers: Array = []; for (var i = 0; i < this.question.visibleColumns.length; i++) { var column = this.question.visibleColumns[i]; From 6dabbbded228f8f98d71fbf8254f2429fc404927 Mon Sep 17 00:00:00 2001 From: MarchTokenda <98102580+MarchTokenda@users.noreply.github.com> Date: Fri, 3 Jul 2026 16:53:30 +0300 Subject: [PATCH 108/155] Added additional conditions to removeExtraElements for improved markup cleanup (#11535) --- tests/markup/helper.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/markup/helper.ts b/tests/markup/helper.ts index 96e642ecbe..43e5c00122 100644 --- a/tests/markup/helper.ts +++ b/tests/markup/helper.ts @@ -274,9 +274,12 @@ 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, + (e: HTMLElement) => e.classList.contains("sd-question__header-and-content-container"), + (e: HTMLElement) => e.classList.contains("sd-question__content"), + (e: HTMLElement) => e.classList.contains("sd-clearfix") && e.classList.contains("sd-page__row") && e.classList.contains("sd-row"), ]; function clearExtraElements(innerHTML: string): string { From abfb3ee57262ae8dac37ce1c7f873ac62037bb21 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 16:54:09 +0300 Subject: [PATCH 109/155] Hide hr if necessary --- .../src/default-theme/blocks/sd-paneldynamic.scss | 9 +++++++++ packages/survey-core/src/question_paneldynamic.ts | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) 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 16c63defd8..173094eb08 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -80,6 +80,15 @@ .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; diff --git a/packages/survey-core/src/question_paneldynamic.ts b/packages/survey-core/src/question_paneldynamic.ts index 589822f8de..e256373c19 100644 --- a/packages/survey-core/src/question_paneldynamic.ts +++ b/packages/survey-core/src/question_paneldynamic.ts @@ -2477,7 +2477,8 @@ 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; From 91b6621e1c4393ea0966444fbc8c5b7dfe3e72f8 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 17:14:11 +0300 Subject: [PATCH 110/155] Fixed paneldynamic tabs header line --- .../src/default-theme/blocks/sd-paneldynamic.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 173094eb08..79db079d32 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -242,9 +242,6 @@ .sd-tabs-toolbar { margin-bottom: -1px; } -} -.sd-paneldynamic__tabs-container--with-header { - padding-top: var(--sjs2-spacing-x300); &:after { content: " "; display: block; @@ -257,6 +254,9 @@ margin: 0 calc(-1 * var(--sjs2-layout-component-panel-header-padding-horizontal, var(--sjs2-layout-component-panel-content-area-padding-horizontal))); } } +.sd-paneldynamic__tabs-container--with-header { + padding-top: var(--sjs2-spacing-x300); +} .sd-root-modern--mobile { .sd-paneldynamic__tabs-container--with-header { &:after { From f990d3bfdc6eb89f75aadeba83e8f4960bff130d Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 18:29:12 +0300 Subject: [PATCH 111/155] Try to fix large matrixes --- .../src/default-theme/blocks/sd-table.scss | 83 ++++++++++++------- 1 file changed, 51 insertions(+), 32 deletions(-) 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 97cd435ed8..e349a612a4 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -386,13 +386,20 @@ z-index: 12; &:first-of-type { - left: var(--sjs2-spacing-negative-x100); + // left: var(--sjs2-spacing-negative-x100); + left: 0; + padding-left: 0; } &:last-of-type { right: var(--sjs2-spacing-negative-x100); } } +.sd-table th:last-of-type, +.sd-table td:last-of-type { + // right: var(--sjs2-spacing-negative-x100); + padding-right: 0; +} .sd-table__cell--actions:not(.sd-table__cell--vertical):last-child { .sd-action-bar { @@ -410,21 +417,33 @@ .sd-question__header { position: sticky; left: 0; + ~ hr { + left: 0; + } } overflow-x: auto; } } } -.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--table.sd-element--nested { +// // overflow-x: visible; +// &>.sd-question__container { +// &>.sd-question__header-and-content-container { +// overflow-x: auto; +// } +// } +// } + +// .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; +// } +// } +// } // 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 { @@ -456,29 +475,29 @@ .sd-table-wrapper { display: flex; - margin: 0 calc(-1 * var(--sd-base-padding)); + // margin: 0 calc(-1 * var(--sd-base-padding)); width: fit-content; - min-width: calc(100% + 2 * var(--sd-base-padding)); - - &:before, - &:after { - content: ""; - display: block; - position: sticky; - min-height: 100%; - width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); - flex-shrink: 0; - background: var(--sd-table-sticky-background-color); - z-index: 11; - } - - &::before { - left: calc(-1 * var(--sd-base-padding)); - } - - &:after { - right: calc(-1 * var(--sd-base-padding)); - } + // min-width: calc(100% + 2 * var(--sd-base-padding)); + + // &:before, + // &:after { + // content: ""; + // display: block; + // position: sticky; + // min-height: 100%; + // width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); + // flex-shrink: 0; + // background: var(--sd-table-sticky-background-color); + // z-index: 11; + // } + + // &::before { + // left: calc(-1 * var(--sd-base-padding)); + // } + + // &:after { + // right: calc(-1 * var(--sd-base-padding)); + // } & > * { flex-basis: 100%; From 35ed7d3c5493387699f4b5a5d339465bbd91ca9e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 3 Jul 2026 18:49:36 +0300 Subject: [PATCH 112/155] Try to fix large matrixes header --- .../src/default-theme/blocks/sd-table.scss | 11 ++++++++--- packages/survey-react-ui/src/reactquestion_matrix.tsx | 2 +- .../src/reactquestion_matrixdropdownbase.tsx | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) 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 e349a612a4..ebb4a2571c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -391,9 +391,14 @@ padding-left: 0; } - &:last-of-type { - right: var(--sjs2-spacing-negative-x100); - } + // &:last-of-type { + // right: var(--sjs2-spacing-negative-x100); + // } +} +.sd-table th:first-of-type, +.sd-table td:first-of-type { + // right: var(--sjs2-spacing-negative-x100); + padding-left: 0; } .sd-table th:last-of-type, .sd-table td:last-of-type { diff --git a/packages/survey-react-ui/src/reactquestion_matrix.tsx b/packages/survey-react-ui/src/reactquestion_matrix.tsx index f80ada5a91..9da798e208 100644 --- a/packages/survey-react-ui/src/reactquestion_matrix.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrix.tsx @@ -34,7 +34,7 @@ export class SurveyQuestionMatrix extends SurveyQuestionElementBase { protected renderElement(): React.JSX.Element { var cssClasses = this.question.cssClasses; - var rowsTH = this.question.hasRows ? : null; + var rowsTH = this.question.hasRows ? : null; var headers: Array = []; for (var i = 0; i < this.question.visibleColumns.length; i++) { var column = this.question.visibleColumns[i]; diff --git a/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx b/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx index 7dc461cf22..56f0a9ade1 100644 --- a/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx @@ -57,7 +57,7 @@ class SurveyQuestionMatrixTable extends SurveyElementBase<{ question: QuestionMa const cellContent = this.renderCellContent(cell, "column-header", {}); const header = cell.hasTitle ? {cellContent} - : ; + : ; headers.push(header); } return ( From 983260842f0815c6c58d6e572cbf378e94799355 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 09:42:06 +0300 Subject: [PATCH 113/155] Try to move scroller-x to question content --- .../src/default-theme/blocks/sd-element.scss | 1 + .../src/default-theme/blocks/sd-table.scss | 32 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) 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 bcd9a1e097..d7aba0d4f6 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-element.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-element.scss @@ -194,6 +194,7 @@ .sd-element__content { box-sizing: border-box; + overflow-x: auto; } .sd-element__content--enter, 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 ebb4a2571c..81bbdac170 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -414,22 +414,22 @@ } } -.sd-question.sd-question--table { - position: relative; - // overflow-x: auto; - &>.sd-question__container { - &>.sd-question__header-and-content-container { - .sd-question__header { - position: sticky; - left: 0; - ~ hr { - left: 0; - } - } - overflow-x: auto; - } - } -} +// .sd-question.sd-question--table { +// position: relative; +// // overflow-x: auto; +// &>.sd-question__container { +// &>.sd-question__header-and-content-container { +// .sd-question__header { +// position: sticky; +// left: 0; +// ~ hr { +// left: 0; +// } +// } +// overflow-x: auto; +// } +// } +// } // .sd-question--table.sd-element--nested { // // overflow-x: visible; From 2421252a7854733d1dabb73d605c03091c697d1f Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 11:02:16 +0300 Subject: [PATCH 114/155] Revert "Try to move scroller-x to question content" This reverts commit 983260842f0815c6c58d6e572cbf378e94799355. --- .../src/default-theme/blocks/sd-element.scss | 1 - .../src/default-theme/blocks/sd-table.scss | 32 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) 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 d7aba0d4f6..bcd9a1e097 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-element.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-element.scss @@ -194,7 +194,6 @@ .sd-element__content { box-sizing: border-box; - overflow-x: auto; } .sd-element__content--enter, 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 81bbdac170..ebb4a2571c 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -414,22 +414,22 @@ } } -// .sd-question.sd-question--table { -// position: relative; -// // overflow-x: auto; -// &>.sd-question__container { -// &>.sd-question__header-and-content-container { -// .sd-question__header { -// position: sticky; -// left: 0; -// ~ hr { -// left: 0; -// } -// } -// overflow-x: auto; -// } -// } -// } +.sd-question.sd-question--table { + position: relative; + // overflow-x: auto; + &>.sd-question__container { + &>.sd-question__header-and-content-container { + .sd-question__header { + position: sticky; + left: 0; + ~ hr { + left: 0; + } + } + overflow-x: auto; + } + } +} // .sd-question--table.sd-element--nested { // // overflow-x: visible; From 56496df56f45c9ef3eb6b4d1e79c8cef4d93c4bc Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 11:02:43 +0300 Subject: [PATCH 115/155] Revert "Try to fix large matrixes header" This reverts commit 35ed7d3c5493387699f4b5a5d339465bbd91ca9e. --- .../src/default-theme/blocks/sd-table.scss | 11 +++-------- packages/survey-react-ui/src/reactquestion_matrix.tsx | 2 +- .../src/reactquestion_matrixdropdownbase.tsx | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) 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 ebb4a2571c..e349a612a4 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -391,14 +391,9 @@ padding-left: 0; } - // &:last-of-type { - // right: var(--sjs2-spacing-negative-x100); - // } -} -.sd-table th:first-of-type, -.sd-table td:first-of-type { - // right: var(--sjs2-spacing-negative-x100); - padding-left: 0; + &:last-of-type { + right: var(--sjs2-spacing-negative-x100); + } } .sd-table th:last-of-type, .sd-table td:last-of-type { diff --git a/packages/survey-react-ui/src/reactquestion_matrix.tsx b/packages/survey-react-ui/src/reactquestion_matrix.tsx index 9da798e208..f80ada5a91 100644 --- a/packages/survey-react-ui/src/reactquestion_matrix.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrix.tsx @@ -34,7 +34,7 @@ export class SurveyQuestionMatrix extends SurveyQuestionElementBase { protected renderElement(): React.JSX.Element { var cssClasses = this.question.cssClasses; - var rowsTH = this.question.hasRows ? : null; + var rowsTH = this.question.hasRows ? : null; var headers: Array = []; for (var i = 0; i < this.question.visibleColumns.length; i++) { var column = this.question.visibleColumns[i]; diff --git a/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx b/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx index 56f0a9ade1..7dc461cf22 100644 --- a/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx +++ b/packages/survey-react-ui/src/reactquestion_matrixdropdownbase.tsx @@ -57,7 +57,7 @@ class SurveyQuestionMatrixTable extends SurveyElementBase<{ question: QuestionMa const cellContent = this.renderCellContent(cell, "column-header", {}); const header = cell.hasTitle ? {cellContent} - : ; + : ; headers.push(header); } return ( From 7a274d17826db850c1443363071830e97700e0e8 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 11:03:50 +0300 Subject: [PATCH 116/155] Revert "Try to fix large matrixes" This reverts commit f990d3bfdc6eb89f75aadeba83e8f4960bff130d. --- .../src/default-theme/blocks/sd-table.scss | 83 +++++++------------ 1 file changed, 32 insertions(+), 51 deletions(-) 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 e349a612a4..97cd435ed8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -386,20 +386,13 @@ z-index: 12; &:first-of-type { - // left: var(--sjs2-spacing-negative-x100); - left: 0; - padding-left: 0; + left: var(--sjs2-spacing-negative-x100); } &:last-of-type { right: var(--sjs2-spacing-negative-x100); } } -.sd-table th:last-of-type, -.sd-table td:last-of-type { - // right: var(--sjs2-spacing-negative-x100); - padding-right: 0; -} .sd-table__cell--actions:not(.sd-table__cell--vertical):last-child { .sd-action-bar { @@ -417,33 +410,21 @@ .sd-question__header { position: sticky; left: 0; - ~ hr { - left: 0; - } } overflow-x: auto; } } } -// .sd-question--table.sd-element--nested { -// // overflow-x: visible; -// &>.sd-question__container { -// &>.sd-question__header-and-content-container { -// overflow-x: auto; -// } -// } -// } - -// .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--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; + } + } +} // 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 { @@ -475,29 +456,29 @@ .sd-table-wrapper { display: flex; - // margin: 0 calc(-1 * var(--sd-base-padding)); + margin: 0 calc(-1 * var(--sd-base-padding)); width: fit-content; - // min-width: calc(100% + 2 * var(--sd-base-padding)); - - // &:before, - // &:after { - // content: ""; - // display: block; - // position: sticky; - // min-height: 100%; - // width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); - // flex-shrink: 0; - // background: var(--sd-table-sticky-background-color); - // z-index: 11; - // } - - // &::before { - // left: calc(-1 * var(--sd-base-padding)); - // } - - // &:after { - // right: calc(-1 * var(--sd-base-padding)); - // } + min-width: calc(100% + 2 * var(--sd-base-padding)); + + &:before, + &:after { + content: ""; + display: block; + position: sticky; + min-height: 100%; + width: calc(var(--sd-base-padding) - var(--sjs2-spacing-x100)); + flex-shrink: 0; + background: var(--sd-table-sticky-background-color); + z-index: 11; + } + + &::before { + left: calc(-1 * var(--sd-base-padding)); + } + + &:after { + right: calc(-1 * var(--sd-base-padding)); + } & > * { flex-basis: 100%; From 2342edba24a0d89b461230242653fbb5668d99dc Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 11:37:06 +0300 Subject: [PATCH 117/155] Try to fix nested tables overflow --- .../survey-core/src/default-theme/blocks/sd-table.scss | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 97cd435ed8..eb8328ba2f 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -407,11 +407,11 @@ // overflow-x: auto; &>.sd-question__container { &>.sd-question__header-and-content-container { + overflow-x: auto; .sd-question__header { position: sticky; left: 0; } - overflow-x: auto; } } } @@ -422,6 +422,12 @@ &>.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; + } } } } From f78896ffb64fc52903d7549028f7f66bc17b274e Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 11:48:59 +0300 Subject: [PATCH 118/155] Fixed page error top padding --- .../survey-core/src/default-theme/blocks/sd-page.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 46155bcafe..94618c5199 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-page.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-page.scss @@ -102,8 +102,12 @@ // margin-bottom: 0; // } // } - .sd-page__errbox { - margin-top: var(--sjs2-spacing-negative-x100); + + // 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); + } } .sd-page { From ff4a9f1deb8d8fbc5b9f4d2f815596fc1f0bf883 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 12:03:25 +0300 Subject: [PATCH 119/155] Updated etalons --- ...on-matrix-alternate-rows-invalid-value.png | Bin 17954 -> 17942 bytes .../question-scrollable-with-error.png | Bin 15312 -> 15295 bytes ...ected-label-should-have-the-same-width.png | Bin 5320 -> 5829 bytes 3 files changed, 0 insertions(+), 0 deletions(-) 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 79cf7cec9934fa442edd3d435bb808bc578d4662..3bb1ddcff45f7bc29ebe1dcc965dc0b33ea764c3 100644 GIT binary patch literal 17942 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 TFIpf=P-LYQr79#o{_(#6+5^^I literal 17954 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ŭ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%0Ddl<7hD6!C&p$ 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 Pf}y0K_M%4a-N*j}vor78 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 5c1241ca6eb8f3d46ac5c6fc7636c3a905530806..8c6ee202f5ce6cc92eb5d9b85384dc543b156c60 100644 GIT binary patch literal 15295 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 literal 5320 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 CNSn+6 From 7fd749174432e914b4b475f02fc42c44ba71734f Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 12:13:58 +0300 Subject: [PATCH 120/155] Fixed question with indent --- .../survey-core/src/default-theme/blocks/sd-element.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 bcd9a1e097..6104ae8a6a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-element.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-element.scss @@ -2,10 +2,10 @@ @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 { +// padding-left: var(--sv-element-add-padding-left, 0px); +// padding-right: var(--sv-element-add-padding-right, 0px); +// } .sd-element__title { outline: none; From 55011f949663559fdd63f7255b6c2740d1d48f2c Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 12:33:49 +0300 Subject: [PATCH 121/155] Fixed composite question paddings --- packages/survey-core/src/default-theme/blocks/sd-question.scss | 3 +++ 1 file changed, 3 insertions(+) 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 4694a3fe3f..182ed0859a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -16,6 +16,9 @@ .sd-element--with-frame > .sd-question__container { gap: 0; } +.sd-composite > .sd-question__container > .sd-question__header-and-content-container { + padding: 0; +} .sd-question__header-and-content-container { display: flex; From a2bac3a7206781e3b766ed61b86e75a0d89b8264 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 14:03:39 +0300 Subject: [PATCH 122/155] Fixed composite question paddings --- .../src/default-theme/blocks/sd-question.scss | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 182ed0859a..e7225cdb6a 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-question.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-question.scss @@ -16,8 +16,24 @@ .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: var(--sjs2-layout-component-question-header-padding-left, calc(var(--sd-base-padding) + var(--sv-element-add-padding-left, 0px))); + padding-right: var(--sjs2-layout-component-question-header-padding-right, calc(var(--sd-base-padding) + 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-question__header-and-content-container { From c721c68fb07bdfb3ea13a1a7648e5be1bebb41bd Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 14:24:24 +0300 Subject: [PATCH 123/155] Fixed no-header table top padding --- .../src/default-theme/blocks/sd-table.scss | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) 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 eb8328ba2f..0511e39fa3 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,8 +74,38 @@ } } -.sd-table--no-header { - padding-top: var(--sjs2-spacing-x300); +.sd-question__header ~ .sd-question__content { + .sd-table--no-header { + padding-top: var(--sjs2-spacing-x300); + } +} + +// 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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x300); + } + } + } + } + } +} +.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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x200); + } + } + } + } + } } .sd-panel:not(.sd-panel--as-page) { @@ -432,34 +462,6 @@ } } -// 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-child { - .sd-table-wrapper .sd-table:not(.sd-table--no-header) { - margin-top: var(--sjs2-spacing-negative-x300); - } - } - } - } - } -} -.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-child { - .sd-table-wrapper .sd-table:not(.sd-table--no-header) { - margin-top: var(--sjs2-spacing-negative-x200); - } - } - } - } - } -} - .sd-table-wrapper { display: flex; margin: 0 calc(-1 * var(--sd-base-padding)); From c8ed4ccb749ff8b11171c331cd43e06966b3c9b4 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 14:36:37 +0300 Subject: [PATCH 124/155] Revert "Fixed no-header table top padding" This reverts commit c721c68fb07bdfb3ea13a1a7648e5be1bebb41bd. --- .../src/default-theme/blocks/sd-table.scss | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) 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 0511e39fa3..eb8328ba2f 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -74,38 +74,8 @@ } } -.sd-question__header ~ .sd-question__content { - .sd-table--no-header { - padding-top: var(--sjs2-spacing-x300); - } -} - -// 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-child { - .sd-table-wrapper .sd-table:not(.sd-table--no-header) { - margin-top: var(--sjs2-spacing-negative-x300); - } - } - } - } - } -} -.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-child { - .sd-table-wrapper .sd-table:not(.sd-table--no-header) { - margin-top: var(--sjs2-spacing-negative-x200); - } - } - } - } - } +.sd-table--no-header { + padding-top: var(--sjs2-spacing-x300); } .sd-panel:not(.sd-panel--as-page) { @@ -462,6 +432,34 @@ } } +// 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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x300); + } + } + } + } + } +} +.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-child { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { + margin-top: var(--sjs2-spacing-negative-x200); + } + } + } + } + } +} + .sd-table-wrapper { display: flex; margin: 0 calc(-1 * var(--sd-base-padding)); From e26b21f4b89b12809e072048b9ea129e334c655b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 14:55:31 +0300 Subject: [PATCH 125/155] Fixed screenshot test --- packages/survey-core/src/default-theme/blocks/sd-table.scss | 3 +++ 1 file changed, 3 insertions(+) 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 eb8328ba2f..0ed3c2e2ce 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -540,6 +540,9 @@ .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); + } } .sd-question--scroll { From 366f34a5b1cddb41cd1c974eba79f1869cb68cc3 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 16:13:01 +0300 Subject: [PATCH 126/155] Try to fix table question spacings --- .../src/default-theme/blocks/sd-table.scss | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) 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 0ed3c2e2ce..17b143edaf 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -77,7 +77,6 @@ .sd-table--no-header { padding-top: var(--sjs2-spacing-x300); } - .sd-panel:not(.sd-panel--as-page) { & > .sd-panel__content { // .sd-table--no-header { @@ -439,7 +438,7 @@ &>.sd-question__header-and-content-container { &>.sd-question__content:first-child { .sd-table-wrapper .sd-table:not(.sd-table--no-header) { - margin-top: var(--sjs2-spacing-negative-x300); + margin-top: var(--sjs2-spacing-negative-x200); } } } @@ -860,3 +859,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) { + } + } + } + } + } + } +} From 956759049536aae77e7a5301b4e9d64aa9fd7dad Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 16:32:47 +0300 Subject: [PATCH 127/155] Fixed nested table paddings and changed 2 etalons --- .../src/default-theme/blocks/sd-table.scss | 16 ++++++++-------- ...-matrix-multi-select-in-panel-no-title.png | Bin 15132 -> 15178 bytes ...matrix-single-select-in-panel-no-title.png | Bin 15922 -> 15977 bytes 3 files changed, 8 insertions(+), 8 deletions(-) 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 17b143edaf..f0fe9b1bbe 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-table.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-table.scss @@ -867,14 +867,14 @@ &>.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.sd-table--no-header { } - .sd-table-wrapper > .sd-table:not(.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.sd-table--no-header { } - .sd-table-wrapper > .sd-table:not(.sd-table--no-header) { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { } } } @@ -887,15 +887,15 @@ &>.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.sd-table--no-header { } - .sd-table-wrapper > .sd-table:not(.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.sd-table--no-header { padding-top: 0; } - .sd-table-wrapper > .sd-table:not(.sd-table--no-header) { + .sd-table-wrapper .sd-table:not(.sd-table--no-header) { } } } 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 170b1ac88f6e4649ab1206f279a840d69f3f8a80..a8bec1723ecc0ad4a5ac10db4bd8ccbf5ead7d1a 100644 GIT binary patch delta 131 zcmbPJcB*WGI9DeJ69WUoQ{VG?8x`HSCI>L-ZBFN!!paj_p4`H~Ai&`1;utddH^1Iy zQ-MqTJgo^8L2yxa1-;FV3P92PxWj1-3|zOtYK0B-Hv1Z^yUg8+l4i(|;LdGlQ_(lUb_- S_3i^j7(8A5T-G@yGywpVfhINp 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 9342ede2a329ef6a7459c139b6eeb8ceea5528ed..30c3723c0506f3c0781ce11ffacae75ef4641112 100644 GIT binary patch literal 15977 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 R1-@apeBs(}dFL&I{vTFlYpnnP literal 15922 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 Bb07c! From 4739c73a060b1863e14f1da187c3ee8b585021b1 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 16:40:08 +0300 Subject: [PATCH 128/155] Fixed paneldynamic footer paddings in mobile mode --- .../survey-core/src/default-theme/blocks/sd-paneldynamic.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 79db079d32..321d1262d8 100644 --- a/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss +++ b/packages/survey-core/src/default-theme/blocks/sd-paneldynamic.scss @@ -114,7 +114,7 @@ padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x100)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x300)); } .sd-paneldynamic__panel-footer { - padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x200)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x200)); + padding: var(--sjs2-layout-component-panel-footer-padding-vertical, var(--sjs2-spacing-x200)) var(--sjs2-layout-component-panel-footer-padding-horizontal, var(--sjs2-spacing-x300)); // margin-right: calc(1.5 * var(--sjs2-spacing-negative-x050)); margin-top: calc(var(--sjs2-spacing-negative-x400)); } From b7ed5d49008e654cf286af02e17e16878e952f9b Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 16:54:19 +0300 Subject: [PATCH 129/155] Updated etalons --- .../preview-matrix-single.png | Bin 4680 -> 4598 bytes .../readonly-matrix-single.png | Bin 6232 -> 5926 bytes 2 files changed, 0 insertions(+), 0 deletions(-) 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 be35e44fc82dc9cd62297979876a92b2da9b1843..7de2dc0be60be6a79cddb05f82638b2bbcffed21 100644 GIT binary patch delta 86 zcmX@1@=bYyIM)UaCI%p2JCZq3@%iQ`#`AoWZ*fUa4iGTsS)JFuhJk@`zNd?0$mVu| k`HV_CFZ3IL6oW*V8Rolf?w)kzj4epNr>mdKI;Vst0Lo9}lC(y&MJx#*dyZjvFVdQ&MBb@0J;AhApigX 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 efe3f2528a85274729bc9cd58a93ea9acc9c9201..2723802989157c1f1df9f761b2769e748604f3ad 100644 GIT binary patch literal 5926 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 literal 6232 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 dKb&vHjmigTly>o10KW=ArbbqV Date: Mon, 6 Jul 2026 17:22:37 +0300 Subject: [PATCH 130/155] Try to fix hovered collapsed nested header style --- .../default-theme/blocks/sd-collapsed-element.scss | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 f3a08c3222..2c883a3f59 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 @@ -39,6 +39,19 @@ 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-x500) var(--sjs2-spacing-negative-x200) 0 0 var(--sjs2-color-bg-basic-secondary), + // var(--sjs2-spacing-x500) var(--sjs2-spacing-negative-x200) 0 0 var(--sjs2-color-bg-basic-secondary), + // var(--sjs2-spacing-x500) var(--sjs2-spacing-x200) 0 var(--sjs2-color-bg-basic-secondary), + // var(--sjs2-spacing-negative-x500) var(--sjs2-spacing-x200) 0 var(--sjs2-color-bg-basic-secondary); + 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 { From 51fe19acbcb9cc059cda557ee372a88d4a905018 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Mon, 6 Jul 2026 18:31:07 +0300 Subject: [PATCH 131/155] New tokens: pick changes from react to other frameworks Fixes #11421 --- .../survey-angular-ui/src/page.component.html | 22 +-- .../src/panel.component.html | 2 +- .../survey-angular-ui/src/panel.component.ts | 11 +- .../src/question.component.html | 55 ++++--- .../src/questions/paneldynamic.component.html | 2 +- packages/survey-vue3-ui/src/Page.vue | 28 ++-- packages/survey-vue3-ui/src/Panel.vue | 22 +-- .../src/PanelDynamicProgress.vue | 8 +- packages/survey-vue3-ui/src/Question.vue | 147 +++++++++--------- 9 files changed, 159 insertions(+), 138 deletions(-) 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 e85a629ed6..5e4a619112 100644 --- a/packages/survey-angular-ui/src/panel.component.html +++ b/packages/survey-angular-ui/src/panel.component.html @@ -10,7 +10,7 @@ -
+
\ 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 ee7fdd6c2d..b22be90a67 100644 --- a/packages/survey-angular-ui/src/panel.component.ts +++ b/packages/survey-angular-ui/src/panel.component.ts @@ -9,7 +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(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; + private readonly panelPaddingHorizontal = "var(--sd-base-padding, var(--sjs2-spacing-x500))"; protected getModel(): PanelModel { return this.model; } @@ -26,12 +26,9 @@ export class PanelComponent extends BaseAngular implements AfterView } public get panelContentStyle(): Record { const hasInnerPadding = !!this.model?.innerPaddingLeft; - return { - "padding-inline-start": hasInnerPadding - ? `calc(${this.panelPaddingHorizontal} + ${this.model.innerPaddingLeft})` - : this.panelPaddingHorizontal, - "padding-inline-end": this.panelPaddingHorizontal, - }; + 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/paneldynamic.component.html b/packages/survey-angular-ui/src/questions/paneldynamic.component.html index 5eedd5a77e..27cfadfc0f 100644 --- a/packages/survey-angular-ui/src/questions/paneldynamic.component.html +++ b/packages/survey-angular-ui/src/questions/paneldynamic.component.html @@ -24,7 +24,7 @@ -
+

- -
- +
+ +
+ +
- - +
diff --git a/packages/survey-vue3-ui/src/Panel.vue b/packages/survey-vue3-ui/src/Panel.vue index de13cf5e9c..cf5cc419da 100644 --- a/packages/survey-vue3-ui/src/Panel.vue +++ b/packages/survey-vue3-ui/src/Panel.vue @@ -47,11 +47,12 @@ -
+
@@ -75,15 +76,14 @@ const props = defineProps<{ }>(); const root = ref(null as any); const survey = computed(() => props.element.survey); -const panelPaddingHorizontal = "var(--sjs2-layout-component-panel-content-area-padding-horizontal, var(--sjs2-spacing-x500))"; +const panelPaddingHorizontal = "var(--sd-base-padding, var(--sjs2-spacing-x500))"; const panelContentStyle = computed(() => { const innerPaddingLeft = props.element.innerPaddingLeft; - return { - paddingInlineStart: innerPaddingLeft - ? `calc(${panelPaddingHorizontal} + ${innerPaddingLeft})` - : panelPaddingHorizontal, - paddingInlineEnd: panelPaddingHorizontal, - }; + 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 @@ From 3f99f41e6b0691a96568ec41064333de1ef2e42a Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Tue, 7 Jul 2026 11:53:12 +0300 Subject: [PATCH 132/155] Updated markup snapshots --- tests/markup/helper.ts | 3 - .../boolean-checkbox-custom-icon.snap.html | 36 +- ...lean-checkbox-defaultV2-required.snap.html | 32 +- .../boolean-checkbox-defaultV2.snap.html | 36 +- .../boolean-checkbox-disabled.snap.html | 28 +- ...lean-checkbox-readonly-defaultV2.snap.html | 36 +- .../snapshots/boolean-checkbox.snap.html | 28 +- .../snapshots/boolean-disabled.snap.html | 38 +- .../boolean-radio-disabled.snap.html | 64 ++- .../boolean-radio-readonly.snap.html | 64 ++- .../snapshots/boolean-radio-v2.snap.html | 64 ++- .../snapshots/boolean-radio-values.snap.html | 64 ++- .../markup/snapshots/boolean-radio.snap.html | 64 ++- .../snapshots/boolean-readonly.snap.html | 38 +- ...lean-switch-value-false-readonly.snap.html | 22 +- .../boolean-switch-value-false.snap.html | 22 +- ...olean-switch-value-true-readonly.snap.html | 22 +- .../boolean-switch-value-true.snap.html | 22 +- tests/markup/snapshots/boolean-v2.snap.html | 38 +- .../snapshots/boolean-value-v2.snap.html | 44 +- tests/markup/snapshots/boolean.snap.html | 38 +- .../button-group-as-dropdown.snap.html | 96 ++-- .../checkbox-columns-head-foot.snap.html | 114 ++-- .../checkbox-columns-mobile.snap.html | 92 +-- .../checkbox-columns-no-head-foot.snap.html | 158 +++--- .../snapshots/checkbox-columns.snap.html | 74 +-- .../snapshots/checkbox-comment-V2.snap.html | 62 +- .../snapshots/checkbox-disabled.snap.html | 92 +-- .../snapshots/checkbox-modern.snap.html | 64 ++- .../checkbox-multiple-comments.snap.html | 136 ++--- .../snapshots/checkbox-other-V2.snap.html | 86 +-- .../checkbox-other-maxlength.snap.html | 58 +- .../markup/snapshots/checkbox-other.snap.html | 142 ++--- .../checkbox-readonly-selected.snap.html | 92 +-- .../snapshots/checkbox-readonly.snap.html | 92 +-- .../checkbox-row-head-foot.snap.html | 152 ++--- .../checkbox-row-no-head-foot.snap.html | 148 ++--- tests/markup/snapshots/checkbox-v2.snap.html | 64 ++- tests/markup/snapshots/checkbox.snap.html | 92 +-- .../snapshots/comment-allowResize.snap.html | 10 +- .../snapshots/comment-disabled.snap.html | 20 +- tests/markup/snapshots/comment-div.snap.html | 6 +- ...omment-into-question-allowResize.snap.html | 130 ++--- ...nt-into-question-commentAreaRows.snap.html | 166 +++--- .../snapshots/comment-readonly.snap.html | 20 +- tests/markup/snapshots/comment.snap.html | 20 +- .../dropdown-aria-expanded.snap.html | 96 ++-- .../dropdown-disabled-with-value.snap.html | 60 +- .../dropdown-disabled-without-value.snap.html | 40 +- .../dropdown-input-focused.snap.html | 62 +- .../snapshots/dropdown-input-string.snap.html | 108 ++-- .../markup/snapshots/dropdown-other.snap.html | 64 ++- .../dropdown-readonly-with-value.snap.html | 36 +- .../snapshots/dropdown-readonly.snap.html | 36 +- ...enderAs-select-readonly-selected.snap.html | 30 +- ...ropdown-renderAs-select-readonly.snap.html | 30 +- .../dropdown-select-clear-button.snap.html | 84 +-- .../dropdown-select-mobile.snap.html | 98 ++-- .../snapshots/dropdown-select.snap.html | 62 +- .../markup/snapshots/dropdown-show.snap.html | 38 +- .../dropdown-with-markdown.snap.html | 84 +-- .../dropdown-with-none-value.snap.html | 84 +-- .../dropdown-with-other-value.snap.html | 106 ++-- ...dropdown-without-textWrapEnabled.snap.html | 108 ++-- tests/markup/snapshots/dropdown.snap.html | 40 +- tests/markup/snapshots/expression.snap.html | 6 +- tests/markup/snapshots/file-2-png.snap.html | 88 +-- .../file-2-zip-png-file-navigator.snap.html | 144 ++--- .../snapshots/file-2-zip-png-ro.snap.html | 96 ++-- .../markup/snapshots/file-2-zip-png.snap.html | 130 ++--- tests/markup/snapshots/file-2-zip.snap.html | 102 ++-- tests/markup/snapshots/file-2.snap.html | 42 +- tests/markup/snapshots/file-camera.snap.html | 42 +- .../snapshots/file-image-size.snap.html | 88 +-- .../markup/snapshots/file-mob2-png.snap.html | 88 +-- .../snapshots/file-mob2-zip-png-ro.snap.html | 122 ++-- .../snapshots/file-mob2-zip-png.snap.html | 144 ++--- .../markup/snapshots/file-mob2-zip.snap.html | 102 ++-- tests/markup/snapshots/file-mob2.snap.html | 42 +- .../markup/snapshots/file-mode-both.snap.html | 66 ++- .../snapshots/file-mode-camera.snap.html | 40 +- .../snapshots/file-playing-video.snap.html | 72 +-- .../file-single-zip-disabled.snap.html | 102 ++-- .../markup/snapshots/file-uploading.snap.html | 22 +- tests/markup/snapshots/image-empty.snap.html | 18 +- .../image-not-load-content.snap.html | 18 +- tests/markup/snapshots/image-video.snap.html | 10 +- .../markup/snapshots/image-youtube.snap.html | 10 +- tests/markup/snapshots/image.snap.html | 8 +- .../imagepicker-colCount-1-v2.snap.html | 68 +-- .../imagepicker-colCount-2-v2.snap.html | 76 +-- .../snapshots/imagepicker-disabled.snap.html | 80 +-- .../snapshots/imagepicker-labels.snap.html | 80 +-- .../snapshots/imagepicker-multi.snap.html | 68 +-- .../imagepicker-no-image-v2.snap.html | 84 +-- .../snapshots/imagepicker-no-image.snap.html | 84 +-- .../snapshots/imagepicker-readonly.snap.html | 80 +-- .../snapshots/imagepicker-video.snap.html | 84 +-- tests/markup/snapshots/imagepicker.snap.html | 68 +-- .../layout-page-swnl-title-v2.snap.html | 60 +- .../snapshots/layout-page-swnl-v2.snap.html | 28 +- .../layout-panel-page-swnl-title-v2.snap.html | 64 ++- .../layout-panel-page-swnl-v2.snap.html | 36 +- .../martix-celltype-text-a11y.snap.html | 128 +++-- .../matrix-celltype-checkbox.snap.html | 172 +++--- tests/markup/snapshots/matrix-empty.snap.html | 40 +- .../snapshots/matrix-mobile-v2.snap.html | 172 +++--- .../markup/snapshots/matrix-modern.snap.html | 152 ++--- .../snapshots/matrix-v2-disabled.snap.html | 152 ++--- .../snapshots/matrix-v2-readonly.snap.html | 152 ++--- tests/markup/snapshots/matrix-v2.snap.html | 152 ++--- .../markup/snapshots/matrix-widths.snap.html | 152 ++--- ...atrixdropdown-cell-errors-bottom.snap.html | 90 +-- .../matrixdropdown-cell-errors-top.snap.html | 90 +-- .../matrixdropdown-disabled.snap.html | 114 ++-- ...xdropdown-hidden-question-mobile.snap.html | 130 ++--- .../matrixdropdown-readonly.snap.html | 114 ++-- .../matrixdropdown-vertical.snap.html | 114 ++-- .../markup/snapshots/matrixdropdown.snap.html | 114 ++-- .../matrixdynamic-add-row-icon.snap.html | 150 ++--- .../snapshots/matrixdynamic-default.snap.html | 532 +++++++++--------- .../matrixdynamic-defaultV2.snap.html | 532 +++++++++--------- .../snapshots/matrixdynamic-detail.snap.html | 230 ++++---- ...-show-in-multiple-columns-mobile.snap.html | 190 ++++--- ...dynamic-show-in-multiple-columns.snap.html | 144 ++--- .../snapshots/matrixdynamic-totals.snap.html | 270 ++++----- .../snapshots/multipletext-disabled.snap.html | 116 ++-- .../multipletext-error-bottom-v2.snap.html | 68 +-- .../multipletext-error-top-v2.snap.html | 68 +-- .../snapshots/multipletext-readonly.snap.html | 116 ++-- tests/markup/snapshots/multipletext.snap.html | 116 ++-- .../page-questionTitleWidth.snap.html | 30 +- .../snapshots/page-swnl-title-v2.snap.html | 60 +- tests/markup/snapshots/page-swnl-v2.snap.html | 28 +- .../markup/snapshots/page-title-v2.snap.html | 30 +- .../panel-page-swnl-title-v2.snap.html | 64 ++- .../snapshots/panel-page-swnl-v2.snap.html | 36 +- .../panel-question-headers.snap.html | 54 +- .../snapshots/panel-required-header.snap.html | 36 +- .../markup/snapshots/panel-swnl-v2.snap.html | 8 +- tests/markup/snapshots/panel-text.snap.html | 10 +- tests/markup/snapshots/panel.snap.html | 18 +- ...eldynamic-list-legacy-navigation.snap.html | 38 +- .../snapshots/paneldynamic-list.snap.html | 38 +- .../paneldynamic-no-footer-1.snap.html | 105 ++-- .../paneldynamic-no-footer-2.snap.html | 105 ++-- ...rogress-bottom-legacy-navigation.snap.html | 42 +- .../paneldynamic-progress-bottom.snap.html | 42 +- ...paneldynamic-progress-tab-center.snap.html | 118 ++-- .../paneldynamic-progress-tab-left.snap.html | 118 ++-- .../paneldynamic-progress-tab-right.snap.html | 118 ++-- ...c-progress-top-legacy-navigation.snap.html | 50 +- .../paneldynamic-progress-top.snap.html | 50 +- ...neldynamic-remove-btn-action-bar.snap.html | 78 +-- .../paneldynamic-remove-btn-right.snap.html | 76 +-- ...question-description-under-input.snap.html | 14 +- .../question-errors-v2-bottom.snap.html | 52 +- .../question-errors-v2-top.snap.html | 52 +- .../snapshots/question-title-label.snap.html | 26 +- .../question-title-with-html.snap.html | 31 +- .../snapshots/question-with-indent.snap.html | 30 +- .../snapshots/radiogroup-clear.snap.html | 102 ++-- .../radiogroup-columns-head-foot.snap.html | 82 +-- .../radiogroup-columns-mobile.snap.html | 90 +-- .../radiogroup-columns-no-head-foot.snap.html | 128 +++-- .../snapshots/radiogroup-columns.snap.html | 72 +-- .../snapshots/radiogroup-disabled.snap.html | 90 +-- .../snapshots/radiogroup-modern.snap.html | 62 +- .../radiogroup-multiple-comments.snap.html | 112 ++-- .../snapshots/radiogroup-other.snap.html | 140 ++--- .../radiogroup-readonly-selected.snap.html | 90 +-- .../snapshots/radiogroup-readonly.snap.html | 90 +-- .../radiogroup-row-head-foot.snap.html | 122 ++-- .../radiogroup-row-no-head-foot.snap.html | 118 ++-- .../markup/snapshots/radiogroup-v2.snap.html | 62 +- tests/markup/snapshots/radiogroup.snap.html | 90 +-- .../markup/snapshots/ranking-design.snap.html | 152 ++--- ...ng-selectToRankEnabled-SwapAreas.snap.html | 166 +++--- ...anking-selectToRankEnabled-empty.snap.html | 166 +++--- ...ing-selectToRankEnabled-vertical.snap.html | 166 +++--- .../markup/snapshots/ranking-values.snap.html | 122 ++-- tests/markup/snapshots/ranking.snap.html | 152 ++--- ...s-dropdown-description-with-text.snap.html | 132 ++--- .../rating-as-dropdown-description.snap.html | 132 ++--- ...-as-dropdown-disabled-with-value.snap.html | 60 +- ...-as-dropdown-readonly-with-value.snap.html | 36 +- .../rating-as-dropdown-readonly.snap.html | 36 +- ...g-as-dropdown-with-value-focused.snap.html | 84 +-- .../snapshots/rating-as-dropdown.snap.html | 62 +- .../snapshots/rating-as-wrappable.snap.html | 62 +- .../snapshots/rating-display-mode.snap.html | 62 +- .../snapshots/rating-min-max-items.snap.html | 62 +- .../markup/snapshots/rating-min-max.snap.html | 74 +-- .../rating-simple-disabled.snap.html | 62 +- .../rating-simple-readonly.snap.html | 62 +- .../markup/snapshots/rating-simple.snap.html | 62 +- .../rating-smileys-disabled.snap.html | 42 +- .../rating-smileys-readonly.snap.html | 42 +- .../markup/snapshots/rating-smileys.snap.html | 42 +- .../snapshots/rating-stars-disabled.snap.html | 58 +- .../snapshots/rating-stars-readonly.snap.html | 58 +- tests/markup/snapshots/rating-stars.snap.html | 58 +- .../snapshots/signaturepad-loading.snap.html | 36 +- .../snapshots/signaturepad-readonly.snap.html | 22 +- .../snapshots/signaturepad-scaled.snap.html | 24 +- .../snapshots/signaturepad-value.snap.html | 40 +- ...ignaturepad-with-backgroundImage.snap.html | 24 +- tests/markup/snapshots/signaturepad.snap.html | 22 +- .../snapshots/slider-custom-labels.snap.html | 142 ++--- .../slider-default-value-range-mode.snap.html | 160 +++--- ...slider-default-value-single-mode.snap.html | 138 ++--- .../snapshots/slider-range-mode.snap.html | 160 +++--- .../slider-read-only-range-mode.snap.html | 160 +++--- .../slider-read-only-single-mode.snap.html | 138 ++--- .../snapshots/slider-single-mode.snap.html | 138 ++--- .../snapshots/survey-navigation.snap.html | 18 +- .../tagbox-disabled-with-value.snap.html | 78 +-- .../tagbox-disabled-without-value.snap.html | 42 +- .../markup/snapshots/tagbox-mobile.snap.html | 146 ++--- .../tagbox-readonly-with-value.snap.html | 36 +- .../snapshots/tagbox-readonly.snap.html | 36 +- .../snapshots/tagbox-selected.snap.html | 144 ++--- .../tagbox-without-clear-button.snap.html | 98 ++-- .../snapshots/tagbox-without-search.snap.html | 98 ++-- .../tagbox-without-textWrapEnabled.snap.html | 98 ++-- tests/markup/snapshots/tagbox.snap.html | 98 ++-- .../markup/snapshots/text-datalist.snap.html | 24 +- tests/markup/snapshots/text-date.snap.html | 8 +- .../markup/snapshots/text-disabled.snap.html | 8 +- tests/markup/snapshots/text-div.snap.html | 8 +- tests/markup/snapshots/text-email.snap.html | 8 +- .../snapshots/text-masktype-numeric.snap.html | 8 +- .../markup/snapshots/text-readonly.snap.html | 8 +- tests/markup/snapshots/text-typing.snap.html | 8 +- tests/markup/snapshots/text.snap.html | 8 +- 235 files changed, 9926 insertions(+), 8864 deletions(-) diff --git a/tests/markup/helper.ts b/tests/markup/helper.ts index 43e5c00122..b888fa7819 100644 --- a/tests/markup/helper.ts +++ b/tests/markup/helper.ts @@ -277,9 +277,6 @@ export function testQuestionMarkup(assert: any, test: MarkupTestDescriptor, plat const removeExtraElementsConditions: Array<(e: HTMLElement) => boolean> = [ (e: HTMLElement) => e.classList.contains("sv-vue-title-additional-div"), (e: HTMLElement) => e.tagName.toLowerCase().search(/^sv-/) > -1, - (e: HTMLElement) => e.classList.contains("sd-question__header-and-content-container"), - (e: HTMLElement) => e.classList.contains("sd-question__content"), - (e: HTMLElement) => e.classList.contains("sd-clearfix") && e.classList.contains("sd-page__row") && e.classList.contains("sd-row"), ]; 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 @@ -
-